pax_global_header00006660000000000000000000000064135213564770014527gustar00rootroot0000000000000052 comment=d3fd9448fe285b3545c914bd24d004011b9da061 liferea-1.12.7/000077500000000000000000000000001352135647700132265ustar00rootroot00000000000000liferea-1.12.7/.gitignore000066400000000000000000000012061352135647700152150ustar00rootroot00000000000000.deps *.a *.gmo *.o *.Po *.la *.lo Makefile Makefile.in aclocal.m4 ar-lib autom4te.cache compile config.guess config.h config.h.in config.log config.status config.sub configure depcomp install-sh libtool liferea.appdata.xml liferea.desktop ltmain.sh missing net.sf.liferea.gschema.valid net.sf.liferea.gschema.xml net.sourceforge.liferea.desktop net.sourceforge.liferea.service po/.intltool-merge-cache po/Makefile.in.in po/POTFILES po/liferea.pot po/stamp-it src/dbus_wrap.c src/liferea src/liferea-add-feed src/Liferea-3.0.gir src/Liferea-3.0.typelib src/tests/html_auto src/tests/parse_date xslt/*.xml org.gnome.liferea.gschema.valid stamp-h1 liferea-1.12.7/.travis.yml000066400000000000000000000001711352135647700153360ustar00rootroot00000000000000language: c sudo: required services: - docker before_install: - docker pull ubuntu:16.04 script: - docker build . liferea-1.12.7/AUTHORS000066400000000000000000000162311352135647700143010ustar00rootroot00000000000000The following sections list people who have contributed to Liferea. Coding ====== People that spent a lot of time on the Liferea code base: Lars Windolf Nathan J. Conrad Arnold Noronha Emilio Pozuelo Monfort Adrian Bunk Code Contributors ================= Loosely ordered by time of contribution: James Doherty dialog design Jeremy Messenger search dialog, icons... John McKnight Makefile help Tomasz Maka window position saving Karl Soderstrom heavy debugging, patching memory leak fixing, mini popup support Christophe Barbe patch to count folder items and Debian bug management Juho Snellman CSS support Roshan Revankar patch for selection handling Johannes Schlueter pipe as feed source Niklas Morberg Debugging and patching Pierre Phaneuf RPM spec update ahmed el-helw feed link autodiscovery James Bowes tray icon popup menu Marc Deslauriers patch for window state saving Amit D. Chaudhary patch to update all favicons Christoph Hohmann patch for IPv6 Raphael Slinckx New subscriptions over DBUS Bjorn Monnens Hiding read items from folders Patch for itemlist updating Thomas de Grenier de Latour Online state in tray icon Aristotle Pagaltzis Atom 1.0 support, XSLT rendering Norman Jonas libnotify notification Sebastian Droege Transparent tray icon Daniel Gryniewicz AMD64 fixes Remi Cardona Build improvements keizue On/offline switching DBUS method Frederic Peters Unread/new counter in status bar Don Malcolm Offline Mozilla rendering Ed Catmur RTL item list improvements Chris Pirillo Cool new icon for OPML Eric Anderson Use icons from gtk theme Main menu improval Daniel Gryniewicz Network Manager support mooonz improved DBUS support Ori Avtalion Preference for toolbar style improved tray icon menu Stephan Maka gwget download support goyko Menu enabling/disabling Support for enclosure URL open Alexander Sack XulRunner 1.9 build support Gustavo Chain Starting minimized to tray Lars Strojny Statusbar improvements WebKit Rendering Support Jon Forsberg Enclosure context menu patch Mathie Leplatre Option to filter feed list Mikel Olasagasti Uranga GeoRSS support, Gsettings port Rupert Swarbrick OPML duplicate id fix Yaron Sheffer Bidi support for LTR and RTL locales Ricardo Cruz Many GUI improvements Maia Kozheva Optional libindicate support Peter Oliver Google Reader Label Support Sergey Snitsaruk Google Reader Label Support Sebastian Keller Gedit-like tab close buttons Simon Kågedal Reimer Seekable GStreamer media player Leiaz Webkit2 implementation and maintenance Daneil Aleksandersen Partial RFC3229 support saving bandwidth Security fixes, network improvements Maintainer Credits ================== David Michael Smith Debian Emilio Pozuelo Monfort Debian Paul Gevers Debian Emilio Pozuelo Monfort Ubuntu Phillip Compton Fedora Dag Wieers Fedora Documentation and Translations ============================== Polish Bart Kreska Polish Wojciech Myrda Polish Piotr Sokół Italian Dario Conigliaro Italian Emanuele Grande Italian Gianvito Cavasoli Brazilian Portuguese Fernando Ike de Oliveira Brazilian Portuguese Og Maciel Brazilian Portuguese Leon Nardella Arabic Khaled Hosny Spanish Sargate Kanogan Spanish Rodrigo Gallardo Japanese Takeshi AIHANA Japanese Takeshi Hamasaki Japanese IWAI, Masaharu French Vincent Lefèvre French Guillaume Bernard Swedish Daniel Nylander Swedish Andreas Ronnquist Turkish Mehmet Atif Ergun Turkish Eren Türkay Belorusian Latin Ihar Hrachyshka European Portuguese António Lima European Portuguese Bruno Miguel Czech Martin Picek Russian Justin Forest Russian Oleg Maloglovets Russian Sergey Rudchenko Russian Leonid Selivanov Hungarian Máté Őry Hungarian Gabor Kelemen Slovakian Pavol Klačanský Greek Evgenia Petoumenou Albanian Besnik Bleta German Christian Dywan German Robin Stocker German Paul Seyfert Catalan Gil Forcada Basque Iñaki Larrañaga Murgoitio Basque Mikel Olasagasti Uranga Romanian Adi Roiban Dutch Erwin Poeze Chinese/Simplified Aron Xu Galician Anxo Outeiral Danish Joe Hansen Asturian Marquinos Asturian Iñigo Varela Hebrew Yaron Sheffer Ukrainian Yuri Chornoivan Latvian Rūdolfs Mazurs Latvian Rihards Priedītis Lithuanian Mindaugas Baranauskas Vietnamese Trần Ngọc Quân Finnish Pauli Virtanen Finnish Jorma Karvonen Code included from other projects ================================= Evolution Team AM/PM time formatting If we forgot to list you here, leave us a message on the mailing list and we'll include your name and email! liferea-1.12.7/COPYING000066400000000000000000000432551352135647700142720ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. liferea-1.12.7/ChangeLog000066400000000000000000001345171352135647700150130ustar00rootroot000000000000002019-08-03 Lars Windolf Version 1.12.7 * #734: Fixes crash when selecting empty nodes (Leiaz) * Fixes #727: Out-dated documentation on Firefox live bookmarks (reported by blueray453) * Fixes headline large images/videos or images with margins causing horizontal scrolling in headline view (Lars Windolf) 2019-12-04 Lars Windolf Version 1.12.6 * #658: Add confirmation dialog when adding duplicate subscription (dymoksc) * Fixes #689: When resuming from sleep feeds were being fetched before Wifi cam up (ghost) * Fixes #685: Headerbar plugin "Mark All Read" button is not feed-specific (Robbie Cooper) * Fixes #549: Scrollbars not always present in the headline area (Leiaz) * Fixes #543: Next update overrides HTML5 enrichment (Lars Windolf) * Fixes overly wide label in enclosure preferences dialog (Lars Windolf) * Dropped unencrypted warning from auth dialog (not true anymore) (Lars Windolf) * #692: Update of Czech translation (RadimNo) * #688: Adding translatable tooltips for the headerbar plugin (Robbie Cooper) 2018-09-07 Lars Windolf Version 1.12.5 * #665: Webkit browser now supplies 'Liferea' component in user agent * #664: Added "Mark All As Read" button to headerbar plugin * #620: Added flatpak JSON (glitsj16) * #579: Added item list column drag and drop reordering (Yanko Kaneti) * #436, #662: Move from GnomeKeyring to libsecret (bgermann) * Fixes #663: Correct instapaper sharing link (Daniel Alexandersen) * Fixes #661: Update sharing links (Daniel Alexandersen) * Fixes #271: Consistent over usage of CPU (trigger by "Next Unread" loop) (reported by GreenLunar) * #472, #632: Dropping Inoreader support (API broke) 2018-07-23 Lars Windolf Version 1.12.4 * Fixes #660: Added installable plugin to change accels (Lars Windolf) * Fixes #654: Segfault on date out of range (Leaiz) * Fixes #651: Fixes Free Music Archive link in default OPMLs (reported by benjbrandall) * Fixes #649: Switch from persistent to session-only cookies (Daniel Alexandersen) * Fixes #645, #646: unread count of vfolder (Leaiz) * Fixes #637: Extra keywords in .desktop file (syndication; rss; atom) (Daniel Alexandersen) * Fixes #557: Updating counters for remote sources (Leiaz) * Updated cookie usage hint in FAQ 2018-05-02 Lars Windolf Version 1.12.3 * #634: Added setting for custom download commands (Leiaz) * #614: GTK Headerbar support via plugin (Lars Windolf) * #608: Refactoring UI code to switch to GAction and GtkBuilder Note: this implies not having icons in the main menu anymore which were still there for all non-GNOME users (see #626). (Leiaz) * #589: Item list view column order rework as a preparation for possible real column drag&drop. Introduces a new DConf setting for the column order. (Yanko Kaneti) * Fixes #280: Mark read toolbar button always disabled for search folders (Lars Windolf, reported by dvahalev) * Fixes #591: Please add a safety question when "marking all read" (Leiaz, reported by Nudin) * Fixes #625: Avoid exception in trayicon.py (Lars Windolf) * Fixes #627: GnomeKeyring plugin fails to activate when keyring doesn't exist (Lars Windolf) * Fixes #630: Fix feed list selection after DnD (Peter Zaitev) * Fixes #633: Big Memory leak in date code (Leiaz) * Update of Turkish translation (emintufan) * Update of French translation (guilieb) 2018-03-07 Lars Windolf Version 1.12.2 * Adding a plugin installer plugin that allows discovering and automatically installing 3rd party plugins * #585: Drop language from user agent to increase privacy (Daniel Aleksandersen) * #583: Add transmission-gtk and aria2 as download tool options (Daniel Aleksandersen) * #495: New command line option --disable-plugins (-p) to start with all plugins disabled. * Fixes #610: Liferea not showing up in GNOME Software (Yanko Kaneti) * Fixes #604: Correctly print error message when failing to unlock GNOME keyring (ghost) * Fixes #602: CSS style for GTK link colors not used (reported by pupyc) * Fixes #581: Redirect location updates and adds HTTP 308 (RFC 7538) support (Daniel Aleksandersen) * Fixes #578: Unable to set unread items in bold (Leiaz, reported by EverEve) * #612: Update of French translation (Guillaume Bernard) * #596: Update of Swedish translation (jony0008) * #594: Update of Polish default feed list (wmyrda) * #584: Fixes broken OPML feed list entries (Daniel Aleksandersen) * #584: Added Norwegian feed list (Daniel Aleksandersen) * #577: Fixes newsbin doc typo (Daniel Aleksandersen) 2017-12-27 Lars Windolf Version 1.12.1 * Fixes #562: Lintian spelling errors (reported by Paul Gevers) * Fixes #563: Appstream data has new format (patch by Paul Gevers) * Fixes #572: Doesn't remember some sort orders (reported by geplus) * Fixes #504: Fix assertions/crashes on changing view layouts (Leiaz) * Fixes #573: Workaround to avoid GtkPaned shrinking (Leiaz) * #566: Update of Italian translation (Gianvito Cavasoli) * #566: Update of Italian default feed list (Gianvito Cavasoli) * #514: Update of Indonesian translation (Samsul Ma'arif) * #514: Added Indonesian default feed list (Samsul Ma'arif) * Update of German translation 2017-11-30 Lars Windolf Version 1.12.0 * Fixes unhiding from tray icon when activated via GApplication (when starting Liferea a 2nd time) * #399: Reorder columns in 'Normal' email-like view to have the date column always at the end (Mikel Olasagasti) * #532: Add plugin to make unread feeds titles bold (Yanko Kaneti) * Workaround for #503: Liferea deanonymize Tor (Leiaz) * Fixes #450: #546 Resize both panes in normal and wide view (Leiaz) * Fixes #538: toggle_visibility() does not make a minimized window visible again (reported by Balló György) * Fixes #522: Segfault when switching feed in combined view (patch by jonmstone) * Fixes #419, #457: Handling of relative URLs in Atom parser (Leiaz) * Added 'View Image' context menu option in HTML view * Dropped del.icio.us from social bookmarking options as it is a read-only service now. * Redesign of the wide view mode: larger titles with small text teasers * Added optional AMP/HTML5 content enrichment feature 2017-03-26 Lars Windolf Version 1.12-rc3 * Fixes #459: Fixes GtkDoc warnings (Leiaz) * Fixes #415: Filter commands are not asynchronous (Rich Coe) * Fixes #363: Missing space above internal browser address bar (reported by nekohayo, patch by Mikel Olasagasti) * Fixes #208: All "Unread" search folder items marked read at once (Leiaz) * Fixes #251: Liferea does not always use theme icons when it is launched on system startup (reported by GreenLunar, fix by Leiaz) * Change headline column sorting in wide view to time sorted * Updated Finnish translation (Jorma Karvonen) * Updated Latvian translation (Rihards Prieditis) * Updated Albanian translation (Bensik Bleta) * Updated Hungarian translation (Balázs Úr) * Updated Brazlian translation (Rafael Ferreira) * Updated French translation (Guillaume Bernard) 2016-11-11 Lars Windolf Version 1.12-rc2 * Change all g_warnings() to g_print() for remote source to avoid "crashing" on errors. * Reorganized all UI definitions in separate files to simplify GtkBuilder handling. * Github #425: Add GeoRSS info and map link in item header (Mikel Olasagasti) * Github #407: Replacing deprecated elements in preferences (Leiaz) * Github #396: Create LifereaApplication type (Leiaz) * Github #434: Partial RFC3229+feed support for bandwidth savings (Daniel Aleksandersen) * Fixes Github #208: gtk_tree_store_get_path: assertion 'iter->stamp == priv->stamp' (reported by Mno-hime) * Fixes Github #403: Leftover OSM XSLT in item view (reported by Paul Gevers) * Fixes Github #423: Internal browser shows files system on go-back (Leiaz, reported by Paul Gevers) * Updated German translation * Github #441: Updated French translation (Surfoo) 2016-09-20 Lars Windolf Version 1.12-rc1a * Fixing missing header files 2016-09-19 Lars Windolf Version 1.12-rc1 * Github #348: Added support for downloading content that cannot be displayed by HTML widget (e.g. PDFs) (Leiaz) * Github #355: Migrate to Python3 libpeas loader (patch by picsel2) * Github #311: Upgrade to WebKit2 (patch by Leiaz) * Github #292: Show new item count in tray icon (patch by mozbugbox) * Github #297: Minimize to systray on window close (patch by Hugo Arregui) * Github #325: Auto-fitting, translated license (patches by GreenLunar and Adolfo Jayme-Barrientos) * Fixes Github #73: Problem with favicon update (reported by asl97) * Fixes Github #177, #350: Tray icon not scaled properly (patch by mozbugbox) * Removes GeoIP rendering via OSM to avoid exposing users to remote JS library resources. (reported by Paul Gevers) * Fixes Github #337: Case sensitive sorting (reported by Pi03k) * Fixes Github #361: Show all enclosuers (Leiaz) * Fixes Github #368: Segfault on liferea-feed-add (Leiaz) * Fixes Github #382: Broken Auto-Detect/No Proxy setting (Leiaz) * Fixes Github #383: Per feed don't use proxy setting is broken (reported by Leiaz) * Github #309: Update of Japanese translation (IWAI, Masaharu) * Github #329: Update of Hebrew translation (GreenLunar) * Github #330: Update of Spanish translation (Adolfo Jayme-Barrientos) * Update of Swedish translation (Andreas Ronnquist) 2016-01-30 Lars Windolf Version 1.11.7 * Github #287: Add support for media:group. (patch by Leiaz) * Github #287: Fixes issues with media:content. (patch by Leiaz) * Fixes Github #283: Bad .desktop categories definition (reported by Wuzzy2) * Fixes Github #279: Fixes rules no visible in searchdialog (patch by Leiaz) * Fixes Github #278: No "Download" tab in Tools/Preferences (docs error, reported by Anders Jonsson) * Fixes Github #83: Segfault when sorting feeds in folder (patch by Leiaz) * Fixes French translation (patch by polo2ro) * Github #300: Updated manpage (patch by GreenLunar) 2015-10-12 Lars Windolf Version 1.11.6 * Added "Do Not Track" support (enabled per default) * Github #193: Added x-scheme-handler/feed to desktop file (suggested by GreenLunar) * Github #209: Add image icons to plugins (by GreenLunar) * Github #210: Enable tests for parsing RFC822 dates with 2 digit year (patch by arunanbala) * Fixes Github #78: Shaky text in feed list (reported by GreenLunar) * Fixes Github #195: Out-dated documentation on enclose download (reported by brian-in-crawford) * Fixes Github #198: Traceback on popup notifications (reported by GreenLunar) * Fixes Github #216: Untranslatable strings (reported by GreenLunar) * Fixes Github #256: PyGIWarnings on loading plugins (patch by glitjs16) 2015-06-19 Lars Windolf Version 1.11.5 * Github #178: Implementing full screen mode for videos (mozbugbox) * Fixes Github #32: Prevent erroneous "Mark all as read" (reported by Mno-hime) * Improves Github #36, #113: UI lock up during refresh (suggested by mozbugbox) * Fixes Github #180: Removing item from (v)folder marks all read (reported by GreenLunar) * Fixes Github #140, #158: Vertical pane placement is forgotten. (patch by foresto) * Fixes Github #182: Missing config.h include in date.c (reported by Paul Gevers) * Update of Russian translation (bboa) 2015-04-14 Lars Windolf Version 1.11.4 * Fixes Github #154: Crashes while starting (corrupt icon) (reported by jcamposz) * Github #149: Fixes a random crash on startup (patch by mozbugbox) * Fixes Github #79: RTL ordering of Back/Forward icons (reported by GreenLunar) * Fixes Github #30: Segfault after updating from 1.8 to 1.10 (reported by vakuum) * Fixes Github #87: URL resolving wrong if base tag involved (reported by DanMan, fixed by mozbugbox) * Fixes all defects reported by Coverity scan * Simplied external browser handling. Now Liferea only supports the gtk_show_uri() launch mechanism for the system default browser and a user specified browser command. * Update of Albanian translation (Besnik Bleta) * Update of Hebrew translation (Genghis Khan) * Update of Spanish translation (Juan Campos Zambrana) * Fixes typo in Italian translation 2015-02-11 Lars Windolf Version 1.11.3 * Fixes Github #134: Broken default news feed. (reported by pvdl) * Fixes Github #133: Subscribe into TheOldReader categories * Fixes Github #122: Crashes at launch, "segmentation fault" (reported by geoffm) * Fixes some memory leaks (patch by Rich Coe) * Fixes Github #145: Incorrect method triggered for 'Launch External' (patch by mozbugbox) * Fixes Github #48: Window stays hidden on next start after Ctrl+W (reported by Jeff Fortin) * Expose LifereaHtmlView to GObject Introspection (patch by mozbugbox) * Improves Google Reader API error handling * Now using HTTPS only when accessing TheOldReader * Added LifereaNodeSourceActivatable interface to allow plugins implementing new node source types. * Downgrade enclosure drop warning from Glib warning to debug trace. 2015-01-06 Lars Windolf Version 1.11.2 * Fixes Github #132: Broken documentation link (reported by kallus) * Fixes Github #121: Wrapping issue in folder display (reported by Jeff Forting) * Fixes Github #114: Avoid termination on UTF-8 validation error * Fixes Github #90: Libnotify plugin not working (reported by asl97) * Fixes Github #86: Support HTTP content negotiation (suggested by DanMan) * Black-list some categories used by Google Reader clones that should not be visible. * Allowing browser history to go back to previously shown headline when browsing inside the item view. * Dropping offline option as this is duplicated with desktop environment in GNOME/network manager. * Fixes Github #100: Problems with dark Adwaita theme in GTK 3.14 (reported by majutsushi) * Fixes for preferences dialog width. (patch by Jeff Fortin) * Update of Arabic translation (Khaled Hosny) 2014-08-31 Lars Windolf Version 1.11.1 * Fixes Github #81: Inability to add subscriptions (reported by GreenLunar) * Fixes Javascript links not opening in new browser tabs * Updated Hebrew translation (Genghis Khan) * Fixes Github #88: Minor DE translation mistake (moraxy) 2014-08-12 Lars Windolf Version 1.11.0 * Added experimental InoReader support * Added experimental Reedah support * Fixes SF #1123: Mistakenly claims "TinyTinyRSS source is not self-updating" (reported by Dominik Grafenhoher) * Fixes SF #1119: Crash on font resize at startup. (reported by David Smith) * Fixes #1056, #1089, #1098: Honor preferences when opening links (patch by Daniel Seither) * Fixes #1117: Selecting last unread item in reduced feed list jumps to next feed (reported by Bruce Guenter) * Fixes missing "Via" metadata type (patch by Rich Coe) * Fixes incorrect new count reset handling in item_state.c and some of the node source implementations. * Fixes SF #1096: missing installation of liferea.convert file (reported by stqn) * Fixes SF #1135: liferea-add-feed doesn't process feed:https// (patch by Kevin Walke) * Fixes SF #1137, #1142: startup race with LifereaHtmlView (reported by Yanko Kaneti) * Fixes Github #13: Parsing errors not visible with dark themes (reported by Steve Kelly) * Fixes Github #29: Do not use bold text for feeds/folders with unread items in the leftmost treeview (repored by Jeff Fortin) * Fixes SF #1141: Liferea does not update feeds with TinyTinyRSS (reported by Dominik Grafenhofer, denk_mal, Fabian Henze) * Fixes SF #1150: subscription prop/source: not all fields and buttons visible (reported by David Smith) * Fixes Github #26: RTL comments appear incorrectly (reported by yaconf) * Fixes Github #27: Images do not autosize to fit the available space (reported by Jeff Fortin) * Fixes Github #34: Add TinyTinyRSS Enclosure Support (reported by Adrixan) * Fixes Github #43: "Any of the following" search condition doesn't work (reported by Jeff Fortin) * Fixes Github #49: Some dialogs scrolling areas do not request enough height (reported by Jeff Fortin) * Fixes Github #53: Doesn't automatically update feed name and favicon for new feed (reported by asl97) * Patch SF #224: Update to new libxml2 buffer API (Simon Kagedal Reimer) * Patch SF #209: Avoid copying list in itemset_merge_items (kaloyan) * Make Liferea use ETags and send If-None-Match (patch by Chris Siebenmann) * Support NOCONFIGURE for RPM builds (Charles A Edwards) * Rename README to README.md * Removing libindicate support (to be added as plugin maybe) * Removing libnotify support (to be added as plugin maybe) * Removing build in tray icon support * Added tray icon plugin * Added category/folder support for TheOldReader * Added folder auto-removal for TinyTinyRSS & TheOldReader * Updated README on plugin contribution * Updated Arabic translation (Khaled Hosny) 2013-10-08 Lars Windolf Version 1.10.3 * Asking for credentials again if TinyTinyRSS login fails * Asking for TinyTinyRSS credentials only 3 times * Checking wether TinyTinyRSS base URL is lost * Added warning on TinyTinyRSS login when source is not self-updating * "--debug-net --debug-verbose" now traces POST data * Patch #230 Add GNOME AppData XML (Mikel Olasagasti) * Updated Italian translation (Gianvito Cavasoli) * Updated Italian localized feed list (Gianvito Cavasoli) 2013-09-05 Lars Windolf Version 1.10.2 * Patch SF #222: Make media player seekable (Simon Kågedal Reimer) * Fixes SF #1102: Spelling error in man page (David Smith) * Fixes SF #1104: liferea.desktop missing keywords (David Smith) * Fixes SF #1105: Start Minimized to Tray Does Not Work (reported by bitlord) * Fixes SF #1114: Crashes opening browser on item without link via popup (reported by Rich Coe, David Smith) * Improved handling of broken Atom author information. (Lars Windolf) * Removed dead Google Reader code to avoid doing requests to Google. Replaced with dummy source that even allows normal feed updates. (Lars Windolf) * Added hint to FAQ on how to workaround broken Flash support (Lars Windolf) * Dumping feedlist.opml with indentation for readability. (suggested by Christoph Temmel and Simon Kågedal Reimer) 2013-07-28 Lars Windolf Version 1.10.1a * Fixes SF #1102: Liferea does not show a window (reported by genodeftest) 2013-07-28 Lars Windolf Version 1.10.1 * Fixes SF #1059: Liferea crashes with system proxy enabled (reported by genodeftest) * Fixes SF #1095: Theme color detection bug / white fonts. (reported by David Smith and others) * Fixes SF #1097: Default feed refresh interval cannot be set to 0 (reported by stqn) * Fixes SF #1100: --debug-gui crashes with segmentation fault (reported by genodeftest) * Fixes SF #1101: Outdated manpage (reported by genodeftest) * Patch SF #225: Make media player work with GStreamer 1.0 (Simon Kågedal Reimer) * Patch SF #226: Add trailing semi-colon to MimeType so that the desktop file validates (Yanko Kaneti) * Patch SF #227: Remove letfover square bracket configure.ac (Yanko Kaneti) * Patch SF #228: Add net.sf.liferea.gschema.xml to AC_CONFIG_FILES (Yanko Kaneti) 2013-07-10 Lars Windolf Version 1.10.0 * Added experimental sync support for TheOldReader (Lars Windolf) * Removed 'Update' link in comments display as it is pretty useless (Lars Windolf) * Removed 'No Comments' display as it is rather useless (Lars Windolf) * Prevent re-rendering item display on setting item flagged (Lars Windolf) * Changed unread number rendering to be right bound and non-ellipsized (Lars Windolf) * Fixes g_strstr_len assertions caused by search folder item matching (Rich Coe) * Updated documentation to reflect Google Reader, TheOldReader changes (Lars Windolf) * Removed welcome text, restoring last feed/item selection instead (Lars Windolf) * autogen.sh now reports errors on missing autoconf or intltool (suggested by Scott Kostyshak) * Correctly check for gobject-introspection build dependency (suggested by Scott Kostyshak) * Updated Basque translation (Mikel Olasagasti Uranga) * Updated Danish translation (Joe Hansen) * Updated Dutch translation (Erwin Poeze) * Updated Finnish translation (Jorma Karvonen) * Updated Russian translation (Leonid Selivanov) * Updated Ukrainian translation (Yuri Chornoivan) * Updated Vietnamese translation (Trần Ngọc Quân) * Updated German translation (Lars Windolf) 2013-05-22 Lars Windolf Version 1.10-RC4 * Added an option to convert Google Reader subscriptions to local feeds (Lars Windolf) * Fixes SF #1080: segfault opening attachment due to incorrect g_free() (reported by Adam Nielsen) * Fixes SF #1075: GLib warnings of "string != NULL" assertion failure (reported by Simon Kågedal Reimer) * Fixes missing shading in 2-pane mode rendering (reported by Zoho Vignochi) * Fixes search folders including comment items (reported by David Willmore) 2013-05-22 Lars Windolf Version 1.10-RC3 * Fixes SF #1069: broken rendering in tt-rss feeds (patch by Simon Kågedal Reimer) * Merged SF #219: View *.xml files along with *.opml files in file chooser (patch by Simon Kågedal Reimer) * Merged SF #233: Show feed name in item view when in merged views. (patch by Simon Kågedal Reimer) * Merged SF #193: Use GtkInfoBar for note in preferences window (patch by Fred Morcos) * Require intltool >= 0.40.4 (Adrian Bunk) * Updated Catalan translation (Gil Forcada) * Updated Danish translation (Joe Hansen) * Updated Polish translation (Piotr Sokół) 2013-05-12 Lars Windolf Version 1.10-RC2 * Extended user agent by "AppleWebKit (KHTML, like Gecko)" to solve incorrect mobile redirect with zdf.de * Added social bookmarking support for Mister Wong * Added social bookmarking support for Google Bookmarks * Update of German FAQ * Update of English FAQ * Added MimeType to .desktop file (Craig Barnes) * Fixes SF #1063: Can't open preferences twice (Emilio Pozuelo Monfort, reported by David Smith) * Fixes SF #1040: In feed entries, spaces are replaced with "+" (reported by Emmanuel Seyman) * Fixes SF #1051: Issues in RTL GUI of Liferea (reported by phixy) * Fixes SF #1038, #1074: Updates ttrss feeds over and over (reported by many users) * Fix several memory leaks (Emilio Pozuelo Monfort) * Require glib >= 2.28 for GApplication (Adrian Bunk) * Use the GTK+ 3 version, not wrongly the GTK+ 2 version, of the libindicate GTK+ bindings (Adrian Bunk) * Updated the default feedlists (Adrian Bunk) * Removed support for libnotify < 0.7 (Adrian Bunk) * Added Vietnamese translation (Trần Ngọc Quân) * Updated Albanian translation (Besnik Bleta) * Updated Asturian translation (Iñigo Varela) * Updated Basque translation (Mikel Olasagasti Uranga) * Updated Danish translation (Joe Hansen) * Updated Finnish translation (Jorma Karvonen) * Updated German translation (Christian Stadelmann) * Updated Hungarian translation (Gabor Kelemen) * Updated Japanese translation (Takeshi Hamasaki) * Updated Latvian translation (Rihards Priedītis) * Updated Ukrainian translation (Yuri Chornoivan) 2013-01-30 Lars Windolf Version 1.10-RC1 Please note that due to the SourceForge upgrade bug ticket numbering did change. This might be confusing... Old numbers are 7 figures, newer ones only 4! * Patch SF #3407290: Migrate to GSettings (by Mikel Olasagasti) * Patch SF #3579177: Change .desktop category to News;Feed; (by Stanislav Brabec) * Fix for Debian #668197: x-www-browser preference not working (David Smith) * Added slider and time display to media player plugin. * Added Google Plus to social bookmarking options. * Removing deprecated g_thread_init() call * Auto-enable plugins on migration * Added missing -a option to manpage * Updated manpage to reflect XDG path migration * Changing GSettings path from /apps/liferea to /org/gnome/liferea * Changes default download thread concurrency from 2 to 3 * Fixes regression about using the GNOME default font * Improves all item/link launching menus to consistently provide three options: Tab, Browser and External Browser * Fixes SF #1037: Incorrect notifications for Google Reader (patch by David Smith) * Fixes SF #1048: Removed all feedvalidator.org references from FAQ and XSLT as it was reported to host malware. (reported by bkat) * Fixes SF #1041: Some GPLv2 license headers were outdated (reported by Emmanuel Seyman) * Fixes SF #1044: tt-rss API changed (we now support only 1.6 API) (patch by Sebastian Noel) * Fixes assertion when creating new tt-rss subscriptions * Fixes XHTML errors caused by extra tags returned by tt-rss * Fixes missing item list update when browsing item URLs in Liferea 2012-10-28 Lars Windolf Version 1.9.7 * Added new preference for default viewing mode. * Changing toolbar button order to prevent accidental clicks on "Mark All Read" when clicking on more frequent buttons like "Next Unread". * Added Google Chrome as a browser choice to preferences. * Roughly reordered browser choices after browser market share. * Removed shading behaviour for unread items in combined view as it doesn't match GTK theming well * Removed auto-hide Javascript menu from combined view to simplify rendering in 3-pane modes. * Fixes items not removed from search folder count when feed is removed. * Fixes search folder rebuilding (do not include comment items). * Fixes SELECT offset handling when rebuilding search folders. * Now gives feedback when rebuilding search folders in feed list. * Update of German translation 2012-10-09 Lars Windolf Version 1.9.6 * Removed "pass URL" check box from MIME type dialog. * Removed "Save In" entry from "Download" tab in preferences. * Removed "curl" choice in download tool preferences. * Removed "wget" choice in download tool preferences. * Added "steadyflow" choice in download tool preferences. * Patch SF #3569056: Use symbolic close buttons and spacing on tabs like gedit (Sebastian Keller) * Fixes reloading item when browsing the web inside the item view. * Fixes preferences dialog not opening up a second time. * Fixes padding/alignments in preferences dialog. * Fixes SF #1418701: Remote server pounded into dirt on auto-download (reported by anonymous) * Fixes SF #3567827: Double border around webview (reported by borschty) * Fixes SF #3572660: crash in google_source_remove_node (reported by Yanko Kaneti) * Prevents adding folders/search folders/newsbins to Google Reader * Prevents sorting subscriptions in Google Reader * Updated Polish translation (Wojciech Myrda) 2012-09-14 Lars Windolf Version 1.9.5 * GIR dependencies are now mandatory * Migration to XDG directory layout in $HOME * Migrate from X session manager to GtkApplication * Raising GTK dependency to 3.4 for GtkApplication * Storing last window state in GConf now instead in the session command * Added Instapaper.com to social bookmarking sites (SF #3564393) (patch by prurigro) * Use hint label for manual browser command preference (SF #3129429) (patch by Fred Morcos) * Fixes comments_deinit() never being called * Fixes search folder counter update on feed removal * Fixes SF #3567715: Crash on network online status changes (patch by Yanko Kaneti) 2012-08-24 Lars Windolf Version 1.9.4 * Changes (c) name "Lars Lindner" -> "Lars Windolf" due to marriage * Removed compilation support for GTK2 * Added GIR plugin system with libpeas * Added GnomeKeyring plugin that stores password in a keyring instead of in the exported OPML. * Added simple media player plugin to play audio and video enclosures. * Only present enclosures of audio and video MIME type * Raise libindicate minimum dependency to 0.6 * Patch SF #3515882: Also support libindicate 0.7 (Chow Loong Jin) * Dropping SIGSEGV signal handler to allow distro crash report tools to work (as found in Ubuntu) * Ensure node ids are in DB node relation on startup. * Adding AM_PROG_AR to configure.ac to work with automake 1.12 * Moved tab close button from the URL bar to the right of the tab label. * Smarter browser toolbar: appears now also in the item view when browsing external content. * Don't ask for Google Reader authentication more than three times with auto-update to avoid annoying the user. * Fixes SF Trac #10: Crash on empty search folders within folders (reported by phyxi) * Fixes SF Trac #19: Auto-load-link doesn't work with feeds with comments (reported by wonk0) * Fixes SF #2855990: Crash when dragging Google Reader feeds outside Google Reader. This is now prevented. (reported by algnod) * Fixes SF #3515880: missing include when compiling with libindicate (patch by Chow Loong Jin) * Fixes search folders being invisible in reduced mode. * Fixes ever growing temporary DB files. (patch by Sven Hartge) * Fixes visibility of enclosure list view for Ubuntu. * Fixes crashes on enclosure list context menu. * Fixes SF #3557513: Fixes crash on empty links in auto-load-link mode. (patch by msquared84) * Fixes unknown metadata types reported in trace when loading Google Reader subscriptions from DB. 2012-03-30 Lars Windolf Version 1.9.3 * Added a new item history feature that allows navigating through recently viewed items. * Added new "Fullscreen" toggle menu option. * For GTK+3: request dark theme variant for better contrast between GUI and content. (Jeff Fortin) * Change schema defaults for folder display. Now unread items are loaded per-default when clicking a folder. * Patch SF #3473743: GTK2 dependency has to be 2.24 (bento) * Improve DB item counting statements. (patch by Regis Floret) * Change OpenStreetMap rendering from osmarender to mapnik. (patch by Mikel Olasagasti) * Patch SF #3127016: Automatic scrollbars on enclosure actions view (patch by Fred Morcos) * SF Trac #7: Removing icon from "Cancel All" in update dialog so that .gtkrc "gtk-button-images=0" does have correct effect. (reported by phixy) * Fixes SF #3480238: crashes when double clicking find (reported by joeserneem) * Fixes Debian #660602: Item pane may be reset during feed update (reported by Ben Hutchings) * Reimplemented search folder rule for item with enclosures. * Reimplemented search folder rule for item categories. * Reimplemented feed title matching rule for search folders. (patch by John Levon) * Updated Catalan translation (Gil Forcada) 2012-03-23 Lars Windolf Version 1.9.2 * Fixes another migration issue left from 1.9.1 * Increasing sqlite3 dependency to 3.7+ for WAL journaling. * Removed sqliteasync code in favour of WAL journaling. This significantly improves performance for ext4. * Added indices for parent_item_id and parent_node_id to avoid slow item removal. (suggested by Paulo Anes) 2012-03-18 Lars Windolf Version 1.9.1 * Disabled migration to ~/.liferea_1.9 * Revert ISO 8601 parsing using Glib due to Debian #653196 This fixes SF #3465106 (reported by Vincent Lefevre) * Fixes SF #3477582: welcome screen not using theme colors. (reported by stqn) * Do not update DB node and subscription info on startup for performance reasons. * Perform VACCUM only when page fragmentation ratio < 10%. (suggested by adriatic) * Removed tooltip on the "Next Unread Item" button to avoid having it flashing each time it is clicked when skimming through items. 2011-12-23 Lars Windolf Version 1.9.0 * Add configure switch to compile against GTK2 or GTK3. (Emilio Pozuelo Monfort, Adrian Bunk) * Raise dependencies and updated code to compile against GTK3. (Emilio Pozuelo Monfort, Adrian Bunk) * Fixes proxy preference not affecting the HTML widget. (reported by Chris Siebenmann) * Fixes SF #3363481: Feeds fail to update properly when entries ordered "wrong" (patch by Robert Trace) * Fixes writing subscriptions into DB when importing from OPML (reported by Dennis Nezic) 2011-12-10 Lars Windolf Version 1.8.0 * Fixes SF #3441643: Deleting a feed also removes items copied to news bins (reported by Jan Larres) * Updated French translation (Vincent Lefevre) * Added Hungarian default feed list (Gabor Kelemen) * Removed broken feeds from all default feed lists. (suggested by Gabor Kelemen) 2011-11-16 Lars Windolf Version 1.8 RC2 * Fixes Basque feed list. (Mikel Olasagasti) * Added user template CSS that helps users changing the CSS definitions and is installed into the cache directory per default. (suggested by Jeff Fortin) * Fixes SF #3349330: Segfault when dropping folders into Google Reader subscription. (reported by no|disc) * Fixes SF #3046762: DB contains old comment items of deleted feed entries. (reported by FuturePilot) * Added Latvian translation. (Rihards Priedītis, Rūdolfs Mazurs) * Added Lithuanian translation. (Mindaugas Baranauskas) * Updated Basque translation. (Mikel Olasagasti Uranga) * Updated Chinese/Simplified translation. (Aron Xu) * Updated Dutch translation. (Erwin Poeze) * Updated Hungarian translation. (Gabor Kelemen) * Updated Russian translation. (Leonid Selivanov) * Updated Swedish translation. (Daniel Nylander) * Updated Ukrainian translation. (Yuri Chornoivan) 2011-09-14 Lars Windolf Version 1.8 RC1 * Migrate cache directory to ~/.liferea_1.8 * Merges SF #3367900: Fixes memory allocation issues. (patch by doomkopf) * Merges new default feedlist for European Portuguese (provided by Bruno Miguel) * Fixes SF #3398789: Keeps marking read items as unread. (reported by naoliv) * Updated manual page 2011-06-21 Lars Windolf Version 1.7.6 (Unstable) * Fixes SF #3102116: MIME type definitions not saved. (reported by Alexander Gnodtke) * Merges SF #3273050: Added diggio bookmarking option. (patch by Daniel Noffsinger) * Merges SF #3273213: Open Social bookmarking in tab. (patch by Daniel Noffsinger) * Allow reordering browser tabs. * Support popup menu key in feed/item/enclosure tree view. * Raise tt-rss dependency to 1.5 (patch by Paulo Schreiner) * Update tt-rss subscriptions when source node is updated. (patch by Paulo Schreiner) * Fixes 2 way item state sync for tt-rss subscriptions. (patch by Paulo Schreiner) * Fixes SF #3162756: HTML view doesn't use configured font. (reported by nomnex) * Add X-GNOME-FullName to desktop file. (Maia Kozheva) * Added optional libindicate support. (Maia Kozheva) * Added partial Google Reader label support: Labels are now sync'ed as folders from Google into Liferea. (patch by Peter Oliver and Sergey Snitsaruk) * Fixes accidental drag&drop in HTML view. * Updated Polish translation (Myrda Wojciech) 2011-04-14 Lars Windolf Version 1.7.5 (Unstable) * Some more GTK+ GSEAL work. (Emilio Pozuelo Monfort) * Make "Disable Javascript" and "Enable plugins" preferences have an effect without having to restart Liferea. (Emilio Pozuelo Monfort) * Fix NetworkManager support. (Emilio Pozuelo Monfort) * Code cleanups. (Fabian Keil) * Fixes SF #2883678: Shorter notification messages (Ted Gould) * Fixes SF #2965158: Enclosures URLs with spaces do not work. (reported by Michael Novak) * Replace the deprecated GTK_WIDGET_TYPE with G_OBJECT_TYPE. (Adrian Bunk) * Fixes SF #2981879: Unknown metadata type itemTitle (reported by stk1) * Removing red title bar for flagged headlines. This is to avoid suggesting an error situation. (suggested by Felipe Ignacio Canas Sabat) * Rewrite of the search folder code. We do not use SQlite views for rule based matching anymore. (Lars Windolf) * Added identi.ca bookmarking support. (Adrian Bunk) * Added copy text selection to clipboard option. (patch by Ricardo Cruz) * Fixes SF #2994622: Atom author URIs not markup escaped. (reported by Ricardo Cruz) * Fixes SF #2829961: spaces are no urlencoded on copy link (reported by Winston Weinert) * Fixes SF #2901447: comma in link prevents launching browser (reported by Rafal Ochmanski) * Fixes SF #3002400: tags makes text invisible (patch by Sergey Snitsaruk) * Improve the UI responsiveness by using sqlite3async. (patch by Wictor Lund) * Improved localization handling of filenames. (Adrian Bunk) * Added new DBUS method to trigger a global feed updated. (patch by Matthew Bauer) * Removing feed update state from DB and simplifying startup feed update options. (Lars Windolf) * Fixes SF #3019939, Debian #586926: Broken Google Reader authentication. (Arnold Noronha) * Don't ship autogen.sh in release tarballs. (Adrian Bunk) * Added --debug-vfolder option. (Lars Windolf) * Added feature to sort feeds in a folder alphabetically. (Lars Windolf) * Require WebKitGTK+ >= 1.2.2 to avoid bugs in older versions. (Adrian Bunk) * Better error messages when essential files are missing under /usr/share/liferea. (Adrian Bunk) * Fixes a crash with feeds with relative item links and empty channel link. (Adrian Bunk) * Fixes SF #3039421: Useless trailing spaces in litereals. (reported by Joe Hansen) * Adapt on_tab_switched() to GTK+ API change. (Adrian Bunk) * Fixes SF #3067801: crash in enclosure handling (patch by Peter Oliver) * Fixes SF #3060658: Save As Enclosure doesn't set directory. (Lars Windolf) * Added "Copy Link/Image Location" to HTML view (Lars Windolf) * Added "Save Link/Image As" to HTML view (Lars Windolf) * Fixes Debian #593415: Seems to misidentify MIME type of some podcast enclosures (reported by Celejar) * Removed the obsolete Bloglines support. (Adrian Bunk) * Also print the stacktrace when debugging is not enabled. (Adrian Bunk) * Removed the outdated .spec file. (Adrian Bunk) * Merged patch SF #3089150: Bidi support (Yaron Sheffer) * Fixes second search not clearing item list. (Lars Windolf) * Fixes SF #3019444 and #2978831: incorrect handling of HTTP 301 (patch by Solomon Peachy) * Added support for the new libnotify API. (Emilio Pozuelo Monfort) * Fixes Debian #600638: Wrong number of unread items in mouse over tray icon with zh_TW locale. (Adrian Bunk) * Port from dbus-glib to GDBus. (Emilio Pozuelo Monfort) * Port from libnm-glib and dbus-glib to direct DBus calls using GDBus. This way we always build the NetworkManager support, and it's only used if it's running on the user's system. (Emilio Pozuelo Monfort) * Removed bookmarking support for the dead Backflip. (Adrian Bunk, reported by Kenneth Lakin) * SF #3127001: Fix Toolbar Settings label wrong xalign in preferences dialog (patch by Fred Morcos) * SF #3177676: Cannot handle gzipped HTTP responses. (patch by hyperair) * SF #3132354: Show tooltip when column to small to show text (patch by Ricardo Cruz) * SF #3203121: Add support for NM 0.9 (patch by Dan Williams) * SF #3019505: Fixed drag and drop in the feed list. (Emilio Pozuelo Monfort) * Fixes Debian #538250: Revert item_set_description() to the 1.4 code since the HTML detection created too many false negatives. (Adrian Bunk, reported by Wouter Verhelst) * Added Asturian translation. (Marquinos) * Added Danish translation. (Joe Hansen) * Added Galician translation. (Anxo Outeiral) * Added Hebrew translation. (Yaron Sheffer) * Added Ukrainian translation. (Yuri Chornoivan) * Updated Albanian translation. (Besnik Bleta) * Updated Arabic translation. (Khaled Hosny) * Updated Chinese/Simplified translation. (Aron Xu) * Updated German translation. (Lars Windolf) * Updated Italian translation. (Gianvito Cavasoli) * Updated Russian translation. (Leonid Selivanov) * Updated Slovak translation. (Pavol Klacansk) 2010-02-16 Adrian Bunk Version 1.7.4 (Unstable) * Merged patch that fixes LP #238958: always present window on current workspace if tray icon is clicked. (patch by Fabien Tassin and Sasa Bodiroza) * Cleanup of default stylesheet. Removed used styles. (Lars Windolf) * Permanently removed LUA scripting support. (Lars Windolf) * Added more default feeds to be not so open source specific. (Lars Windolf) * Require libsoup >= 2.28.2 to avoid bugs in older versions. (Adrian Bunk) * Updated Spanish translation. (Rodrigo Gallardo) 2010-01-24 Lars Windolf Version 1.7.3 (Unstable) * Added patch SF #2883678: Support for notification append (patch by Ted Gould) * Implemented folder re-expansion when switching from reduced feed list mode back to full hierarchic mode. (Lars Windolf) * Updated proxy settings are now forwarded to the internal renderer again. (Lars Windolf) * Fixes SF #2872001: Allowing compilation against NetworkManager 0.8 which decided to force 100000 packages out there to support both "libnm-glib" and "libnm_glib". (reported by Michal Nowak) * Fixes an RSS 1.1 parsing bug that caused items not to be parsed at all (reported by Roberto Guido) * Fixes SF #2883971: proxy authentication doesn't work (reported by Louis White and others) * Improves handling of feeds with relative item links. (patch by Rafael Kitover) * Fixes SF #2928927: Remember sort column when sorting by item state (patch by Andy Kittner) * Readded workaround for zoom setting of zero (which prevents zooming). (patch by Rafael Kitover) * Use gtk_show_uri() instead of relying on "gnome-open". (Lars Windolf) * Using g_time_val_from_iso8601 instead of propietary solution we had. (Lars Windolf) * Simplified pixmaps resolving as we used only one source directory anyway. (Lars Windolf) * Updated Catalan translation. (Gil Forcada) 2009-11-19 Adrian Bunk Version 1.7.2 (Unstable) * Fixes SF #2827075: Migrate from libglade to GtkBuilder. (Hubert Figuiere and Emilio Pozuelo Monfort) * Fixes SF #2831121: Require WebKitGTK+ >= 1.1.11 since older versions crash frequently when built with gcc 4.4. (Adrian Bunk) * Go back to using libtool for getting a proper rpath with libraries in unusual locations found through pkg-config. (Adrian Bunk, reported by Leon Nardella) * Fixes SF #2831007: Opening enclosures by URL fails intermitantly (Lars Windolf, reported by Eric Drechsel) * Fixes a unique node id check that could have caused duplicate node ids. (Lars Windolf) * Removes the GConf option for a user defined date format. (Lars Windolf) * We do not update comment feeds returning HTTP 410 anymore. (Lars Windolf) * Fixes SF #2897668: Crash when adding Bloglines subscriptions. (Lars Windolf) * Fixes a crash when deleting items. (Lars Windolf) * Fixes SF #2823526: Increase the width of the left column in the Script Manager. (Adrian Bunk, reported by Pavol Klačanský) * Fixes Debian #539857: Hide link cosmos for items that don't have a valid url, instead of displaying it and crashing when clicked. (Emilio Pozuelo Monfort, reported by Nelson A. de Oliveira) * Use silent automake rules. (Adrian Bunk) * Patch #2843340: Fixes handling of duplicate ids in OPML files. (Ruper Swarbrick) * Added a timeout for downloads. (Arnold Noronha) * Fixes SF #2861203: Crash when creating new search folder. (reported by Andreas Kern and larslj) * Fixes SF #2873588: Error in welcome message. (reported by adiroiban) * Use soup_message_disable_feature() to disable proxy and cookies when needed, instead of creating multiple SoupSessions, one for each use case. Require libsoup >= 2.28.0 for it. (Emilio Pozuelo Monfort) * Stop accessing GTK+ structures directly, use accessors instead in preparation for GTK+ 3.0. Require gtk+ >= 2.18.0 for it. (Emilio Pozuelo Monfort) * Simplified DB schema to avoid costly cleanup. (Lars Windolf) * Patch SF #2894307: Fixes key cycling in items list. (Simon Lipp) * Put the next selected item on top when scrolling in the item list during Next-Unread. (patch by JustFillBug) * Updated Dutch translation. (Erwin Poeze) * Updated French translation. (Vincent Lefevre) * Updated Hungarian translation. (Gabor Kelemen) * Updated Romanian translation. (Adi Roiban) * Updated Slovak translation. (Pavol Klacansk) 2009-08-10 Adrian Bunk Version 1.7.1 (Unstable) * Re-fix item being unselected when opening preferences for the first time, or when (un)hiding read items from folders. (Emilio Pozuelo Monfort) * Fixes a crash when adding subscriptions that needs feed auto discovery. (Arnold Noronha) * Add a --add-feed option that adds a new subscription. It can also be used while Liferea is running, and it will add the feed to the running process. (Emilio Pozuelo Monfort) * Let liferea-add-feed work when there is no DBus support by using --add-feed. (Emilio Pozuelo Monfort) * Changed the update queue logic which previously restricted the number of updates to 1 per 500ms under peak loads. (Arnold Noronha) * Removed a not-useful-enough interface to save/load GoogleSource edits to disk across Liferea sessions. (Arnold Noronha) * Link directly with libgthread-2.0 and libICE, fixes linking with gold. (Adrian Bunk) * Re-add grayflag.png since it is actually used. (Adrian Bunk, reported by Maik Zumstrull) * Let notification.h be shipped in tarballs. (Emilio Pozuelo Monfort, reported by George Sherwood) * Don't ship Google and Bloglines icons, download them as with any other subscription instead. (Emilio Pozuelo Monfort) * Fix advanced new subscription dialog to set the filter filechooser bar insensitive if the filter checkbox is unset. Also make the feed properties dialog not completely hide the filter filechooser, only set it insensitive if the filter checkbox is unset. (Emilio Pozuelo Monfort) [truncated] liferea-1.12.7/Dockerfile000066400000000000000000000006471352135647700152270ustar00rootroot00000000000000FROM ubuntu:16.04 MAINTAINER Lars Windolf RUN apt-get update RUN apt-get install -y libtool intltool gcc automake autoconf RUN apt-get install -y libxml2-dev libxslt1-dev libgtk-3-dev libwebkit2gtk-4.0-dev libpeas-dev libsqlite3-dev libjson-glib-dev libgirepository1.0-dev gsettings-desktop-schemas-dev RUN mkdir -p /src/ WORKDIR /src/ COPY . /src/ RUN ./autogen.sh RUN ./configure && make && cd src/tests && make test liferea-1.12.7/INSTALL000066400000000000000000000227701352135647700142670ustar00rootroot00000000000000Installation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1.A. Compiling from a Tarball release `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. 1.B. Or compiling from Git `cd' to the directory containing the package's source code and type `./autogen.sh' to configure the package for your system. Running `configure' or 'autogen.sh' may take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Here is a another example: /bin/bash ./configure CONFIG_SHELL=/bin/bash Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent configuration-related scripts to be executed by `/bin/bash'. `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. liferea-1.12.7/Makefile.am000066400000000000000000000036631352135647700152720ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in SUBDIRS = doc man opml pixmaps po src xslt glade desktop_in_files = net.sourceforge.liferea.desktop.in desktopdir = $(datadir)/applications desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) @INTLTOOL_DESKTOP_RULE@ dbusservicedir = $(datadir)/dbus-1/services dbusservice_DATA = net.sourceforge.liferea.service net.sourceforge.liferea.service: Makefile $(AM_V_GEN) (echo '[D-BUS Service]'; \ echo 'Name=net.sourceforge.liferea'; \ echo 'Exec=${bindir}/liferea --gapplication-service') > $@.tmp && \ mv $@.tmp $@ appdatadir = $(datadir)/appdata appdata_in_files = $(PACKAGE_TARNAME).appdata.xml.in appdata_DATA = $(appdata_in_files:.xml.in=.xml) @INTLTOOL_XML_RULE@ cssdir = $(pkgdatadir)/css css_DATA = \ css/liferea.css \ css/user.css \ css/adblock.css dtddir = $(pkgdatadir)/dtd dtd_DATA = dtd/html.ent plugindir = $(pkglibdir)/plugins plugin_DATA = \ plugins/bold-unread.py \ plugins/bold-unread.plugin \ plugins/gnome-keyring.py \ plugins/gnome-keyring.plugin \ plugins/headerbar.py \ plugins/headerbar.plugin \ plugins/libnotify.py \ plugins/libnotify.plugin \ plugins/media-player.py \ plugins/media-player.plugin \ plugins/plugin-installer.py \ plugins/plugin-installer.plugin \ plugins/trayicon.py \ plugins/trayicon.plugin gsettings_SCHEMAS = net.sf.liferea.gschema.xml @INTLTOOL_XML_NOMERGE_RULE@ @GSETTINGS_RULES@ data_convertdir = $(datadir)/GConf/gsettings dist_data_convert_DATA = liferea.convert EXTRA_DIST = \ net.sf.liferea.gschema.xml.in \ po/liferea.pot \ $(desktop_in_files) \ $(desktop_DATA) \ $(schema_DATA) \ $(css_DATA) \ $(dtd_DATA) \ $(plugin_DATA) \ $(gsettings_SCHEMAS) \ $(appdata_in_files) \ $(appdata_DATA) DISTCLEANFILES = \ liferea.desktop \ intltool-extract \ intltool-merge \ intltool-update \ $(gsettings_SCHEMAS) CLEANFILES = \ $(gsettings_SCHEMAS) \ $(appdata_DATA) po/liferea.pot: cd po && $(MAKE) liferea.pot liferea-1.12.7/README.md000066400000000000000000000163651352135647700145200ustar00rootroot00000000000000[![Build Status](https://travis-ci.org/lwindolf/liferea.svg?branch=master)](https://travis-ci.org/lwindolf/liferea) ![Coverity Scan Build Status](https://scan.coverity.com/projects/4287/badge.svg) Introduction ------------ Liferea is a desktop feed reader/news aggregator that brings together all of the content from your favorite subscriptions into a simple interface that makes it easy to organize and browse feeds. Its GUI is similar to a desktop mail/news client, with an embedded web browser. ![screenshot](https://lzone.de/liferea/screenshots/screenshot3.png) Installation from Package ------------------------- For distro specific package installation check out https://lzone.de/liferea/install.htm Building Liferea Yourself ------------------------ This section describes how to compile Liferea yourself. If you have any problems compiling the source file an issue at Github and we will help you asap. ###### _Mandatory Dependencies_ gtk3 libxml2 libxslt1-dev libsqlite3-dev libwebkit2gtk-4.0-dev libjson-glib-dev libgirepository1.0 libpeas-dev gsettings-desktop-schemas-dev python3 ###### _Compiling from Tarball_ Download a tarball from https://github.com/lwindolf/liferea/releases and extract and compile with tar jxvf liferea-1.12.0.tar.bz2 ./configure make make install ###### _Compiling from Git_ Check out the code: git clone https://github.com/lwindolf/liferea.git Then build it with: ./autogen.sh make make install If you compile with a --prefix directory which does not match $XDG_DATA_DIRS you will get a runtime error about the schema not being found. To workaround set $XDG_DATA_DIRS before starting Liferea. For example: my_dir=$HOME/tmp/liferea ./autogen.sh --prefix=$my_dir make make install env XDG_DATA_DIRS="$my_dir/share:$XDG_DATA_DIRS" $my_dir/bin/liferea Contributing ------------ As the project is hosted at Github pull requests and tickets via Github are the best way to contribute to Liferea. ###### _Translating_ Before starting to translate you need a translation editor. We suggest to use poedit or gtranslator. Please edit the translation using such a translation editor and send us the resulting file. Once you have finished your work please send us the resulting file. Please do not send translation patches. Those are a lot of work to merge and the bandwidth saving is not that huge! ###### _New Translations_ To create a new translation you must load the translation template, which you can find in the release tarball as "po/liferea.pot", into the translation editor. After editing it save it under a new name (usually your locales name with the extension ".po"). ###### _Updating Translations_ When updating an existing translation please ensure to respect earlier translators work. If the latest translation is only a few months old please contact the latest translator first asking him to review your changes especially if you change already translated literals. ###### _Localizing Feed Lists_ When Liferea starts for the first time it installs a localized feed list if available. If this is not the case for your locale you might want to provide one. To check if there is one for your country have a look into the "opml" subdirectory in the latest release tarball or GIT. If you want to provide/update a localized feed list please follow these rules: + Keep the English part of the default feed list + Only add neutral content feeds (no sex, no ideologic politics, no illegal stuff) + Provide good and short feed titles + Provide HTML URLs for each feed. ###### _Creating Plugins_ Liferea 1.10+ support GObject Introspection based plugins using libpeas. The Liferea distribution comes with a set of Python plugin e.g. the media player, libsecret support, a tray icon plugin and maybe others. ###### Why We Use Plugins? The idea behind plugins is to extend Liferea without changing compile time requirements. With the plugin only activating if all its bindings are available Liferea uses plugins to automatically enable features where possible. ###### How Plugins Interact With Liferea You can develop plugins for your private use or contribute them upstream. In any case it makes sense to start by cloning one of the existing plugins and to think about how to hook into Liferea. There are two common ways: + using interfaces, + or by listening to events on Liferea objects, + or not at all by just controlling Liferea from the outside. The media player is an example for 1.) while the tray icon is an example for 3.) If you find you need a new plugin interface (called Activatables) in the code feel free to contact us on the mailing list. In general such a tight coupling should be avoided. About the exposed GIR API: At the moment there is no stable API. Its just some header files fed into g-ir-scanner. Despite this method names of the core functionality in Liferea has proven to be stable during release branches. And if you contribute your plugin upstream it will be updated to match renamed functionality. ###### Testing Plugins To test your new plugin you can use ~/.local/share/liferea/plugins. Create the directory and put the plugin script and the .plugin file there and restart Liferea. Watch out for initialization exceptions on the command line as they will permanently disable the plugin. Each time this happens you need to reenable the plugin from within the plugin tab in the preferences dialog! ###### _How to Help With Testing_ ###### *Bug Reports* If you want to help with testing grab the latest tarball or follow GIT master and write bug reports for any functional problem you experience. If you have time help with bug triaging. Check if you see any of the open bugs that are not yet confirmed. ###### *Debugging Crashes* In case of crashes create gdb backtraces and post them in the bug tracker. To create a backtrace start Liferea using "gdb liferea". At the gdb prompt type "run" to start the execution and "bt" after the crash. Send us the "bt" output! Note: Often people confuses assertions with crashes. Assertions do halt the program because of a totally unexpected situation. Creating a backtrace in this situation will only point to the assertion line, which doesn't help much. In case of an assertion simply post a bug report with the assertion message. ###### *Debugging Memory Leaks* If you see memory leakage please take the time to do a run valgrind --leak-check=full liferea to identify leaks and send in the output. How to Get Support ------------------ When using distribution packages: Do not post bug reports in the Liferea bug tracker, use the bug reporting system of your distribution instead. We (upstream) cannot fix distribution packages! Before getting support for stable releases: Install the latest stable release and check if the problem is solved already. Please do not ask for help for older releases! At the moment there are two major support channels: + The mailing list (https://lists.sourceforge.net/lists/listinfo/liferea-devel). Good for posting compilation problems and starting longer discussions. + The GitHub bug tracker (https://github.com/lwindolf/liferea/issues) where you can post bug reports for all problems you find. Ensure to look for any existing reports on your problem! Hopefully we can help with your problem. liferea-1.12.7/autogen.sh000077500000000000000000000006251352135647700152320ustar00rootroot00000000000000#!/bin/sh tmp=`which autoreconf` if [ "$tmp" = "" ]; then echo "ERROR: You need to install autoconf!" exit 1 fi tmp=`which intltoolize` if [ "$tmp" = "" ]; then echo "ERROR: You need to install intltool!" exit 1 fi tmp=`which libtoolize` if [ "$tmp" = "" ]; then echo "ERROR: You need to install libtool!" exit 1 fi autoreconf -i intltoolize if test -z "$NOCONFIGURE"; then ./configure "$@" fi liferea-1.12.7/configure.ac000066400000000000000000000051161352135647700155170ustar00rootroot00000000000000dnl Process this file with autoconf to produce a configure script. AC_INIT([liferea],[1.12.7],[liferea-devel@lists.sourceforge.net]) AC_CANONICAL_HOST AC_CONFIG_SRCDIR([src/feedlist.c]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE([1.11 foreign std-options -Wall -Werror]) AM_SILENT_RULES([yes]) dnl Needed for automake 1.12 m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) AC_PREREQ(2.59) LT_INIT IT_PROG_INTLTOOL([0.40.4]) AC_PROG_CC AM_PROG_CC_C_O AC_PROG_MAKE_SET AC_SYS_LARGEFILE GLIB_GSETTINGS AC_CHECK_FUNCS([strsep]) PKG_PROG_PKG_CONFIG() ################################################################################ # Mandatory library dependencies pkg_modules=" gtk+-3.0 >= 3.14.0 glib-2.0 >= 2.28.0 gio-2.0 >= 2.26.0 pango >= 1.4.0 libxml-2.0 >= 2.6.27 libxslt >= 1.1.19 sqlite3 >= 3.7.0 gmodule-2.0 >= 2.0.0 gthread-2.0 libsoup-2.4 >= 2.42 webkit2gtk-4.0 json-glib-1.0 gobject-introspection-1.0 gsettings-desktop-schemas libpeas-1.0 >= 1.0.0 libpeas-gtk-1.0 >= 1.0.0" ################################################################################ PKG_CHECK_MODULES(PACKAGE, [$pkg_modules]) AC_SUBST(PACKAGE_CFLAGS) AC_SUBST(PACKAGE_LIBS) PKG_CHECK_MODULES([WEB_EXTENSION], [ webkit2gtk-web-extension-4.0 ]) AC_SUBST([WEB_EXTENSION_CFLAGS]) AC_SUBST([WEB_EXTENSION_LIBS]) uname=`uname` AC_DEFINE_UNQUOTED(OS, $uname, [defines a OS version string, used for OS specific code]) AC_DEFINE_UNQUOTED(OSNAME, "$uname", [defines a OS version string, used for the user agent string]) AC_MSG_RESULT(user agent OS = $uname) ################################################################################ # Plugins via Introspection GOBJECT_INTROSPECTION_CHECK([0.9.3]) ################################################################################ AM_GLIB_GNU_GETTEXT GETTEXT_PACKAGE=liferea AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["${GETTEXT_PACKAGE}"], [gettext domain]) AC_CONFIG_FILES([ Makefile net.sf.liferea.gschema.xml src/Makefile src/webkit/Makefile src/webkit/web_extension/Makefile src/parsers/Makefile src/fl_sources/Makefile src/ui/Makefile src/tests/Makefile doc/Makefile doc/html/Makefile xslt/Makefile man/Makefile man/pl/Makefile pixmaps/Makefile pixmaps/16x16/Makefile pixmaps/22x22/Makefile pixmaps/24x24/Makefile pixmaps/32x32/Makefile pixmaps/48x48/Makefile pixmaps/scalable/Makefile opml/Makefile glade/Makefile po/Makefile.in src/liferea-add-feed ]) AC_OUTPUT echo echo "$PACKAGE $VERSION" echo eval eval echo Liferea will be installed in $bindir. echo echo configure complete, now type \'make\' echo liferea-1.12.7/css/000077500000000000000000000000001352135647700140165ustar00rootroot00000000000000liferea-1.12.7/css/adblock.css000066400000000000000000000022621352135647700161310ustar00rootroot00000000000000/* * Liferea ad blocking stylesheet * * (C) 2005-2007 Lars Windolf * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ iframe[src="kanoodle"], *[src*="imageads.google"], *[href*="doubleclick"] img, *[src*="doubleclick"], *[href*="feedstermedia.com/feedster/adclick.php?bannerid="] { display:none !important; visibility:hidden; margin:0; } div.feedflare { display: none !important; visibility:hidden; margin:0; } img[width="468"] { display: none !important } img[width="1"] { display: none !important } liferea-1.12.7/css/liferea.css000066400000000000000000000133041352135647700161400ustar00rootroot00000000000000/** * @file liferea.css Liferea rendering stylesheet * * Copyright (C) 2004-2018 Lars Windolf * Copyright (C) 2004 delusional * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* Font Definitions: ================= No style definition should set absolute font sizes, font families or line heigth and spacing. This is to allow a GNOME preference controlled default font size. Color Definitions: ================== To allow using GTK theme colors the following key words will be replaced with the corresponding GTK theme color values: GTK-COLOR-FG GTK-COLOR-BG GTK-COLOR-LIGHT GTK-COLOR-DARK GTK-COLOR-MID GTK-COLOR-BASE GTK-COLOR-TEXT GTK-COLOR-NORMAL-LINK GTK-COLOR-VISITED-LINK */ body { background: #GTK-COLOR-BASE; color: #GTK-COLOR-TEXT; padding:0; margin:0; } blockquote { border-left: 2px solid #GTK-COLOR-DARK; background: #GTK-COLOR-BG; padding: 5px; font-style: italic; margin: 5px 20px; clear:both; } a { color: #GTK-COLOR-NORMAL-LINK; } a:visited { color: #GTK-COLOR-VISITED-LINK; } dd { padding-left: 30px; } section, video, svg, iframe, figure, div.content * img { max-width: 100%; object-fit: scale-down; box-sizing: border-box; } div.content * img { border:0; margin:2px; } img.gravatar { /* gravatars have align="left" so we need proper margin */ margin-right:12px; } #map img { /* OpenStreeMap map tiles must have no border */ border:0px; margin:0px; } /* styles for the item description (currently also used for the feed description) */ table.itemhead, table.feedhead { margin:0; width:100%; border:0; border-bottom: 1px solid #GTK-COLOR-DARK; clear:both; color:#GTK-COLOR-TEXT; } .itemhead, .feedhead { background-color: #GTK-COLOR-MID; } table.itemhead * td { padding: 2px; padding-top: 4px; } table.itemhead * a.itemhead { text-decoration:none; color:#GTK-COLOR-TEXT; font-weight:bold; } td.headleft { text-align:right; } td.headright { padding:2px 5px; } table.headmeta { background:#GTK-COLOR-BG; width:100%; border:0; border-bottom:#GTK-COLOR-MID solid 1px; margin:0; } table.headmeta td { padding:1px 6px 1px 12px; font-size:0.8em; } .hidden { visibility:hidden; display:none; } .itemmenu { margin:0; padding:0; } .itemmenu a { text-decoration:none; color:#GTK-COLOR-TEXT; } .itemmenu a:hover { } .itemmenu * span { font-size:1em; font-family:sans-serif; padding:0; margin:0; position:relative; top:-3px; } .itemmenu * img { padding:0; margin:0; height:16px; position:relative; top:1px; } .author, .categories, .source { padding:0; margin-left:0; margin-right:12px; } .date { white-space:nowrap; text-align:right; padding-right:5px; } div.content { padding:0px 6px 0px 12px; } div.comment { border:1px solid #GTK-COLOR-DARK; margin-bottom:5px; } div.comment_body { padding-left:6px; padding-right:6px; } div.comment_title { padding-left:6px; padding-right:6px; font-weight:bold; background:#GTK-COLOR-BG; } a.favicon { text-decoration:none; } a.favicon img { width:16px; border:0; margin:0; padding:0; } /* styles to realize shading of new items in condensed mode */ .itemshaded { background:#ffe; color:black; padding:1px; margin:0; } .itemunshaded { padding:1px; margin:0; } .summaryshaded, .summaryunshaded { padding:0px 6px; margin:0; } .summaryshaded a { display:block; background:#ffe; color:black; text-decoration:none; padding:1px 0px; font-weight:bold; } .summaryunshaded a { display:block; color:#GTK-COLOR-TEXT; text-decoration:none; padding:1px 0px; } .summarytime { padding-right:15px; white-space:nowrap; color:#999; } hr.summary { border:0; padding:0; margin:2px; border-bottom:1px dashed #ddd; } /* style for the HTTP error box at the beginning of the feed description and for item comment feeds */ #errors, #commentFeedError { width:100%; border:0; border-bottom:1px solid black; margin:0; background:#ffa; color:black; } #commentFeedError { border:1px solid black; } #parseError, #filterError, #updateError { padding:2px; padding-left:5px; padding-right:5px; } div.xmlparseroutput { margin:10px 0px 10px 15px; padding:5px; border:2px solid #GTK-COLOR-DARK; background:#GTK-COLOR-LIGHT; } span.details, span.detaillink { visibility:hidden; display:none; } span.details { padding:5px; margin:15px; } span.showmore { text-decoration:underline; color:blue; cursor:pointer; } del { text-decoration: line-through; } ins { text-decoration: underline; } /* namespace specific styles */ div.blogchanneltitle { padding-left:10px; padding-right:10px; background-color:#GTK-COLOR-DARK; color:#GTK-COLOR-TEXT; } .slash { background:#60A080; padding-left:5px; padding-right:5px; } .slashSection, .slashDepartment { padding-right:2px; color:black; } .slashValue { padding-right:6px; color:white; font-weight:bold; } div.photoheader { margin:10px 0; padding-left:10px; padding-right:10px; background-color:#GTK-COLOR-DARK; color:#GTK-COLOR-TEXT; } liferea-1.12.7/css/user.css000066400000000000000000000054041352135647700155110ustar00rootroot00000000000000/** This is a template file which you can use to redefine the Liferea CSS definitions use to render items. Below you find empty class definitions including comments describing what they are used for. Before you start customizing... Reloading: ========== For performance reasons Liferea will read this CSS file only on startup. So when you modify it please restart Liferea for changes to take effect. About Font Definitions: ======================= You should avoid setting absolute font sizes. This allows Liferea to follow the GNOME font and font size. Use relative definitions instead (e.g. "1.2em" or "0.8em"). Color Definitions: ================== Try to reuse GTK theme colors. Liferea uses the following definitions and will be replace them on the fly: GTK-COLOR-FG GTK-COLOR-BG GTK-COLOR-LIGHT GTK-COLOR-DARK GTK-COLOR-MID GTK-COLOR-BASE GTK-COLOR-TEXT GTK-COLOR-NORMAL-LINK GTK-COLOR-VISITED-LINK Inspecting the HTML: ==================== If the definitions below do not help you, run Liferea with the parameter "--debug-html". Then Liferea will dump HTML into ~/.cache/liferea/output.xhtml each time it renders an item or a feed. So you can check for style classes and the layout you want to affect. */ /* Item display rendering header table (with title, categories...) */ // table.itemhead { } /* Feed display rendering header table (with title, categories...) */ // table.feedhead { } /* Left of feed/item table display containing favicon */ // td.headleft { } // a.favicon { } // a.favicon img { } /* Right of feed/item table display containing title */ // td.headright { } /* Metadata display table (inside header table) */ // table.headmeta { } /* 2 pane mode: Item menu definitions */ // .itemmenu { } // .itemmenu a { } // .itemmenu a:hover { } // .itemmenu * span { } // .itemmenu * img { } /* Header table fields to different item metadata */ // .author, .categories, .source { } // .date { } /* Item/feed description */ // div.content { } /* Comment rendering */ // div.comment { } // div.comment_body { } // div.comment_title { } /* Styles for the HTTP error box at the beginning of the feed description and for item comment feeds */ // #errors, #commentFeedError { } // #parseError, #filterError, #updateError { } // div.xmlparseroutput { } // span.details, span.detaillink { } // span.details { } // span.showmore { } /* namespace specific styles */ // div.blogchanneltitle { } // div.photoheader { } /* Gravatar embedding */ // img.gravatar { } /* OpenStreeMap embedded map*/ // #map img { } /* Slashdot Header */ // .slash { } // .slashSection, .slashDepartment { } // .slashValue { } liferea-1.12.7/doc/000077500000000000000000000000001352135647700137735ustar00rootroot00000000000000liferea-1.12.7/doc/Doxyfile000066400000000000000000001313671352135647700155140ustar00rootroot00000000000000# Doxyfile 1.3.6-20040222 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = Liferea # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = 1.1 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, # Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en # (Japanese with English messages), Korean, Korean-en, Norwegian, Polish, Portuguese, # Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # This tag can be used to specify the encoding used in the generated output. # The encoding is not always determined by the language that is chosen, # but also whether or not the output is meant for Windows or non-Windows users. # In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES # forces the Windows encoding (this is the default for the Windows binary), # whereas setting the tag to NO uses a Unix-style encoding (the default for # all platforms other than Windows). USE_WINDOWS_ENCODING = NO # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is used # as the annotated text. Otherwise, the brief description is used as-is. If left # blank, the following values are used ("$name" is automatically replaced with the # name of the entity): "The $name class" "The $name widget" "The $name file" # "is" "provides" "specifies" "contains" "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited # members of a class in the documentation of that class as if those members were # ordinary class members. Constructors, destructors and assignment operators of # the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. It is allowed to use relative paths in the argument list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explicit @brief command for a brief description. JAVADOC_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources # only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ../src # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp # *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm FILE_PATTERNS = *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = ../src/scripting/liferea_wrap.h ../src/ui/eggtrayicon.c ../src/ui/eggtrayicon.h ../src/net ../src/parsers/opml.h ../src/parsers/ocs_ns.h ../src/parsers/ocs_dir.c ../src/parsers/ocs_dir.h ../src/parsers/cdf_channel.h ../src/parsers/cdf_item.h # The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories # that are symbolic links (a Unix filesystem feature) are excluded from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. EXCLUDE_PATTERNS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. INPUT_FILTER = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_PREDEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse the # parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or # super classes. Setting the tag to NO turns the diagrams off. Note that this # option is superseded by the HAVE_DOT option below. This is only a fallback. It is # recommended to install and use dot, since it yields more powerful graphs. CLASS_DIAGRAMS = NO # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. CALL_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found on the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes that # lay further from the root node will be omitted. Note that setting this option to # 1 or 2 may greatly reduce the computation time needed for large code bases. Also # note that a graph may be further truncated if the graph's image dimensions are # not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). # If 0 is used for the depth value (the default), the graph is not depth-constrained. MAX_DOT_GRAPH_DEPTH = 0 # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO liferea-1.12.7/doc/Makefile.am000066400000000000000000000000511352135647700160230ustar00rootroot00000000000000EXTRA_DIST = \ Doxyfile SUBDIRS = html liferea-1.12.7/doc/html/000077500000000000000000000000001352135647700147375ustar00rootroot00000000000000liferea-1.12.7/doc/html/Makefile.am000066400000000000000000000030211352135647700167670ustar00rootroot00000000000000html_doc_en = about_en.html \ concepts_en.html \ folders_en.html \ headlines_en.html \ preferences_en.html \ reference_en.html \ searching_en.html \ subscriptions_en.html \ topics_en.html \ updating_en.html \ enclosures_en.html \ newsbin_en.html \ onlineservices_en.html \ faq_en.html html_doc_de = about_de.html \ concepts_de.html \ folders_de.html \ headlines_de.html \ preferences_de.html \ reference_de.html \ searching_de.html \ subscriptions_de.html \ topics_de.html \ updating_de.html \ enclosures_de.html \ newsbin_de.html \ onlineservices_de.html \ faq_de.html html_doc_pictures_en = help_feed_default.png \ help_feed_error.png \ help_folder.png \ help_opml.png \ help_feed_prop_downl_1.6.0.png \ help_feed_prop_cache_1.6.0.png \ help_feed_prop_adv_1.6.0.png \ help_feed_prop_general_1.6.0.png \ help_feed_prop_source_1.6.0.png \ help_item_flag.png \ help_item_unread.png \ help_prefs_browser_1.6.0.png \ help_prefs_enclosures_1.6.0.png \ help_prefs_feeds_1.6.0.png \ help_prefs_folders_1.6.0.png \ help_prefs_gui_1.6.0.png \ help_prefs_headlines_1.6.0.png \ help_prefs_proxy_1.6.0.png \ help_search_1.6.0.png \ help_subscribe_1.6.0.png \ help_subscribe_adv_1.6.0.png \ help_vfolder_1.6.0.png EXTRA_DIST = $(html_doc_en) \ $(html_doc_de) \ $(html_doc_pictures_en) \ reference.css htmldoc_DATA = $(html_doc_en) \ $(html_doc_de) \ $(html_doc_pictures_en) \ reference.css htmldocdir = $(datadir)/liferea/doc/html liferea-1.12.7/doc/html/about_de.html000066400000000000000000000034261352135647700174140ustar00rootroot00000000000000 Einleitung
Zurück Einleitung Vor

Über Liferea

Liferea ist ein News Aggregator für Online News Feeds. Es gibt viele andere Programme, aber diese sind entweder nicht für Linux verfügbar oder benötigen viele Zusatzbibliotheken. Liferea versucht diese Lücke zu schließen und ein möglichst schneller, einfach zu benutzender und einfach installierbarer News Aggregator für GTK/GNOME zu sein.

Bei Interesse an der neuesten Liferea Version, bei Programmfehlern oder dem Wunsch nach neuen Features lohnt sich ein Besuch der GitHub Projekt Seite (Sprache Englisch)! Alternativ lohnt sich auch das Mitlesen der liferea-devel Mailingliste. Hinweise zur Mailinglisste finden sich auf der SourceForge Infoseite.


Zurück Inhalt Vor
liferea-1.12.7/doc/html/about_en.html000066400000000000000000000032121352135647700174170ustar00rootroot00000000000000 Introduction
Prev Introduction Next

About Liferea

Liferea is a simple desktop news aggregator for online news feeds. There are many other news readers available, but these others are not available for Linux or require many extra libraries to be installed. Liferea tries to fill this gap by creating a fast, easy to use, easy to install news aggregator for GTK/GNOME.

If you are interested in the most recent Liferea version, want to submit a bug or request a feature you may want to visit our GitHub project page! You are also invited to join the liferea-devel mailing list. Details on the list are located at the SourceForge list info page.


Prev Contents Next
liferea-1.12.7/doc/html/concepts_de.html000066400000000000000000000143301352135647700201140ustar00rootroot00000000000000 Basic Concepts
Prev Basic Concepts Next

This section tries to clarify some of the technical jargon used along with feed readers.

What does "online/offline desktop" news aggregator mean?

Feed readers or news aggregators can be realised as web applications or as desktop applications. The place of execution (your computer vs. some webserver) implies certain advantages and disadvantages.

A desktop news aggregator runs on your own PC and stores aggregated feeds locally. It accesses each news feed and downloads its newest headlines periodically. Note that not all desktop news aggregators can work offline. Some desktop aggregators retrieve feeds each time you access them instead of caching them for later use. Liferea as an offline capable desktop aggregator caches feeds and is suitable for use with portable devices (laptops, hand helds...) that do not have a permanent internet connection.

  • Disadvantages:
    • No implicit state synchronization when used from different client machines
    • Higher bandwidth usage compared to online aggregators
    • Need to be installed on each client machines
    • OS-dependant
  • Advantages:
    • Your cached feed contents are saved on your own (secure) machine.
    • Your cached feed contents are searchable locally with other tools (e.g. Beagle)
    • Your feed list is not accessible to 3rd parties
    • Each feed access are done in private.

A online news aggregator (for example TheOldReader) is run on a remote webserver which you can access from everywhere as long as you have network access. When you log in to the online news aggregator it usually doesn't need to fetch the most recent headlines of you feed subscriptions because it implements feed caching to save bandwidth.

  • Disadvantages:
    • You rely on some 3rd party vendor for the news aggregator service.
    • Often you have to pay for premium features.
    • No chance to improve/modify/fix the online application.
    • You need a web browser to access it.
  • Advantages:
    • You get the same feed list and feed states no matter from where you access them.
    • Practically no bandwidth usage except for the access of the web interface.
    • Community headline rating systems to categorize content.
    • Sharing headlines with the community (or specific users).

What is a Feed?

For a news aggregator a news feed is a distinct information source. A news aggregator usually retrieves news headlines from many news feed subscriptions. The term "news feed" is not very precise as feeds can also provide weblog postings, podcasts and practically every type of content. The same goes for the term "news headlines": often "article" or "post" would be a better description. Nonetheless the prefix "news" is usually used with the terms "feed", "headline" and "aggregator".

When you add a new subscription then you have to specify the source of the feed so that the news aggregator can initially retrieve it. The feed source is usually a HTTP URL. When updating the news feed the aggregator downloads the document served when accessing this URL. There are several XML-based and XML-like syndication standards (RSS, Atom...) that define how a feed must look like so that the aggregator knows how to interpret the document contents.

As a user you usually do not have to know about the syndication format. You just need to know the source URL of the feed you want to subscribe.

What is the Feed List?

Typical news aggregators present you with a list of your feed subscription. Following the email client interface paradigm the feed list is often presented in the left pane of the news aggregator interface.

Depending on the aggregator you use the feed list might be hierarchically organized using folders or categories.

What is a Headline?

When a news aggregator updates a news feed it download the source document from the source URL of the feed subscription. This source document provides a set of the most recent headlines which then need to be merged against the current feed cache of the aggregator because the set of headlines provided by the feed source changes over time.

Headlines as provided by the feed source are the smallest information unit handled by aggregators.

What is the Item List?

In Liferea headlines are also called items and are presented in the so called item list. Following the email client paradigm the item list is often presented in the upper right pane in the news aggregator interface.


Prev Contents Next
liferea-1.12.7/doc/html/concepts_en.html000066400000000000000000000132231352135647700201260ustar00rootroot00000000000000 Basic Concepts
Prev Basic Concepts Next

This section tries to clarify some of the technical jargon used along with feed readers.

What does "online/offline desktop" news aggregator mean?

Feed readers or news aggregators can be realised as web applications or as desktop applications. The place of execution (your computer vs. some webserver) implies certain advantages and disadvantages.

A desktop news aggregator runs on your own PC and stores aggregated feeds locally. It accesses each news feed and downloads its newest headlines periodically. Note that not all desktop news aggregators can work offline. Some desktop aggregators retrieve feeds each time you access them instead of caching them for later use. Liferea as an offline capable desktop aggregator caches feeds and is suitable for use with portable devices (laptops, hand helds...) that do not have a permanent internet connection.

  • Disadvantages:
    • No implicit state synchronization when used from different client machines
    • Higher bandwidth usage compared to online aggregators
    • Need to be installed on each client machines
    • OS-dependant
  • Advantages:
    • Your cached feed contents are saved on your own (secure) machine.
    • Your cached feed contents are searchable locally with other tools (e.g. Beagle)
    • Your feed list is not accessible to 3rd parties
    • Each feed access are done in private.

A online news aggregator (for example TheOldReader) is run on a remote webserver which you can access from everywhere as long as you have network access. When you log in to the online news aggregator it usually doesn't need to fetch the most recent headlines of you feed subscriptions because it implements feed caching to save bandwidth.

  • Disadvantages:
    • You rely on some 3rd party vendor for the news aggregator service.
    • Often you have to pay for premium features.
    • No chance to improve/modify/fix the online application.
    • You need a web browser to access it.
  • Advantages:
    • You get the same feed list and feed states no matter from where you access them.
    • Practically no bandwidth usage except for the access of the web interface.
    • Community headline rating systems to categorize content.
    • Sharing headlines with the community (or specific users).

What is a Feed?

For a news aggregator a news feed is a distinct information source. A news aggregator usually retrieves news headlines from many news feed subscriptions. The term "news feed" is not very precise as feeds can also provide weblog postings, podcasts and practically every type of content. The same goes for the term "news headlines": often "article" or "post" would be a better description. Nonetheless the prefix "news" is usually used with the terms "feed", "headline" and "aggregator".

What is a Subscription?

When you add a new feed then you have to specify the source of the feed, so that the news aggregator can initially retrieve it. The feed source is usually a HTTP URL. This URL with optional authentication and proxy settings is a "subscription" managed by Liferea.

What is the Feed List?

To manage and easily navigate your subscriptions Liferea provides you with a hierarchic tree of your subscriptions. Similar to email clients the "feed list" is located in the left pane. You can organize your subscription after topics in different folders.

What is a Headline?

When a news aggregator updates a news feed it downloads the source document from the source URL of the feed subscription. This source document provides a set of the most recent headlines which then need to be merged against the current feed cache of the aggregator because the set of headlines provided by the feed source changes over time.

Headlines as provided by the feed source are the smallest information unit handled by aggregators.

What is the Item List?

In Liferea headlines are also called items and are presented in the so called item list. Following the email client paradigm the item list is often presented in the upper right pane in the news aggregator interface.


Prev Contents Next
liferea-1.12.7/doc/html/enclosures_de.html000066400000000000000000000071771352135647700204730ustar00rootroot00000000000000 Enclosures/Podcasting
Zurück Enclosures/Podcasting Vor

Enclosures/Podcasting

Worum geht es hier eigentlich?

Viele Weblogs und News Feeds wollen mehr als nur ASCII oder HTML formatierte Artikel bieten. Ein Weblog-Autor möchte zum Beispiel seine täglichen Erlebnisse aufnehmen und als Audio Daten (meist MP3) im Weblog und dem zugehörigen News Feed den Lesern anbieten. Das ermöglichen sogenannte Enclosures. Ein Enclosure an einer Schlagzeile hinzuzufügen bedeutet der Schlagzeile eine URL beizugeben, die eine Applikation wie Liferea herunterladen und mit einem passendem Medienplayer abspielen kann.

Feeds mit Audioinhalten werden oft als Podcasts bezeichnet. Das Publizieren solchen Inhalts wird Podcasting genannt. Die Wikipedia Seite über Podcasting ist ein guter Startpunkt um mehr darüber zu erfahren.

Das Anbieten von Audioinhalten ist zwar am weitesten verbreitet aber es sind auch Feeds denkbar die Bilder, Torrents oder Videos einbinden. Praktisch jedes Datenformat ist möglich.

Wie Liferea Enclosures herunterlädt

Standardmäßt lädt Liferea Enclosures nicht automatisch herunter. Es ist jedoch möglich für jedes Feed einzeln das automatische Herunterladen zu aktivieren. Wird ein neues Enclosure erkannt startet Liferea den Download mit dem in den Einstellungen konfigurierten Download Tool. Alle heruntergeladenen Dateien werden im ebenfalls in den Einstellungen konfigurierbaren Download-Verzeichnis abgelegt. Heruntergeladene Dateien werden nach dem Abspielen nicht automatisch gelöscht!

Natürlich können die Enclosures auch manuell heruntergeladen werden. Dazu wählt man die entsprechende Schlagzeilen aus und klickt den Pfeil links des Enclosures an um dessen Kontextmenü zu öffnen. Dieses bietet zwei Menüpunkte. Der erste lädt das Enclosure herunter und lädt es mit dem entsprechenden Medienplayer. Mit dem zweiten Menüpunkt kann die Datei einfach nur in ein angegebenes Verzeichnis gesichert werden.

Wie Liferea Enclosures abspielt

Nach dem Herunterladen eines Enclosures versucht Liferea dieses entsprechend des MIME Typs oder der Dateiendung zu öffnen. Die Anwendung zum Anzeigen oder Abspielen der heruntergeladenen Datei kann in den Einstellungen konfiguriert werden. Hinweis: Es hängt vom Feed ab ob der MIME Typ für das Starten des konfigurierten Abspielprogrammes verfügbar ist oder nur die Dateiendung verwendet werden kann.


Zurück Inhalt Vor
liferea-1.12.7/doc/html/enclosures_en.html000066400000000000000000000063031352135647700204730ustar00rootroot00000000000000 Enclosures/Podcasting
Prev Enclosures/Podcasting Next

Enclosures/Podcasting

What is this all about?

Some weblogs and news feeds want to provide you with more than just ASCII text or HTML formatted articles. A weblog author might want to record his daily experiences and publish them as audio data (often MP3) and of course make this available in the weblog's feed too. This is done by adding enclosures to feed items. Adding an enclosure means adding an URL to an item which the feed reader application can download and play with an appropriate media player.

Feeds with audio content are often called podcasts. The act of publishing such content is called podcasting. The Wikipedia page about podcasting is a good start to learn more about this publishing method.

Including audio content might be the most common use case for enclosures but there are other feeds around containing images, torrents or videos. Every data format is thinkable.

How Liferea downloads enclosures

Per default Liferea does not automatically download enclosures. But you can enable auto-downloading for each feed separately. If a new enclosure is found Liferea will then start a download using the configured download method. All downloaded files will be stored into the configured download directory. After viewing the contents you have to delete them manually.

Of course you can also manually download enclosures. To do so open the item with the enclosure and click the arrow to open the enclosure context menu. There are two option. The first one downloads and launches the file while the second option save the file into a specified directory.

How Liferea opens enclosures

After downloading a file Liferea will try to launch the file according to it's MIME type or file extension. The application used to view or play the downloaded file can be configured in the program preferences. Note that it depends on the feed whether you can use MIME types to associate launcher programs or if you must rely on the file extension to do this.


Prev Contents Next
liferea-1.12.7/doc/html/faq_de.html000066400000000000000000000145421352135647700170520ustar00rootroot00000000000000 Liferea FAQ
Liferea - Frequently Asked Questions

Hinweis: Diese FAQ ist auch online verfügbar.

Q: Warum funktioniert Flash nicht (mehr)?
A: Automatische Flash-Unterstützung ging leider mit Liferea 1.10, welches erstmal GTK3 nutzt, kaputt wenn es mit einer WebkitGTK3-Version älter als 2.0 verwendet wird. Eine detaillierte Erklärung findet sich hier (Englisch).

Es gibt die folgenden Workarounds:

  1. WebkitGTK3 auf 2.0 oder neuer aktualisieren
  2. nspluginwrapper und das 32bit Flash-Plugin installieren (Anleitung, Englisch)
Q: Wo finde ich die neueste Liferea-Version?
A: Der einfachste Weg ist es das neueste Binär- oder Quellpaket von der GitHub Projekt Homepage herunterzuladen. Noch besser ist es aber Liferea-Pakete der eigenen Linux-Distribution zu verwenden. Eine Liste der Distributionen mit eigene Liferea-Paketen gibt es hier.
Q: Der Download von Anhängen mit Gwget funktioniert nicht!
A: Eine bekannte Ursache für dieses Problem ist Gwget Version 1.0.0 oder 1.0.1, welche eine defekte DBUS API bereitstellt, die es Liferea nicht erlaubt Anhänge an Gwget weiterzugeben. In diesem Falle muß Gwget auf eine neuere Version aktualisiert werden.
Q: Ich benutze Firefox/Seamonkey, und wenn ich Schlagzeilen mit dem Firefox/Seamonkey öffne wird immer dessen Fenster fokussiert.
A: Das ist ein Verhalten von Firefox/Seamonkey. Um es zu ändern muß mit about:config die Einstellung browser.tabs.loadDivertedInBackground auf "true" gestellt werden.
Q: Ich will Cookies!
A: Liferea unterstützt nur Session Cookies beim Abruf von Feeds. Diese werden in ~/.config/liferea/session_cookies.txt gespeichert.
Q: Ich mag die HTML/CSS Styles von Liferea nicht!
A: Jeder kann die Styles ändern. Dazu kann das Stylesheet ~/.config/liferea/liferea.css editiert werden. Die Datei enthält Beschreibungen der verschiedenen verwendeten Klassen so daß es einfacher ist diese zu modifizieren.
Q: Wie kann ich die friends-only Posts von LiveJournal Abonnements sehen?
A: Dazu muß das LiveJournal RSS Feed mit Authentifikation benutzt werden. Z.B. http://www.livejournal.com/users/pigrew/data/rss?auth=digest. In den Abonnement-Eigenschaften muß zusätzlich noch Username und Paßwort des LiveJournal Accounts angegeben werden.
Q: Warum werden manche Schlagzeilen immer wieder als ungelesen angezeigt?
A: Meistens sind fehlerhafte Feeds mit z.B. nicht eindeutigen oder fehlenden Schlagzeilen-Ids der Grund. Hier lohnt es sich, dass entsprechende Feed im Quelltext zu überprüfen und den Autor/Webmaster zu kontakieren. Ist das Feed in Ordnung lohnt es sich einen Eintrag im Liferea Bug Tracker anzulegen.

Hinweis: Dieses Problem haben viele Planet Feeds, die einfach nur die gesammelten Schlagzeilen der aggregierten Feeds anbieten, ohne für eindeutige Schlagzeilen-Ids zu sorgen. In solchen Fällen hat Liferea keine Möglichkeit die Schlagzeilen korrekt zu unterscheiden.
Q: Liferea stürzt laufend ab.
A: Das hören wir oft. Um wirklich helfen zu können benötigen wir aber detaillierte Beschreibungen über die Absturzursache. Stürzt Liferea reproduzierbar ab wollen wir das natürlich unbedingt wissen. Zum Debugging brauchen wir die Ausgaben eines Aufrufes mit dem Schalter "--debug-all" und wenn möglich einem Backtrace. Um einen Backtrace zu erzeugen einfach ein Terminal öffnen und die folgenden zwei Kommandos absetzen: ulimit -c unlimited und dann liferea. So aufgerufen wird Liferea beim Absturz eine core-Datei erzeugen. Diese kann dann mit gdb liferea core geöffnet werden. Gibt man in der gdb Eingabeaufforderung dann bt ein wird der Backtrace des Absturzes ausgegeben.
Q: Warum fehlt Liferea die Funktion X?
A: Wenn du findest das weitere Funktionen in Liferea eingebaut werden sollten beteilige dich bitte an der Weiterentwicklung des Programms. Um weitere Funktionen zu realisieren benötigen wir mehr freiwillige Entwickler!
Q: Was bedeutet "Es traten Fehler beim Parsen des Feeds auf!" und was kann ich dagegen tun?
A: Der Feed-Parser von Liferea erwartet gültiges XML. Enthält ein Feed ungültiges XML, so kommt es zu diesem Fehler. Die Gültigkeit eines Feeds lässt sich mit http://feedvalidator.org/ und http://validator.w3.org/feed/ prüfen.

Häufig lässt sich der fehlerhafte Feed mit Hilfe von xmllint retten. Dazu muss xmllint beim betreffenden Feed in den "Eigenschaften des Abonnements" im Reiter "Quelle" unter "Benutze einen Filter zum Konvertieren" wie folgt gesetzt werden: xmllint --recover -

Hinweis: Unter Debian-basierten Distributionen gehört xmllint zum Paket libxml2-utils.

liferea-1.12.7/doc/html/faq_en.html000066400000000000000000000143731352135647700170660ustar00rootroot00000000000000 Liferea FAQ
Liferea - Frequently Asked Questions

Note: This FAQ is also available online.

Q: Why doesn't Flash work (anymore)?
A: Easy flash support broke when Liferea 1.10 which uses GTK3 is used with WebkitGTK3 versions before 2.0. For a detailed explanation read this post.

There are the following known workarounds:

  1. Upgrade WebkitGTK3 to 2.0 or later
  2. Install nspluginwrapper and the 32bit flash plugin (instructions)
Q: Where can I get it?
A: The easiest way is to download the source package from the GitHub project page. But you should also consider checking if your Linux distribution provides an own package for Liferea. A list of all known prebuilt packages is provided in the installation section.
Q: Enclosures download with Gwget doesn't work
A: Most likely you have Gwget 1.0.0 or 1.0.1 installed, and due to a temporary breakage in the dbus API of Gwget these versions don't work with Liferea. Both older and more recent versions of Gwget do work.
Q: I'm using Firefox/Seamonkey, and when opening items in the browser the focus goes to the browser.
A: That's done by your browser. For changing it, open about:config in your browser and set browser.tabs.loadDivertedInBackground to true.
Q: Liferea is buggy! It does not close when I click on the window managers close button and the tray icon is activated.
A: This is a pretty disputed topic. We see this as a useful feature, other people don't. If you don't like the behaviour you can change it in the preferences under "GUI". There you can enable the check box "Terminate instead of minimizing to tray icon".
Q: I want cookies!
A: Liferea supports only session cookies while downloading feeds. They are stored in ~/.config/liferea/session_cookies.txt
Q: I don't like the HTML/CSS styles Liferea uses!
A: You can have your own stylesheet. Just edit ~/.config/liferea/liferea.css During startup it will be loaded additionally to the default stylesheets so you can modify some or all style definitions. The file contains comments describing the different style so it should be easy to modify them.
Q: How do I see my LiveJournal friend's friends-only entries?
A: Use the authenticated LiveJournal RSS feed. For example use http://www.livejournal.com/users/pigrew/data/rss?auth=digest. You will need to use the feed properties dialog box to set the username and password of your LiveJournal account.
Q: Why do feed items keep being displayed as new?
A: This is usually due to a bad feed which associated a particular ID to multiple items. If you are experienced with syndication formats please check the feed source code. If you find problems please contact the author/webmaster of the feed. If not please submit a bug report including the URL of the problem feed to the Liferea bug tracker.

Note: If you experience this problem with a planet feed the reason might be that the planet feed does not provide unique item ids for one or all off its source feeds. If this is the case Liferea has no chance to match identical items.
Q: Liferea crashes too much.
A: We hear this complaint a lot, but we rarely do not get information on how it crashed. If you find a way to make Liferea crash, we would love to know about it. Please send us a copy of the output of running Liferea with the "--debug-all" flag, plus a backtrace if possible. To create a backtrace, open up a terminal and type two commands: ulimit -c unlimited and then liferea. This causes Liferea to create a core dump when it crashes. Then, run gdb liferea core and type bt at the gdb prompt. This will display the backtrace of the crash, which should be sent along with the bug report.
Q: Why doesn't Liferea have feature X?
A: If you miss a feature in Liferea please consider contributing code to implement the feature! Please also consider that the Liferea project aims to provide a simple feed reader that might lack more complex functionality.
Q: What does "There were errors while parsing this feed!" mean and how can I fix it?
A: The feed parser of Liferea expects valid XML. So, this error happens when a feed contains invalid XML. You can check the validity of a feed with http://feedvalidator.org/ and http://validator.w3.org/feed/.

To fix this problem, you can try to sanitize the XML with xmllint. For this, open the subscription properties of the affected feed and add xmllint as a conversion filter in the source tab like this: xmllint --recover -

Note: On Debian-based distribution xmllint is part of the libxml2-utils package.

liferea-1.12.7/doc/html/folders_de.html000066400000000000000000000075521352135647700177440ustar00rootroot00000000000000 Arbeiten mit Ordnern
Zurück Arbeiten mit Ordnern Vor

Arbeiten mit Ordnern

Dieser Abschnitt beschreibt die Organisation von Abonnements mit Ordnern.

Abonnement Icons

Dieses oder ein ähnliches Icon (abhängig vom GTK-Theme) ist das Standardicon für Ordner.
Dies ist das Standardicon für Abonnements. Zusätzlich unterstützt Liferea auch individuelle Icons die viele Webserver mittels als "favicon.ico" Datei anbieten. Liferea versucht jeweils diese Datei herunterzuladen und als Icon für das entsprechende Abonnement zu verwenden.
Dieses oder ein ähnliches Icon (abhängig vom GTK Theme) ist ein Hinweis auf eines der folgenden Probleme:
  • Das Feed wurde initial noch nicht heruntergeladen.
  • Das letzte Herunterladen des Feeds schlug fehl.
  • Der Inhalt des Feed ist ungültig.

Wie aktualisiert man Abonnements

Es gibt 3 Möglichkeiten Abonnements zu aktualisieren:

  • Indem man "Alle aktualisieren" im "Abonnement" Menü auswählt.
  • Indem man "Abonnement aktualisieren" im Kontextmenü auswählt (Rechts-Klick in der Liste der Abonnements).
  • Indem man "Ordner aktualisieren" im Kontextmenü eines Ordners auswählt in dem das Abonnements enthalten ist.
Die beste Art und Weise ist es aber keine der obigen Möglichkeiten zu nutzen und Liferea die Abonnements einfach regelmäßig automatisch aktualisieren zu lassen. Mehr dazu im Abschnitt über das Aktualisieren von Abonnements.

Wie ändert man die Eigenschaften eines Abonnements

Die Eigenschaften eines Abonnements (Titel, Quelle, Aktualisierungsintervall und Caching-Eigenschaften) können mit dem Menüpunkt "Eigenschaften" aus dem Hauptmenü oder dem Kontextmenü des Abonnements aufgerufen werden. Daraufhin erscheint der Eigenschaften-Dialog. Die dort präsentierten Eigenschaften sind im Abschnitt Abonnements verwalten beschrieben.

Wie entfernt man Abonnements oder Ordner

Um ein Abonnements oder einen Order zu entfernen muß der "Löschen" Menupünkt aus dem Hauptmenü oder dem Kontextmenü des Abonnements aufgerufen werden. Beim Entfernen von Abonnements wird automatisch der gesamte Inhalt des Feeds gelöscht.

Wie ändert man die Sortierung von Abonnements

Zum Umsortieren der Abonnements und Folder zieht man diese mit der Mouse an eine neue Zielposition und läßt sich dort fallen. Während es Ziehens wird ein Einfügecursor an der aktuell ausgewählten Einfügeposition angezeigt.


Zurück Inhalt Vor
liferea-1.12.7/doc/html/folders_en.html000066400000000000000000000073151352135647700177530ustar00rootroot00000000000000 Managing Folders
Prev Managing Folders Next

Managing Folders

This section describes how to organize subscriptions into folders.

The Feed List Icons

This icon or a similar icon (because it's GTK theme dependant) is the standard icon for folders.
This is the standard icon for subscriptions. Note that Liferea supports individual icons provided by a "favicon.ico" file on the webserver. Liferea always tries to download this file and use it instead of the default icon.
This is the standard icon for OPML subscriptions.
This icon or a similar icon (because it's GTK theme dependant) may indicate on of the following conditions:
  • That the subscription was not yet downloaded.
  • That the last retrieval failed.
  • That the content of the feed is mal-formed.

How to Update Subscriptions

There are three possibilities to update a feed:

  • Select "Update All" from the "Subscriptions" menu.
  • Select "Update Feed" after right-clicking a subscriptions in the feed list.
  • Select "Update Folder" after right-clicking one of the folders the feed is child of.
But the best way might be to use none of the above. Just let Liferea update your subscription periodically. To learn more about updating read the section on Updating Subscriptions.

How to Change the Properties of a Subscription

To change the properties of a subscription (the title, the source URL, the update interval and cache settings) either select "Properties" from the context menu by right clicking the feed in the feed list or selecting "Properties" from the "Feed" menu. The properties dialog will then appear. The settings of the properties dialog are described in the Managing Subscriptions section.

How to Remove a Subscription or Folder

To remove a feed or folder, just select the "Delete" option either from the feed list context menu or the "Feed" menu after selecting the feed list's entry to delete. When removing feeds, this will remove the feed and all of its cached contents.

How to Reorder Folder Contents

To reorder feed list elements simply drag them with the mouse and drop them into their new destination. A little line is shows where the destination will be while dragging a feed or folder.


Prev Contents Next
liferea-1.12.7/doc/html/headlines_de.html000066400000000000000000000135301352135647700202330ustar00rootroot00000000000000 Arbeiten mit Schlagzeilen
Zurück Arbeiten mit Schlagzeilen Vor

Arbeiten mit Schlagzeilen

Liferea kennt zwei Anzeigemodi:

 

   
 
Email Client - Der rechte obere Bereich enthält eine Liste der Schlagzeilen und der Inhalt der ausgewählten Schlagzeile wird im rechten unteren Bereich angezeigt.

   
Zusammenfassung - Der rechte Fensterbereich enthält eine kombinierte Ansicht aller Schlagzeile des ausgewählten Abonnements.

Zwischen diesen beiden Anzeigemodi kann mit Hilfe des "Zusammenfassung an/aus" Menupunktes im Hauptmenü jederzeit umgeschaltet werden. Liferea merkt sich den Anzeigemodus für jedes Feed, so daß beim erneuten Anwählen der alte Anzeigemodus wiederhergestellt wird.

Laden eines Schlagzeilen-Links

Der Link einer ausgewählten Schlagzeile kann mit einem Doppelklick oder Return im Browser geladen werden. Hinweis: nicht jede Schlagzeile bietet einen Link an! Ob sie einen einen anbietet erkannt man daran, daß der Schlagzeilentitel in der Schlagzeilenanzeige als Hyperlink dargestellt ist oder nicht.

Die Konfiguruation des zu benutzenden Browsers ist im Abschnitt Ändern der Einstellungen beschrieben!

Ändern des Lesestatus einer Schlagzeile

Jede Schlagzeile hat einen Lesestatus. Die Titel ungelesener Schlagzeile werden fett dargestellt. Beim Abwählen einer zuvor ungelesenen Schlagzeile ändert sich der Lesestatus auf gelesen und der Titel wird normal dargestellt.

Manchmal will man nicht alle Schlagzeilen durchlesen. Um sie dennoch als ungelesen zu markieren kann der Menüpunkt "Ausgewähtle als gelesen markieren" aus dem Hauptmenü bzw. "Alle als gelesen markieren" aus dem Kontextmenü benutzt werden.

Außerdem gibt es noch die Möglichkeit den Lesestatus einer Schlagzeile zurückzusetzen. Dazu muß der Menupunkt "Lesestatus ändern" aus dem Hauptmenü oder dem Kontextmenü der Schlagzeile ausgewählt werden. Alternativ hilft auch ein Klick auf den Schlagzeilentitel mit der dritten Mousetaste.

Markieren wichtiger Schlagzeilen

Liferea erlaubt das Markieren wichtiger Schlagzeilen. Dies erleichtert das Auffinden der Schlagzeilen und was viel wichtiger ist es verhindert das automatische Entfernen dieser Schlagzeile wenn sie älter wird und aus dem Cache "herausfallen" würde. Um eine Schlagzeile zu markieren muß der Menupunkt "Flagge setzen oder löschen" aus dem Hauptmenü oder dem Kontextmenü der Schlagzeile ausgewählt werden. Alternativ hilft auch ein Klick auf die Flaggenspalte der Schlagzeilenliste mit der dritten Mousetaste.

Dieses Icon haben alle markierten Schlagzeilen.

Zur nächsten ungelesenen Schlagzeile springen

Durch das Anklicken des "Nächste Ungelesene" Buttons in der Toolbar oder durch die Auswahl des Menüpunktes im Hauptmenü oder durch das Drücken des Hotkeys (Ctrl-N) ist es möglich sehr schnell alle neuen Schlagzeilen anzuwählen. Liferea wird nacheinander die verbleibenden ungelesenen Schlagzeilen des ausgewählten Abonnements anspringen und danach die Schlagzeilen aller weiteren Abonnements auswählen.

Nach Schlagzeilen suchen

Liferea erlaubt das Durchsuchen aller Abonnements nach einer Schlagzeile. Dabei kann nach einem Text der entweder im Titel oder Inhalt der Schlagzeile vorkommt gesucht werden. Mehr dazu im Abschnitt Schlagzeilen suchen!

Schlagzeilen entfernen

Durch die Auswahl des Menüpunktes "Lösche alle Schlagzeilen" aus dem Hauptmenü kann der Schlagzeilen-Cache des ausgewählten Abonnements geleert werden. Mit dem Menüpunkt "Ausgewählte löschen" im Hauptmenü oder Kontextmenü der ausgewählte Schlagzeile können auch einzelne Schlagzeilen entfernt werden.


Zurück Inhalt Vor
liferea-1.12.7/doc/html/headlines_en.html000066400000000000000000000134421352135647700202470ustar00rootroot00000000000000 Managing Headlines
Prev Working with Headlines Next

This section documents all user interaction with headlines. Note: in Liferea headlines are also referred to as items.

Available Viewing Modes

Liferea knows three display modes:

 

   
 
Normal View - Email client like: the upper right pane contains a list of all headlines of the selected feed and the selected headline is shown in the lower right pane.

     
Wide View - 3 panes: the middle pane contains a list of all headlines of the selected feed and the selected headline is shown in the right pane.

   
Combined View - 2 panes: the right pane contains a combined display of all headlines of the selected feed.

You can change between these modes in the "View" menu. This is a per-feed setting so you can view each feed in the mode that fits best. The default viewing mode is "Normal View".

Launching an Item Link

To open the link the item refers to double click on the item or for keyboard users select the item and press return. Note that not each item provides a link! If the item provides a link the item title text in the item views header box is a hyperlink.

To learn how to configure the browser that is used to open links refer to the Program Preferences section!

Changing the Read Status

A headline has a read state. Unread items have bold titles. If you select an item the read status changes to read and the item title style becomes regular.

Sometimes you may not want to read the headlines of a subscription. To mark all unread at once select "Mark all as Read" from the "Feed" menu or the tool bar. Alternatively you can press the Ctrl-R hotkey.

There is also the possibility to change back the item read status. Select "Toggle Read Flag" from the items menu or click the headline with the third mouse button to achieve this.

The icon used to indicate unread items.

Flagging Items

Liferea allows you to mark items with a flag. This is useful to easily find these items and to prevent them from being dropped from the cache when aging. To do so select "Toggle Flag" from the item context menu or click the icon column of the headline list with the third mouse button.

The icon used to indicate flagged items.

Jump to Next Unread Item

When using this feature by either clicking the button in the toolbar or using the hotkey (Ctrl-N) you will be able to access all unread items very fast. The program will first jump to the next unread item in the currently displayed item list and when there are no unread items it will select the first unread item in the first feed of the feed list that contains unread items.

Searching Items

There is the possibility to search all items which contain a specific literal either in their title or their content by using the search box. Please refer to the Searching section!

Removing Items

By selecting "Remove All Items" from the "Items" menu you can clear the item cache of the currently selected feed. If you only want to remove a single by choosing the "Remove Selected" option.


Prev Contents Next
liferea-1.12.7/doc/html/help_feed_default.png000066400000000000000000000013741352135647700210710ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxtMHTQs;:CDi\QPDH"sljDQ`ȍ-[&[A.EdXZQOBUgwν3҅yac璉dp0z1,`  SD[[7 MgIFd]'2yEH2֓3+ҢSaHm .Ȃ !0oe/\gD8by,Z  l$(/}iX/c?`[56JbߑSh%vK+ <60:wДj6i zv< A7SuǵXrnނg); du o%}&%Qam'29U ⮦(kbe"Ep;of@zMBmX%GO#,ZjWBV<{GHsm,Ec+Q Xag%߼^c;37q".? zIDbcQN}yCfB|f6yef}uYҨ† [%b5q=`6U6uuh%WA͢i0M;`Q5S:9IENDB`liferea-1.12.7/doc/html/help_feed_error.png000066400000000000000000000011721352135647700205720ustar00rootroot00000000000000PNG  IHDRZAIDAT8˭MkQ aMX$R u#-N7Jw] ]T)FD-`4m_.LƎ=ZP]cXf$^2'FIM>:[ kM\Aӏy)5R֨Y{8; ė>e sa Ld5Y~؇? RhЈV5꼾s+ Ŀ|!堕(Jc) P@eQz9Eu T/#&u}.h19^Z[Z@Ӷ*URJRZBHMU[j5ymZAt< Ҫ)QQS(Wh M bhqZDA9d>ͱaohQhfGO${!?iAaaW={f{Rj̬黎c;*ܺR'"#RcbԐS[+ 0#rArC,͵~cf1򄐛)|B+ަMɣK5t5:Lɧ{1_>-**mZ^"9ܘ2^ŶGt0Rj#/UXP|IoEo9\41 q'f,/p;N1 e 7nlzDZQ[nP7T!"R?rPVZ~3n.}E5 &KPM15)(J <˸XX$WPTH?w/V :I|yטYAXⴜOja"tE>qp?Oq2+!;m%}&彬2y*={\zAQlb4GS /ޗ+(}וC&Ynߍ4Z-ԤlVInn Dv]1;rv] ^_)Qz65ŎOױ篦%~W iyeuFU!WQL3 &Sk,'3r#$B,{)h+;h*ZLEٞj5w=|wq&U]o26VfUGTvsU>bQQyB8dB~}Je3cijv؜R>!4!zΘR~GIZ±J:VWBX,V)#ĥӌNWw҄?t:WSWH3wW %d!*K[ZpN*] %g'gEXϰTVj&$[RY񜽐i VSf)[ɮ!U1PWH3w)$YR~t32p^[99itܷ<'8vl%+jZyP5 Vj) v[T g3KKXZ+ _:ŋ,b$9D7n+};yITOV7Qb̍40i>4J51}GH)-Br ˲My)_PTz?6lGs2Kç'oI''0U)TzNŌϟLswJmJ+^%^퍒wU8t7Ĵ⻱u UG> ]%ކ+cnvD.bjRLZק܍*FZjLnJUZZU[CA_!@_%![ߎ]SdlPsWvҋue5ͫ:{f} _=;eq-6o\^f"" fn3TAVd@Vd@Vd@Vd@Vdh:0CCC:d/sN777tmL <{/+_`s8MTU 7Y'Я: !e[;lÒC;]޵%O~0At?9bWq^{׸>}ѻӧOF?WXqeMvVfںփV"pK^y=(GyN7i0qӢ a6X:ZS*wB/h׫iwCU15RWބ^ OofZI^JF^UǠd\7ު[#(\]tìYZ{׍ײkWBHQ׳e^Ny!V=[YkqHI)3tx?̦e7aDXm1BkgOѳe!OD:4%N_U?,>9#!Xv?aҳxz6sYxMJާ@g!Os)>zq8*X.V\$L[[ģգ~{Qk;BȰ{p3.\ta eI++=|ۮCF= k/W3)ޱ[':cQnPdhTvY=2sI};(M ! n|NÍK:*Hׯ5܌BЇWUAIJ !xuɧ BHqΑT=Z:ZjdGl-GD= p}BW%N~+K*宥Gg2\#q͟Oj8損#!N|TYNZFAuGU76t}yO~n}Nd;t~Q=x~ȺH1 >h}9+_6MC=B6ЗR4qf6 f #Vw~?WUq~}c%Y)i\35\{ =EY e-v]8Ҳ.v[']ݴI ;G +g10QJn(Am&҄Zh}.®~H}yZ;FlBH,i\BHZ6~r`_ZJr:us#z;q4"-omau{ᮣ9n&mD%ۚ|[-aa9!w BHIm8l6[K׌[VtzՓKFހW';,b ՚:UnA{ Qc+6 ?s Y-< ŪJBU^5mQ9VތJ(()'q?G%iGB.^6n+*٦ҼaN)dڦfIX)y}/|VwVc(MԻzI)rJ(67ׯ緛ik4DH2ݯ#b3≔~7b8V˙w%ZWb4Z^\\qyΪ-+._*K&iMôW~{y~ViUfB;L/ZzkiA)[K%XM<^^Z 4GVm#]h0rO@.Ohj}۟Of%^:J!2$MmvUE[Ff=!4h;H3XuI5^Si۽VSYQk%"@tL(p5}o D>٫6BTrO5 j($7< ׿&>}Z)UA¯KyerĄ B=tmxZqpA3j L͒Wuٳ5Qj|GÂ7|+}|E)"-ۧSI_B\M)1g-*֊3ߖ:8JGry.dۧ?Խ ^^rl.v \d~)I9)6@cflKY~qAnDϸ9`x2Ń njQy\Ozzv^u<~Ƈ">!Ay wZ>8t?q<>/=aCVgt2>,ɍgs/>~]H{/Sԋ%W5GRrZ+{x1yL(kO- 2Y#O!65gͰ%N7>M$MTeڑas$^kI[xOn?GO^9}.*yZqxaduG=OZL^H琓Sk9 ߙ,\> xQeimѣ .í2"O |(u=aƂ6w}X^| ã . J|~˲cªV7lmm^Ev2Om5{9[{/^e8jޟo|J[RZc-lJNsW.vA?4]]3ڞ ZmȬ6Jj] {'MُǏ4SooJI˵Q44bkUx !O]֣!e­1o2UTsbS j;x#PΝU~;pP_lv— ]6{[? e|;TAVd~ 3 A*ud*&'SnxBCC\l<7n$@Vd@Vd@Vd@Vd@Vd@Vd@Vd@VzXxl_%>-$M-ff"oj VM4?zNc@Cڮ}s Wk< 0,bzUY)ggCCC >: ⼵%G s +6]eKт 焝W=1LXN1epB]dmcn=hDY3ڜf쑘X9]",V9ޤ=GK@DžO*$6$ޥ 9jmP$M=Ք]7Rs,;)V+cgekn=hu-][^1į,iOMr Z_GaWNRœf4er8Acl{ptt-z_//p$a&]u86}/;cפk;N(ŒxT..*GP>{jҧħ’#39l+r e%~{=Qwk6$z`%ݕzuӷ/JBc{&f᫺ʆ=^m*|ṷva%4\wC&}†r }w[oaHqPW-K3R4S O>VF9> ,%^1։W]e&LPk*G%ZuDZAڀFNheZHǮNܤ,"Hx[~X޿{:Ur}#SUöI糘0B !6byd\}52Cq9!ŪZ*, ՚xDE_n(/"@9SiҦjP& ^xM\m_͉ u-w '=j"*/:SBd xyI5@#>*h !JR j 3pCfk2~ګ*034CNt]I3(] gW\|s~W\l,vTzE\{<3;''+E 3ުw=K8`!$>x-P1$o-,~-lrsa9Rm%Tdzř~RZfffVVVvvvNNNvvkz s߅{}?Le1s*`=.dƸ%iiтu%\B[7`K_zb/zXSQ}\z^u^,Rq!IJ۞1&?7Q+5^'1vh)i-)\s~b5:8MTm#E[Ff]W1\6K <"8GfM֩+' [Tk^=a8(] |Y!TI+'-"-ۧSIK}(sK_G]qDTZE@tuBg_I)1gɽNR./q>mŗUcG#i7b7q;o) /i]u qs%6rP k|ɂG2;NѠj4egz ::_ʭ()xqsMGQaqvl~I0rm ӬI}aߨPULzpP4EWRX>7ijlt "L;~O):'. 2u.[|fhj Xleg?ks祇ԫS}O@W`D7$#}N߱J{G"I ^mT^~'?lfŇDǫ7j p!3b.2nѠj4egzD^eQiwS(9b23wQC^kOCfM23U Fj`pmI>u`}`14/3H4/jx:wƅya@K"7e6--t>Y[- IYYYYYYY5?Iy~[J LI:mm IDATۓpB'B>Z;bWT|gjxx8.}x:vÞkov6f_D'[ecL h_3IٹFn >: Kl3j] +VRrW[✰Jw7 )n_H֞5uṱ{ITGyN7i0qӢ ѮP;+3]m]sACn\Jd1=8::?Xسf9GG#1y1G7 ݙñs'(~x,{[k}-NS^qb=ɋ=kC]ڦmEXl6O J|_;G'maiﺶãoc-MM3PBȭՃuuͬ|B֖ıFr +]Q'Ϧnda9!0a 9{98SgeSuBhfE&kc׺.Ss|1\TK_8G4ϑZKo"+ IY*ȷ SqN%BH9)Ғ.{9OkܷGJN{f2p{ns%15e϶ԩ|G, <&%z k?vNr _GFO;)䤗/HN|X|rFBձ W+xyEl޷!B#6 ]zvҺ/Sަp]YN(ŒxN..*GPrZIdx⽞仄U e6Wv{Ru4+X,NK&,y,!m`[9Btn< (l('nː9w&hxUYZFuq6G3-2Y04e\d%,-*⧂j@,U !<u1KR=.Bg_I)1gɝ4 WSXy^)q~C\u qs%6MT`𹎻Er+J DbӜA[ˆyjxmۧ?Խ ^^rlz~Ͽ,=6BUiFJ|BERcv v _EE2C !C]M,e3]lt*??z%giy#Js ]?sT,:Dw 3|!&uՒ #C;7b|J_o7$#}N߱J{5u~9#K:yO:x,7siF54ag>β<`ݺ.*Bި)rޏ9Έr˨gt9޽~N֞eGG/Ԇ ՒDkGu*a2X6& @): bgAoʠ?6=O͌9UtO7߈&>0䛔W%:_.=;i݁wOoSxIC򶝹QQӎ~ 8y;99QbkƜJ5_NTN+c7Fyxig[f*y&#n{H|=+XhtTyekܲˉWB<6z}mT+jTM2}TkP[xx8ZWXai|/T?6.fHqPW%LIbrj 5ᮼgk&}J|/?櫁t1:bV1//5+oÂ׻5N]1(!ꨄ$tVYk4=kHC İȰXUNkRЫO˱#08,2ˁsk1jtLb5Y鷥\QW(^)'FhP5Af[P09p߸=KiO͟Q }v}9&\=>d&wuu.2[QR$\O7~{eumkTNW9WbS+^55'{_R+/\۾5_8&*a>sՁ|n+nc% EjَNkZQ4C'WST= Wv~=vT;BUvNGy0gY3r:MXzxH=%Y-8Kׯ ,E/f1k.m[5U˒um->3[h>D@S9.~'/1xzF*q+v$*+֢Wv4|ctt̴_zu_SPPAtԡfkfOOZ׉ՃukZQ4C-N5gQqNl'xW%f='xeh?q͉E8B sW$/ |+&m@Vd@Vd@Vd@Vd@Vd@VdH:&&D.FFt55]BMT~A⊬k#ݗ{^u2QD!1զјw?h8@sgBs͍?\,RB#_Q{i@uT$j MM+ox$0=sI{n VNk (De=T'P+*PtuNzڜw9 TehB54-Jju 5Bs|䌄cّrmJ@G𥤴K1~SE5tSجlBHvĆKNZweb};7fa7)KtX{_b\- x%3j㸟g(z ".GOEbPic?ѯDY%L;CSy!UOD}݅g^~ɛ/;Qs a>TQMxh9/ᕣFnn.Jé }6Ep#,Qpxfj7F=}BM0ZI }2Rs kz}YV celtJ‡ ,%^UU?T6fC}:] }oT]7U+JOKS9}F!18ut.0R* L旪66^&M4A NuZ/t$'*$*j9䑩aNJ$_^O,Tkp0c7%*XLT5qAqN/B61<*D]b*h%Y=y_P\Nib2tz8ʡQc{w5LGf%L0_ڨ&fu]x;G;H-Jջ, I~RZfffVVVvvvNNNvv-&}QQbإazQ=J؟Nzp️bg>?~eG6c6^V@VSW J=,Hة>NbIJ۞Kx㢭s#I[A DRbOddߖrEJ_`V"bCڵfU")*g>M;4pa^üLWbmTQd&w%]O7~{e ::_ʭ()xqsB\M򹩱Wf;;g<,g:-}um&m5<,* p5Gry.'*OU9ijIW qvl~I0rm2/Sj"hP5suhdIwYvN^7RObIk.m[5U˒D%WׄbI.C̲N'g2Qӎi}MA9KcBBZjxX̜bsn!_ 5TA=?cKs[k}c0Y}̧q']\.{F_%Q \쿲y/UmTA#4gnyT} TW8&fay + + + + + + +|URtj}o3MMF N#Y{Mݷ^MW=j$ߤNglv[Ȱ_w_y1D)*owKq}ggy?s7҈N +Vsшg5[L Ђ 9jj| WAcl{ptt-z_/0l#[k|n^/Jˋ^]ѷ Q>vVfںփVukϚA:Z:փM VAںfv>QLj9敻h }[ Z_GaW\Q}M+o 6~ 9jmPpcazd{->-ьBTF{I\5FjWT0a 9{98Ss/!j~iZ8[j9dUzxԥj};7fa7)KtX{_FlI{٢bw6SX^T짛jofegWk%c7Fyxig[\DRιM t)#|Ql[r915Jgq?_`RQ5ya WDz#'O% ÜJ^0VHɎ0tILL{zuNo~&*ek (G_5 oplsՁ|n+nc0i!.YNgu}㧞_VK p!>\Ma{\^뻋U%rʙQ qvl~I0rm2/Sj"hP5siAh-*ZqX_]Y&O_𻨰vYz0+OEw f Q1u\|J'.;^;~FZ~[N K'C̲N'g2iǏv뾦۱ndCG1Dӥ->3[j0V5*SYefv3h4??W< : \h.Krm-ze2_ڨ&U3G25gYyз %.}ph!}zkΣYYYYYYYWF#~$ $ߤNglv?~U=H/wl" M 57tO_ظhK? < t;a"[0=sI{n U^^ѷf:b72fsQ>vVfںփVukϚA:Z:փ-X^1$}sOl:F {X:ZS*;Yk4m1=8::?X09=kf{ 6u{$&/覡;st8Vvd|NU׉:issq:fTCfrlyp ӱ]bcb#*`Wioݬ]Y&^:qCVns%15e϶vs|))-RGTBJ oN+!sžrBȧIU䄇O|X|rFBձ Wk~6hߘ'ߤ>_/!aZbȩD_3!dY޶3w^:J4~O'o''}^mjZIB"}йFF|0hߣ-C${[){-K3ݵj426M%ᮊgU3 45c iBx i92_BLtNJ,pوɱ杦,W&<<[i%Ӣ= B[{|ޒ۞F}(.'XU: %uwIr:SiFB >䑩jծNJ$ğbjjNlt6lKN8yQQyQJ *5MS?iz{0c7%*19 !@&؈=U8ʡQc{w5LGf+TCfrlyp= ;H-EfM/,}~ =z"nYֿJZ SN9wN&U;us6䭅oeM#7q_n.,~;GðMÆ- Moyr?)-333+++;;;''';;^cC͟1]r0½>z׏N ejNzY\.~NZo@p׮4e=W5^'/zXSQ}`ɪkKA"5W*-VCi Mo]}nduɰX<453DZ#08,2ˁs$TZ,B# ١ҿEEEEռ3\Ma{\^뻋עjtFЭe<FSӜ+\>7%E8?rLJ宐QE{5>ydPBPW#KoRO5@.v \d~)I9)6%t>? ^ya%ɱt%mЈRkH'SvhSmzp[+"m7w«z:fo6_|HK΃K,6ϲֳGꍚ+8Cጘ+繌ҫ(h MoY-802˺~{'-^Qmb)<]wߡS'_|N[ MXoV| Z/3HL.yAf"-IYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYN2 ˅"X_=!$''6;HPYYYYY9 _: :tjl6"#+@|9e\+ kWdw-熇ܻS[RʒjѨMjG ,B^qq/+s^ÈݺȞjm*>|{;ҹحXÙ=p|"D@;,YZ=;^R$-I.UPRWnffحcRL½;Y˙>.ǹ syO򱘻i%dhq>y3ye}ZA"Òf)+ybNoRRҙ0qUbVA{vk))ïmnƤYe\Rcu?wr>Y 54TqXEXR,) KJ%U^P[7˲ZXZ?Ixh{b@ >) *x B |Y+$.[@&X%E4a}N R,!,"H{J=G-u~ܼͪ~Cv74qb\--}>X/ \> I~Aayiׯ['6S~VVYC͜򴭱Ѳw_o6odH%-G5*[6}>s%&7+~ý{N  {:WKoRcnoZ8ZHKʸepVx|R#J+yl^(tԷOf^rq@<.f+Fn|WVTPR!oN(8?s'z@/\"XR].*U."mqA(`K\P9ڔM$3bh-Yg^$33)ec|$ˆ l~>QD)>yu}6UQ4zW^'"r6wpvaS~Uxs\-Sʭ׿_Sx~]b֡cgnلy}8wܷy%sV20Ûrx>뉝/|I!Twy-~w5].ے9Cgw2K^̯8 VcPd7=1bYs!I$JBNb0&]+l>ٮ'<;u4mq]YDͥ9?3.O|0AWlTs '0bd#Jw'vBBLiHD.бW6l1XFBUM3EaYeb(bE LB(Ɣ"J)96 +Zvr-_`!"n R^$ MaoRވe1%RAzCSS6)n>ߎ };O[aw\W)Sun;rK $c$is<է}5_ll %!)._}~HȴoyuӔfkTЧ#*Hg"ATo\O*6w@'[#Vnz]"A?GM+zfvT|[4iXBL8 o|&Š_ϵl_Vew-5n%Zm'~O*bL1!FhKdGKgm?05k mׄ'-۶|ϓw\5741)V5*,&X[Q4M _w]ۦ?^ۧg}U 7߶>խwFiZۯ?#mҢ#Ǯm ȸ©w[>|\}QWfd\J>t['F]sG0e2ךnno7cz{!5!WV:ޮ\%}* `U{_bۋN^)<@gXBZc ;NRZGFZ'b;#bw-)!njyk3:|-;W0c w=hey^ӸIOԄS%\cv[[.a3H\. B/23bcFԨeĴLLRB66qgҜcG>s=so_f߹>(/uET A_N.$559?hQA= K6SPJ)EHbn=E…' C]Yhy3B,SJ,2Wgp|j@u$gy"1"Dcw- bԮb96*ұjs`9cχ99_VPWw9ۂ8˲W\!dYv\!,4d$JoU}]CϞ\^^U}1 T)"˲,˭/zv Ϳ/6 AA}!bpT\`0Q pf,Yk"@: Dj $0qǵ;RH:9V^Jtz,-WV'N8aa>IIHFGz^h2DQMIDQ$-Ecխ\BRO`0@ `FI4MhhN0>BHNy AH(8oJR9+.."@*g=pFNN`$gbpH @*TRH fp̎, s "2cIENDB`liferea-1.12.7/doc/html/help_feed_prop_cache_1.6.0.png000066400000000000000000000506301352135647700222710ustar00rootroot00000000000000PNG  IHDRg}sRGB pHYs!3tIME+s FtEXtCommentCreated with GIMPW IDATxw\'!lE AժVq֪ugbXEڢT{ 8d l Y)#,_|g徹< N+b,dY/ⷯ"sޔcDd&ZJTmo3[xE-sj²  ض PBnmyGPǩHyc_PG{J[ՔQWc,~~% uiicԘC[E+*)g>б>3yOL˽كкbC,͹~SFѦUBBx/3 ^fĥK:Xeƪ(FDgxwXWVK"탤JZeuaֺ*%wfxY..睜!5:h(*1?-YwskV* no~]{SMEyBދϪ̵VP-SMEr^L*[z;sy.^kDhm^II?{ued^j^Ն@mNn [2*Z1*TTVȯ*%ɫH. Yj6mڳ=Sl\?KmF)Ҫ i|@HwDk'n{oxTM~lxCpV+VeҫhEHIP ^>w*~5-6/%Ky>4;UzHs_m9!2ot-+-_ >O"(j\Br^R~s֑g |~4B]z $i| Ys9m廛k\EAie奼e^[{sJ ᭽'£wBB yEyX&ܴr3Jb8\!!o[9Bb2†UJ\-yUW ! b5"dg^WWr铺g?Pl[AD_ Ͷ@/XKT9y7SEQƨw3%HUNUEMH^miTAw}M%9*[SH~LY >fWբ F{7*fh n>S(6f@S\sW!B:v;=%T$%t!E~HxN(@`0TWQ32SrmeŻռswR+BaBHvr ,iw5\PK7^y(f3Ox,Uڥn_#F?l;!$Y!/fjN!SfjU]יn:ZH]AA`MJȃ2!!ݢׯPѠ檼 Y5ͧz|_X_z׎QQ!EwNڙcEۯ<8!VXNѤ[.{ޅO`oQ On>σ'O >6x}-irN%93Mql+{ۚ舖$]>U7G#)6X_װUαGiK kv%n\uwn=9Qz[im؞dr(logB:;s8o>o78*Ai}؃Lfo'LJjE}7,Gh9}#SBȐ9ztޣf.^zEƖwTfU^՞>z;?~ߢLɆ?;D]kRvY&儬b6_BLF^X]!V_a*{C3Oc`rW8߅C[*3U4gzAd]락B?i''5ܻñE/z<)(Σo4E "]txqkwvk/_}JU}sjWD%(fW܋mJwY^[9[!B`0r% 9 4nCcboԚ;~?<$QY?ω+V]@ψ)_޲^{C[V%u?HPB Ra2]V\AS5c6t ;;[}Sןdߞf]2xBS:hS^M7Ê87w9Ec!P7}rq9ݎJ."H&g8d^$Њ~LI .S-BHݟ%vS~Ū]4]UO QٿK矂}Cq!wurmː^]7ħ",E!w ^_$cL>`À'>"#Oe|Ẏ^fj" }  FO 0WmM(\E4eDNo#+ޛVW-}XZgw5%kxTpix5wx8b.RbIO[V6q-_jaRvNעa{B2wYzBF "iC<$+@ݡYPmk/br 硣3`}W4io~% |v%̼(Z8MOV`Fa3Y[TҊrA?\qfϰ:$7^GegDn}=יܲ3ka2HY? Awwqj*WMKIso 3R ^UYx]Zc$5~@G!r >~ão8O';#Qo+|nIMc,V\}=ߤ=Z;g->k KBAa#w["Z[o|@(Ȏw张A?}+Z5Fsů'_W iOoo:i<%_TY 9,FzNY֟6]kj3z?OVc[8eysHͻ-\ͻr tLl]2+҆}sZ}P~opR=UʗBOؼu=si+̥ yҎj ަmA %1DN=۲]wfZjQjQsZFQDQ * * *@T GкL^Z֙~׺X +H E6BrZҒ1{$NvfcO:::_p59Gy[:uAh-c۹ZWh5m$=V'9͖e>9t_r.Xjah<$sF8vr*'^tihC}}s 6 ZKH}`=nΛFdGyMlibkСXbkK][8qH'S#=Cw.XhJӶw褯iw}; p꬯i$CxW5}iBZUl6[@Q5O.k6&%6^,&FEɻ%J~rm ;rC|FD/;!d?kf džR3ݩphӸ-}z<=+剧c7%i;ǻOS^>{K+鳋> s$HqB-C2ӮcߴZYZ3.zNJZV[,I_i[1yyuI?VjIh}IF 2"˸IkS=mt5 7-%K~eМgoGs৓tTDxqme^V:3`y|Dv=o]U-^m@iOv'IC0q󮚛OZl;=xeAzGX_Jkg5d)SQXպHXʹ/5(2"˸2ЦI bG@ҷf c0j9 -{`QsyEn" ˫!7%~S3]~U땽aO~vUKQ:ՇꝖVN/}5 PLjR}d,DqeB!,E9o6t{\(.[ט>}[2l)C>y Գ#MrאuT+Ϩ_ƪeKM2JM4t(-[lToԙCGegB-Kw/a^MAJ_3}[B1shPB֙`_WQ'Cߕ2YX}IFIu[Z "y.Fq:Lp׌D$U1ۖ -x/qoحuo|KN^y.,'*޻Nm?/KFiX e &5^/v?~NHt_ψ3_Y)};e)SXՋ}IFI6"˸5 *w\~lqUN&VK|OLf2ݾlu=ذD}NfAw/͙uo|Kϲ=绤qN=֟*8tuwٷ{欯#zXKNN47vmOd<#m~voخFuVJNYʔ6V"p5r_jQ 2n k-f| [yN.72P=ٟA¯2CƤP^{aL 0Ư^ť5ʾe9$.,esq쳸/ڨ3Hڼg % ڻ{XẢfE4Q! (N 9; /=:o^o@@TC,sЬzucDyzeq?-#<$f!.Ԭlƒcć )y~ZVf5b m{UJ9RUĀ*BHY_in=*5li|>4[PL_ȱ'? ?WH)L<2ru‰+i5[+6l*d^eym9_ow֯(o:wF`繻i>rߏ帥8Mf}Fnqǟf ʒ]6W$r/?;0cL5f+|-.Ρ$SEE<<6yo7Rkg'4pAKYw>uZ$@TD@TDO|fÈFqDtQ'Ehj-ll:D:aǮC._Y}Z<ZTΛuyo*.b_hT`r Z+]復K \4@ "L=qjĉD;U$@T4$@UQQAQRR222ի,8qu@ZAy^^^WиY}̺Zoೊ EEE.\ڵI444!AAAGVSSvlz,%6= ÔK~ g,BBappaì%CFFF.]4iY+ѡTE[#pSXuD%  _,Di QQQvvvU|Yǭ;w~V_hmmmkkM_CNACפ).<_3^*Ҟ.6=l<R#(6-:(ɎMqgl6MZߡ~gki *BȥG>{]rw!粖PXD^w:%#CF~n?r8NY'fGf{or]qcgTzA\ZuB&JX*ɵ1 wCݧ)Y/kҺ)mY!OӡkiiW1oZVYf Xbp"mŇOj&x<__߹s犗8qB}Z/v FN9/ !ގfO'騈V:,JN_(NWkԴ<`GwJ:ilv@b%2thN3J=<|岏4mT;iV&nr%%=- 5C'EM#o͖B`rSt*BHi (쁍IKOv !,Ŏ^A:7͡1{7Z_^Ik?ۉW3_H. BJaa!!֤rˢ"i ժ}beaR eb&$$Q_ɼrslcǗ؈/ bdϫ(~~ksC5V/-U|5 B>EUkuj+Iv' w?LDR%OPm0ꤥ!cN^y.,'*޻EMm:qY|!?+ l *B>|+WBBB8'$$$$$dĈҾ@?.gء Gnuy;.?8*' c+%mQSh`Ksx'{\b=V5n?Y_G擩}]zxa1KW'-= ;9%,;tT^_4ݔzv2䷿w<},oE2N<$߿]^^NQQQ100/JkT{ˍgi`-$էO߿.~vvsƘ|fZГ8|zM^Vtuv *ǪPUWwc*-  * * * *@i6  BQ+Ȏf7Ui26FT|PTTt…]N4ICCRPP4zh555iwRPRoki:cθ~ l)VBappaì%FFF.]4iI:E)AUQ~N\Txо%=>-UW bֶ%04tM;㫝L][8qH'S#=Cw}W`Iv&/-˼s`zNj7Ҟ.6=l<R'}`=nΛFYu !Oldkmx,Dikmmm?.kY E,LfT@UQQAQRR222jlT7cp.\еkI&ihhB F&qh  fmm-yuuu522tҤIh&l $5ˡ9**N2$Y[[FGG7F8vr*W3;u67<㿸bo8pʿyV%]3P_ܦǂGBC:Ztvi N}`=nΛFdGyMlibkСX.ԚBkFbcc#mV] |_%?69a! .v.3m;l˨yygOb)2Js[_ujjf?mVky\W\pYj潳;n-wϒ]OgZI[kaaQ몡JY%KJ24~`$^NSSkʉ*{r{jM档3S GWcWGLO-(*888<}411檄X{{Z3Z;3arxC<]©'/{sw1U? 5Yjo{5&/gD0~J =fےa"\ Žec֙M#ZPT`2ÇrJHH|>ᄄ1BڗL=^bkddbli::'S;.?8*' c+%m!JiSHxȜ_;/;Zk}]zxa1K׉]G>^3LO , gggBTTT /FxbG⯏ _BZv>9< ?IChhhl˭3ȑ#QM2Ip l;hEp Q5}@UQQAQRR222{ig6N\VPYUUյk D(**pB׮]'MA)(( =zz 0qZ-!D}~1wr U4tφɛ$ ^<h6lؠAY,bٮÆ tP(wտsO Fa ֐㾾bbQ3z%\5ݻلǏc3QQQvvv5WY[[FGGK/ ~ ~s-awloyqPq*YX;@(Ғ.`onc#\!%.muutju:wv0qElim/$‰C:l%+H+$;k`KC]ǖ&Q_/p01Mtχw5XdiNO^۷ի}|||||ݵp|DwRRRlll}]6r}+]pADwG qlg[FU8ٴ?ILz+j|%ZgOb)2Js[_ۚn!$m1+e]_uʒK#@2oһCݧ)Y/uV*H+iܖ>Kv=y1}ڌs,e5#> T޽kYyi[˶_Upӛ7o{ /1d/c+VvWΝ;ֳC*OG6kG$.׼&.DrVuB*Gdrd'yJZYC0qGMoGs৓tT5<Ͳ\=T^FS nGYj/~_Zw K,uO=*OiUJ~I,12~piIaZ;Domްᇵk>QTƍ֭$o֙mO.44յdl6E~}bUk>ܥ5(IS#8K>|jl'[bQ9!!GrKڛ-'zp"5XCJϼxdNK+t'ķo,Ę=zhZg2_Za^K7_/,"Y3aɼmJfh;hAnh!%*jkk׺H3Hb,cǦYG:3 (r?-DQZ {k wö^r;4ᓛ~Zl00OB^F3w\㢯&GqٺƄ\_92dAG i+Ǩ ])nTf)~w~>'r_,..NX #m_/є{prڶyb {iz޷r[X-=Eɿ+k5 3 k@5vγ|O:+]{jr R8Ӛ;%JƱ ;(ҝtee{x3ܨĚbcc>h*[h9xJ;kgr|7mͽ3cqmh"y.Fq:YboDg9e-qj+Ia5@R+υUU%Q7{YVPM#|A{noc{_`FnŨΝ|# dƞ8(O^ n IDAT㽰0\W$B 9|ϧ;88hjjB Fd&t3N|k`uU n<b2uUiʪSk1-oOzI>ԢHvUU՝;wNJ-qA X>}qQOAAՕ~h9Zv3  j|/i *=<F```l ,@  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Ē1]``  p8 l\AQQQQQ> B]]]-dQsA(˩S\Qp_6e)~8?48nI|`2X[O_a!*AP^ MjwWl+x)( Kr1c.W22X5䃗BBQE(BBw^ FDΛ۾-[yYp^y%-U5M3MS{~}-֭79#V/|ϋћ TURP )_W)KIagkAH !'`0 ,*JR`٩#_**&`ꔚ[lVc2_۩*ݎΨ2*Rhof%TGS-?d0L%d3X YU!LRwLؗجBL!`R'$U|'x|[c4 ={;SB!ALdc1ޅ&$AmM 5.Y_pdAM;=%Z{r JH`P%_HB2BRT\R-*k};v3ެ%ԌyEκ=DhWUUʯv4$*BUM[J;r&X'FD7$.w}6ףWR2~Y<$м/mH+*?Qb72EbJ@JʸTUM@^|;9{e˰{;W￰/YKNN :+Dh2oUT9uY_)c 6k%C]PU^Nj?~,YTn{.q0Sc*i;o -ɎE;.߉੶yګ+WW_m]GKAc%.߫o%v]zmǭs>n3$&ѿuRyf#LKAZRSB+)USUxqxzڳ?q-7i9۲uǮoo1mƹE&JloNfyO0PM+vL &?铲}s9I{~ޟ|0<>1o7kS9vqIXr 9(/b*+ʷQQd0țr@( `k㫕9nue_8Dݿ;(}3Cz2ikkKk(Wr 9CNmw\G+(HK*7TO xڮLE3e~qQzOr}T{cd>";\! 1MKI_jd:4'!d xNZvoGs৓tTD/yqme^Fs 7S)j tvۨ(sXDP`1DEY y9gcMyf.Vs4X@_o+';I`/7_Rj8SNPfq sVꕼ'D'ܷOd4~nO E[b^QEnV l5RJ!,Ŏ^ܲe65:[LOOOWWWGGǠ^yܧFc!=F|Z~Ed00(RD $!REKY++ի"՞: ;9k׫WiyR (?":mbG)uG @@ %XZ\L(W ųo*UmfiE%q8%rE5Op8yy1Y@H("$'*UQ%s_V*,/)UT*"())1i'.u8J.>HRz~Wt4CTpp(J^]HS:[HԊƽ?%ej. RgN+-.W/z~k{MKw/a^MAJ_m:*; j.}+E _=~<kVp*!_@J B˔[ew'i[5HLtF,ot]"PJUUeXe;8"RƦ~wIow*aT0TiUxqFp [[eY8n}(Jg W#f+ϙ􀃁 +xUWYa(+^%EQ/:~jbm#,(_ʕˎ?t|v}i,x4, `MTӺVZW#<Ĥe]۪6Frh{EMBS;NM]9Wݛ=HO+8ׯT&$\+B踌 vK-IV<ō3 |- 9Ul[ia=lJ ̈́l\MVB(R +R뮥R퐽=֎}=,|¦e^PPt׷r"{y28>"EJ|anB/ 3[˾mܭE6#K~QhyeUl(tT{NZ4ǷT554Q ˍLQEg`˪aw'Yߵcm~nGH) .v&͚~B10#_BtaF$:R[žT3YixΒ"{Z};1>LJ;7/=ۑp eZK >k/m0?vWѺ IQA4!ƒUJuw5DN<]avޟoġe׹êR[x ϐ. \265ErWi+MQÒrP]|Y6((lc}^Z.Y'g >DjڌQWt ul;Pf0zI>ypBYE|ʳħ OP,y?XK㧞m^sqs6=3/A4(VHfx&QAO]. EiL雅7^,>ߥzR~~be>qp/夦,=i=}5/2r\H .{KW^F⓪6û5S 26%h=+Աß%RWբ!+E|W]߲"@G'< u8P]Wg}P]S*$< w|2c !D&a @,n3T H@*R T| ϤT>O2MtiiiaC wѣOP?6h=w~ %JյkpH=gՈX, > b3>PWy5;bҟ*Y?ZO*4z`V=7CbxYU?֡g֝LXHLUnp̡qMZ7w(O2L&%>vw#<5y0>Re VM[u5k'.ݻs:m\|tƠ3n=p޽K|ӳA*go~GV`+hcc Ytuۼ%;)T8vd^W?>.!9J͉-^RṪW]bЀ]=j8J\: Ȳ:5`PϻܭW?FS!jI2>^BOhaoҝ'^sn]zyjc = ;ìn^M5mQDZڳc+F!)YIt[z5e1uy]K!E|s߲A|<| Z/DIX!?Gƞm_}0̮9C~ٍ9"\iiCݰaCZeL:kOtZV>&ouU)#ߟtLBͳ–v""0i]uE>!DuiדJBH^&>loDlRs!,'x\f{OcMi;jMyş- vy[r>*mBZ3kƞ} Z&!D v*?vn}8ׁ:fH~l~7TQ[Fxo˟wKw 8,5ņ/m;wNMFS=g] x%NJΙ7o\M?Kҧ΢ Kjs}g z|ot4wF7ю]&pE)y-yq{mF-b}dhAy~:9MjxMzl?81a4wj#˯!1{qJ[cvkaZ8Y#bQč}Z6py"~;Ҕo[y9 xm;>*mڇVz+pM=:ҶZ[Pp!H {~6\5;xxs!?|>Ktb C'tmnpW߬g7l?n<|I%GlY٩#wlia~ߦOEo^߳y-kT{Z)K/̆K%"RCv7>U:f;Ux(=jm :`BȱO~uBȿ{hz񄮴*تtԟ4eH.bXPW֔ɧx^ģ:6߼C}>ؠÊ-#t}VV2Ŧ`}@&reY!B/V3{毗RB~JhdvRt6:r N휙l8k, !2g͵sF/eYaeӵޞGwJx)'CEgZ8snKWc56Kh;˘ 3r#D}B.:CBfsm$|#oEƹfn{ea Yu~C{{+S.Kߘ\:6ʑ'kj%dAֱ*w*JNfc/l %0f͒9 w(ѽzQ c[[]pJ!$>xM?978R/k%b 9/8w@WZOl =es oʍ6_󪿕Ȭ9I+r|"Cɷ9N1pn/Gt˄KBrwibci/u Ɋ.- Wt.8 Ҹѵ; [57R[KJ[81"y)*_r4?wNz]dC[@k'd/~6[#}@hų칻r96r3J9cH "h.Β_;J{O]e3aqjFvf~]=<&B|ky}BrVG-EsPgק_]>{?"[e2R;sv݃\}{VTf*>S_$+eyvڽG3Y6J׻/ h"-oSYKu4.9rfcA;ͤ\3ZucW?t0Rx"ЉfM»Է?I ]OcV腃Ov5x#+6 7#FdNŧ_>lM 3|ѻl>ͻ]ZutzCW>Isf㫮NvN]=k{:iu5V;B{L^N'uԿಸ] Cg7Z2sԛ[*to1{:WOA>\KGJ>degcc L=$:I̬7i{M B]qoȣ|bPAc'񩥹Ta%z.ylz&65+&i/a۷׾ 9cmu9+`ݫ{l3Z k)WE.7_*9}GQ1śyjh>pœZMױsߺ5]+1E'En6'u'o뻻[۠A+Hx~IROOO}6 !$અ[=M1s5ku {Viw<|h{TTK4R|P]!@ t<x H( * P_n P V'S1XPj;?T֋bp T H@*R T H@*@EON06nҾ H,p%VUZ;]m{X_缧Vn QBFva```U㚎\4%,L 4wbq?=HӸsH:nNv5wpvRĉ }7qw|҂] m{swO4' QQaԇ*m̼q^_xҲI STk;ذ_ykD2rYO$Ĝ<+li'u Js\*vb<%72aQS 5ԼT֟|yѣ\W^0}}waaTNc뮰$XIHR]ɭ{rc׼פ&qWOuA2s[j3o:,e[T*-[@$zdS&z˳yNu4Rr_z՜A Eq Rhj(m/}yra 7S]x.$̊>fLL5k۬D3) 7%Dnmȣ(yFv.ݍȒ+gΜbŊaZ OIru:ho#B9W]O+`9t u|qFN}뮽C/|Rad]K^.F\Vq董,r*7xݣ;hw'iQfVXwaOWUP@7h r< OГ*1r8"V~}\.ձgKm$B|ioR|g MMA\'Ӫ<)DH>lM 8\k ݭʬ kC}w{qsH]M K aY²,Uҍ荾2x5g|ܸsg'hBHj7&8y]\wpH +>6ƽq c㓒?yĻ_΄%}k-ߵ*^@!+h'tSqn"e0]Զw=5aPԭ†w\UL (swJiR ۹#k ZgtƅUJWUwɓɅFM{+kJi@EBd2Yؤa*T*'i; R>j :.!ݪa*Pax Txҿ)1 WH@*R }4RrhD*|LTxG'\A PP]}ڣ* Mk5mĥ=>T 1eԻO=nuߺi*hLpoBB9W]O+`9t eV 7cd4ejeߨYfu$u.~;mH!{Lup !q\KԺTFFdɕ3g$< >wAzRhbU@*o[wǂ*#n=r4b z{;f%<}YZ9Wx"W3ъ/(}$*7,箉Ӈojkgvei4`|BHN*6ΕH.+VwY&7#9!cv&݋uIDATqj;ZOTUoyRޤD%Do'fin-$lok*g??5 tq.&i'}wr)ó\}fϽ{|I|n^ʔӯt{~5E[mFQI84`OoQIU(0i]uE>!DuiדJBH^&}6{\f{OcMi;j2[ ;j"ؤYT*- o7Qg;y$GB;fRƣM=L'q~V"$us'ɉYi%O-{Sj^\OOx~횧\[B2¦ ~L_\O6]ƃm-ziѢ.:44٪FF?%Ñ:{6_{nㅵۯԩo[/lnp;{}Wv:v5-to,muJwr{]wk@sX.[QAb o*JϟZB;żη釵/GBOJ2*eG6kIR|WJ vvvJxnsr~ˮ۬w:kAX}b)!}?M#(le, (jLF=&S !V?龪 !nQ~JД!]k8bC]"@uD.A[=<&B|ky}Br<:n)BM=>R}Z ^ޯ=i6trw9^K6wW]&d;07fc(rUTA!Xy0vQxIT H@*R T H@*R T H@*R T@*R T H@*R T H@*R T H@*RH@*R T H@*R T H@*R T H H@*R T H@*R T H@*R T  T H@*R T c9_``  ڣ!2 bW5 H@*R T Ca>u666BH``oBX# AZZ4,"/Gsf $yɾ{7M*;q-':_Aq8Ƶjle٦GBQ"|h<9iǎ:װ)65LRy?( E䄱#N>P3 aY%,a !0%R7Nڄί9Vp_Y4 L-kZyՊ Ѯmynjf:ۄNF"!Rj0,y)W4R<:۸HظHVIxKQB lfGk;;~q+bSˣ8\gTy^^?PRRޒ0۵R"PEXa!J5YU(UO> Rݰ"NA1 EC8.*Eqmd,h?uƮrsv;'cвd[OW(#)E,˰D!jSlAZ/ߴhXǫ7𪆷3/k~:R*TFG:) 7%E@b_D-nvN܆4@qY3Gu~]Jh(i`9]@U7;pjt|t??Cͼ{1rGq Pi^ D !eYZc&,mb[uSߛ2",aY<0ݢU=^7˦5qp96MX7H35'14`xW>Ui}{;K]j}9;$BH?tj^vcC^з}G{{'-إ`IΚYX BB|g[XXuWo=1d~ܠusrtOW'qm4m]o__|+"oϭ|a|[Gmr712r9ͿCw9K]tLD#e5rrM7)SUmdeV=pUkt2/=ji& _x>^lnE_3ׄ|g^[=kɓXuvkI%QMg,b#׺G{OSѭmnɹ.f~p8BHz]"97X~3F2}o18~m)@dccS<Qu{ IK).)likmVY@ tLDLFYZ*523|.*7;ɃdcnٷOU{sODINnݓ#kRU5uyP[CKk kjqJ%~f*˲9HDٿk+cClG{2hvMUa0[Ե_=O[fdrgX`y(X[ hWu7oוK~mR/brm\~7:ٴ>|hT۷O!g>y:A"={ҩS]{k~~Ѽác5oS`Y!;Ǧ.~Ok3HSu5t_Gˇ~#3H8Wb֭u1'CdSa8,U#zXeYBD\kqbrAF"A}VYK&l=qۡ+JŲ, áJ2?!R*F<~bf$1/JI("TpK+/NJpk/X@4;#C 1!*%TR|>G(d27&+eFѣcvvv@ ZRT*Ffee1 S4 |> +RLT(6m2xJ 0L\9R1* K-(߹PT@sH.5W\.-:)R300ppp* 3gϖxqqF9&&r[[V `􊦂P(+ji5Sh)RJ2//O.k (BP$" tОBBa#R@`aaRϊ0T TszPhȑs ހT H@*R T|Xt<(O7 $f!, IENDB`liferea-1.12.7/doc/html/help_feed_prop_general_1.6.0.png000066400000000000000000000545101352135647700226440ustar00rootroot00000000000000PNG  IHDRg}sRGB pHYs!3tIME,*tEXtCommentCreated with GIMPW IDATxg@SWA"Z*XF[guI=REkZPālD 2dx?DC "~0{sIsW!!2 21_W;V!efUaDf) 𵕬}YmV P|dZ.M[{otQ!\]VUw9!?ix\ny93.R7j^QE-c:T{)3*J? Ͷ6FkE^ ΃LH%m7{!Wnh8oɬ0Hr/CHmיy񒮦ZczudFdz[UTORSTmM]Fn٣15RGjXh)u*[u?.*~nUU^^Fy{?q!k>?.z]t1R%95[3JHM^peW#^V6qPì =iОIPPWH1w:%wyf-mEujYkMq6Y7z==9y<Sˬ O# rei.!56ˬyͩCth7 kXnd: I(8PCZ`i6p^Vbs8)لyeu\B._5eil+Q:!ĦD&BVK %7qrOHͯ/Iͯ8}/势H p,F)oPNQ6R5nVUW\/uspρ {oBm^& $(uWB*Lcןy!Ri]TW !U%1ꡠbSBKIfBH-sNZ^ WͺS+|-MaE-}E%QqY'sUd޹v-5-4}YAY^xեo\s?̼AlDC&9pXcm,,)x;'BOJEpպQ6SFXt1Ohz(+;h"qU>!dǥ__R"@{E"QRQJ}j} _5\; ٯ[l_4 |Fa0 YYYYYZI[CCv200 bYRXX~^ھ}˨hM>N8;D _ϯ$$$ TDn4 Y t: 9uIw7骭g޳OsֶںE_Lھ쨠h3H\sa ׬Ҹ))|޹mS' |ؖe܍iy2],?u]lc±]5ҲFNMO~rˤ޹B)gM.-;+Kʫ 6drt:_۾sr0j6cUbE8[ڻ&!<'{nj K69ٳqTmi}.KвǷxϞDI!>9hRqVط;z+>x̬7'r[_0IZ2#7q'g_P@q2`ɞg)٩ϼ3ϼ(feEFJJv?ǯK0qmg(NKÏ>jH=yK^:޽l +$ÌFRizwYS&ZNB~S-غspp[>/ůL۵ad7/Zlg^_6㑗[Wmw? [+5}NM>=6]8|_X&Ehm,**6Ռ>Į0')V_pmHwұ?~Km(+j0ks@qvqX])Edw̕eTy>)feͮZ@ҏ~x`o7sũs}c!vN^sᏢ/ۨNѳ}%p谿v=ɚ8LgDI%,<WFa0M/^h=U+xjqh{4TAA>oPoS_^fTbIU-!0mS~c0fݭz߉Cv8\ 5_bmm'Ty\]׼-Un]ON]*eU6::wurrr>~'HIƩs R4ߓWcd?~ob֌[sx+;0mm4#C;.e7"6!Fn߉qnC̷ĕ٫.o#ľg/B|3tYg^QiGBIUAEg6nkgtKxb~n`slCyiJYv藍Qˤkلy{;"19+V:}O5BȵbfIgL= Yd;7ycTgy-Ie"%oʪ7dm5%w.iyDTNN1m;UnOE+ڻi^Yߤ" oNg1B29h,fGg26u/:mc:T_5XlB6{RD&jEEEfG5?+,^`5yzdyzU+V9 GH!9'%jEsWWB"v[54!'aG%طr'91;kASiwdMWۓ7ƿ&7y+&[Fa|b}G_N\޳yъ8Q;I)^)9;olםOW{jVl#;Oe(꿐_i0R4Rw__M IM B3]&ˏ~FV&z]y١Vb<#L qj'/tu{?QW {[RKRNnK% 6A7Wڊ?澭k:{gn>xkO_հ8%I[>o=y'âj,fGaSęumKZrs$%ڮÖkY7*eߐ? Vn^>sGa=͛^Bn!v"82{}d')Y6(ZMf4nRMڄ(4%i+HQWG"+/+o@=d@Vd@VdWdff...MQi  + + + + + + +|:N1-=8?1LxۭVk % <Ȣ$OΘf1ͻi2ngH1>C,tu{~3&ғ#'\ -}8NkjjXMY5?'6 ﮫo7;;'6.TGW˩eb @(f_qK꾽e_upsi懯s]3>^BOj~yZ9緍ٗKGh#DFVAW Y8Mpap^%!dGoyiʧB~XAZ*x׽lvmqNJYS`mojquuq➠Hw t%Bȶ;u{\)U]c[ht_]ݮO=vj;mcfAK(N=.A< ;8mU??Ewڣ A_z -MCքa@||iY}:u*ز \=xl1mK t:SG8|+H7ڹیNBmSב\.6=4q~n-%dYwuD#L-BJIIi;iUE롦,]UɌNט:gp 惧i,i,tGYj+KWU2$^~Q/!hMmB#1>1wOzz~.,ʽ-Goe]?sŽUyzW9xldϳg^g^-}~FswF v><#Ŗj~8dxsе)ݹtܦ+%4;tMrL=t ϳQo/vճ[qh:(յOu5cxn/׷6P א-_pmHwұ?Ԛ&{p[99^Ị̈hlQ+mx]?se9iqOvXSOUZj2vYPᵸ\|VWV߸e+2z^QQp8o/}IϩjDXFRQ--.*;&7ϲ}L=3=y=:vKSp޼=g? uI}e GI5Y̨2į"B>•תL{GNOu~M7Kj ! !NJiB^늚 MJ [Oieo*9Oe_V-$DShW{h** zu쨺f:vRKj+-]e!Pl.ym(/-Qt2þϜ)npU1kN:LA}iV$S+b wKme}]5YTP,8_L1!%\Ajyӵ7͓h+BlhSg$VT]8ZKGi=ق*HYQ%EzT]\qX;iHa|VܩCfmMI 4_[VX6R&m\eiM-qcލ,9pӧH'6 7ǮYS?>7]m] ?\!&gnoy`Wtݔ%[jټ:ElUOKǠq;Cŏ0)#:x7y ֌>{outO=eun6+)%+Q?)bJVZ@ ~BzYDGV@Q(,,@q y6WGRЭ* !z)ML;ArYtMẎBdwFّc!4 ./OSiZJN]MJ ? 3)ã"o}vMQRש=d⍍Iwzd /-Q"+|;!2?22!UU%SFZjij5ux`QMȩ xv7]K)#iR]!\N4"jq9_ϥBϭfrZRD}hWdhWmv'[e3 r !\.WyB rlK  ~X)8݄]q)[G(Gy𶖿!D7cT;/c|b:q]n6<;wfzVc$x^ӶŮ~e%Ww&|$4-+-[e=R2SygLyw~%荴NQ 5pD/gĜ>AS$- z8z7`0֘1[SZ Ef3@~' `Ŋ222XV]QQvD:??y =`SY MMT⽬Jf,;Vgcߺ^#S invGskkg2o2[pߣф'+zd҉BB4XBQsUݗV&ďˬ~Φ}H^fTbIU-!Dh|(z#5RD;b)fS!DF5DnZUje%i|q2 )))B ; .,-- 5e.&;jOr_o9Kg0|Nmr n*,$)r9ͨNHܧ; m;buͲ;AV:\{ׄקhQqRqBB!dηݻtP m.t!񦦦B7].<+@AuE+wE=;5ʛ5Մ.S_}u:'֯OQ}oNE7MM'jګW6cۃbsm.--tRϞ='MJ).. ;vlǎ<ygkfm6O+m%w$e]~=2pnܸb@ssڵ#G6LCCCFFFFFN9ʕ+GԶ}1:`#8#y/999Ob@mcccaaѸ:&&F:_^?NOGĪς '8Eс-tu-=Кo.8agl;vhqsC]m^NE t6K/>/U D{Oq53:}q|E` ;+4m@GKیULo]ڄN#8b;C,S!:Z:C 7$8#X<ݺ:/iWqwwWWxH_>\БC=~14MtСC'B");v^ܭS.3J_Ԍ@+(*****jן vG̭-uʕę !e\RE[N[^?b]z왨^z9Mz –̄+V͛'0/&&i**ղ[EkldT$m2wx@tBRz*6͟o\:f#uImkZp NQ9"}97DYQOW/'&dQ0*ʬfӸ]֦ g e~榋}HhP~#+UI{ݼ býnXRUKwA!2uͨU]%v2"W[/S-NCy.U?1ݗV&'Ф;r8FJ5{Ninkf=!gOҬ5 5^]qr)}㱃"*J_H+(HIeg5E=*z=l읆2}Tz͖<`:t(+2ZZZ3f`-{e;;ϟ7.JJJE^a\*eE\dG<݈bqX1 |cKصѷu<+ǶM7gf"_Ա3b-)Nj5'KU KEJ1#VG2YWȞxc%;-p"!u_śO |?GFo]g~vQe\.0޽5$3Y\.q{*9{^jva a12ӤuZ#G411b0\nk~+HRRRF222!IIIcǎ,cu_qZm/L)8k&t졳rUݗ _Ѹó},Nfu;S,u]QU!k6٨u}wo%)yӗ!Njٳz;ZkkW Yd7{Vv2~osMw2 Jcj^b+r_(1N2֮:;^W}~z97Ϸ~[YYnll|SUUEQRRׯgښv">#kkkiӦBy >uvc ̀$ڵ ]INNŅ%u Wwp8C_Z* +@Ҧ`>ZD`` |o/@k?da +:qf@Vd@Vd@Vd@Vdt>wlvdddvvvuu5!DAAA__BgΏeR"Q6L\^\Ղ|.7.]ٳITUU !111AAAcǎرջ:w2w;ce>mڼ>QK~aWY5p8k׮9B⢯ʕI&II |rٵy A y/ds'fT]j) @+DGG> kk똘hrZGN=pd֥E]7RGKacY_۾sr0j6cUbE]{NS/Y;RW[ys` lok0dsiv8NT /dcbgLWh$ Y 7NH_[ϰ޿cWrŌH:.Sqt`K=^ouCOGy͈`H/PWۼSQ},j`4]?JZMWT& ;&BjjRkk디q-:=Wm]==;ߩKdם'i_ˌg7ѣp1 =z4}gGBӲn2;w~%荴N1ǖKx̬7'r[Pkȩ;KY{?ad Ma l8 `Ŋ*͛7q+VC~kBu7kxE 'W x馮+bդydFx}R&5c6B=/JdGHMFdQ跧[5j;)+HJJJ%%%JKKKE=$TU(g8 k n*,$)r9BWcs켼QP"Qyv;SA>E$Eb!B)#b}L=w YtO JMMMXpӋjR~}LFc(R~-p'YtUtj}"5>(Jw`NޅtܓbnDNAq΢ 5zeH((F@Ѡ]ȩF&k*N*ƴn]tPF3*~5K7+=qQRRR||mUpX#IDAT^ ^n'xd8̘P GFo]"~`*'=[i>g͉&|}kr#nf8//ʌ p5LՃe}EŰ+lQLV]۸%\SV^ -cזG߾&׹?PQ QA1 S/-33`Œ /kۖGGP|'N~3}ԻӎƏ]|YAJJjԨQׯ_ e0,b1ѣGy^}O޵?>/+wrs]]c=l9u452g=ۯs/Ӊ{ Zf3U_GlU!Cuyu3{p?,oynܽfӋr0504[wjA"l~Kztg}H{קb ao叜zgOk.'VM66?n):z2'7;eA[ٞAaX>ɩ"())ǿxB>::h,>v ̀$R]3/%g_3rڈvvH>|Ituh /~_YYYYYYYYYYYYYYY t:E_עfj"دOGQkvvf-ɴhV}-L /_-:ނC[ +|Zoq}6]Rj;/l>F ^Ws+d\8qxw#}m=>{i|xrt:Wu1`I&_(:pÐG`tGqֵpp-Uc|b:q]n֤(ʽ-Goe]?sŽBfğe8ewrl bˊK?"-߻N/> +1ϼ5m[JWN]r%c%*}q2`ɞg)٩ϼ3ϼ(6=i&;BlŌH`0֘1,//x lL41Oc544 [WtzL7uKVMш+hdT&&i*^U%tZvhlӵMN{`tݗ?d?uFFGۨ`P̱5TR'\נMCN]蜌! :$&H̩עimdt:؋Qj W ⭶w{g„Oi?n+ff7x8׾6}9[(SWx2x9!h4&UQft6[DȞƕS%*FB6R7_JUP̱5ӹބ4 cEp拏nF%TBDMEwČS^KfWwhmR˴z\>\mcLD;5оȴǠG^z/,;va`\0=P^Z"n CkBIJ \ƪξmVŬ;w2Z弹new&uӯCt}jpiZgh둂E+wE=;kӵ7͓h% _WOlɚJ% %ƫ+O.|OQ}DcE_`Nޅtܓjү,KfU!64[Dԛ A bZfB|$ZcO?@ [Z]Ǯ-}Ms{w?p9ɪ~q{cE {w#6aeƄzN8,i0ͳbox{l[t{fLq!eM8#vے EU7~޺jcEj #,v򗯴QDv b5vݟg9aSo.j(#*1kvͭ'r2x^m 25ڽ7R~yQGV9-;o5`EC}CV=T_`NI̩e>s]uY;TFrbdc2{g@(*t0r?kNJ{F7^b(bynܽf<{_^&:7 ls;hj6ޝQo.j(#*1kq|LͫY으bѪ&Zg| :0Am  N`YYYYYY@|ns``  '@Vd@Vd@Vd@Vd@Vdh 2NCC@ tqqiNcdxw _B (\.rڴi8W@֔++H_O_ĪfҤ:w_m@ȑF!+W]UKj;v[QS]eu$6<{{:jGƱ8rK29%uQG͔.#$\VAI]izLr䠁͚9t9f|gey6UmNejj̔6]ܪ"CѤy˭~as92]޽GQ}\vv7m7 ¥ HԢ6`&W[ Z/(-‹+0-r K&B6lvw1I Z|?ff͙=c9nӓb ?b # IŻp}W-*6L+x D"HDID"mQmI;ΫX?VRA @AP*AU`* ÝZRwŧٵ a "i URʦN)5n\2{9I>yP6<# mI 3@c2ht VzphND{bϬhkǰ9oT@pW0Xxq Ayyyե*kv\'ON?wpnVY^~ -;D߮%'ABK[ƜW@p_Vܷ}U#GNm؅{ݿ{߷! LsYb2M s!&Nb\EXiX}`bn:Եd.⌁v(c[ZOrpĻz$%̛~̫v/K>bpr|\bj֘ulGɪQ7$سnO]F LӔj<_새 ?Y%ȝV. 0kv=f;b,na?1fz#G 8}LeN1-KyC޴:'1bh8xMlj埾јKh?.Y|ކL5IqWR<<'{> e;>KkM|5׿$ݿbk IX9'̼^zŋ] 7{؍}㾮fFH "(HIC !Q9 >[c>;uZk[RW&p!NxaH#Ո2%"DE)e`ZNTTT<$uΦqGkC}ԆΞ:yzLQߤN&S{+xv`n_8(3c6;f}GUZZz9S9yqlswj6y $" KHD",A-Jgb-,jOONFJkSn=пꎢI}^)--Ͽj$z@M,,24\,#- 4j Q4_ڜꮬDWWvn46ꯋ3G^FwVNnl wW 7uG Wյq"D8PqqJ99HP5A?(¿Z'b* ԓEr䒁Q/r–G1(K+U98Qei TnR;?7ޡZ<9PTU:Nv]+Jp`*Aʂ9VsW7Z-mjk@Q -ɶFvsXFww_9y80BT8KJ{$h[wIYZ!oVҳ">\ljo>GSK  xk6^w`3Zx{j2Λt츷 ZrFVdkS)c$DK IldYYv]>dO{Φ/0B?l1` bVY7\1\!gdEo L&[5]x/ʛ_.qK=ۊ~}(Sok3r֏{hAG@,3}ckN{O9Wm۵Y'1LȨ7nguP/kv_jlfRϯp.ڴ׬HmgXxGU֟:Lm_! ݿ~)>POfC]uVsZ}gDzzZs5[hC=U9cDD<^ )o\G;Na]o]huq?t--nس;f|]b*X_3hMO/>b}:,!?I8r=~)VU Mq?,/rvnmw={㍙#g}3H77>Fnkĝ@tLLsDYO*;J|V }[O܆U~1jЂ5-]:?cz3c-mL=sf1ztÀn]Wg!FyѣusArw |)SJK!F5ԃ }(DE3Yi bRQ~RcZqCS"5%͍7̅(JA P6̛״eK-slUP<$,( gp[<`8iRUSnbujɡE,˲0 ]S!tUtg`0 mZ7T!C$yTd:1z!;Ƙ繨P@L@j\T$(]ߣSd2%$$g;РVTHO\-aa>MKJ2EG[-j Vk*(b0XM(R}ء3?#T@3 `飁@ @eYQj61 CELj!22K.9* T@!tx !m޼z]~~>!~7cSs YۗgBRs 􀅁֍vY7ڥWYa(~T/XE[[@CZP,-,!6I0 'x&\X6 |/bזw曀jnoTsm_()\ڱMG:mf"@͊ e^ dTcJWXBR"|..SA\*RָW}s-NQ~H|"WMWs#5-UVI06)QDzHj$WMG*+/k oA*@lM)_tʯ/mAg+=U.a3&I(jnVzB^QP @8f|GO+KG3F^/~IhidhcSc1م^$]}W(luWPPNj [odT5G„Ȕ!875ҠR\o9K{4^o3&++5*iTKZ.6 M5tx: OUdIa遨(sU5}B! ĿhGt&ħMЄֵ؄9"yeOT U϶\B(Xj zQ 6!d䐆TkUid).P?c  *0vЖMsn;ÈccA#_5uV.|_71r4Uz|= G _'VJUK&!L~np_\v84K|+.so>WrB3̑Q)Ҕ#7ciQX<0"遆(M%[\TzZXVar-Q|1!6K^P\?2@+y,Un^ #x(`򗒔 ztr%w==:Y訨)]!!$]镐G4!&Eijiu7-_B&|Έ!4I\wf:,F(+ !GדhڽNU6Eijwni[Wi!SxnNݖ};̱2SҤe=].44xֆ+NP(.P E JĻieyN Es}㶮Ub|! ѼVMW4e2 >G+SHzhw{ZIO{ި/: * * * * *a j;KQf[HOOGnÿH~nnݺu8 B^xQ{ؠA55t@7}@TD@T8*899)^e_:]&ul9?+JꇙUPM|{22.HolҬQ=ծ}>>a[NͯonP|Z? 9=٧S#lΩ]׾C=sSS&۝+0tI=62sk=wlnRjɵSjly^wn]ԡCnK|~r)|>-l$)ش]?nqq[v榦6M'-9$e˹{gܺˎCXX۰gO;;_Y'f~WWND4K=-uUGU״nCq+ťEs7,ptrr 9st]ݚ1myDHn[ѡsÆ%=[6quntdJPF_aVkCg$Y3lxeޑ);Kg\|ut3xKIתOE?r"rcOPޟ6tȮ$"7沣Ay{Aݛ4rnչƓ5 Xy.YbZ2-ҤXDTbqu:[}8hiփc>uqviucRlK6_FJ+[4KF΍vsTSFyRai Y^wVD+O# *Tف=aPBƳdAo4=b=xQ yNnVu9!-rI1 NP;׍[ھl}0W+q'uwQ}1mV徳5$ov` T8u\foNڳԦ.uU9lmS9"/[]I3/edG#O+}fo(¾5!ͳa%X4O"Uawpq|L-7lҢΑ $M- ~xBVhí'tU%Y8Cݪtt,Zb$^iРAo(zpzHxċ{{!I\.kj$%2Q4s[SGqI#cgfKSbȮ,sN0ïUgQtq\v.Ǣʏ{ nJ dއ,軸3c$+:R!uƍvU-j-4!dif;gڕ62 ^_@ ^sփ}kǜ{IHˍۚF<;atDq5sά#ʎغ2(M"4y`Yy`#$G/xқ¼NJ^Hҕ;٪(K|Jp7#sJ!UJEצpބBb-o=kTq9*u٤ n &*[vfSEBXsׄg-lW~4ΤiWXo8W;]HM0?d{ND0P)ёhێdv%d!z/ѳ/~aqgOZɎ(._r}%kXJOydʛh }٧Gvڪ FKS$@ 虹j%l׏Q0xjb'Ɵ6yM$W=ȭj$q"+^ 2.+H}SxwC2#L4Hb|ۮ> (?B4los:oM)iO .UnSjjOd5ۓB.uoو~+k}] L SA} q}1.8`h~JUU~)Fw6dQ hg2Ĵ(3yMdM]cq!q"Z8n+If;Yp0!K@o/{)ɛG8b836t)^A0[ ,oWU fvEL]qb sҟ:']aϯ7v((8X,zԫ_*UUg錘' mSrj} LM-btyCf:Ģ fa!uD٘ZO^ƭq?8ҼE&$n3pƶ\rSA;WheqX*j౨Q?bspDd/wHˑ&3}hqkIy8;Iu?ߗbZv7VQauO.ydk;BH6gֶJ-=6Fx҇MWxRV >,oWU(_8揿%(mGk>rp٭kv,gTQnlЯ+-Vڽ`Ɯ?zg2uY7Ixzrj;nɿ㖔Oj::tiLʜ7߮w=\ 1o=@keۼLby 'I77ϊeKU70*Ѷ&O8 !KrV7sj{w_7]ܗo~nm۞l*Խ?"tx{BIaww*BAw{mX6s<myOťO؇Mj' >Tmy+pΏg&Aҷ|>>BTD@TD@T“55=PmWZվ[>  * * * * * *g|>Sqx /[}gEJ-m]#S[W.auT.a;f.p!ٽ Po}):176lҡ_թY_{g !z4RWai:t۩{+D_7{k+ 3S󺭺yN\lSuiiea&Mω6&έ=6|d~ިY- rZ9?^ed/<5hЄҩ۰|NK+) GL~ꨠ8ᑿo/)=iuؾk<:LIeo`ݤ$aTب¾ՃmnVqҺ#_y]GI.~+k:"j5/I}qo dUcz3NT/؄ߐfu:O\L/6#D@TD@TD@TD@T/!_cJo;$ (ʅ]wn~oS#R/J(5 Uv|Lz_ܠ87)U~PFDa$OHH(**"x< ͛s8\AZx5)N\6KS׼Mѻ} .ԡq}[fp162D\޿cf&v.;PIm}ڹ86䐀fi U<Ǖ4:QϿgaf&f;. ӪS ;;OSSsȐ!f͚5k֐!C444=[ ѓ026sj6z2'Oeبqb+̊5|ml߀!kML;r#4%5zgwfb:VZ2u㩨WXDn OǂzI^[tn<!dĆ gN~^ORO84߽{Ν;r8ݻw~E? )---%13{ ՝س]phɡKfNiSZǟ.tԓ,fv,z4{Ǔ/r&-v/Sr7kC%ug$D_U[Zc {{M!ħy=!C|׍ղ^-s,~>ԓ'OڵkW"/>I &8hla]~](J% UXQ6^(hd<_l2Cv._߹%Y3Jԩ?(2evI?R0Q:RgX ,|dmfV1i:!$fPýW= Rv\>ETT#!ⓤ D/>I"899yKC^E?vREצpބBb-o=kTq)%p N3ALBmUymX`a~ NHuBbsdbs57QpkA)(-6l z kT->`f0~j"Y9[I >d\W#L4Hv\由{Wlc|ZIӷx~M?T-n66mЬy·Ӣăo%diQf«)ɚCD(.$p==WNdv`B _3S^7?pBqfli%S|qa@$,y~œm2Z7^3e [%Yavfbyxx;w.66UOO IDATާOِS=+:>2s0Xɫ˚JzHw\| QAY|>?Z*߱ZZZ<8qDaa!!D]]S7^9yf?_.1QwpMӪU*ųO *+TW~p)M@TRHT  * * * *׃6hDlR+} < IOgs^Nj#|UQ 1^g͚%﮲P(gY?OHdSn8ǩnO:I3_xyDH^G".I61w>âyɉ_M-̰{OWq=y,QqUׄ.VܣO:J—ٵیU^j|> @NgMӕ.ԟ^qF(9B*&2baFV+J5]s>olf/n. j]0SBzVo BTIճfgg{]WLFQUbs:YRYge-1:ՔO“SRB;Qʰ~ⅼܰ0[[ oY/o~j"9[}%o@MCl2P}ۛ/rvD(W^  sqqpCG[E iF>9Hr.{8- 7pOϕӾF:~_ 7e6n]ж lXiii"H$ٳ+BXԍ=s]3[V64Uhef:Ģ fa5ڿO܎ uZ7WM:99_;YZvaa_AyD"у !fff?7^'P$GjӪU+ r'!}@TD@TD@TD@TDzfΟ?Aիر#ڵk_@\AD@TD@Tq;w?~|?v؝;wD"wlpM7zv~ZZZw?0Lˇ^/bs L,3G'*l䭉iݻ|-,,.^8d D\>ޣ -)Ӏz߫=@M 5IpplHONN quuU[{yuByA{i5vi::ޙMNj%h5m7 QϼbG:JתOE?r"rck*+:WXaVQʣs\3ake:Nߊߢq ՞r_&~imVa8WE %*~U*_ږ?/;!k}'ǸynC>8B_[MOB*>3=w4R':=qYr Uұ]25430456|xvE#,չ~N]B$\:t1֐GhL{Z0r(0DvNg=ctO/hB!hJ#G݊ܞ3}ٕ/ K!Uɹ2wX$bӲn1>&&>}7!W-p0R#KI0arWi@iZ(sL@uu,CC s=4F %=Fpu[;S}-6#[~~ yP[Xױ&Du=!4CVnCuRi&~ⅼܰ0[[[K맯-2[UMO#M7K2"IHFh,Ʌ/|`ސ..FoyPx}ةs/.NQyTa _zUhxxXXM]cq!q"Z8n+I&o#еӺKһ:~_ 7ߚ/ҩ)^A0[ }Iݤ$˥Kܕ RE -*NO|w+Dəb?$ݘ O/`>͊&{gB_ $,ܹszzz>}(BJ[=˯'SgYaQ^fӼ$k؍Zϯ'ԝel{/2pysM,5j=zN5TU7ڡ/>VX"VU6k۷$KmPW{Oo?)8z.l` }[߹=PE]ޭ-[$dCRaE%hhh=:DT\"Y^-Ji\ [a::ޙMNj%?ZkUԍ^9`Q 3b1}(#CvQax/x_&ȻT6zwYdޫE'넯h94n1Hkt]8p~|%!N?.<<4lE G ^K.<~O{z*F;1MWZ`~)JRE8_y/ȿwȲފ1㩭vdB2|WSW°}UXm(g|f}A:oāBB*]0==K{ֻ˴-994pỉ!vJS|qz7ede]fc|Q+SX㌄eJb(TZa?C5ɢHBT.ɒ:Q~KFؼ*\ qj\~QuuKmQ:!cBYWMnK9\K30ze4h%IW;H߇̩=?/i JGqe%o|SPo*+ʙZ*?6<U9üi]f*\LA]UB$j~9SaQU$Մ2m Rf5>}!$m!/=NT_|QnkS'qɺioeF47Ət9eτ̌siJ4ERSSė e^GQ!](60,(f-fUXcO>/k_)74-&r艬CzlֲS7'sMI9ҥepoFl#m.;Hq?YْJhF3(.L䍏y REΗl.F4FW:섐{7ptƩwԩF(iCEy2*|'SUtmzhźaP/*#r N3ALBrrrJJJjjjZZZ _LB{1!̢xFD"XL40cSw__Լ=/Wqzۨh?RJ(_U슪+vBHVJ KU+\QNeI¼ǒm̖fDnU'N f 2.+H}Sxf&o$ɡ(EBW ^h mF/(5\+ Sۭ9 &._}C PGfרpMW㣠*UTQF Qfؓo,龾IU]LOThg2Ĵ(3yMdM]cq!q"Z8n+If;Yp0!K@o/{)ɛG8b836t)^A0[ [*5w1Or\ _ks[\L\~Sv dM aҾ{u^pB4-[qSw7tmZ7咴{qc_-ꛫٺ]Z߽*ëТ#7YJwqȑ ,*L[cmUzѹ"!ʦul[VXHA!4b\ݷMCmհMK.ISͫeجXa䍏2VJap]ZڌMW$}VODMжL/KUBup%!ʬF3HPUw?6rw 6.~cIgx__߬"wa@ⷸ6zӨt1#J|ycRyg.~~};3 q,@7xbWwLm{:k5*zpf"W|^!D!A@TBQ $@TD@TD@TD@TD@TBoƜ^̾l nx$/K޷;_]a"TjsCW~Qp |#<!~+Hy1W&Zļvӎ fE\֧cIK 863kv[{uh`jlи۲owƖuz2_(*zeU5SDKWE^_2^Rʟ Fe.Ie6UɖBu1۸ZwyT»z8[hUU!S7zEozgwfbIzkCg$Y3lxVC7O9J_Ap~ǒOPoGqK~wFhJjHUUsUx +_@M~SON*9|P[fn6χK/:HZfEdeq[Ӆzna>ϓd-%'N{<,ۈ^-ޮ _AK|qzE담*)?a@/t8q[=viܴMG{S I\뙄0PTgHGS 9O?QcNEM,Jj]0bL/q&TJt5%]tysZ9o9 ҷcQ`y}ͥ'7P{vЖܑ &!999%%%555---55EJοصVv5Yp!&]WbS+S|N>-Do.oBlJ^~n7颹s1Sfo=?$0X~#=7W𞺟ڶlbNV5~xWVBVmJ-QЗl8%YRQUDsv+qdaEop$gof %yUtZHҧzlHX΅9ۖ/|Q<}?X(Ό ];$} Ѣq\9ҮiOjGy4ä)r3H d?6,D"ȃLD@TD@TD@TD@TD@TD@TD@TD@TD@TD@TD@TD@TDD@TD@TD@TD@TD@TD@TD@TD@TD@TD@TD@TD@TD@T@TD@TD@TD@TD@TD@TD@TD@TD@TD@Tz~~~,EIKK@$QQQQQ[`j:CCC !ݽL"H(w ?t < ^> U $KӧAA9  (KZy Vݻ!*OA\X9,kZ=i r2Bo\۶< '8{'r"& 0! !}:QfPӦGSX*%iHlggbyMkEGcĪD$w]Y:OUP" -NATTPOg'K:L\$SE8MQ,BsZ:?YRW74V蔜|-<WBS"R,:Xgbqqcm k^>X,ŦXeq,6b)VIԍ└jؗj;a 7X!D IDAT(04C4)1B1#1!ާATnzjZDA4EEX,b6* ,bB&ᝆjms'/eZ3s  SK;g 9RD\z$(ahh"4+$a\ꛛwi5q%yٯϴc=Drǯի3'a !Dc1uDOWuh+:v=Y7$dtoq&rဨĈ+v}q`6EŢ{o˞5T0 %I<:@av/vֻwlw(o~r._K�f/ |SWO#0 20Ok"F\ː"˱1O0),d s>-*|=eg|ژYjZn=z[`J[?jĨ!Jn߲h[&?x!$RYw=xmaҋ$# !VZ}V ,iڒ}0I]~~֍쭌$;A)6QU9,5U*EBuر7b╁ef;ȌҔ{ӧ]{)@dhh({~^L g#Il.Pl.12kǔS*☈iib#1b!hhxe(+ ɚo $ _IDVݒ_BZ;|!FEaዺ3JJSp ;SA:y3~]ZhT8DCp(.p9DCqٔ*p9HæħXrҪH`gf 6YdDY''FH?}u秗uÇ+s#+NJt -&""JM}$$0%yGRR"b sr(.vu|HN% j]0Sє:?ȬNa;ˏ|٫pcҋB(bB DL3"0 C8lVP®RE}^n;#nP$ l8X4Ci:ϱz+fF84j=t.I>PwVu {Hm3n(`ͦys=I01s$m#]79Rר);`67ݷ2sbC3de֡(f__gnsIZƤkisNVg?wNL}3n$O3Hovhoj-#y1X>|mc Cӄ,Su,52fW}x Nߎnv Z;F \acc5gN̖6:y9EhC|E0 COmOLPsjX&$(ꝥjB=CI PX,>"*jO^G[73a PSbi껤|nXf<4M>ت6gץl6UQ' T ?vDCP氈))\*CwmQmr #joq.m!(9.H)RH"i4"i4Bf˥f6ai8t1m1ZktJ.OOM`pTm-LNN-˲{.KM30v$RɛS {5|`ww?"I QEQNj"Iaz*cDj9ߪ]?R`Hiu^𫁪30Fvk^g{ ʃL&F߮*^=eC O=lV+8 ^ t<^ ^ /,{[yIENDB`liferea-1.12.7/doc/html/help_folder.png000066400000000000000000000006151352135647700177320ustar00rootroot00000000000000PNG  IHDRaTIDAT8˥NAYV4v$'ЂG0L)l,@k4KT*c0I؝bvIdI9{.,xL|}A>/*kZxn}<r<e<:=a]jvP\%?TU&!/&@vEis(4@ա"0 DQ@e(ϛ(T-Jt"EDV佢".~aV9Q,@ .D\~ Ok}:-߁18;NS&$t$yO@Ϲ?kNƨK;:7O*o hKtIENDB`liferea-1.12.7/doc/html/help_item_flag.png000066400000000000000000000010011352135647700203740ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  ~tIME8>tEXtCommentCreated with The GIMP (c) 2003 Jakub 'jimmac' Steiner'3XDIDATxݒMKQ8$\Fm$" DR''ZjQmE MAՙMAݜ{>{ Q1 f/R>Wb:ATp iqT>e`wĀJumO-|Rzw4)q푰2t 5"$p&iq; 5dz  ?UzwaN}v65,v 9:܇ L p $B<66hIJ zb٨^/mWGXIENDB`liferea-1.12.7/doc/html/help_item_unread.png000066400000000000000000000006431352135647700207540ustar00rootroot00000000000000PNG  IHDRa pHYs  ~tIME  )>ͩ>tEXtCommentCreated with The GIMP (c) 2003 Jakub 'jimmac' Steiner'3XIDATxڥ1r0Ef8J]s$ 83vrtZU>..u#$V_/iWxPV54 <1c6xdY6A'л` P@2@.&I@UUdVy/}~N'W 2Hqr>SMpsR^_@R}XDA1Qڵ~۷qR-vK`Ιc`yTc(CDtIENDB`liferea-1.12.7/doc/html/help_opml.png000066400000000000000000000014311352135647700174230ustar00rootroot00000000000000PNG  IHDRaIDAT8MKlUwg&(}HqjP(ZHj`#BPm{₍d4QQkV l( %h )-$PFJN;|=.A\;{Gv|3.tE^ Ź(&ɚ#}B;t>;8+O,hB $7)j ^P7.Yx k_aWj2M 0N,@LyƁ*M W{;n+"B1¹|{eYO Pu;[=7>C=hOٶu,l †5I:[SqyrK <맋ܝɳg:Q`8ڂ] PPچ(J^-/^Bks s\ʡVHӿ'};Ԍ[O(!T5 !x 6w+UUU/@r3x+U˹O>DhBt#g?tL04Sy)oąʧm{R <0#8)_鿊E_hKֱdR+Aa|9}Op{t?+Z9/T|eQ>h|EK e?M\q\>⅃~V0/@1 F[e&k5Z7 BIENDB`liferea-1.12.7/doc/html/help_prefs_browser_1.6.0.png000066400000000000000000000563031352135647700220700ustar00rootroot00000000000000PNG  IHDRRsRGB pHYs!3tIME0C6]ftEXtCommentCreated with GIMPW IDATxyDIA_Ư;Яe$*N^|ٹgb׼I+Guzx6uAJ:b dTqg;JG ]_c,`e^~J)ax76al5]%xֶ;w]<ȷ&+*L ܔz, !-*PQ:=Ehu_'O&e Mλ:C\oEJ# n7ZS|.>X8O$t&hV7;LZ5FUfFUwb=?V05U\̵fl q'ig&IHI1 -;FmD+QRjDE)J WKBy㵍@*mhya_XXYvZzÔΥgp\Ϭa˓8 A^v\OE㵐H`g1Uw@Ft^fR`x/Qy`lF ܻ_TFƤS `յ2j?d|+  ټu:UP ƛ^|,h` H Y2Q)5Lw:BaQE[l2$巹˪ot c)AږdCpkMnQykjn #A!Z_x8WBTPWY;=)˅ǹ\v;_6h.ƫIQIg#l{X(yMU5ˏLPy] QV(+,1</'~*ȭaX!)tJEl&gkx\12\ɨ@XL׷?$zyu)nkmk۽wT0``k(;ww @TR%:&X7ȑx 4:(,9}/FYocSjY0\ESFX@Q7^ͻ$T3RITPHlR綶{BV3ز =zJXOk-UTz`1kP[/':,XyRCcq(؜-g9xͺ zr= 55lJWmJdvOS%s5/fImV]i:rS-z~z:bO)7іC@mM]ZVgxE!a3kh&?BƢmB8j!x=4 !!=@$}J 3qB JŁ@H$5BuB5B!!!kBB5B!!0^#kB ?99_x4Q] ]P;ovS4Gn3,S~S&[nM{;xt9ܵԜ/ՌΘgkԷ圷!>J̧_3@_>] 5_WUmXΪ ("`s`yYLj GH:f^c؉8{9?dS+@yVLjʊ̧ȩ7dS}2;l&ڛڃKm>*j׍1 /\ >:L#=o_'<?C!êp􋯇G.6` ~aFbb53NzEKG7:~[Imnسs>ӭL 6\\yk80 f# j󮷂vC sڔ\IF?p09)\4[II 'χ!^S 纛n{$up "RFb៪Vv?(90Y6FR"Ijo2>{&I\~RzN3ʩl5Y{GMZ=%DDeH6{h3ay!< d׵LN9Y7>pFUƬd>$Ѷ7S3N37bxΥ3}wן?h'RJ?9g|bw/:vs㟇srNav[|m ˏv/B}$_)Axz*w7oڱ-ktiGϢ]VhyžL |Ūl<8[Wd?p)x"B"}ǟ_x}&'Kȉ8H}Ou"v'_j&CDPD\}Șmlt|4I?(%xs7L:}3Y@Pf٣v= +LD:Mƻyӝ# M͝*q8y;z=Q2"rrr eF 7INH0tK|ޛ.|,rf/CN 9X/+mfz9{9_'<]5>c?zTTk"X9]KW&ޚ_D&|ۮNRxS(#Dt2RJS6XѼuRCk^Ғ56.WNg4Xohsmҷ(Iw@Qq6GEEq:5b^iA}xk[&r:6 L.M>7a\;;~=ʳ~{tcF*3(ުSrԑi<ܹxĸ{@|]H$4uZU>vhqӕO7{r V_pxݠ9YX2|Ty5,&RW}jJ6s 1D9ۥˆG5Ը[=ORM~I+EUnC& Br}8O} v'\6z/jlQ nn56U'դaT싄{a/9 ,xܼڛ a@A1v!kmnFh[ìeӿԟd o]b);[d{rlO9|W8(6';E&ЙH9[-5B<k.KWsi8[p{\y]V]Ǡߍ5-yqe5/ob{:j4gfҢ *S*ϋ2kKǙ\ҠKOӷCh}WrO)rem6JόdNGVhEouȑ ʜʶ Ś cm֓ ^q_߀a^%gn YְJ_-}wKsOj447g]^%UֲX̪/ r2,[=ӆ5t^xIkL-[  Z @@tAǖ,-[+*@qda>ҙyOlrk\Z+ _jڬ76,1'";{{ߐ^ 37)o:vp窙+(5lY3KM[ߦ3D>tvgd}ճW~Vorӂ fh|xrJ5ü>K؋}v&N;mo2=j~,&k`XkrGcֶݾ@DDٻfcFA GQW3;yaW:VTםmRvĚ<+Ֆ! 킷%n!SL6GU,|{16Z)`NMEv;fw3-|t'/4g]\:|uVC֧焃OjG rB}I\uw 75B ˸CG5BoxZx!D Bu }?_<m|xB5BaF!!kxB5B!!!kBB5B!?H$x"]Nmsv|<E$azz}n}Yw;}n& HIȓȏovÇ;1h1gXs,E]snݣ;ןK[w:}BMq⓻!'!~~q{kc5%%Ӗ<(6x]4lTs~dP)Ȍq#Ք{c"(/o;hUEL9<wN;7VSV"UGY>)QKH$S٭b#2L$U9k,6D[c8sϲ<8 l7\lHaew wo|<|8.o.4+s/=a|ޭ8z9%=ۘˋ&xqŨT*ģFSVՍ}nzAnW+ܥ8v%-7{6dlG^6/?>;a'-֪3i@Zm>fPrX48꯸o-t5'* ~_EUg@2welpF72rXh5kyOxj%{+&(,N~65ߒ{~gF>{Y,G `+((P_>Lzm&IHL2'%l> k`щ$a1gsT@牳=k6}u݉HPYxZUoyYzV(M٠e 9NX;c"M\KKTkYwԫIzdІi vo^Pbnz"|{C說~,;1s1I*V/A@7vzķ'X̺r_NTIFP[v;ϤWQU~F_yy<l6{HK`̤6?G3B(͐ @%%TZSFXkA nJU+*~*XC_e<ե9gzX,g }~_'CkƖo]8b7FIVŨy8sסT[%fscK<> >ʥ;0UlYv] (Ԣ`X )KW?(K>b3-DHCM^w*7H^.=w:.!#@l Yq /(@ ->ɠd !qaDAj6ny}d%@JٱG)9Uu Zk6՛)[rd?0^w {Nԏ+))npnƄam1'Gjת}˸duGOYz\^Ƅc޵SS8&?u?7VF $vR1 'hi#6t>rk{ HmVRs@nq!Vmi\1  Z Ԙ­d`c BFDE$9e;#j(|_9i.gy~8;d~c-ۨI-VGV5c~iɤR\9A67VRT14GH:f^c!%>$]q9Dff5uývz=$.?t)='UC6^8{ylJvAjBb܌glR;fF=ȢؿNR=~>O7<~|~fT* P6kJQvFIHKOp3Ȟ3JJ[죈XzjJ@%tPpoÔ]ngf:݁9]r9{++/떿G^m.{O99v8**zͭ_k))<."p'襤 Ss1)[td؛Jw̮HofK7US]yW`rMo1&zmua3V@q?hnGv@ySN_98;&I!<-w0q7wk[r&Ȋ+T5lp'Ǹ4 nQ_$'Xa#>a`5ᳯZG{yT {EW[w^+3S5B,**LJv/s7Mi^UQ JX-8DUu%|Vc{R%C9菱2hް$6a?9)1+vF%Vj8կJ>hq)84LAVqneG؏/~%S:Bp IDATiC|Z[5BFc{]V5H^e÷I<+,,P(EEET*S[;\2Dž܉|zPY<^H>9AW6+F-}aJa j᧏jU `W}f5ؗ>*:2ֽt&y3cu[VZi,;\5mepF;&G[[W֋<`m۱j:ES _B{Z\p]zma8Fm~1 0^#xB5BaF!!kxB5Ba!@!!0^#kB62O +SjnSs_͉>B"b(hXNd7ZеBd@0^q"pdGVV\.>qa{K C9~%r= ("xkgӯ<`^:j"0i&~KϏٗo̴o+8e> bfmhd)7&I$ aK0Y<ٸ.zuZ_:I/𥳐\MoauRnf>q1b<&;@0^-kr˭&{&=/ù}nnx vr?f=g.s& ͼk{ ,~g.侊>z5KH\{fͺE+kg?a e {SiNٵ;6Px3K^Ꝫʼ;|5{]+WOqck}<sx(5ב|^Ƶ3AVAc BSN 4񐣁) mMdWSbוiq2bMA\UED{Y4H ކ G,eo_1jٝ TJ eR("*ZTDѰ&"JRH x44Hnu;|~͢_z\)B==;< 4"Ֆ"+}٬mZO8As%#ٴ2-Ys4'!(ίءDPHISWܬf6 q_Jkdq/;}Og=',.+.7?'i-c`Ulܦ}kV5_v񄟳̣˴>8pugen# [o=~lBIE9jqsL63Y,%1js5&wM uY!-IxbҞ(o_j=PA|{CYuWTTv!0^#xBBaF!!0^#xB5BaF!!kx8߶aܱ BӾ/**McSC)qk~]wi'BkppphO8Iyi6?p81׆J1@#kf!UԳ7$Z2VV3CIt ;VGV5&imRy~8;d~c-[Q-=+u5eEra|MI*$r?-k|H$򓟇~M$ۃj,~6Ňzh+)*m xTx]/qž|^"纛n{$up "RFb៪Vv?(90Y6FR"mݮQGҲ ̻N_n$5q7ystÃK}Φd&DO!͘~wϭ{*r!g-n*aʮxS3s3o\N<:v[inŬ8HIA6sW{U^mѕe[`ve[[NN,YKr;6jn`١_e}Vְ~$A Lα-~JTV.8">7No 7%؉uUTuWei`5ᳯȰ7ߩez]`sB9j _o-)HAQ՝z[^ҧ̗?WԒ<5`E>j8կJ>hq)84LɢxUSbz'O Bun~{.n8z݊M߈2huעq zXm2g#cKk2;3VͱUn[G,pvQ]]SA}?xb\0pTH/]#3};e ۴o~*NIi,;\5mepF./~CvB!%^!;62B7ߧBBaF!!0^#xBBaF!!0^#xB5BaF!!kxB5BaF!!kxB5B!!!kBB5B!!0^#H$DR2q6NRbN;ǂ"d?V\/#ڭ)QKH$S٭b#2L$U9k,6D[c8sϲ<8 l7\lHaew wo|<|8.o.4+s/=a)f9YY<'tLȸS.wڍ38s1*y9єqu#<}fPb&w2=]I[qrJzY/1Ml}?yٗ ;8iVuI ]jy4w턴7wQ}k9 G@UQ*=;|D+;f+37b\0B殙?884&Xk;}#P+[y`5ykPbYϓmڳk%s1n|u+..D5w2HP^Ͳ @j!gk3IFb29)!goP7Y +VP%Q6E'ʓsyy,r暱M_/|wb"$TV['E^JS6hjp·VΘHg`&8ŤҒZj6apHqv9y (f`1{=i>~͝x+N\LՆlc5DEEYZZZ_D19kUYX]8;X7 p~wLR6ڲ{y&n"͐XY~ZU~F_yy<ZJ^zc&A<Bn*)!2_3XpTJ_QS* ,.9ԃb9[+l >%?88Z3\@I |ߗWan F[i9;(Ho(B5$8̗3VT2C<_3I/_y8,7d#>q /(zCc}\m8,5 C:)WMOQi vÂk u uq@7\A!!0^#kBBaF!!0^#xBBaF!!/.JNNn-44/x+@qxB5BaF!!d]n*//߶݉D"!j_QQQi&rWT>w室4<'¢Ge;fF?EYkt'ϋ1霱4򠳚_ ZޱKF @V$˙1PCGH:f^c؉8'x M)ŕ<+u5eEra|Mԛro>Dt{P \]Jj%pgP^¢9}'ϴITw+Ս7S%ȩrwc ɜ<;&/=˽WIv!Qk⏝F?8Y˳w>9l$A 6Px3K^Ꝫʼ;kg3DW'))1T*X47]/KswAKIYv?k,RR)W?6*\9ɲ94x7&lH)h(49̺OI:]TTT._f͙3g؏ϟwwNE/Ir% v83Z2<4]MǂCx3.gi3r4c;e`a͵I JXv>_:'ke*g\їd[bjJ犝qIU4h2/.h111ƻw=CBr}8ZxW;zB=+`yU=a7_UOR<Ԥ􂷡x½0: |b-.YV^aa!B)**REEkLz]V7:MFON<[Ɲ8EjUUԋ,~6k7nZ7K_UtSf~Ũew^/,R)9,OB  v@]kU䦩RoWzTouW~u* 76+Yd2Cg.FZN(;"˗_7Łs8)KjXsA'-i86^c;̴K8(W*)H N`FMg5X"xgϞaaa={Bf~yAaԖ#N9t&='1iznwV gǚ,UGSEc{+1˪"FӗE9O;~=^WMuOG,YҊQYZ<|ĵٮ9ϭ:S"t,e1X"iUq! ϯ-5N!*6MWyN0YضcđY=߿{2تǽ,\6A!^r$M]qaYO( Y좺$NwGWO![Jr 6 =qɆr&'xnsA8u/|ц]!!`DF6C/1bF!_#xBB8]Shh(Bu7>@u)BBaF!!0^#j+?A@[ m0^w]}!nBBaF!!0^w $+ϯ=򢢢~x͠ۼddEl>Gc9O4~n@ίa֕,1sj߿2r3b=S1fk ّh__ܮu o,M;ynJ5ɭM{3@MBZlלVp|,]έ~C)9hkYaOkOVN˝ÄEⵀp޷MZ:qd?rKމXݿ{R{Ϣq$ ;V`Ul򸀵Uj\ҝ{CjlhƾiξSyFSރlȠ1\@̠1*7YsLHט=>9]TFMϝÄjws099:f"t#xj وDb'oBI1#PtØRxB5BaF!tM8!@Wp!ԥzBaF!!0^#xB5BaF!߿Ok^QhbE5V{WRÝRSu jR?kwFw ZOi兏ײ(iZM 泭yD%(*2`xSyvJsuYQQQxv"ݵKtZkI2fvo4/ i%wO>e)yͥV6x|Vg|a_z:Uk1DZE<>lә16/'EPD|lsM趢.y׼#n?}St ye='Oאfx~;jYx/KajevWs!K~􍈤,J SPΤc=Z_Li<:`8d ڒԛ? dGknYv[5IJ&/%'{f]~z9Wcۻ󸦮D&\6Q@PqkjֶV3y<}֍n.@RQQQԶ"Ԃ# } #1e|r=9T~2q6@7":umKqr򔈰8LӿNf׭_Tji&䤧rv*?yxsM齫2HDSkdS1VBzF2'EĶ/6sz_'8Oz62`rzk.o?Q7oat-٭~__p~Nlޅ<%8-Z޽\M/"!ZB <lB863Os[LȘ->k{ )!ymݞh#u.ЁyEezt5c=dfLQO~w$rChi_5G,*:kwʕ B !SI_룔<{qB/,⣙i[{~\^벋i\jk>g֭{~. i\M cfj4{v^ ˦S6F>|Nfi,pp_„ BH]^uۃ$OZ~D63٧_ :!q=~\0E%z;eE!}ﶆ?ҜEB& :$!`y>Ugy|yVMy t9 X~Θ58yPSlĮ!#BJ;~ZRƩS~or 5jԑ~[{߰tҧ8IC_z]Z/=Rqqj)9+o6ٳYlsTL\Πi2G6( wk ^Q/S >}5<ԎVfr{۾xh=eaq[ y0o7,?+عnFztymͅMLe3r)n:.D(,, W'<)glo vhtLU< [?qP;%55[%iz :hjjJIݑw'ޘ󆋋+m2[dDX,^V^.iH$T([o}iF^VTydRoVTIe{  wVe%z'ƅ˔}âܞuk'JJ wmllJPh4%R7i^ޝºfIXhz㝙wKr|[ zR\l|iiZ]"u) oU*J(++IҸkiCy߿~e_=KFGI;pJp\*~eoN!S!=mS/"G}/My S|>꒒b+ʔJe@@`>}TJUyE9ME꒒%kb>ۆ2ޙMM˲?IxPeӻ狦\]u߬y2˫~7黻E׎oKb;E)//EϐD"y=s==U55NNNZg{%͒Ky<^IsZ!r+MӖH\KXWZXՄ?tN]s$g[W/YYYs>1l[x釫V(U55ՄP__P_ˣ_ܶw*ՄA^5~|_:pGiC@%x$a bL&Ԋi1 0'9sӫOf`k{eeL.ZmiiiYYYyyyYY)~':]@ :]RޙtTWymuy\-*^ƢeI.s4MY2F^M5MKR*PV*ԍ%V";`qZDqÍe-IWyԾ #;{w.22Ƣm =˦Yo1tOw _靬_e\m2rf,9w`K߿>i3M5NNEEEb5(.ih2OZtɲ8.4b΢{p1?ǟms}Np5mMuM₅EmڲQ,I"V[Ιf}x544 zYY3_' ;Ra4rA'%׮_mly;k MV.dj6z4;;;BEQ':*fw[ wwwD*l6pofY,ĉ͛aEObH$cb\͛9-qc[ /Z^ B9K>+ah$p8>obzi1aX\.!~SvvvbEQ+p8"H(2 c6)Ty (JVk5 <쥦 t 4Mc<6 @^k@^y ]l`3=ĎЖ%IENDB`liferea-1.12.7/doc/html/help_prefs_enclosures_1.6.0.png000066400000000000000000000575101352135647700225700ustar00rootroot00000000000000PNG  IHDRRsRGB pHYs!3tIME13tEXtCommentCreated with GIMPW IDATxw<9gK$"eDډ[iIZ$ 5%M-%#-e=7~Αx|g߯sB~ϓ!>~>j2?dQSʰEB}b]RaC P:쟣}#YҪ󌺑E|3;νwΐH\L#N_ѶϊdS?_t߄~!nqI-j?*V 3VxBfRj~{;P{G΋ȶלoh8gJJMԗQ&$/,{)=8s/2,%U%7rOubL`VPR ņ3YAzb6MMDhZխwMU$:އ zpY.?Ƞ2 ]nqu@eL֋Ԥt.r k~1W6ت[aԄ2  JPS(,* KD&@q`+W|3 VKܓu qaTEc7wAD_"県2xD@T|@^da1> C@Hl$Nkrխw,ae՛04 X; CʼnHޗgZi?)Y!Q)TGR64tF pU )EW_0[ \V;.D?Lo&,_Jc%p XL`S_X[a#}/n$ۛ""%D$KD{+6P׏{yyR\f {N\fI fKkxUJPnŗҘ@moo6qRB[U^rEO@PT%Z'Yʑ| 4ϓ*dP}$TZq &)kHQQ!2-ID9$a mm]=(gPsUnDAȨ=y)\XY ^\<<jd`v~*(!/Fp Ki~{Ute#ʤMV`RfZʩތMh}+/yjQ]?JXõdG *WAmQڕ5s܎{B<}cVWBq{o>Bu Bc|j3B @vv66Bgd2ǯBc|BBaF!!0_#|BBaF!!0_#jm]222x w|ݞѣG;PpһN(''߷:On:G>.y`@p!0_#|BBydl"_ӧ=՚a~6lvS[tttL$0.׎Ι |/]DSԑvIqG'ӻHi[Mmeql>&[3\Q];u^UAxwsHQqp؃/ [㐈׷/irbi6QTĻR.ۭ._7P"9v*Ҙ{ǭ(kq!/l15ԦQ M|B9ZRSWTofy328BV*MYgwJ 0~z篗K(\rovED_P}{}6C#ɪ:x"~ۇA/X7nv9wpj Yƨ5?<޴ئRLRGȡSgn%yX?6L8c_׃^Α{-c/>~q.s̽K$K]|9v|o u^9G?v+Nࢬ^rw~Z.pj1s=~rbܼM ,-h/=އXҍXK\7Ǯ?n^ # 4oʲ܋:9>{a/H/ZxjGVwQYgwHbwPU+K,rH1x?|զM#JntӮYW@я{YqM?z4ME:C[iD$縟XrwU?!ZҪzGd}O;뎰.8XZL( C3תҢ^K^?l](Av:sanxo&> xŸ@r7Y68znJE>pJ)[T; o~ 5{Kk7Q zv.L>_/w}ö.oXqo/>>nO$ru;d2P{{NOܻtZzP’3$ JQ6Lk._դziQDL&ee M 0!2Q~?L&=9z-xͬ!_m[zta"c.ꏽ6}g5DwoCzʊ4-@5U[l\K\]kf KݾEKci$G" *3h VWȤ}\qM࣓k7 #cΠPӭ`ɃNwc\_ $(asժִsQ-<8^U UNcҕo.1[QgA/G E( 5j6^=ШO/o޹AgαKwJM/'T\=0sE֫;I1+6U_#(`۱݀\,fN))7΄{M1_.ᑊ8x?|1KľpfM JLQ_# }~\֜&?ʸM܎ĉ3MV|0YZ՟ ^;|p,|{6|)1JSQԼ{>S^Yh:Y8_W"+rMfcMɞ,;˹=p<{ī:WTӭ|,yK5K {#tǜQ)1>f^1G&Q#/9O d{ْ}v *,$^g`:|u7[ܦ\ M%r)M"մO1.WYt*,sf| ?=on"?pd)n'EsZ>dh?jkηB ˫ tȚ+=oӹ*F 8qe}/r Zh}Nh!VU^ù] YAQ 8En.-py%Π}~Џ]$_~RiʒO/H6-kG-t~9WFg%?4W kUptF^bfcEsUwOvfR&v1Lt{nx᫏&&. &QV5YcհFSiL&tiUK}* B:[uh/r9 -ܸKm\Po `9i=NZN5 ㏞_{JJYu8%֢sp𤋮ګ[@COWȺaNQicݸ[//. v5쩬iq >^{R觸rcnf֮G&C}G y7L6(2zl|_}LFy=^F#Htm0pԙcUw.Q$Mst1(oyi`% -:Iw]|Aν m}cuQj:\>.fEvZ+1_C ڿʢ.+MaF3ӧIrZk59 5BaF!!5 =d6???^)l|qEU|B5BaF!!k|B5B!!!kBB5B!MB&drBUt@~#+/$Andކg,3nT(Gan zeYHV0ybEs(&hZ0DTu=oRإ n&%YUSR(v2fڙGE34d2`**0,LV֜?Ήc)+((4^,`~dt])tH# Axm(#mv9MhGk[hSu;֠f]3Z_K"'mhx&7R¯:z{~4U(FRBU5Gxxc!v"Fl 'rW@Yօ/ee_X;9pni1q?. 1[ת\k_yt}U sogl`yO?9Z|a=/̗[JM|m=뫥ycYW0_ JLq>]da{7݄ԔFiޖ@ pm~>E58uaY&V(KL[ zK-0" >u׊+. 15zKi|淓6Z5>$f$gȉ*GN7Gk FҒ'ҊwG%ِ̓],g܃q3q<=2aEJNo幌_se Nb6jKr9([CYN >LU$*@ eeY,/I6݄+N-y*(JB1ׅп#((753K`kRlY=\$I|?V28~AeA3<$C4v9|ndT{eϝ[VW%RXiRV)L!!Y MkѲK-~FW%so(bL&s(UAK{DWp7W'H sNK+^ʬ1T>.P돇pI</&AH=$XϺu}S$T$Ԝ%Yg&jϮlSxZ>#t/\;K6A#%@DvVQID^N$GlB0ktutDœ3`&;X.?Da;ߦܐ-AdS/ ad >K-]5N1bTYAlFmm+M" d6 W4TƩj=-ڣj!I^xV ,|Ǐ`]ښԠ@%YB15ǵC":,LofAu$m) (c}a|wlvCBp<!0_#|BBaF!!:7AFF푟/Bk xBaFYa# !0_#|B;'ʥ5oTΪmcg(~4z38f$<!-u*2镅9_^:y?1+!x!PKMݶ=ř-9OkfeqbwSƯu\LzIZ\ɺ.{eCeYKjW]gP2}eۆRW64Gs9ZRSWTofy3GmA/šJ8c_׃^Α{r,|zJ(Ik,.|/K<.$x4:uW>t$GRj\co?Y?ig˙ ) Nt`fcwq{k_}Kvyc]yjj}>JLI|ˡ|| #%w\vz\rʇGJu{̑KxvAߎ;F[מX X̻:ۛ+\J u6$^`>]ԡ-4I|"sG]\ʏy0a_Hrٜ'VϿm,/oq&`AcwuQbD# N}s y_%~槯-h%mxo~L ?Qu>&^ٰamlmm7l؀6|ݒy4%KZ^wZɗp1Dx /ě8h+-~/؝^GU\/ qH&hx|2G M46v7`oM/s"S^Szk? K .۞,YC^^^NNNVVVAմOCYXX1СC~s0_˂]GqMj̤eqa׸]o{bOg9IsJ, d2~[,{sPI8s=^Q_ռlؖ΄YYYYY<@$O:5x`:uH$≍0_u IDAT%'YS}/d/,~TXzru$)'msR^)'"RaRF J<u!$|ͧlc?ؓߏYO'y8*ץЈk11ɸڋbO@G˶3EݟeY#?@o(*aasiiiֹs焅F[V*q򀋄qNY==>02Ơ%GOhB.4U/jT\#% Fω}b^&mm<{*Г-_^k,3%\wD<^~DlۭʗzTV4p{I֢f6x?{B o!##?`~ee8۹*74y۠&?#oEE9dr\_ǯNcyD%љW.St1Ia[֢p5TTGX/.US1ȧ1؛3h*j_isDE Ew%Su~f M7{\SCmE'58T)Ju^҇*W_7P"9v璪UY~{`ʼnl-z)+7e~q.s̽̽ G'BcfEXcw\u^nYU^d_6?0{ߔVf5z"kt_JM_8xoɩϥGV؍:T}d_m)Lpa951ꗝC J:-/5.{V?,*3+/;Os- ZFF(h 7ظP]o<%u]3&đ5sf쁐Fd~=O*ԽԄ?٤Fa$kM#v]REM+Mv_3GC\ޙ dI;^6fq'J*/ˌᵫsomaT AK rhS#-^:jEWKA G5jO_ߞrvt[!QUl̏%yY#So%S=m<]U5wy eA90iR)PMNnƞ w</y Ey8psXvx$X]AḁZZZ[PoWÞ*N{:Y:{\;RlaG{ŅKGϯgh%y謺xd{ z%}EP\HϴRjG˯oOD{zn[N=U{w }!Ї.4}ʹ[t7O12Yo֪<`ۮ/=v2RE~Ri}Ned-a{´ƞ w<6g7?耶0U|$  Tg)jֳ.#:@؁B8_3%kF\~Pa 7)Es(&hPjSΆh-cY\PPl1^9N xc ]y-C=W8 x?Et?>frO3j2p_>^;H[A^ 6@`-E1̷6R+w( r},))P3̣x"j5)rچmb}*[ ))si^.u!:[>q<8g-sc'9g>Wt!rFdE51dOh& ;߻!&?X4JN[BYOp>~GJ^B x/##K U,q&XV$ ~ LO̳+:ą᤟ߒK "d,$is큏3DQ#ЛGLc/e5 zO-vLX@Sjk .k7Hcolӳڒu*dAc5 ]wҸ-,'[SA&*jB ,$n7/B-!((ܜ-u/TY k(cMK+^ʬ%c(|R|ndT5Xker 8wr:'8jt^lYQĘLQ L-̯h{0$m.Pi-$/gVLbϤO(@oo lKHimI=|[),SX``v\G2+k#Ѽ !Ժz9938,y-K *;59WA<ɉrdiKbLMdkR<䕰/q_w+r1ɨ,18[;˥.Pgך.1MgVV>8nsirؼrjA~0pu6_tY?L:2?GU7o#<O((/Ϗ9`K]lF$Vҫr"W{5 IBM,8@ /8Z:f߃Wi%DQnR 4h:E\^SiuS {r !5(^Y6޽ц7x׾3,Դ] /?`0y|ދWXAAuqWnȖ Uk0p &RKW9Sk3UVP50x[%e<ֽψG4 /Jk*):JLI|ˡqbhsӑIqfξ^mm[&=ۿto;'T,9GߡGퟹM^zծay[) (Yx:{fzm161F~y^zH^{gci"/b`0κ#E\o.8mWI_@k 8 ,$MD~!I.gsW;rns_EIŞþ5?1_] j?'SYܛ9+FNQCZמK˲l%?z`B w5#a]Į*-fQ3x=ZRF^ydYkyy\){.q9;~.(ΓŤQ@sLҫ0aÖÖvs6~E`3mb +꠸|N":rRg!)s0 E I%)׳ȩ3k䩟Jrz~Yg,{E/. cmYgʋ? un}/ܨ]}}?*,=zJ7qE]}ŞVDV呐Ukߎn|{6;s_{͂Q)4-%꡽;%KZZHU}|yep^Y>dh?jSYwה%Ri Zjt𒩧+d7T='{Uۿ>683E3/=Eiݺ{G*weޮ=U4 k9^ت_=xuؾ"$Ιl`{%(;tWqh\y\gsX2ϟ?8B$z9=!ոO"VYp'-8!Ļ1<LZF+z]Med*]8!Ļm.>%˩\u|6ďcqg45h+CNBBaFMی_a#'!﬍!!1`F!!0_#kBBan//6U# ɩLsOco@anwl5qՓO)%___7~d<`#fF ]&+HV;lXnFB$fW \&+/@V3X&]Blȵ3iP$%) ݯ:-wsb..ҞGcyYgܽ2]E ޗ&B$RW9u;WrFFy4tC' \Z{djݨC&zm $ۻ fNϔYܦ ۊy;eCND@~װzIyYm]lVXQsԚ-զa\Sn~99Y\o(-##,Uߣ|hIAW *>̧ӧUfV[4ku-?Srz!0<{po~ }5zC;ןgiJ4\@5#]5^͑eMVFͯ(O???3уx>:/kL׬D1Iy_qіdr),d2U?-3Lcsj[ _1W1KVnToe3  V՝^:Vl$O$J#`xH#??FyrF/8P+5 &*"}jZo}ZW63{IF d2x3kA͙CTnv1~q meڟހ5Ձ/Q!'((5BmĄ5={ּUxBu /_KIIea|~zp}Mr7M9W~txj7iړsj<gd+I|˫=s{#73W9` {CC_Kˎx[>u֎Psћ}؊c iI%Ny;R4޻z}+>qÛ/ɱW:^Ǩm,--3WRS}Yoji5Hbo9]O/eEXUeJN)OnխzMZE蜬רU0rU-q̋6Y:iAb]=Q]Bn&d芒pܿȮ+W>~mkkKJy`^5$VgMZH q9QSGe9;Y*{-jQW;n{KAYpF(M OVn]>GfZ0yHm(#i 5O!~[9Ig̜ܼ\Y*4"&'/??7ɬy8zeqԴW0*ci |PI8%[c{Ban4~1i--S1Gmx)g6Etr!xe.D֌Tf.9uȉ6=p/M"QiIj&tu(/[yJX1|hFg#w[ǨmuCB5CBc|BBaF!!0_#|B[ޓ$6=B5BaF!!k|B5B@ `#(_eW!]cҋ |6Bu|B|zt IXaaz {QƹerqЩ~$,j.y^ Zh2Vx얟o33PVKl75ӯeǦ/j<ѷT#S+Fbˤ.F9"}vk;>`xX?VxO_0w͜귧>¯`ky`vvvy}O-)4~AŇT_bl(|iJ3m~VL&2_Y+Suwӻ[O>76T_d*p#v?l~dWPP/ޟQ/*Y 0c^U2v(ZβƇ^\1@[3eG`I/ӕƆjޙC\'Y<#W~_F]<+OR oAmݥyQiXsXYk lqɞP{[Ε1[ ?G\y9n>*znmsakݛ":t;ݒb]˖Z&{c\;/;j_jwK~wSa+k֬3gΜ{Pu!!Dv`OZXXڵ|BMD$O:e``N"B=355nѺBHKKBEx}Bk|B6=BjrjǟBv 3 Pǀ!:6}6+ AB5IIII޷mm}/=~B"((ĄsNTTT[=)ip<!:!1LWx ƍ knh4ڣG ڊT*Q;w@.] н{&M?^j'>|fffEBD~?BBBcǎ^jscǎyf.]<_@ 6L\\ B -\p۶m||Fv<0}}?bA;vHN!0_#Uی<~5Ϭ :gϞqNJJJv zoBp<!0_#|BBaF!Tmp {~?Ҍu;B[ONN6=6#BQp<!0_#j>m|Tjy\, L`H*!)'+n={ێ kF ͂&:|)@OKJJKKrrs^~CS^:>4ύݶ9jax 6B-+;dYAQFc2 d0 O! H$رo纱B䇻-9V}~~~qZq?M?0G9/N__~EUeD%7cۥ>3p gu_~㗊\N|7 Tgw!:Ӿ8|îjo*LuwfϜk+-&B ?O;=-<"d2l1EiǏfk'XołmYsƭ7ߵa!w(\QqY:EέLw>:bsCZĤ믿oQTw @  E%M[=j9GK$ȜI;Ƭ]߻c l^k+`΄m7/ܶ [p7z[<5\>}@)E>UWJM|\!枛8Eg4F$!!!!P$Ehe2]CiiiaYf G,t%)!6 Uה2oɓy;7a˝wޙ~7DZ0uUS 7_:=+W=6|ݭ1|xգ-y")3.ooH8WVl\P@ w){c9MϺc%y^&lq=%8455Bb\.WTPH$B!<<<<$$Ob֘g#/@1%!6 UהRJD"ٳ'!LDd9.Xfys5h^5`γy>:nYN珟Wpf9C|>S]]g7_(XI]*Lb&<<\*vZUiS#뭯kyM)׹/)J)iBUv=Sk֮{'|pG e\.7\[[#}Kq8r\Tyq{_x?2Gr1;;o۷!jܵ5+~ /Cȑ577{^~MR6aaeeBHcc#FRq8p,iX쉹FDYVBjj\WC?L7 ,BD" M55.w)?,4BdR(5`}}ÅaXXjd4͖5kfeeUW:+YYYW2eJXX^BBX,O7C82RXW[˲,e>ilj$*j5i}FZ<u*1>=vAC~-QW*tم j Bp֌yy_N\n];z$N}d\.o3qo:]왳± vz͠|pC*jSzdν}Fc|Jg4~d2YeMUT:VkrrJbbb5BӕlҌd2Yl?Q~o(v^|x[fӖgw-~`rS_` WsuszvݖœQN !GVQ{x<^~d4FGG9].FCqaŗJ/_XL*vi{B@;ܫH\~Gɕ)avUSꋾ]OI0Gs>NJKYb\NBBxbQ3OFa=$jz.TMzBHQ}yhx޽I2^SJm B(= C[bYcYF|r,˲l/*ysS߳=|=;"=񁩿N8Ǒeee(G^/Z}}FV.Z-z,i[n)t" j5`̜mNzH\~ 2m?{^PwNӞ;rd2 ]|)2Pj/5 vrO?I$B(BpC-&RmP({;{ V. JB`Y8Jik4z9n k5 |#~(Bpn@ӡ= @^k@^y  @^:J]%IENDB`liferea-1.12.7/doc/html/help_prefs_feeds_1.6.0.png000066400000000000000000000551401352135647700214710ustar00rootroot00000000000000PNG  IHDRRsRGB pHYs!3tIME-1R<tEXtCommentCreated with GIMPW IDATxu@)$B ;/*_؁bbT, ) S@'z_;3o޼}7;!-@B?_L[NS>Z9I!_L.NSj10@@y9!i.sl:0 uqٟ.I:|ݗrf˶3UZJ{5_QV Lk5%IIHh0Ī E,94 ufȖ؟ 6؋Jj*ztcx l=OrM(KKA VB*ZMzvy UYCv1D_Vu3]dףfHK fӬ_َ,TM唤J+yP[G>jbU5߾J_w44}/c]6ǁwK:t&qШ?_NVz;4R%}>Z,ܻK$V@lߕot mʊj24EBuW!%Uu!\R1tQ9.2!$i8-?T)멅Ғ?kWȫꢡ`c5gy\6G[i8PTV遃$IrsiLP gcޚR8yEӘċ|pK_Ǐ焗}yzzMh%&F#~]\\ڡn|6& _n=2ۀlUM |qdk2m =zh@R[l ȝ4F}:7~"߿ocWC}KP٫>;HfO.9wJb'u ۱k+v(Dl2ib-~;uHj7y2Z\v\2]agRӾWu{y.h sAw=˼ Ag_bRwsaea~ԪݑULgJsl={"ʲY8m`ksKQ&ToYMSXr:V.$\;8ܪ݌[0rV݈6$;iNY\uTMYdfMN[kz+W` 셳д+{V 0RVٍxh Z^+w{}5c]Oɸz`ն!Ĭ9oUMqJe>`ؤ8w.c-Ab7w:lё ГWzJ:+4ʈ8ZHIHr<9S* ;u5x 6'zO _ǽZ}ʓtܐv{*|ǗCK8If8woknPP ;vyؘ olqutu|szf-YvGh+q4yoFG`yU7LFK!*v׀zJtBBYkBsY2C-;H(Fq$!"n1qg}6_⯑'ڈA8/OWZa: *?^woמWq7mIEkXjDpZUUhd2oAcM& !ĪDO2f~W]cы(l}F/V^dwf]Nѣ'o*Ϩʴ3=1 ~ՍoTw*J|wrnƕY7%%鐋W-q#}bĻ^]e $U{v>j,_ ql2WQsfץBH2}٩Yg]kAC ⎱L0 "ځښ!Qnz%ʅ~-5QbS1JlTpnג? I/&~xzug^Ի15cy [+wcU0 QUݨ6;iz݅eGЭak&(tOW_1'{%?i307#3YbuX2X=~ p%A J~$IR}e!֞Z{sE~a4l,a T_eqg|7b5>HhN#&fљ̄(ɇ9y]IUYè.{p[c߆)6RExjqݰN=&2+N'J8ũ9Ǔ#XŴTߺ0̫1ĩr^ab$TwH+DUuBŬoOI(Q}_Zs>YV^TNJ.8h&᧳K^jHUe$jǷ˔%İE@mՊgYemkl4̃B4F6Ttin=-eӥ[ow6L^[3+l1gy?6Ox]RcyJtZWћ='b?OJ)Y7ƞ8:t,x=H+DUu,rtb WMB s$ĻOWd÷WX̊OTV< i4:E%oaE~ OUQɕ'u#[>[TBb-BUb#۔*:(SA]Le ߋwֺmhڎCpRjM?a7I63ozyw6İYo-!?vq]wwOoU]Ah"U hcAHb lL Ѐ wbnM>X!sNj|'i_ú8.{Y̲o v ᝚[$59^W7-_0EӖw]r@ !d|z)o_ߦ,!;10~ zY=]ߑ˩8_GOu?e2,ZLf4@m4G!7vƦnBs ~&ш !*?{xpL =zI*/smj_5l5l"~`mz QUUNdݢ|jHD___kkd2ܾkڂh>*_@$ĶB 0IR*dM}c玶k_rg\vmrUq~‹E]zz!/"NbEKc0qwdԄ&=9{S˷k Vxe]R *Zvg^~ɓ>L&iXN[-I*N3Āen7&82+Fu1 A1p h(޵.1Ȅh ae5iUb:Լ #%O~JOƩo4Bhq$1~Do4W^B̧{Vח w4?߿gzo%GdSAѫ)ڶ23MK@Ni@b yPy1=Ղ7әI%H5fjI9/B;Z(?SeM.cBYC]ӌ$&#T"VLj D{,H- (C]{Š ޿|2 !M{C"gBrS93B^ǫ?xdt[ BӨAL3BŬ!?+a8j4Pd#\jSէ" 43ͺ.BqٹZRMNe_Y1W]o"rʦﻹFZAVX,¥H<4D4FcIZf]vT@TԀԩjr߀UP#q*ZiBhA"rB6$ZMl"B(4h[W_p4ħ^"`T|6wLo"vO#H;VV݉SC;g͊Z9;$1G QV"*ө?;$BhԚʼ 7`;XjF]+4uGC|e(, )F"-ؙ^TYYm79قWY-k٥icEIհkZ~S}E'^f]ѣ>;fQsVɔ4f'oopq.q Ŗh<;6St4 ƷhO= ET>DCa$ 4'>hTEiϔQvL:FBbȜ OgV3Xr>-Xy# 0@6p1 I+t;rc_c="zkk5@V+~p" @;Dlf A`=5uk'&[=55yhN٪ōЪD''%%%SL)))S"Mcj{T@qO7pC6VI~xzr?]o5HIHQl/|$` Ç xV4RT*5[ʳxjik}gNsDd+";TfD)j} wiǥǗEޓKhRcXfMLL B(&&f͚55n=$.k7WS]P' `oE^bOp,{n*͉6HWK]`%j̓O9|̯ooCQb;ٜiQ٤oߓM$33\}-scG̊(q)[Ɨ:dϑGNZ;~X̣<w$zθf_"[2]agRӾߪEhfHIpĭqGg9a "dy.لwJȚVk`4&iQ8a^MMؿL&VʤRrB[ o&Ng<;!fM؜o\=ϙ;ɰOU]G|*|rR!FulS-=ܜl֛*}ZYh}"ëw=Tاi #+@uFȯY=%{_GNEWɳoTolk:.sX pF/2I1{Sv!(?y Dbˊaȋ^f1%U .4O#[Yվ8WVb!V-$Gʼeb?UT#igc)_!q) )Hspq7Bz J/T1VmYe BA h5DZ.}%աФGok׬~ !Q'c;+PS*i4:VeԀ/HJbP9KZŤNuo狓vDO#4L.Yv66bTf"$U?TJ%b.kAw=B!fZkꅇ{9P!4 hIEz9Ҙfˋ<;F,~AGȬxA3~<_>y9'hL:-%e$O0/B9L\-/&FoEAˠh"D,Gy6MhձBέh==%:R,GLٵ{V+QoǪ$Y^v6!).\HkCq5IӰp{<2gAk2Y,D$ r sG.Rts]~fZͅθ}pQ?+lMP.#4L,z-]Lhf;ݽ`,8p4F6tRe-cc9 5A ыZd=V'Ү.վ4bp:*w[2l,iZ̸Фưm۶Ԙ;;m۶wt߇39|iY8daaaXi5DPxhR#""n=N S_6`:ho7   ____d2LnuA+Tj3;&J^lzbۼyHBJAIYޭU mq+G9u۫G[h??8sxt l{=$EIChStl&#0DSCg?Ǡs2\~&CO$^WJD2a`b9m鶬jkQXZ0Z_io|=~v]u45u 8-|S׻lL9Q_qeb@Q00vY ]낄}SVjU6GϋDRb6X;,w9)YAc.O7ܙ2/-<>[C7ӳG.fpk KԐ>&UГ=J|"WSmeg&Ҁ9cz)/t}-!}.E!Tw\*-8Ţ(2]s2_Q\$]4}Mط}#.c5l궽͕"~k]2!5?5Hby9!?K٥[QBe9QWbCoǛk=|p"5_F_t&/I"?TCz1 NB%j\$ZWǫ?xdB$)??o( go>|SXR1[+jΧJ,2Yʶ@Jn"? X.EIuՠWZHÍM%S- !sZ/$H5L!qD!Dj|+֏v)6'i1Ybd>[ُ̢G}}8HxŏMQg$}&篔oR>MJ_i* ~*j@T59P/*8SB=/\.yRvZ+%4"uE#mI›zgR%8LDoռW.}ZM!rOioC垇{ ڕ^pܫXt_œM$ui$iǜ;q*mZ$Sv({r`Ml;TҊ҃wHi{kY!ajMeޅId%B*6 ;\LHʬaT:i QU^!b$RЂE)[vcS;/ ,L\^[a"L2 &B1=uOY. &??s2i5uq޻ri;8O1 C777T*J|Kyu_O-=qm1]~]ZlԩyМ6ncf^$Ry )jA5k bbb֬Y](_M_w󑓔t3tb`{ѦS4&=ecX9oiNFZ];-y_V#hfu}ڀ3_&Ņobeija6T\SUsL&շz J3y8v몭{+ u?w֡ku1=sZ D‚M&ZҙLznϕtA}-i L `mJQZ;y\T8#h㥤|$}U%R3;<%3v:`iHo٩Vf̺J|&D,%H+N}nzV>v V B2B*g%kd¸ޥf}9M/N]B>- :{r&Wo~^ (QJV[fDVH_-~f#+NFvƝ0@ץ7*ɂnE-?:L歔I/h[!X~7EMTSAlyv}AeB̚m9ߞù{@g 'עٷMIECxӇI~{lӹ>ޙN%h2|K(_zKqsN%Ыҵ"H[\oGmev+ b<cC&8}Ktt4eH$j[1<<\hޘ8=CO!z3vR?2A%h4eX,ҥKϟ?ϛ%$$B{ [Yvɩ j!< Tx/!7Oy/hA5RhRMj.F()L.kʮA+l7jLFui܃Ro,L ٣A/:=%/2dڡxd춥o9[fG .}9zd:ekJ:[xzfIUֆ:ƖK.<+$ 2(=MN*8g]'^Cƞ|vm6cEMMNU=܆jStݷ.?M_W/W[AK{t/ݽ"b. ׫ 잺d*}-*H${sRl۶!dggm6J sGhkh3!c26rTUU#""ڭF)jC}H¹JJJϟ`MߘF6=FkFQQ1""p7Exu` xkxD_O @__׭`G} L6/)(]OM]|sBrS`Lp!rQ Zl2߼ i-RuYie@*JRs>ijP㷪{ØBfP8кsS<>Q Z88wfR%oꓣM)Skc15gj̾t3tb`{ѦS4&Kh){n^ZmP]g-ufu^y}Qt_'Sos8Q+,d}gXRgN7$e[`ԃ  AMfTejhg? =q&LG਍GG5Ig\y7)^aw23y%.jւ*`\@’KYoNRI9U%z#n;uD!&Cur>&!35Ǿto)FD%gd$gy1MG-?Ƨӡ8˞i_z1+~5Ի́{p5ry_כ;WE!)K2t]S59×ݜZĥu(``jj{粃/= 0myk&#8M*a1+|—o,8FDm}DxTmL&STĪ2fRE{)D]o\jjy l6[ o&>g<;0֦4[):')6pɼ6IP']p;ߑtXRuML~Mahd"4ԣҲeEPTQGA#씤7VC7B(SI̔Bj*E6/7]TBX̊]v<>j\kچrps5K#?Fe&4Yl-9_J׶\R׃ z &%yp:鞆8BYSHѵ>b1+4fNr~!R$cAcein* l p*BBZH'κ<>zBHL\bs!n&?"J$Љ/Rj+!†Z/Xkbd$b-bճ֖2F9NNLPQ:}̀Sg!e%u#Ӵ'cNӵ&v3{0 _>Ws\Y.9#ҙӫ>+f-W-D{A=R!"mN5QOh-8}DpT eOn2yseɖч'G%dҙ̄(Gn[NV<<;F,~Ag:y {B9D}cy़R&{r~?ڷz2q8H.8RIvS^'U0+ 3/^OZ(,ϊh5\8>h؂|u1?,PH*#mͮo*jE98h&|@g~/8&/yF//H?aǦ0rR8lLwH4Y4?ՄGG5aTgܾS+̶=b+τ9Ǯ-sf }qgO,=PGri%:S>UWz¥)uօKc_Lgyvku#=u:c]M_j潔%dFj~]BEa)Tw:svߡ؉Sj{G]MWfj3cNzjc>N7'}BS\0p@ۤ}l5Vaߘxm}O3\z߀9{ֳ)T͇ߪ7=O}i0MљMac7 ={44Mo@޽jЉ8rCڕ& PYq.L&w龂xAAq3.+񏙁$^xCWhuiQ{$B0I{NE\ϧL5fbޞÞsC/,[ =Ƈr?/hu&tOş70 tx,&mWg2A p WR8[ RFuVnzZƖ+B\2QCz_Y\ggv)ş69kK|RKO˥PH"+@!<Ϩr3Y|[T|ZUHJɎsw {̱ڍyu4vZ`Ҿ\J!tO"JKdVB̚󷾭=ʳ 0@7ĺ gUgKAjm_14O)F/[`AC irhjZ#%yclj} i 7ɽ]DW 1q'PZU~YI#5;y %ƙޞ{#n ayıl|5㻁n'Qr`.ԘcBm ;Eyh+ p{|QgNFǝ]WVAi9irb$".}Ъ+  0!K\Ɖ\g(e6 o ?j#dA<ʯGX_ILԢːIDATٺ>Zo{sޞ{d$ >ū$x{`OgFho4:^mqc"D ?V1*o p̈́-pپ糯3!btǎm-PeФ& 糟11'8喢^6<P"+_Z,'fZt3ʻyosᇷİKu#nQpEiy\ Ws,7Е\ErxnmeixMv}7_*\2: 8VR:pE\W&h(lho:+Hmw$x~⋴=:5 ;N|?:Yh#vqu\Yy\k^{3^/&KsKE~ ԢEuʿo2k~1y~oz,~?o#-l {1BLdO ֞Q e9UP:H+̜اO+3.\2nyZ;\R3b,֏5Z ;8rCF·)'> 65dž^H_VtWtZ^5?2?Z36P:CP4Lf2 26YE_sbcBf 8uqS'p`g ,7גK2,BH]RJvIсK6gKl_0Gj O["4qpه7M<6I#>oI :~b=aWVh&Z!@+u_̞~kp: FG [o(55z#@+__Hl~[!Ma=ՆUhZ Hl~.ŏoA"^k E'"E+ƏopEvTm_AѲb:=LYIő76?08qqŏ'6ZJ|3.D6t"?>'O7,k;[#](Ɩp8g ._79\qqs=Z2jO;r7-N—76?08qqŏ'68-%^"/~- ߐxkNxν?$= 8{Ppu1nhG犃dYN11ýJ Wy8I8q߅' ~|9`!}xt(8/~"c`'Vߞ}ϟ FɆcv=( i'<ף夃]8eߏɒ]J?ĭI‰.4`?m ģD8џ`?Woqg .`9sz'bLG4lk>)TNl^|U]Txvz$Ǝ>vr*&o,Oߛ/Ą]& NKw&*|Xp"mkQqN8/&_ ]OAF6zՅ-pUHg!'ц ._7\qqc-+Ŕv. M/.^5sУzB%'n=N߸?X>] OkK'3XeFvnnn^^^~~>JjG7q:` EqqCߟsoW&mȊ,)fdz>ndp j+8llŨy\Esz(NBeO UJERT5 h $Ixx8mXzk5k55   ____kk5k5sM߳gq4aaThJY`*Uˑ% [nr%MPUZ&ui@F?G; c3:ߩ}@5^5kkz @5^5kkz @@^5kkz @@^5^kz @@^5^kY0DA|>7e$1^kz @@^63kq7C^5kk1@< v|}hyZ :9$)cxs)ciPJ^7eTպs/{|I5fnj`6rsrOv(TeMfŋVkr˃D ǎȲm9 } Пs8f3՛:;;cYY֖)p˿Ucֿ}uڕO޽^@;Ȳ˔axV57'g+v͖zM&Yvy¿6Wm\5j9QPOU=z'GYLO_,>橢꯭:{`'FY-c^EmW$J<4MiIr5;$Z6-//Сv$]Ғ2Fsn?I=Q+ʷjm+0oglʉK_y¿]_7y]ʚ7;;Q3i'x >?h4~=BMgZ,v *B{{{zZZSEWKKiIZ9f)٭S\+IR,~HWclFAXL96}+ <5'?˧ȑ#w~>I ҒUY_NwB-i>+ }S6 P3`Ҩo?;m£#S-Wz.u-ba0 .E"h$P*z{#WEzh$Dر0-i_[:g6oVR;[XlyoTIv|>C<:;;k-K0ءjZm0aeeggyv?;V{VVL>sp$\x7]*j\qo6zz'>::6|Gr]秎_=~pƯē˗/WTJ$𧦦577NYL?$)*+-yB壏k+_+/'SF+~6MR{e͒ TYe{~ݬت^qU G8159kRE.U?^;C ;c՚ v^EqۛofSGGAop=jz%J^v]tqȂQ`Vs:e F̫V8XKAd<~x h4מ~==Jć+Wdd]l6˲h/>3!!AQU*UѴnOwwfffK8 JJJLLoJB8hThhhE`0zF6k$uCéߙkNgQX^8AR%''k4#vBBB(JNN9cV$Q(IIIj^]b0bQ(U*^tH$x*Qx^{m\c5^܋&8 I!5kz z @5[}Ox z  IENDB`liferea-1.12.7/doc/html/help_prefs_folders_1.6.0.png000066400000000000000000000521231352135647700220370ustar00rootroot00000000000000PNG  IHDRRsRGB pHYs!3tIME.~njtEXtCommentCreated with GIMPW IDATxwXYzHDTQXWXW+ko(*v*6,]ދH/I?!B2>$sg9sd2{&`\z }y`9"JJύTO[jF14ƚ8$x[θت2" K$eڱYμ|/h}!WYbH~uɳ3Av4ڢLȮ_ݎs.Eo"NFtM))S?g?~3<[tmwz6h(*s"b74߮yi&r̍uP]l^u5列௟ujo(}eܭ2T+ڿNc-ڊ2yQ_%D, D}OlAMN}.49ժSGw'Êń& RȓnS̝(םYM)wʹ2VID* ˵stD4J࿡2y&f[k]KDugSJf )}Ԓ=abB6AW1)9Y}Zti%i_%]~Ph%Ϣ&$(qU+auIɃDبxur [Ð]#!Ժj]X"EWUuz䫴B"u?DjmUeDy<._><}G\Q?,e3'kʳ5e^dMDmUehfߴLQMmP.OMTnV """Y2ص>E <.ڄ+$"KpAMn%OmkɎإKnLR\<A)|':}?FEQR_]tcU\AH[M6j*\xV!i`񉟙{?0 M%.Gp[jYh*ɲ5Uٚ}cp9T)`,Ϗ ?~'*,1S$,1(*5Qg VE·gI^I]Ϸ?=lec%孶 'ݰ5>yq+U5p-d]D_;x;"!-rގ/&eW3 yKUUIѽ-*9)ws[[GWFn'C&eYZUk(M jQp3xD Kel߇s ^tn>-q@Vj};%͏Jx,›U}W9O^Ei%cڋ}n^[KqT{eV*udr >D\}+ Y h`ߘ{1<{TjkAbC`~j+5!A1XD@Tgl6ϯjkk@@k@@k@@WP~fooot>|]bJJ >f;w~3?lذ_4iR{I &B5 ϯ7Ad~|]s  _5mڴɷfa0KW1%WgիWj֌M6-: %#^Oy;iגI=oBsj[X:a* >^8oL=9x᥍|]q5,=sϙp u[9Cuxl>>OѢKo<4$QI}%#dX;KG-{>"9#1))#n?y/on;}A-? &DX7v׃KjLmupWkR^3ݥJ W<;}~:hamݦS[|x|i^6GV{:H<3)[Zٴ=to*֪_{526޹A\f\)NEzqu߼כG R>hֳa1ndz<ߋĤ$"kZ_ņ?㥹UW+Fkicռӄ% '$A5ƱUVFX,R]Iak8|֬ pE.m5,ytkHO{k+kC6 ,, ZJǵ__jY0IRz mj()juʽ|X2Zlٓxqmy!BXO[7)r >vmeǭح7CW yx-[>xo`ŞSSVN_ӖHUt"_zs7W{,V}#7Yton>8FOVZz<ϲn( b_Xty6 r 6p{ fOk9=N흺m]du{=|lt9&uU lWI+ܬxnª>,f̫eS,!=?^u'O:U+pRiagQ۸Ʈ^|IDq~$ה7{-ODl(F^J%/}?zU@D'cԒghñػ$^,"XqbuNLD|Grŷ$=\-PQbmURoycm/\Ćih@V?,)֯_AIz~Go,XXUe6tk-l:![;8Tjg*4iD~~~_lGd4:ACU4 t Z&ƇnPW; :^CC~a\O EDX,DqIEӕy}&oP;kVZqa Jor`aZ6?ҏS6mny6]_<˼kBD_NQj+J7}kVuls ۴ze^JDKmydaFXn;*1KK:6Vמ=WؿC.-x7ǽѭ2A,:1Ima%&c}uj6c^[Z6oݾJ%>,.EJ1&k"C;~tYOɾ07XJ\*BKv}V' ѰqdǍrZD`_~ZԬn~!Duy_K*KξjP'C+vr;juV92*bH]0ᝀ߷vq1LmU +󒯷!;.ΰ*>/zgKX4RGu {{p~=~lh9DG<+4< LZuࢣ.;*^K;<abyU>E6=hn6#NY򍽷V羚oȄkAхknFs;M":EMrs1snaAN{=\/>p3o]QӦy.1kdXxF`Vʮ +]wJNJ䯩GN]9v`O?}n"XS]ڢJT_y犵Y)ӐwѼ?z;~f{}pE}OLm<Ǎ{I]mŵ_r yVPX <:=u{ɜXG֏ksŸgk16404ur_bwol^374hШo;(](?,tل ]Iƽ?ln yO?}xa&c;Q1|hb_foa8))ko?{9+eTW8OϷg᷻/y,./?[/#55iӦ2YC5 _WSkL6/P3|As0@~W">`W!| | | | | | | | Mfl6b?1?s 璫kBiX2*f]'84grpՂoE$.(~|]=XI 옐 Vvq2ո7ZxÔ,cM zpYm!7`1jkā YBOGY۞^'(Mx3~pWm]]m ,>=1UPiФ킝6zbE~2h8:mMYϣH՞JOG¶럧^HW 6cjaؘlʼn2-d9n`9t KAD4WQQզ XUzׯ.q@OϠaW)g ̆- O6wYg7E sO迼- !w^xtqgƱ1v P÷1a-ֹt?!Ow"|w颥=]_wRDlLM/&#/< }?L;qbwqm_Eϖc/:{"p^Wr{yDDz,]{ArVa!99Y^y.8 OW,:AV8o߫.H=4\ (Rbzɮ،uAuU(+᠑5δMe1NxMa隖ۢ_S "t4 6ʩ2s#E_YKLFN=1C ߳Vz(Qj@Obx@/dk+E?3ip?⃉,ЈJl|z½QE'OVEvRW2,ϯE^o~骭BDm=K|RbyژX1QW26nT@ ~~~RXU,]?Z҇X|LJ|JDg*;ٗT]J9BK|SYShxVm;5wu^VHf_ w'e&]RsJ|hSKEYVnorb.˚hfDO{2BV^s]G)>GD2r *sIyO>f%+bP۞I,֦B?ExMbM-&ENb6a&ɇ֒qu>Owz*$n~Nԛ܈m6t~i4LYUzD*BMbM)]` mVcC8ܥ;IɮrpٴLPptv^7?ɅDd9UhWΜNOA.o]Shii6;ꏧ 7sp)~maS׾I]z4h{2=sUלٹ)/UnSO:ﶯ HjVŃĐgd9uQl4aٱhNm!Ai_cVv&-{OD, ߇V*Oճ@yFawdjد*Ү雏R|\~Ce>LDjJ:nW\w^QU+p*Bi3vi^SeَobHQݴIKlT<<W| | | | NF{mR乕vFZZZ=rT(-駟t)CTW$ISz~vhGZl6]&N􇝏J7G\13ɬnخ-Gm_Q&"13y{{KZg\ccv]҈S/K|MC;<'~\W5 W^v3w㴦lyYZOq~rjNڜ}FY ,{`yƺںmx,u}]ǣ¯/ 2KaU/Ɇkjjʣ }|s6MMK=xZ^ʰ4S('u%J!|].rW2%:o;DpT|C,ܽW#c#eƥ"RP1?{ݡ|"J<NMMpq=<^}gâc8# њ7zwecOƳQț`&_peXl?^[z"ڞ:m?cQa[D}^toÜ #Vy۔({ѠGD\7̑d#CÎʌ=bFXyJHR2 ^$&%I:RIHs1#OJCV6K{si IDATMc%=:ci}4oڸu;J2ڇE$x[o+!=y45RyRSPڳňW^D0jcMBOoˡ'8o6w6;g[ {\Z*Fb#nJD S!(7?Acu:$׷. qLWCL3Uy3ExO0r:xU҇/)+\jm,ٲޮ6ﴽDF"I2{Tź VҜ I!0GTbxF,M<%ü2''C)ǿI|izA=>NeS[ {3)q R}yj!,hfΧD^Dd{lra^[z==LH/&_Xü ;ً|ڢM~zY[BW^"IN7ޤeu"1뱥F(.ԋ[k6h{Pİ#i*MX&V=A07ޥuaRPY)j|` \MQ5GPsQ]2oȶٗ,X{ӣXCE٪؜V]{օӭݼy>,3&s̖:֭-ekkWjv$MTG}g$16Xs.M<%#MZ=gO~~i֠Ԃ'e6·!;.:xy:+d0[[E{nKgiʋ ŕa#uTPok.bqMugmXHí~ڲ,ʌvZ*ަ~ C]swTfTգ| 0\f<%#֑ͮ'+!k|a6p7SWحk2ZPt!0:ڄ!!,>}iDf~r]Ic&yO㚶o㞋s r_޻jϰ~˻yi9xB6 X4<-䦄>5xq>АQpS^lѻ]m~_|m9 E ;&QmI &֑fLgYBJdU3?y4K8G]7oyRFQNWN)6Σ<9Ws.x:8'q/kƹ_a^_q&lYcŰ~˻yi6]5cv`HBK(oXZ5vd9)MLKåivW7l[8Č :#gYޢmv1wu& ad(bؑ4Q-Wn'H>l4񔴎4fXGRJ@g17Tٯ %NRuV=?xi縶hl1PQ~3Qۀ|]96gKY|Jն;6G{UgV 5泷 ITΐ.{TS* "_$g?f ,(YM-;귵mUw.(mQXgPVsT3Hx㕖}2WK~V 5җjSJ,<=}PKS}SE:9݉0'tpks#]q\[imn19rAHNwv/|7dc׬љD͋:Ƙfج#CܼhU=1:Yح pkVdۀkneɧEW7 N6=}_Uu%sum%Ŗk6Mt9L~1t#$m+F^aڞ%Z424huh?q2VXcCy ulv&KT^Y]1kݜq mfoOlAze*\IM&fծM쒦u ? /]5σqdxakXL'݃GX=}lP~%*sxt@><o-N-Hv=xw+zd _W! \ G ^m<>"+xu-럐[G~`4v\  8rӴ9;C;^-/wI/t=4SƘK7Cykw%gkFZ7SUoT+*(o* x zt4u*ͽf.xzӬs;h]XA!x ey~V67Q4__8 `NDT]CC=F:c͕%Nrp[GuK{OD!GzwY%y-"Eu"a]\'GG ӂݚ|$l6 ݘeuWT`1Gkg]5=ESMi;{'".#F0C[2)1$acLi¢ێk[ф`5!ҕWnKw_Wdz}O!+~I pCl}ڲ,&N!CCϴ:xeM}~_p>0I܌c)Gڪ s?]&HDz^Ic[hm]ܦK^-dKUo)׏C~'~BE,VQ0cD6GG Sb;\,tx1I%w̼"Rݺk?k8#\ECn Wr["xlɿm\zeԠ +#r#\3Y`̅=Wnsr?],J֒n6K"E'KCPVґBau9˵~W۴ fQ_M%"vr [ ZsrToSN)"N:xhaQfAev=h][p ~Q6:5ztRe"٧kEŜo$kWkbc{:%'".>!!!111)))999>I=V4ǒVl(N-¦( N%->( &} Tze5e6IVYwN:CP-.0\C( @HFmoǶ2މc܇hVzTdXZEw!#Nz15m9EE(B"yVWlr5J?΄܉^o-Wurk(=-HO4_[&BYwb #Y<0~|hZUyjEAT!R-+GDqmsA&e6&XjyQʹF/e_WWG#,Xx7CMMÔxc>ͺ0'kOs x٩ѧ,c^ F{ iY"/2A׆92fHJIp*R yIJ{dTfQs[r8:5xgE|dwq?F9tݞU]K/yO+F+ly6&O+̏ 9! #&y[0OZ뛚[p{8þ>Rchk5"&Y'ګ+0j_!?SK6x8ACxw_Se!ՙxO!~+ {~k!YLq=$_ ~Y>^Z*O!d/Y8k_txIqz4lc3ۃ*hܼh]Nss4ioGOPމN|)#\'6w-dm1n<}/WLujlohn)Raf4Gsg`HR|*E egEw&XPIf-< g$(4\DL|zYNPN 1RFRO6nAu^3^wݨ6:Xfah9 :ECR5~WS~%MD tWca -+0P&nx.wR@ dȣGm|)#\'B6"vv C6v- QPpIǟ3Dg`8 E }3kZr^,їdަswєT ƃ[m4}۲G6^0 ]ֳ]q&ib$uD+pؙg%G0ll 3+Uy1GԢ֊C󘣧%v_z8b3s\D&`\D1EFpr)_.A-Q 30J"Q4_rT^qͰZ=2i^3Mfᜊ 0/C1B0

<ߋĤ$lֶذ-F>_f$e'Uf;^n;?*zG?퓵T8-Xgz jF梯t?mk???ԛX{{{3p3o]QFX?uH|bmrnc348掳/vk1K6R6ka̴ʬa^c'M6R[d96y8בR2x|~rrr)jئf )Tci5G~߇0 /kdda^f&{2ֿJDY Hjm6~_%V[ac+6c]Px:8 +2U[x)z,8"2~XqX1"TeYeBq\#n^tcc\[aMT _w+@Q/c$# \IUu-#qD4૷}-M鉤,"VUa;Iْ}Q_ݬNYD4T:#,GD|^pZ|>Rwfm+(5Ol Qvν-M Z-"U4N]t&",m0Pn (06A4O%%KS(.";S+!IDAT^ݖ<=/sig≈/J9KmDuK"r^שoD$_W/юi(BD)E+N'&]KhљoTvZ%v5z6,6ݕDpJѱW'!V;Te^-R7Rv=A{Τd+i8a^MӫcDTh(_$_O>4\n~j{m%M-,k a99aor/#'i܂Ag$bm!SNnZ,nTiqi4UHMUm$+.KS` mVc'kDf"jKFqhjr9/.*d(S҂z8x=jۯwt7|u+k!5#_c_>k"ŸJ _55 _W1݉o乕vFZZZ(S gӤ$t2rAyQpn6fuf_Ŷm5ށkkleq= 9z :;NY f%X3Үl8Thjlmk#"^y vz]tJ¼}^ qLWCL3Uy6gi̶]t6 =ѿ.p}b섕K9IFkkw3u: e'"ZED>Efӈ ^${\}#MZv>XFMbm25۬֌|1B~h76ߌr"1뱥F}yj^N9Zy -)q RcӹߠvV:vUTI3̭Ӈwz9 ={,.E_y +Sc>7%h5u3&O&$%''F$P3zu:O*ч:08bނ7dµߺe/>p3o]QӦ\L{7@Dn'5WG?2bƳn,\,{wjnzz6o~l7}]l!>t!.^lwo_$u祪_ (&lF!OO2nF>ӟHdOa`=AAyϩ#z=o,FOX叻 QgٕT@8ĵXVfm6+iW^]_VJRq q ]e9>t[ES\W6Pi^YTPV=G^ I mF kh1GL&8lIeGV0n";9os_/?syE^@x~zLYt:q.+=-C,AH$J2uݾf&ZzBH$H$ᾜB@ ?~B0HՑ =-#**iB!iVӦfFDPuugDžz=K"_Ö23s^ADHCSlXz###3Ny^ H$X,V* "F@ ɛD"\.x$Iy pO$|ڰk5  Fv؁/p~@`!y 5@^kp@@^?|JZ/hIENDB`liferea-1.12.7/doc/html/help_prefs_gui_1.6.0.png000066400000000000000000000563301352135647700211710ustar00rootroot00000000000000PNG  IHDRRsRGB pHYs!3tIME0"< tEXtCommentCreated with GIMPW IDATxy\Lǟi_inQKQlEْڒ%[I,f׵&]?dҊҾ -/3cTS*kγ~=yәszPo I^BjJ#֒Z#n8C;:U_4bQRP#лG@ofD0դU_;~,LfEEmҧ;bV EfS #g,DDM'+҂ۿF@wVfȹ5zu3 0K˫_+\YГ)ZҢV oۇu ye_ҙFE=5SUԦO FǪ(B[VUFT1h,,EՆ>̬oK1SE iaARRLKm]%2 LZk>V{XX@͔ $<e}(貕5qB(f*< R¶ ^Y|>5@@!/m)-'!Dؿ^^5z z ^@W+. 8 333W.vsQ77g9/_oVokk ޽ζ12q~O&l)W^; MC@AuttC_]iF  0\80j uey2Us1L"ز;knŒq>0 ni!q kr >=FEM4RK*+ΉÜ/"F޸y/?}zn;^E¬{{~{SOXZ5pv9;E$?&ٸELF-9Gt~Hƃ m^Sr[uIQ8m\@J)qf?ݳpK^~<u}y|lq%gX~f{[4+a!AMLJ;尡ĽZ44w{+-zQq˖^nA/+ȸvx]_U'5S}LDn"?t9!TM+6I0awjŻ$ A3rзO mMq^bX%Q+T:h`硘WqBw%?K@~B4rl#(^ćG+_x8cn8;. vIEzhgea!u#ccV ibx4+)ձrncaN7EYY7?eǿ= H9?|fOu9z`w1Q?va_ĘV􎞝;;fDN=i뙷N= O!C~źZLzS ͱ" "-O%v"(]]]N؈`i9/yE2]hR.M[t@ğl7]gr`c>6m|h,/jr3nimz.p-V2f`ؿlZZNqijBxɕIR%(h,kI/O8~'t L9Ed$d4nDΘj؆>^BYFdu(&@3 X6Xwȉ66Xq?҃z&Ξ`t>!)3FM*4TE朧]%`_ i4a]! Hg;⩢mbnt_W}znX2muyɬOU@.c^JJ^Ǵ֜Sb]{ sƖ!5C-_QjAT:`wߦ52>NyMrm|c벒mZ7Q}oʨAjC .jiSnwyخ./nH%,y۲-9.OsgWk~'ղ^`a|3epn>u>%R8+Zn~B@54kf;flf؝8Q!$o1#|Ӈ%Vlpq\U#h,jFuUz?P?l{}i!Y{{glwRǿspmؖݻ\|.SY򚲹'Ofmi;{IU{ -N]ݙ}hO37cCC:vG{F#v.n5fttts^< ~#05]@/3h|,ෂu?_",, e\> `?@kk@kkk"H$هY?LC^N,3z)PezR1OJZ-hjAxݭdIadLU֝0ٲF:5_VΗh44'U5 Lɒ\s;G~bma9^9AoY7^T;g}5573:axU 2kƖfL&gbe[ V'SuO gg"rra-dU)?L?*:-g"Y+7z}е _/mL%G:-xmXGhQ)CLn-EIZ72 Nz}ϼ}Pe`qF?e$EMǛx- |K;gh2 QYB}j[ϒ[E&y[S3>]1JxW3Bh]~iU% G gm{Ň܌87=Sܮfr5U +z@Gɟ^gS܎q=y;3/7qIJwv©6X4h2wI&Ң?izjAy{2%BU*JQWfmNk C1nђ2H# lG<$e9$B/$6A@(eWv8n ήzA1v{'~({ǜ2bƺLYNd}N{!TYxNzM'#gKjj2BKr !U%g6YUOo15(PStd6Z=b[&\MHͩkWR]vڳ@Etz}i+edG|oف̲ r掵YvY~Yd2!)G8U5BHzSsU9Sbv23AOf#3T?}fƟL)ʦN[cw|oC=8N{)A{ĶmWrB͝:^MJQ^qupWw\ieH(iyGm:V.j#JA¬s WFRH r9r*!@,RAss b!@tѶ'9tfy~߲ !-Н%}.>dOy*C\#\Ѓk@@knx(uy}-a˞+ףgxazW>D;^fw`'\ުƫ|"2GmDP .&:q0hh4I!+u‚};I__alH&Q5-ox_'m31"Z&>1X g/??ҍ)zȏ7P(W%W6p]= 61ТSqr5V ^kaA ƅS LC:6Y:~(z;hLVbǹZm . -=]g=p2HUA4 |C]\^v%\V]L.H0;wVz-7GD{YyY=;EHZeD|A՗\zPUQhH lvs?);/#M?i f8|>$237~Wٛ`] Vku|XpӬq^ͼwj'va֊xlq˫& @K^;+ etU.R|%=A9}`QQQCx_g1w7m:ZC5hZhNɱc6e*ZDyH֖aeѷLCŮ-{y29}%ٻ20PnzQ4,e]焝f`jWNIclS4j˽m'f7bjwIߩhˌnyKWk 2)SPIa_K|LěcK3Nl_:Hۯ\v"DU KjViJZ]S7볆OB7S,Z$_ vZj}VlymcCͷ=.xx{15 ͹U z݄oxU9nRµɊc N{Źe<-6WW0_o )seTuRz=Jk;{#r/SPY{84rཋ j-reTud?l=4 ce C.@VOkyENFd99~i}Vņl0CQIS|v B~PT4'# ݜ_vHL IDAT}?Zt7z!^No+ks ?z8k@@kn:_vMfmFUh[O̤̱CLDEEnfc=gyUQwD%W҉"dp_u7FC0i.RnycB[ZLV.dZ&b1|y#׶ ^8wKXJs Tw|GOz xVk$-2b2SvhzVjL.;wt~J%@i'iחg(ITeMW6@L"kư+b*&׶zonLo{E~DQh*2Y\m RU*4>w^M,Rµ#+;ǬMG*Q5:V] OĞA3d;2\ h3H3\{zW#uIrrخ/m2FHזQT\Agr.u2jq?D"_&hQ Íf]J(Mcf8J:ՠj捖Cư!dmT'_ ˮk ifc9JϹ|/+/^g~۹!)C 5K9WY* 4i־q?eeĻg;-rEjϒ2>'{E ZÀkG(~lMg?f>؞g[llj}ywބU2rr>8h/ϜxI츷1"pc ]'3; ƈ41˭n/x^xbǞ7n`]b5([g?oA&E|*)fZbkmzjͷe19}i \+Gz=}!D^OwRT(q^2\˜Zs}ʃFD(Ɉ,'ǚ~^M5+ʕQMt k#o;5EYkGlΠ1ªؐ (*i]Ӟm_G Dq<:<-x?(k5T1>\*!wJqv}{tk˱}yD;^"Mh!k%?_FQqpphEe\2:{A\Lt/!늆HZVEYw&va:JDaA> ӝO$֯/06P$ʚ7l`g=kD20 a%WRULد2#H[Qrqī"m dF.%&13B%SMW\ddE27,A3d;2ƣxQ'q:j"Hg2D"W1|ՆvN30ƈǁY\m RU*4>wƾHid[`ȏ7P(W%W6ԖQT\AojQOUʨmz瘵H%p]c+..t/W+.f?E; +=疛g𽬼{ o"D -2" w.t\e=B(4KPJجI?tYvV^kuV «dg}=nIv1ׇDff={VW{MXx-#'3 i>MR\xXT\ܬS^fh4E>lf38p?%e}xmOIiu*[ ~8Sv^F~ӂb2[5 )x^xbK;޴~cfގ j7FEE9884[Spk:iF2l@2tJ백.SAբ0#BKGE* +]UfB(v]o٫_>7ͨ&/a.ZKSD崼EBBy<㟇TV1GZҬe)>'DꫫM''j~&/3U+c45]TbVi8PL;TR1H1yMDA*?C? "A`O6=5tv]6Wx f$9޻0C‰kKl?syV.;BB*R%5o4Y)BHӒ^f`AWϑk?kp5Wذ!$("287ik2մD+>L!O+*si1b^İ> 80QRo,sa#'&Ko|6WSz׃e!V =lUG`!kN.UҖnk0@(">Q}B}ۻ-H o{3?6z2M**@;EHTއV3ˬ<%QA mu;/>#N㨧n\55׸. Kl1Εɲ}D"+ +y, `~8 [-6[V<(}-q1Ei5b kdRa-W}\$A-/a`> t|㇪khg`K+Z) +H@c蔜:]璔h$}(`~SF3$h,K9і8rS<5%2!ј2'j;;wR ^4V!\5/}tr[+hټZFcmz}F͒.6+X+ݢZ[^P--/G`H gk=o$4++t㳙-d6mIf~[tv_v `-]/8=gu D %|3ίp`]|qE4Ie+έ/ç=GYl0?uܵOS`*X9|̂N]J_dV\e:|۷z*6nm͝9lDaxza \Ӫ ;/ٹ\xXT\:\q~Ƴ쬔ւW_{Fr-?a살sa~8Sv^F~ӂ '^=p糤/}ڌ*xi8gf;]Wrn9'z˺왰vn3Z&g\cw3r!Љzs x9 VXm9Yb2[5 55Ux51WOwi{{=}QQQCZ}me_}uI$X TeFJ~̙&#Ʈx9-obP{%-!UŤ0?}"x:%RGƺLUa4([g?om\Gѣ)wpT/֒fe}إi|eDyH֖aѷLء9˴M6 _~r""Ӎn3)4xY_¨,VNַC? "A`O6=5tv]6# o*S@\?'F #8 %-g.BHHTP\Sz׃e!^=:[Men8LwdɶpZuF?v 5V"teKjhJ7dB~;&B* k^RJ3]z/j\'ꖷ_89?bŢWm5i?t&zWXXXTTT\\Lъع„#ҹr7 i&w^\5Pn?VkӶff}zU~9#mW$9Nٲe"옯j&ԈB;\d1].4,򈫕€TYpiIB ;6ѢcF.ikl(<-kٲAioiGegw`2o[֪}ZwM~kfSQj,tJN.sIo4 vr>yńq vZj}VlymcCͷ:x /j_ҟn %|6> X^@Hm푗ͮlBlOmd4$D9ՀUD&,bǽ;3=vy+rL)fpݷ`W]bXg NϙEj]4;}j~z5y xza \Ӫ ;<[t/}Ij3#yENFT0LGN-(_pG#/)Glر~$ i1mZ89by殽}BC1E($«)).loTP!M՜|,l p:Y-R;<2MlIh;ONz<z!.:7ߜg_^4ԉ8fࢧNXۻn~]K|-k/K^α`j`? t*;0l'."nX=׮NEdמW0nC]wY@@k@@khJ|(^Yl,?? !ꎞd,]kǣW2L8eu@0ǹ_vmD|;z~wt~J%@i'y4 !TeoD%Q'ZJl`xQ'ɵu#H$?@L*kZgk s6W{jK(N3ٍ0iZCR6Dn|,;_L $Oh gV-SP]kJ Bf82`^X£Ģ▵xa ifc9ӪqGLrF۽\v# O P~Ttڛv~}!Y9=ee L~;t1=}QQQCx_g1w7m:ZC5hZKDA*?9Xǜi2bbg)9?4e*ZU}W{j9%T!( ʍ{f驡ӯ6kKGE* ]Uf~|ﲾV铔xvzif‰K隞}kɚ7[sMe*H$Q7~fgK_!DU xjqv՞~⏶89Xsrjt%54Z]Sw-C ǥvQ{7vX:W[Ca1Vd2Y„.2#^x8B(5xY )0 , :J~W+} MG~S'\-Ѿġ\VdzeŃهҎΆS@L70ʏ'y%tFci^ʉđXYRg٫h /j_ҟWjux# o~[NϮ3鮲,-IDATԺzivTV*_Ss\"r9 .sB1~y5f_7)($i8sWYY6}`04mo¥T~KR,`ZvScnp&v?qBIyM'}?.2=GYl0?uܵOSS-=ŗW;u.W@!B;0{˒.swM-2H$ Ȯ==1^ @7 z ^^55z ^^55z ^^5z z ^ND"Hlѣ"z5F0Cwz̢oHHDcilmRbOORP%N Ɍu:^UBgx}b.E2tDάYD"QNN^}z:^DܵsǪ*P^ l;!rx_S샮=,P"|lSMe*8df8-?':no1^UBQzjv_IWOE 3kκYN&ɫk.,h2v8 2MP&qbixr[7_%~{Yr^~53h,؍O\ du_DsZU#gnIQYcx!7#Ml g2+6~V颏Qr|XEOȓ(˛GJO笵uÙ1'og=X6Yn[hp^8˗/mj~v== ɒP?+3ⶵsSɢ*C7HQ]3|l$ʑTs^+m3@٩Wv8n ή A1v{'~({ǜ2bƺLYNo@I!FE \\S;Wᛐ,?:|+"INFK%@ @%** vBQBhPh*'%M%Z#Xj+rdrV!+a\Wi]9f"EFI}yvf+l~%Be"kk`+" <!d4ÊB?s%Iv0̥(cLPZғ\|"ZqBdrnm9Jon?/6;H\!)Y~x@fYMMi9sڬ ,RPI#4^ᆘݺ'몪L|8?G䌣\*$>xoyVu'i>%F 7wx5%*EE{Ł?`ʕ^na+ )QSBuˈwvZp]ec !F`k?cc'uŷZҬܲ4|&͓`e5TS^ݲ#NxH֖aѷLb7B$6ٓK߮sf2Jԭ򳟳~̙&# a+f)X~+:|05?!Z¸^RFSAkJF 䇝ʼn=Dh'B(k˪BƘKXzeL2+OIT3;a⹦aҹ`t1Y HRdg  8pvDЧo g'yIGtٲAioiGegI ڲ>WqRW* tWFǛu=`b~bn#1'!e)v`oŖ66|KzzѨe Rg?WZ=fq¶'7u V/kD~~A?bÎ '9THS5לl-U5w^ye 6}`04Mqs4o S]{a4VI,Nίms^Y_ ޓ(~ .SY/ImƲ`3"^C+71z oN::@~CzHr/t'm31"Z&>18ʄxhQ) L}q^JTEyvDNZ"+?CQחg(ITeM4+Fa6B(vLc=*=rŎs ffN OUij}.V1K]G'vuVqu));!sk?"O20y&6k*1kӑJyFǶK& A-7GD{YyY=;m5ׇDff={Vq?eeĻg;-̅GE[^F8K۞x4:Wd#/ov]B,waM'l 8 Ǻڪ֭S<{z[m nO+PZKOvWkkOUx]xbPBr9!E\_f~}gƏO:ydo6 6,,.gqnhqv)))bRRRB5Bq/~Wwy(9nD9ߝ;ϾMٔkڲ.uwry&\ow~o8WlѨ[#( \]f_oDsٓ温9:ަ~ f)_7AHnx^(BIA:t59AE ;KWx ^v铣GßճF$Q?1w7?úEAv;׏5lAXC_S_[]-MD~܆G(|ݰwGM_|`4l6k}舃vM񒶴T h0mܲ}?J"=ҎxTF˹V}lSZ,݅ruuݰaÀ 0`Æ yJ *kzksYCJk%YN]/XjݾHh*ᠢ=E]s;47{}j5W56yHcMW~[,T!BDDDffT*%֛:jㄙyE(/wM?HhM_=_lZΌ oRw嗣-sr<3`[Iߥ{IE'p9^pﱊK#{LԨہɟί0ݬ:~ IonT7LLh6ݸ:ydY+w[;sߜYk^:?Q[g<ṻ0Zy#r<''g999r#uYIQKg Q y>Ŧ>duȐiKz.Y6$Ⱦ~INZчw SN^ٵ돆tMZ}Nv.+SgL [E'pcIG=ia߮}>zFni jz[cvp>MZkJ>O 6"TkmtHdڐf̥>v>/8&88x˶-Qkh%аK.TΝFl^zFT._. *--iŔ,yh^!jsa1n;tkhK*JZ֡А2PYPp!22.OҏZ;w#No{Z2P7;w^4M`P*Z^3kvIٓЧE*WD?|;͋T+Ց}/r{K_͊ѣs*8߳1k7rg]nVF^dI:]Qq(+Fս{PMQŢbN8_&gRFAE{L^qҁe,79煿~Ws|?LӒMע_m )H6]"h")'ټj :,,T^+BEEߥKu%%IRivV)OiK]%Mhwy(zqՅHZs /FFw [H^?)jkǵ:tș|T8%Аr /^,,_l.swE'!MѣyOg#Է)_$HrjY..uuֺ[jZvaOUyk2e~ؕ7Dz۝" ?^Җz`4 =y wzU0Z]UUUUUф\vCsfD}k1.@~j:iNNq䧹WNQy~Wz&˰ERh2y{hbTTAdG&{͘=jٽ`Ӎ6:jㄙyE(/wM?H7 Op~fՉo{1k1=VQc5_=udɃڰp'ׯ__?OESׯH[$ $β*};qq_YOz(FFi^Xe|{Ӵ=&!_tm?td?/\1Dڭ?jy>!n رcIIiސH$6t(Wryi^*N:aC<]Vp|>UU^^ZSiWAl/MڞiXjUյ*8~xyyL&vz敼>ܼyƍ*VRZmEyE̸ H$77?lW͛AAA%%:El6yxx~}puuuqq99Mϗ.1&d2\#&Af!{=S"_x[2e"L&bfOO 'ZV:HR+ww;roĸH$jl6Dh+D~qk5kÈ7x𲳳9-!|5ky kM}O'h7k?7QrIENDB`liferea-1.12.7/doc/html/help_prefs_headlines_1.6.0.png000066400000000000000000000430051352135647700223340ustar00rootroot00000000000000PNG  IHDRRsRGB pHYs!3tIME/stEXtCommentCreated with GIMPW IDATxyXLwUTӴHPd%[ѕ-;Inns]T[Y"n-Y.ʒ%=6^ܖiJR~glr3g4@K@!NTh^l^ulVBFnTo c5E)ʔ|.NyDz`dnXK~іr><.ҫWŬΒAޥ|fqD[@hB}t:ƪ("P%d'֫i!dq;jԳgKIj({+la]s^0ӰV[7e_zٸh&A!,B&;<̹2܋=`dNHy-.)OaWbH}nB.^c&p!ow)0 !rbW!?G&Ys9*re~_GQMú漾$SAFJY]n&B?5R|[}I9q};d%(BĨRuVCRZz!$Ezn<. "P( TBOQ1޾XtY\&gS :KEewcƗ4&h]|M_JbT3˪HSi*r49-ai8~((pܣSSNpD\lB`ejcb.+F9%Ju:nomuE !lei;>ϖ<ASƱ4a]#GQR_F/;x3GU%=;*KQ(rrӆ5xBU\jϭm,6IQ)yE!:٥6mĸr!(@u- wJ-`׷\)RHSUaFO7x)4-z=zBmN҂.T:n${ql`|ڐm*& G@YZnB6y-_vG4=!j2 ZqB @Nh1(t@sFpe@^ y 5 5~  yݜSf-?|WGf2n[wttlϟ?ohusοȑЂvjB3Vp~ ?VDDDl. mx544^]tie5A5jN)My qO<{yfRfSpPĕivg`|Cyk\"!S)[Q7 ,txm>k[ceKۉGPk[zsqRC]=EZB)LYYFkńxn>:㳒<yM..4ɑT28wZtK7|S vqp9yOſZLVs\Fߑu%ɧO_صb#[.2'a%iWG{=$Ztfݺ4|閰rWYN:iwK~Y6i`os=OuʋWqLYڎ?]2UCHtypH>]6n !n!vaԴ'ׂFx}ún۞Ma&>u5K2,ozͿƮ5=8oʦ:geG< wyg!OS܍{O#w{}u*uy~!b{k2,#B*O񺯼ԍUV Wjݭ8Un#+PN*.<3-gm7mIqIf /=N۞e$d}7YOk+/I>xv~Fm*MkS=/B*> {{"Rs:Fk{%/)u:"#J 9mC)C Ĥ{dVyemaVY-!+R !' nho@`sɃdf'DkF89oc"[FSЍ4>=I#=la7 .;7=!,pK¯U)}Id}oV[=Xw}@^mBST5Rk(&7|Ɣ-t ! sFKW׶qG u}_&Fy\1TM!un"!Bvn?]%>eHkqoG=:o;>SjP!U)r>2eT^NJ!OwT #v4zф SKBHECiomFw!w :Eȥ!yO)*rMGAx狾j3HIDz)<\TJRʉ}SD+!?~HP޽&Vtޔ9kuG C߬7@Îs2=Zj[gw2?~J K73q5~;/]{sG*6LE:(ӷaxPZeR< F̱u!UY)>dK~/c?8o79w}5.aƆыq62]Qsd> xir뻧ĕgn-9&CVmlejz͘fxhI!VJR'2jc臘h'.?0w_G\ir9 GǪO(hW.S\*+|0b븺gy<6 6_9!߆藟XQ7%V-dǿ/ҿqlȲU+_{5Tm 3s:0zR:=NL͛!/u=UW7li ӢkhǑF/z.gܺw+,/j`}6K}`{akODlp~Iuv軯6λp' ˹\NɧOxY׬}/hC)Ϗzhhf/ q_N!bRuyK(?"GyOvɻr'rߓEߧy&*7Ta'kdNzJ9gR"buR>- h] ~mglI%y7b6>>mZt+C^f]tPdZy A^C@eZzχj,Z7 n~ )xMhp=y k5 y 5 5׵h4V֜V4h2BTVc=v%f(k'''nq^}ͳ ~\3Zqzx~ c1~Cg6eӵ{Z#λ4MMM 6Vl̍454;Hńgv9 ~ޭiw^pipӄT,ݍ {y-K=ɍn1vQte_%Ƹwu't~>ceY.ڒIq^EOI|{Y#l'j&ʘ[>84{di+vRH=i11@ Ro/3Oo3Fw!>= |:u4!UDײVI}sZγhjt iUwnK!G)< =^DI[p򂛼%e.:YDz !i4B'Ծ,)&юTdBΕSH m&n(M^9Czȶ3{ln*R8ZZy#]h݂aϣK9:=!B!f&CEV^4y=45:mX$)yQۊFy{Ti+&ʀw~,xs>Wf^PF^8 .v{ .!LT ̯qbBCO)*,ଉj_>[+ kX&B|,=- 6^iZ'Ldu!(7r֘+/A6!dnB* =*(Ru0Yfd{.Gp_=hcK=Οc+7BT`;vZI]G;y2w)[^,tug̺q>j۹Bi޴y{{#)g1rd];wgEZA1mON=8F®`L`*3U3_6hW#Jʓe::uʗY]+>Yi|g~շ)8e܉'wRMmh_ڊ5|*s SU^vO6m[[?_]M7y{?I !aoӺIRG.8;6Cl/6}oE%bإ9=q^`'NB .̔Rjf mvYS'ۉրzJoClbصB@m;W>%n.vĉUuttܶm׻; /)v9L=ȟISo9*xLJjB,+sE?2!RٕyC:[PMEg?J\ O \D,4+q.FkX*DYܻkhhiZU< l6`=zUFqwtvw!|a[mG9u yqӤ:ouᐫmn!MVŻ%RlcFkoCM%9@m;W>zFVnkkP%YiIR`dфBo prH5l-g黮 3j}SP$QM[3¹ym2T6c:[v/sKpe#[;,<ř+HzΩ }F?+<6aƆnoi+18w1W]ǸZ;nן3Yշa*Cco}mZ)d sw].(cU~9ْ7kȸJvEa̍˒mX9G=v\`Cq1NZu3~IJcӞ֫^Z8aߝW]W/׉ְѾaո4wu^@m;W>bXXUXX"y]#{jޝt#gP_>\eymsQ!6;Œz~d̡ZZCgn趑ZYN}ں]Cאo秶wjE׶c`*]r7^SK}+6Nf*+3s:0zR:=NL͛oz~n;hv|5Ƣ&+s1!s)vZ7{:m>teűq7)'y8 imW:OSwt籗^?ɶw#m9T K|>j۹BK):iЍׇu z=LF)cYKmsFgh> WfOǁS: [C Z^^ zN\1q)py >0D^ 7BN5@ 5 5@^k@^y k5 5Fh~""i4N)ыh.NѤh*~V|D:@kI*KH'd{Z%RJ%I>ONNNNN4 !#%TF-%NsBv_>~qֆ uvO[blqa}M554̭7م]Nikjjww+7\ՈwHOcM ͮ}m?\8Զ Cii K4 z8O`Vz$]?8i=-M:}a\{/Jy]o& M!o% tvNv7vBт.sc[]]i1f]l]ICEzf^Y"$=e,̑^g«uSḙgo Z,I;ϾMKo3e w1SN]2zJϹvoI˞r,>}݊5:E0DPUU([`/vTʫuvɏxus@Ů^D879xBu)BOO)N"Ma'ѵ,mR埍MI#gTU95-Ǜ'B85M(bYU^ ;>Ir=zWT)kv25ESKH륧>t){`~krS`,HYUg%A_.a]J,-}'9Tpb+Ҕse =yaM9^DINeA)/) jk_QL!˩mI*&8~ݚ[?a]qiM{ Gd!8hn"o?O*cHj?UB!1L$_9(y!] ^9bzhzc\.w Ң}9u !ڣ\ !AB:7/9]S2_yZɇS95Ds«1I]rc)iqVhEfBzJQ)ey^oM #ȩOHLBʲʤƵ&H)ێP)(%LP/97C*:,6"/mɽ3GڦrKfmP(N[}g:ɈBngXyۦQ(~s7%嗖[7}KEBo&Vf[%tA.HP(ߚ<{3">{ F*]&hwOtM6LY?Qd{Gu+Z`gvG. ld=Ϥ-re@^_5wE'WE.VcgEa~B"!waߤgKDXΔsc^.:_o|~!^y~Tie7~!UwV.%ح]n$.Ŗjk^)%=qfK> C@^fAUUK K}@8\@^y Vh Z}`V״44 MZ=#`5 MCSXs עb&VzhA. Rz4fv/Q凖~żP%{ ׋?΁UVtuHk.4:%'R6"0Xe ŗwb:DX5ܘAn9xl^lz :zҿ_~^0=ihG`ϊ*'=t1PWSRJPJҖf+&HSCj;\1fPn`keo;\ioKGSð cJ 嵀/GZq{$3v17kY w7>q׏=Dha%pX7GR0βK 2~#Q?znJ ?N -?zy{x˘;fSW)7mⲲRc'T?IQlekWҒ[|70TbjړkZ #쨵6O\}uRڽ3[Ui:w@CNp]P+}Uqs$xvidʗS^fB:ަuuk"I*v:62W\tǴ=Y./DspIB"Saz29SF{WU_A*s SV?:u`R['!mi>j`+I{X4m_]M7y{?Ikz蓠Mֶ=VQvSkRc,Y{[*,o} N?۩xO>6T/֦ӢܞB&1nPnZwՒns>=1AxYBfB0iwiJR3!*Axʮ=.͊\}-E~I!Bgj, -\hNItGo︀mLJ>ww'`g q,d X~=Be_[| / tӛNE󽄸NE[Cﮫ,L[˥^8}7w+?Y3¹_ffdrn 5Pw3!esɃdffffVVVvvvNNNvvVYkԂQԠ ++ *my]qmev$~J.v)rǢ07QBarK,Kx5h3n\^}b`s m`HzQV;E*eRjAU:Dx[9GUo?$?!s+ۜ&e^!},RvSmygľcSYVjlֻf p8WPZɮ(qY͗O$=Mm灋&_YgYBf(9qgz5pe,w+| tHmi\69w}5.kg-1~ׅ2Ve -kmn4~o+y)qnE0m;c!f~U.w2&ڣv78sЙ;/>mo־]u۩WX^@>3N/ߗQ;b3%G&YY|6B -z7^S:RJm JҖfK7߰]7LMm;kGڙG]ymn~LeV]9t6Ee=W>M;ywit; ]CDMskMpoWC|_0Ok2@• 5 # 9 A' Vu5 !,~)!!!)y -*p5?!kugoU4ʴq0myeudޙۡ詋NFEj+ﰯǐ>ݴzlgG‹bm[/'+9ΰ>xNv3b"O0AI+ݦOقGtn.}s9&Eh?ίW^O_E&AWf ܷ~sqǘA=tIkq1NC;05u/|VT?zbe v[0n}$G'G2צ3t GL]D?Ehl$/}L8?T1EUAǾ̍tcs+ߦ&_sqemx&_3Z-͋ ]ocљAgYO7[(f|}9hׇlK] ~<npשqҀ |uU^ztZX^Ȉ_I)qևFm]p*15ɵ`^_a]mOߦ0Lv֟Uފ&dGY|~C*h51m/{XZ |I 2~#QTc+7m9d8WWzNrƛp,Q|Njgo={7%{vCLI~nt<=߳eIa҉aK !~STA):,3BAʙcW' uU^>hoTUUg)g1rd];wgE dyO+K7tꅅ\-{SGHfO6m[9Uꈶ_c'i L]}Ÿ(d#e<:xv__u PgfS)5vg OV|9Ie68!#]=mZW9;F®`L`*3Uö,(zQ_o#Uc6NբJT!J2lY8i2KHUxBg#(""ʗ˗,Y5׷U~Y"vF9ׯux[NrfݧvL]|bY;Bᬢ ~E|ҬHEע_TB !C3Dz(X.$KgW5B6IhݼsHSڀ--}lm:-*I!$`وfk]/ !TI BSvelˠWö {pAqҰP,!]We '&&FFF0`|="l0zU6~VN_rɃdffffVVVvvvNNNvvo֚E\23;''+_S%74=rNͬme3k}/?c%fS?~Q5x[Sl),IܚA֏\zݾ1=5~?5dKެa*Ccomw6-hߔWR݆7eӔopLƋZn$ibv%[V1iIys7~Vxl*J 5~z7ެNg# J+17.KSZ}18yBw ġMpb)d4uU6>OyCSLk9+:IgެvfQGF_jA[ǰ)y6^S6>`_CK'k3]TsUO6B ]U߸k4F˶]<]ڣv78sЙ;/>mo־]u۩WX^-kMfWcB+S촪/g)t5}ךq@Įd}Ϲ?5i?]ij<m 2• 5 #FhBBB kh@p=y k5 y 5 5@^y k@^ y k5 y 5 @^k@^y k@^ y k5 5@^k@^y k5 y 5 5@^y k@^ y k5 y 5 @^k@^y k@^ y k5 5@^k@^y k5 y 5 5@^k@^ y k5 y 5 c\HH: 'BrrrFy 5@^khjTUUٶ :A8\@^y k@^nZA3;v0t}\ʎNx@p?jcFUTTXpniiѣ0}h:54#tM:))I fffFz M~vp+_4&##㄄ ut&CS__Mżbdd'$566)mȕĴ7>hLtu5la>:::ZjLfzVVDG[x8?T1EUA"/y*+sc: 8v`<˟1z0t1_nZIDAT^.pu_Fr>dkkkh|ȡhiitEeeeoaǾWn#,(d8WWzNrƛp,Q|Njn!vaԴ'ׂFx=hĶS!999=nٺYNoӦ !@EY999%=#}bPgfS)5ΥhH^!J^fB:ަuվHTZ2Oo:3ś̬윜,5Ҋlե酅 ?kkkV/[L,b\[ ˴0#`M!s+ǵy -2i4Uuu\yy&3=--]^N>//W]]FSƋZn$ibv%[V1iI,gľcSYVjlֻf p8WPZɮ(qYM{]#]Pƪ,use#6ׯ%)))I2FkF955$ Ԥh4%`bw귈lq:!oRs(2mpbڣY5stfAF śoz ~n1 ,6&C3s:M. %8/݈m!~ȁ}?2222ΙOPߣgE,3Tjsn;V(͛f= ?ɧ1rLFrNO:|Ţ5 UiObϲyf~\MM#d2 Ǎ P(qqq:YYQVJKJJ Z**&&6lp.Q*** d++*6V3$khmy-//OO4bBťeeey&p8111III)))5@PRRRTT}#FLLBrqqqyyyr)JMB9_>Ek5 FBBB uhh4 k5 5@^@MZ'y x~#*YIENDB`liferea-1.12.7/doc/html/help_prefs_proxy_1.6.0.png000066400000000000000000000544341352135647700215710ustar00rootroot00000000000000PNG  IHDRRsRGB pHYs!3tIME1 ʒqtEXtCommentCreated with GIMPW IDATxe\[gvΥ1)  %D º7|m^ֵڅ X` ұau˂93y!5e%= yYU#!5q/!-;ݳ`Xlo9frtQgoB'IBq+?v1sq8긤%V:P'a6WI V"@Ig(T( Q{+n~W:PW c]?SRAeFTx}/bIPHW8K*[&$(*:mMwqW}پ22sn?;MJX^WQDB,/zuT+Dg@kk2^|(ͫ3 LS6/4yMQW/8|=90LcE?yB¥o³eL`hT,g*)Erؘ@?UMwB#کɧ+KZ4ITj+/OL(j -V<1ҍ5dpo%q3A x^!9)n:_dm\ayr7h K!\zS/'i R[fȧj<{} /r& ?!mCҪRQY,a,J$M/f@YieDA5%qk,6ɨyZ>3QuZ柬wriBf2^&id CEI0?QOV_EXT|E:MLH"bTʨjSzUe wCa8 Je%kiT&sYǼǯ?V(5۱[moԍ5`-!L(+z ՞+U*"E%T%EP]YC37`ϭ{O!Z7'lB^Cg졹"}>0_#P@|겊rҰB @~~>vBuet:ǯB{|BBaF!!0_#|BBaF!!0_#l~yy.-,Yҍ:sncGoBAAyt}gd#TII'N"pgk>O"%vX9_ #HQ}nvXڻɛ_S,ML,*:^wGXd\zg*\;u풛<|d{ا5K[eK Y642|<l>t븸v v=3٫Ȑ9.jq+u2qO^< sDM2:f$GmPXϛ(;`K,ߜ@Xj5r( v;׍\Z{ECkP)xPU8'5vg_ێԮ5O^^&g70gyw&~Wm.t8xE?)nQIOr+fltYHW>j1? ^-͝Y~Wu'x=^HSEsx1/oET5xVM17(,y;Ϟ^g:o7谥'=O> ۄ!FQ1$"Oǯ>zHHk:$z wߺe0[)/_ːh(+̑&x^Y,7;;k NhPϯ ҖS'}چc.k+k78pE*ت"NZ{ք7.-leĈ3ۥF]=E$KQ`sw Ee>FT2OLXv_>*BkIʕs*?]HY)t㮞L6336ӶePSe .W4E5DkMwL<} H<2^v"g_LL̨ CMr|=k_ .a1^dBE/lU6kSweLvmś'a’m l}z&.ڬ0|cn]k)Q5,vaيj]WaOYNl+1T;_YGg]PRYᰫJ b-ĦV39fujy^V=NMIn/wTc-,i֝q{ˋ0'+Gfnq<ٝ&8ѵߧ2_.ajoN?P78R@?m-)X{|?[VL^[.9vށqv7^~A {O t7n@ Tť {Jv"F*TI-v໯bk pŽ֤fW1 rJ&Cv]}5%4XYzn~?W^B2L?Gc_^Şإ/"з3`o'65ODAs5vۿsβZb_}هBN+k!]GnϹ 8=⑹0ofsl~CB]$' zW?Y#Au9 =UkQ/5B>D CB{h|Y#|?? f~.rx!z kBB5B!!0_#kBBaF!!0_#|BBaF!ϗ7n0]]q-KǑD; Uv?Nݸ[ daqIieGXDuvn/7_s>{|Wzs\R1քP]@Diw'DY׆t:NnX_5xڽSSFUSQV3|T^Ct &{\aAӇ-N_[Kq:[iHD4 !S]{Vs'nf=14ya:oMN1ZՆ|@uGHZ@]ETr8mI?q/>uu nLRJ=kߴ?]3}@UOr^-f akxվKQ=f-;W2<~a7"}L^2xߴb^BVJWٺm VF.NG{ju:['H9*Yn{ҽR2?FQK;vcd-6$=Ǧ>>G}껜V6]G7yp_?.$jxa ۍpkv,|oRjМW>8ʮa{,[p _5XO!#;1&t<2Mw]?"Փ~ui\~skh-־O3O$tyr׵rY8߶ 7,{ӧ\nΝk\a3l \n49Qa4"(7Aѯ}/GחN8У2-~gƝf)ցwD]/Yig &p&#YAZ꣤Sקh(+̖&v@}Ws4$ׯ#M3q8b^9> +wgcT|t:LGjẕ_b֤}#><^`vl[t%1k0jsT&fY}Tc)m7ypUJ*9izn(|9y($J-F_ תJ2^i>Y(4)—v.Xc+gɋ/۷x?'LJ7lnֺ8D_L[;I\\\BBBw7.Jvo)$a\OUFs֝*f3.qY:wҭczf2`ONۖ ,4 }t%!' x^Rͬc= ue-YkӮ3G|ce޵̡wy:^l:("aUtio9z.lu\?.ssF_^ZhmCmPluϷ{|.;#wEbf !FA$:::޼y3##DFF߽{B$6^rh{ fZ5iC0W&{:jZ%>t,w=[Lnr6>*RqQ8C $r?};={ܬxrW< v﻽~FZ|,8bCЎ}X#=}MP?*e]bfœm)@ Iƿ;_$1I拦|ry޾7M.7,BLӔKm{>>uG{c}%8t}ثJ~Z?/LfddO@DDDEE.LB슟щF7Za]~׭+{k!ׂdnvI!SE!!0_#kBBaF!!0_#|BBaF!!0_#X?X,VDDDVV*B]+_ܺu]ZZbcc/^vtT"w ٪Z6$$EW0^t!o!u fܹ`cc#//O&d2Nupp dͭYqYi|)s&DGG2#6\~YLAlllsNyy9"OEIm h%yD!ޜ6# !󵆆ƛ7oTy,F%ӑs4Ux--+q{>oxs&%&Kd'|O|*{hu_%$$U70ݻxcc+!Ӵn7s ޜ[w d'-8˴n]8/pi.jךy*GBk"d2Lf~~~ppppp(PlOZYÛTw ک)jg늖Z}}4HθslEulqm<B|3P^^ݛg2>}}5肇BE!!!-.FpZ$Ç|yțԪwoBP;'nWNH²gK㱅5 ~Zt!!k|B5B!!!kBB5B!!0_#PbEDDdee1 RjjjtzS5릕{{{{{{^xO4[x:3M98̒.2[y򫏓|&BGk6}yyy2L&tC`` nn]s{K9Wi:Q \ K~Iu5BGh###]]EͭE:|x oSSRUT=r:u+LՕU{kzE]6W[kA/(&j1nֿ7#yX*+kZ\5k^O"ligj#HGuHIIo ))Re=Csv^ͫNV^ٕ3l2oI _?&)#+%f3=@}wv^:L1M9(ɢm]ZJǨ3j{n]>SA%şr7τL{w{ BGUUtsRRR|@ewSow9LV!\[TDJtxE{o7G"Hz(nw򩭱=i>ߏ7slщM2C!$~=vu?<㶆jda5CFudkpšGkP_}dvoU:ˬN^)}XuE-ŧzl{}kP͢أ:.bJo뺪7-ҔIjz_ G~ms"""MHHH[@ph섵OCn;b?Y)J8tE Kk:Ot[GLY2e`q 2=Kc!n'o4{u%ZdE>*x9IP}NxdHLdu祉GbQ]KJ[4I hJ)o4an&&&qqq ޽{ollRч_Qd$?eAYe$;g٬j6:9mm³e̢'[ؒd2NNNDbc3Ȃ>**'*3 ̼z<ZW^Ӷί{myee$;Wgqxraj6Yܢ=[nM &j -3F)ު_7B= 0J^^ݛg2>}}*g+BBBlmm[\NH&.\oBYs9{I'>2okx& ԓtX/CٿNxQ$nO|"3C<~~@߿F!!0_#kBBaF!!0_#|BBaF!"$$;76k-M:;N@ xBaF!!0_#ꊺ獻w I u-kKSQs^r 3B!9fUE=  6E+BuE e-'^N0|2cã}.JZZs،3z2zB=xϪZt0u:Uy97V 5n;$ABVl"޿ yqcDVS%&#Ǝ2QM=0ۢ 6@ꋻ!q% hvd qFrܵ>Y+z|ʷn#3])+jan UH:mi&G?XE^]`ZvS\|_z-7׈Ne|V>+XPJ${6J5AFvR8Yq/δ+W6K&MT(Mx.HbM nQ@̅޲PRx)$ro\!EOj{OTXb(ȋ:7{oY_'ͭ,6Ic&k:MO98슢-x͹^% puT$IJN?Um+W3K?^a1QQg? =4̭{5nsw#VU0H"K+t1h$mei$=i[xE,% "M"Utf zdYVaϥ_8n;g d4~PP^Mp胧Bx}-(n$TQIU CRm{Sʛ b2NMaUٓ&{6[u-IQWDͶ:FrTYgU81Ss..B'tȷFeH\X_ 4cQv1 #cvNڛA UkETTH2Бs?aMA=qSACڟ.7YSLᾮq=9ӕ/c%w-UZ-eh;6 M9N;5E=A o{0x??3nr1Qd<5.O|fՓ +DIyd1#,2?anfZ~ɹl479/ߨbd^twN򰊾q5 FP~v:L Wspz̼j&ͪIK"Rܹ,L-45}.as%|E: iz^yl8zc*S{͘cyLZ@;ZʁB?xH7ƥaxO@y E\V|);H49C>rRvvl{5-r2Vx|7Mȫu:;fgêj9qc=U>` 4 ?޽nWJ4IUu9Yftu9~DH 8syz4q9ѓDpěOz;5PYuqn&5lZ!mvNs@&AcO Vv?Xt^5S㮄;R%ɭ<MɺɦkqTCedoX(md e~u_qޒ}2n>0lZ!׭⼨@1u K->;g-vff[Ksb ,F(Kw$W3,ig׮3 B՘01.h;hH\{S\+.Jh~7-a7,dYL{BxH;7ƥaxO@y E\V|);H49C>rRvvltbi|ٰZӎN[t%U"R}tc- tڿJDZi6궭4oq9yykD*̛- SI|||!!!k:4#?f9Ú,3j/G!4$tz7cRFar0# =U|BxHρOhE5/z<A!!0_#kBBaF!!0_#|BBaF!!0_] wtuAnݺ\Ѹq;?AəߓGDEDB]TD)zQ 7csnoܹg6`ftin[Rrv{)p`r8m[w eY2 D4W)H4V6w_O.G&iRCp{qV"dΐqU\7-*;3Pt|?}Ŀ׸ښcC8p8B3! "UTRUco&r6@Sn{8O= Pe<̩VaUgp Ą{ַ"HP01ZQ=E$$f1jΛ9w}*`Ա@hZ>؆|Ŷ@esxca_Bsԏ9io")7T#qIDATl$H|}"."sah~Nl+9яڎorrXRA/ K=ŰM.ݬ56B=Z_OlФ^ךIRxsjbITMޤB/c^ 1.fk̚—duLjQ̩wOE*5W15[:@T頌qCD&Sfax>e|f{L!,H#lx7@` 6.ֶh~}QՖ  ⾛֖ŵXnD 'g}#}R ,,N }a1[zz̼j&ͪIK"R|fh*S5bVe&8=aYkE$疲9~y?݅.:*L @5Bٵ $ܧwK$RO(!tZe &,M [LY[.izM cn*d،Ҽ_MiYL6]g-\7"]Ns_C3i=2$du ӗ:+<S&QU:OelA|x#ȲFc'r~c\*Pe[jIpX`݌di@3s1x, agl6\=73խ[I;<2Jf!w7n p8ojn[4W].5<;zMB(:B54ٍxb-.'//_PPcUe?T7A#$$ֶot?`1o&3l+Ap<Cb%hU)v> byiwEgkIMq9~\#:9JX>>m;7:yM]ϝ᧐˕j(=\u?٨W0]\ȩ-L_ !pTWz!D =[ԭ=sD]B%ߋ O&O{kfD`v]uB BzNX޺-FL BzYC^nt}w+޽ˋ%&B&2~Ӛ;v7tSv~-r≰£KZDB،N韩o|3 "Ec79BkvG}L.\U'-&ގoҦ:~0>}}O=NQȅkoOsiGХ S ちWw6Ҳlr67ˤn(!mE򛪫7V}Tu\o>55efGGAML8wЙƠ׷L87ޥof<l{2OpӁ=~!}4~QX&ujm7n o ^?Jpʯx+?|t>BmyHIrPWoutUՉ*ž3`3U +]nYv<}{,)B3auRJIrbK<~C ! ';~5 8k߱^cg2Bծ;gJ! ط!=9~6~Hg1YqcQUf("GO"cw]ɉZ!6'7{ǐ'uۗ~p۝ڈ.}wɄVEFFVVVr]C#QuPInn.ߧ8r$I'vXO umIZ)W~h@z Z up}kzZh /kz @@^5^kz @@^5^kz z @^5^kz z @>{.;;H&ZxIz 5^kz z )9Z]ddv@QYYAh!@5^5<޸@[R]Sue;t,6kR+ѽ[}[ޫ#_ɍvQx^wetOǻ2ݕK#%tkʭlN(w3kwU8EK7u㣽W#eP*%W :}_>[&so~>Kz5\sC!^#'UN ?@Ñ<@Cwy\g>u7sm^|%f'>/IOPIpvvv}@N#O-_]F {şh"^HNb/& 1ضP`+~ 7)+*vͽyT8VUݞt Qi1Vy2U$t͟$k=o,*djDRy.qBc<[0;1m8Տi $w( j|O𼛓CVC:sؾklg2F ơdNS:׉`sMl#atiĸƆ-sE \١nAb6I9>'>^Mΐy-ϥ$'=u䞺bO2'ݎyU$Y}  NbS`A:K?[>'(bD' ݹmq[@ILЋy=^29 U2yjL|ϵ3o8] m8gȚiڝ[P3o=Sh?bD#C|J Iڳ?-$t SaƵ 64U{`FO#}aTzܞb 3(&n5;h y=`gyԆ}g /{o|ӫ͸dǗfDz)U3; T OgdW_p8_D,;NUnT]^8iPtDk6Ԇ=;F k܀}̪V$ %a1æ.p Q[>y1)N,%d-<)BHGh.L͙v="ÖT=i^s_#S޻2+Q괃G׏j4<ĥ.T?yi٤7N۝'+οrr <JKK]7gMY =HY s(|Ҧ#hob.4组{vס ud>|CXWخ* OYV9B%;|꓄vnɇW7[ C"noފy{]wח$N,VIpY7tUVp hVW^kyy#az^bj~@Z'?4P/QS"G@'͚$\(R2鰔56{SI@(uWщ  'Ez.]6%WE?4<`PUlxgDH7-mb{MmlX|/YcFz~C?+ˍ]×᪚>Čq>7mW^8jў_vG~ڶ Sg9Us>&^>lsv]s|G|6ù/-gC{t~:w)yvzQR44&aNھ\U{~3<8׸.I,N*9f'?|y+" w4hƌ7ogioT|G@hj1siFmiFsiП?B8FϥBiF!F#H#0!4B#F!FaBiF!4B#jMkn:t{ƃ#Gd Yǚk :}4siF!FaBڬ;w x;wpyZ&u[mQkJb&2i`6weȿ/:"zr$I Xh$I x7m[D ѣx{{Yvdb*;jhDu.oٷ s[s$t:]1h4]Nѐ$Ibw`p:M)M6=<ޣZQ+** :5kW{=ױd2YZ* D2YTzkw}bSeӾkIoOI}z7cL%-HžppwiU$^\`7݊Mڝ- LvIC%f_ƗjT$X( 6uэUw_t tlgVSzZN "<Aߝ8RwsYLwv|C_]wsTN[yH켫[ݒg!%IB;vqigFckC=vС'FvvvTT$p8**MUUvlxxBP: A*uk0 ^ߩS'\zӦMMSG0-gH;PNY{GOn7S\b͛;Er& r G~sm?T NIĘAuܽπXqi;.Ӹ<5?>,xWX48G%a)ffT-'&x A8:NӼ^^^ ///WEdddTTA*N]"P}"]YYf갰0Xl481 RiHXXXϫkF솏=)6w+ ֦κk*|UYcSq)o 򊲤<^doX};[V@)' 3TM%xG&,nj{ k0̢¢7o+C?p8 &I@bش}עmvY  r.T j˅ CNѸ7\9I/ܧNˇm0xsO渪zOZpldsXO*>Čq>7mW^8E?EuPS{xY=_Vl=J.oK!|G{~5ewϿ;;m0uyC+]5g#{Z/;iScZ|}}X,Fu:1B  Battttt4I[-Y.}>)+3$i(+:yZ[tUU՚~@r<\. ELp:@ YU<:p}fi_i&y+" wZǃisFIw_W\횝(ihLœ}S }6_Qϊ9 o]){wgffƮ&v"wI4 5n!?%)+ I,N*9f' kzF:.yGxآgqsZN   DQ:}z>,<^KPZ%(HRD"RNE6nfM&JhʶcnPN.X,1Z>+}ڑR eȐG ǍL&׹K_>}TnU~!G=scoJܺy[bk"r񫓧vhL&ft:d21 _r: ˋ`X,4z -#;t:Q>Bi>Fx\.U 4@YH7 G]ϵf?'F!FaB鱌 f{ M}FԘ^jsiF!FaH#0!4B#H#F!P_@m !z:ǀ-RؐIENDB`liferea-1.12.7/doc/html/help_subscribe_1.6.0.png000066400000000000000000000253721352135647700211710ustar00rootroot00000000000000PNG  IHDRsRGB pHYs!3tIME46ttEXtCommentCreated with GIMPW IDATxw\GǟJ@ ``7[lѨ}ŒhnTDc]b7" sHwB}8ffyfs{ $J*/Rc#7Y1zAA`b#M>wy8qtP5At =@:a݂r;^{} /\ 8@S)Y(}]= :55eq>z#:NYgnԮ᠆zoTָMM D|f3GBN$h56[[|WOԛ:dz+#4OrpGputdssbsC-&Ko7F߄ϒII酏ó\}3>ͬl LgiŪml糉 /kTẙFUCUVBV|.ٹ"JfZoKW >LQ;)%~Vϲ jiB {9;O4F6wGn|eT9roi!6,0Z@AAbguȘK+@Wo=/\ǫ=q_um ?[OTI?׷djpK [k1 ?r# ,[Ƽ+cдQkTUhlc;xӉh0ؽQ/n2S|.~q7@tBSjVO}6xsty' -ȎMӤCsF1\;vpFFxzr8 ZmCZGI\yzA=IG i*)%;ioԕ"  yM{'!(R$E+J⥯(ސE\ѴlzdJwSh-J <+vSnś#H5Д"P1ЌވՈ]&"m?J`eDYL&qso} YV\=s>lico`X , }?LX~D)^q'J,VeDѴ-H{QJwt-x.lMG|.vM$LJ {xS+z^e:YдBua<}JKߪUǟ ~Z: ZL@SvIQf?jG6UV@_Oȓ@Fd 4GH+z#SJCnN\AyY**+C"E(pûs,ьc,6۹5dǧ)sP0E POܣ@:݃ȌϢdi[!QJAV|6AaIL fh6YX:44=RﴩRbz@"#w~dw ñVc|G2,)'PH _J)/>K&I;bK.-jǤR·m'?"hX "L zZnE<|7-t1E' x,}F^ W^Ҿ}W˦(?mX/\TWMno'oɧZv A_ZPQ)qaL5D6Kzڜ!zg):<{A'/(>X=\~§TO_=8{A0wd΄;ONIS. bGBSC/XM U~Ӫ[ J` ick=#.ikZڈvPwE|IE}`f _S,sۑZ&0׈:>zW$)M{ Zi;uH 6_[Z~FC~=Gm{"<:Y,gvW~%JDvNS掴7$ 2'߅ÖVگhaݥ2R&!|~t A${7O,۸o&Bv]46aneZSѳVmWI MH.*lgce~{Wuߢ ߵqo笞JIڍ93W\{JLx=mѲI=ýF. }^xfƽMGyŸ#8u`#"#W|ƒH~gb f bhC474=aNys}R!]HQPa2ȹC#K夬(Yۏ:RxR$_8to53YӶ=0Sr27)b>(mLTopſI($6_ɫ՘ 0dM8D5&S5}M49J`0g$=] pݢ뇏x3fjMRm*0a*%M}z9=c}7ia&Xv -=dR*Y$%[#`0}rd'+6m.A}x|#Kn_PH$:z%`[:L]Wb7Զf gn!>Bs6c3yIjUWڠ΍JCN7<)y##5ˆgr#1ҁ/B~&aGV:AYIߞy~5уͳsj :Dw0 :  (OUkᱫCT3MʆO4cA Irϫ 'Q0܈?:?xR'5erQ\Y 2^b"wZs|*{g)(G/uNt#(OA4E+KϠ1ؠ, ǩy5 6wm;Ƶev&DtV$YZet=X-<]<{yhOQ\haiMe_Cis"HALS$a|Vl5 l)sO5!ܱ2V_ F+CuZe|8btdUzLp>t hj}-RWA]b' d"ɕEgUVfl<X;jEw౵qJ#M2>C1,{ҩՠUi4ZR9t65K|jʹUm>]x]5toj-\,_^d@oG45omCiy"ԟSͣiCUcA Sk,h[va'4Ҟ땆tYҍ ŲnS9ۆm'bMMek546#;?;yyT3mj 6Sd q*b5 <VC2GStYҍIsCmə#m۞<|聡R4Z6VCi3RyA}i/fαu[ps4Kr2}ɠ_'88h1noټsVKO]n?ΑoЩ̠|ME;כ'{jӱ&TN 9FN 0x[5qcѤ[>H9%ߴj1ml*NYrhF(y̞.<59{}s>o{ʕSFSk`2d9t_r~ӵvww5q=RUU7Z]Il!TBDP#5 SR7`APAPAyBAyB AD BBByQF xs ȧ (O (O)7пwz^eZh%֍>~|;H>F4Ml9m@ HM[s6c ,Z,&O*j{+ncM;p4T[8Gs3U׮ls '{[goG;wkγyO?c`g?OIl38锁pH\6+,xU7/;]{/]=(E_ח:sHV;2rnljn>Ok>s=+ٛ\q3kjͤVfoE]pn㑿_G^0&vǛ;("؀O4ʿɄhyc#sdbtɼEMS4UTlb+xǞ3WdŐgn{:)5t1cOFnt4:)=AÆTgY0̈O [IDATeJHV˔ُX>c_q)Otw:X=6?XJOa.'$\3Ŧ1Z!Yp?KU,^qV/Κjh:ر`خ[<Ϻ![ u ]K$I)w/zJruY?՞_˦=k䡢wu}?`Ŕ)za ;%%86.]cd*W;gFw%)y{{}-Y ikW P֖1!!!GVy@GnfSR9P@@@,OˤEsǐY4EҔD1b w8k啇yb:w!G3KWPfqa3;VDƐM7爜Vp\$~a*i=6[ihRKcqPEu9DSOйXJ%f"Xrˉ&)` 44Mp,\cWɐ[&;nwO4׳% yi;gGw_%Z`fC6am`!{|w9"EA)/MGUH83\ ztLեCZ>˨sHhf|m;5ۦu#CJ,Q<\{3]rQUn{FN$=e|c32tvNpw?nޓz ]]2lTś7GC7Y@ddfaE%EbqNc˵6;Gt7na]ܵ'4eNۗwү+mm%o]8vcfS[Ͼszцň }}[j!:KzȬvן|޷ǥ =p8!b>bs9WU)uV Z{o=s 5sht/&ƃ;zkZue+"1ڹs7nLYY;qԘNjKHIlnݼ쭸EPR|@"x=EMS˲wLrY뵋uY*/;xWAW'di]u0tww Lܾ EP,(%i@πm%HoҴ61R=ɝwrwX,B*KՑDiӲBBM vTˀ P~KͲbsr$l6 RPx lM96yŪ_I#r\$.?v,1;Cks.'6m;61?_ogggddDjB!rCS'A^EU%.rx<^k'S2L*IڷSϐ1adi\N}=x6%HR jqSꑳ1Iʛ;6f˖QԯnQX̼r ?1*AC[7y;v1[+ ?=2{U@ΧO$8rcP2uVPU).ǵ-1i,.qY2.q>qٰO0VxSPJ2h*͵Z4ńCbW!85+(Gݗx"r;hi(/,!^b͛]-.]x ^.T`:Sunue9@WqSS }Nƴ]:2TE׈$_s:RMd+NDE[9 %/ߥXP?lp_Ư=m#xm ?tN.V{؃ٷdHj@wC1_m.Ғ23Y\x2yuO  5SAG~E , }h#4wAo͎OX:vـѻ03 y5x*w2NYPRpyʘʘ*ҕ($/`@qQYphp'tJ̠Bu81`fں72ʹ) U;0@^gA"L7*=gϿMhy8u,0{zׯ$W(.j*ג.f\NUjuJ<.'X섌z*݌:v+*HuX4zlۼ5! ^q5b&󹘕]ixPf+YVQW髺\   X=hٷ$MI^RpǴOx$(:li74-# 8"q!rm']ģԠjKS Gx”ҥȬN]4)v핆3n<4%S04S./44=# WHzaF rOk1yz挑d),VUJV7;aWGWr奪ҫyr@%⏕b nJڌ6FF^FG]޸ПnϞaINqg2Q(c=xt;Ƽ{W2\kx_%UJVܠ52+ ?yک(O#qԮ"Jdgcm,>^]KA{'\+_=y= |y#H]Jn!ZC` . = ҆]^5!&"#sJ@mAT ?=T*__ ҆@ <A4y hA!CA &AM <A4y hART*Af^Eox)>c'eJ5-:[84.6\}ӯɆʍxz̑8|mM;1htC'N>7"p0;sm}GE˚JrRqSI5@Ww )WNug#H/r$s#6zݗߒ ?ˋk²=JKw-6RܬveR<%tT6r-~攱ځ?s[;o?%7m)B!ȌI^}JKofN:33!i!6[MfPNYO=)GcRǪ+2KA!5LJ/4_[2u]T7H)^Zv};F̒I M0$Ofg#Q)5z<]cVGA! R6y" iln]kJh0טN+bs2U)kiHw⹛W<5%%!+Sh䲳&/=;GVh#hC+edP5dAZk8b83!'F%v86cfxS RgNY<U A\--ϹL <R24eUSʴ_ǭ*5+Ͻ`z@|ac l~9NZ*QLS)b=.5BMȯO]#Ǚ;^M-T}nR(;U PdtΠ+OYlN^S748'P 0mrsRNd Hy7%56}NhB2gy2:^e>;=uhܒ2OZ^[~^3kN^هt=o5c1<9}.nk6._?˫iAT_YEZFs A!h A[AhA &AM <A4y hA!CA &A$pFu'}Yպϐ N`M', ]YYܹsōں։ZIRhtS^swWql{M)eRJEfpw Jf&xEF<˯;o<= 66v[WR=iZ ZI2PAfhpRZҝNA$0%\.ۣF>| Jupp5j͛7\{ۜ} /т.BSmph3ztV]ez[uV |R5[粤~"*z,&u?}!Ѻc~}l oZ]o̤{#AE񻺎y}ǯε4%*0vݗЎ[l+#67؝ׯ_+**<ͽ:#2;H=x𠺺Ɔx "'f%d~hͧ{i^ZE "Okqx"3ko>U,5 j"2m:)>*R~SY i4NHs5orQ[nҡV`%9d$$$XZZOb>إ,7_gէOc~xc55ZY8q|g 9b@ ("#ϓZ3jC[ ,YOyyO)NR47CUUq3;'Ϳw]vĎj#%W8Y]V:U`נҞ鳴}fJ,vVyGJ)z^ů ZT@:Yƻz*JѻrBॹx h>=y13e3F?kӑ)l.;5"u1[=Y^=,`q٬;v;WVVsS"=Fӗ,tƋB] oAQ5vӜ?ڢ U;:y46yuRddRAAXwN-,,l߾Ȋ RRWe" |H{(z@5W sT.t^Ѯңn_VrG]m]ۻ,?w.?kŋw7O<`.h |Nr6cc=?]3GWx]}Q81?fm.]wؼm֫.i`hhmGgNAL?3vtxȊ#3KSJҎ+;2z]u"f߂Lߩ H[: fV o־\n``ywN>]JJĽ*UXX"mM^tCku湱olƱAUizw{bQWW𨨨ǫvj+q*ct`BA&%~"*4ymB#r]Lϟ A! ')Fe[4jB <A4y hA!CA Z)m<A׆(,,~z׮]OwqܹNjs\v^LJ6EY3~Y>U hZ)p?žT~tuuo޼)Γ ]'vA]:kqXUZ=GUDDȊQmH[NZJIjA Ͱ`up>"?"pC. :~*V=DA4dՂ.lG1::^K5ֱc\ ܏H8I\E@s\{m1s$95?{})6e֜k3F-;ꋩSN31p$%Ya,\H TZǏ_|~~~ .eM{l'MY88U9Tej3/1<43=|yFcSNuX㘞]k023=v3=6ff{qY"NuDZā4 `WNu^UdOs4ĠR4s6+QP]`@F3&ZS`NW13M|!xm+ ܏?yn_ܡb_ruTfvNNV*m&!#p? -"A lz>1)PqLiJ_̌;AVy]tttwMdEe7i德 \s3s i6/#?m/*n;& bfFN9AfDJjAAA999l6f3F@JF}'cԒf ﬣmlޠ.sj^l^]K=Kg3 ӥpni\H ol[)A S%A.N1@ dgyCA C>cǎE ??AM hA!CZxǏ?>,,fG&$*w߾o٩0ƶ5"YPQÿ}Gxʏ/F'VH*ihwfPmQ믿JkH{Qơ^޹`9dt/v7A& %O}ݭVqP̈ >{Cb n7P{:c& J7yby1{Oj'ح_}{*_e)1OsߵfyyRZB)v:: #C|/VhomP/3J) ($<*;DFQn`/s'͑1g"wdk.Y^C⠎"!au'cҞGF~:ATF}m춈${B7nӆ8͎TRqȬ6xE gNvP),|W'qp!2Y6/H&3p3S^^~'zMom\/e6]owh?8qbŗ;bn^{kf>Fc<,>;{-%[x:hlݼr$&!e>f)rGa'AI Ditд2E-dQeUg?x(eb򍕇֏`h~fA555Eu$p EkkҹL^Ǣ>('3q~[iUC3UC(J}y1\'`k{i; 27ﴭ: ҞU$ }f~M+湘y;2eLd~NPM`h~f$(Xn{2jN~J(~QdI{ȢIn(d+ޅvs윿~/*1UXBo)igu-ĬJ6ˮMO|tNu2C,> p7OJE5%:`O}ƃ ?bccQQQǏ'Q^7 zcYabr.qA~N^e%VTYivjcsAvC7 [#HRy2iiSbodS_G۴-_<0~ N7x)3 H˚<#ERY7]#A^3=nis#3# ;lO$=g«2/tԴ7wOv"vhAy)68z\=Ow+.Rb`:YgasY{?I# JIO_oc_nX_[#k)Vl3^Z!!!!"S(wBgϒEƱ [""_9 ]i sl5j^kS5AIUey=lQMA\VKKeNew3}B̢?Ti˴Ԍƹ>fϪ IDAT SԦF"bZ'3qv÷]%'vT<W(*ۯq"t"-bנҞ鳴}f"MM^񿞼WчWOT6:蘭,/מdlV|w;WVVsS"=Fӗ,tƋB] oA‡yuA^1,Qz}GK}qn͎oS8j:.euYs.^}վ]xSwh:\l3az~gؙ/37b904 ZA$%8?E{R&  <仂M HSp? QK m*[AhA &AM <A4y hBR[g 5VL,Pe4&v]~Хh*xJERcOT Ut˲-KJ7@JA./;+3'wheߎqۂx쭯r#I|Yߛ]'ĵ%RE;J)u#u_}?){f`Cgt?ﻉ,S=*z:;1eyi*g"|zЌ tt'0\0=@ T*UKKfִ* +"p0;sm}GE<#ՎK͈)kZKFBV'u77Ӵ,;G ~#ZhoY~eT~:Z)r$s#6zݗ 2.hoډA:a&Ϊ?)~wwx &O` 3WS»{C. (>U^UUŷw/M~܆AC.AƁGw{fz1wwqٮLG>=\&$-Su"aT!#3O uf3-_syhɢן F!4K8w$>k^wq7 INK 9j~V^^wYTZBmV&Ϊ) ྃ>Oϯ?>/Th[OxB-LOdkD2el cIBz(tQu1f1p]8l ^dzzي|?M|BSnu.Mǒ"%^G LZtYmIk+beηh[?LoP-!.r{37(Mg͠4m~JmSY;w]pK =2YCQPw&cXԍhOJјԱ LRPsH=C,6OÃte(MˠZ|4}oLVLRUN3 dwU y=}yW;XJV۰pkvd5ǭ/qp= vyaחM)3"KieA33shPFx)xu"]:CUp'"`K nt"'Uj ٩$p#$=N*ꊬ}~to oB~EE~bҭQ]$/&/=$TZ2td(꾧muBW{_xU &Wq?'EW;i@G1YNU~ FlPl,wˎ? n&OKod1zץƾ'Cw4A*í :[ s:޵-WsJZee]i6QM^=\?Ċqإe#W%h2=F,VyB\;38SJPS#.Zk?{πqkL?hҵSgpQtL]AjKܻNL}P=NPv E]cT;G+e4T9U',0gwҒs K\r*F*$\\U>^ZeYǒzȑ,b&cO)̄)\kPZ"`K,<\v>].+3:Ygֹ,T ,ve%H1.JZ/șwӿD\.7fҽ-?]%BvA[Ĉc1kd&]{O8s? jԾ(~W16ѹ1$nPĪC dϽ>j6 |^o0?7ˡ_s`|9|aʖ{zO@fZyFcSK ?<ޗЪW* rT͖U#*@F3:Ybd3'Gg Oezv3֦hZZZ:VقIm`rU%9 je&z7O9S@#i׼GGyػ:NX asʿd M:wG52rSr:q "h"+}i'J阳Y J H9iaw䯔­U4;T7MS+iPJVC|ӿon p_ %}4ϳ(H5]Lun;& Ovrd~bL/lhxA#?m/iZa)eT5&6㦻N,SGGm8t)Y0i?e.W'4j?#(:ݧ[/s}DZT-{ _uC_zfѰrIs`^P}~YוfA{|!NV/ۣb?uI哃RLc7-dES}թM+w(QcNe_,(,A=o+ق=S5,,qD]hOi~|btAi6JgH-ܗw[zFD&qu*xhޭV* EkBZzCm ` H%(AhA &AM <A4y hA!CA &AM^AZIyg---f}hYQ!!!ԱE]lx 9٤#yU#&!.-^h^T_bк!ȏw-I6m6C}Dbo?؆AY\+:_쭃{hv AvC7  ?nd4{jvEM>6joo]&JʈE0gxT*` QP&tߟK`&Ɯw|ӋrmKw_IHM{snn WƓ1IiO٣j#?=W@P239(+w4A{MɈ{{w)'dך~]Y&e%YHȬlhT"w999"w¹%G"`+ٳ<:򧴮uCy~7]KCgߘI[oc_nl۪Ju6:%w}<:թ?]k023=&ղˍcCk`3tO*$T*%n,J 2j#J ]llثuρȊJz@*{iV?j^ktUey=_d;s@fz嫒E=TJ^lPG5y͆c8"]s좏3Y sx~g5vŕSMpiYS,tO۰qPa6uuHj0]Vkߓ`,$$;}Gn !/9`[A ?+w5[;fAꃞTA &AM <A4y hA!CA &A付<݅J#?""C`M쨹1{+2yē21O\0ߝoIEC84C o.ч lUDW$={>iȤ녲.*td"dU R!xb\v[o? _^aiSqb[ Rjgcngs6Q3OlbcFצ[ ]wq86OhH ^Gg}muu/beqk۠A JM޷R omSf͹V_q 6!&YLJF}w𙷫GPѧ/BЎ&F7R29M >kǕGҒs23x4OMNKsݳDlGzxDŽ?ýtd凝 2$?-8p.$CtstƤ<..tDȮX{™ _VTЄh$GZG9 -,J?]gQ zsebfSV[(_xƬ頽 q*n*qva=f {Mأ^be +@eL>h4AɊPe[XP^ MPkz7s/_]SK0R2myIgU%9=6RnK/&N \'َ01څSBx&K7KubIE//-2W8h4AMNsKw`0c{iJ#JZьl棐Wo^2IdKJeH&*SNG:{7 Ox-L"IY^A>h4Aɳj@i)eą&SuYD[wK8) e?w>̺jީ;֜MZ"w ;PN#?#S4'V/?މK4{܁&*Όtx4y5MPr؜MY]\n2u 8IffŇq)jbqq*Cǻ^LZ77ͯD\NdN:)`b3wb>0\6S4j \1vL=5"uh2HKGMkӰ ;Uvz6~W,gnlmRYG$o"u8Pg2V0Wy0u?+:2ꚟGwcNf=7\:xCY[8xչfjf>_y#Wsw56yD\|G]y۬W]C~F#v42^0h_iC7MAoS8j:.ebb 󽼪ytz#\[vZ`FKァ o%<1'Qmd[1r_drΌ}=էۯިFr B3p.l- <AZG>Foh ӄ&>J9j7mGikxU8sGZRNtqnAklЏ#yY5q$)_Rˆ+&|%{U4ʻd}wϬ:IO'SJ ܝ{B%Fd%EkIq~:ť>篱A?}dk$HR= CI߫"祱%E`fAғb“l2!pw*.哕 Fv-)Ot߇56ʏ#qY N?~% zJW yݑ6ղ%gIj2Lfi&_ruTfvNNV*ǭafffVVVvvvNN񢏝3Y #NAY@ѐHX}߫"I8_dR\?OʚCfDY )EkIq~:ť>篱Q~ "HF \ob$)n^]Rm $s#d ܝ"/-y4yuZRNqklG.5@כ=JPKӽKJ0-D'3R tw*.}JfEkIq~:ť>篱~ "HF \o(A17/M.)̶SJݩ,Ғ*AAO* pwڼPVѭ m4y!` lA` &O4-'omq-%}eق&lF؅7{ Цu2:nhZ~nDZ?%Mޫ?]yUj4wђQBkwYR&N#^?΂A>h0 [eWkY'"OXw/+}T;5s W2: P6 bܲ{$3Abs)bͲM)Iohaj+$kZɫンQ#_$%9z$c_ MIs\寓_ODɼ61R J)%KQ$ x$P8Đ bEZH2 OMYI.aTw$k$'F95*Lm8/_fG騎M4U0)68z\=Ow+.Rr̥8J x$P>I72D 6` eE0˂M)٢o+z%ٌ%QF~U6U|U5[VQ&Hi <5EfIqnKЭQ\ą9p*׮L0wT7&j5l`o?URIf7:eˌd-|(2#^d Myc3N )@&sw;0ޱ4Ecg3z pO^D95q.F πsbያE}yU$dBr[h5q4j/ɦ }#,._OĦx`8 Q#K|s]YcШ,weg5ߪwyQmH[NZJIjvC7 ?nd4{jvEM>+7`@0t#˞7bqyceD_- $۴f Q__`A;OlbcFצ[ ]w14q~>UVZcع[k-ra:8ɾiA[N,FmD##X0yD{lqz?+ (;f wި~bS2ޝ@}1u E&ߟe d?e\Q&嶱" ݸNjʊGgFfegoP9_ ?#]U]31漿^ ^1wӒ=j,eeTki&AMYT%5x@V:B{fjئ"M'3E֒4u |o=($W/vw&D,rjF\@}364TEʳ<;⁸Bע'6ئڹ{Qsgi+<$uP8beYlWV-\Kv{R0ECpBQ0UDoW9Ag-=Q"HBMŲsvrۄj.U9UK}Lq Hes٩S`}~`bF;~ExQbWW 2HT=6+*˺',.~} k k՜TW߉SdsO=Bi동y%.;}x4j?/r2n{2jN~JǨ+P0.cd2F-k:W 2篚;<-/pu\3{Giv]λ̗hzY*;c=}S+g~A/?Xfŋw7O<`^FKH+്aWv݅N;5\zs/r2|Nr6cc}WI_}B~cԧ<1',ol2ȼm7 [\(#m[1~[t *A$M^Т;M}~HW8N[yYT8i*yA:BM l  h $z"xWkSi+PT| HM hA!CA &AM <A4y hA@HkGSSbb_`;$}C~0 <o...C% ugyC-SQMnHHѳ'%,T;c@5 (T<ǭ_5 ;ޡ8' 249F}]:kaqzr<ҽ3zCoMg-PSÒ(DH)UP^PݠqrDܳo`̝kl++sx6<(.go=&A5e 34;xqHKS(RE".ǕQdbV)%%ԩI*ҧAYQDjR;wEy7\{"A@$ (D,EAhlE `ZGr$hbnfwgCbi+}cwfw9ށF$1x6F>3y8^D%^9^`+-?WZrrN ܖ+Ǫ^^pQ  F1Ph;r%_LHvR^Aq<2,\S6uMQq٣IN݆_\r$ccJPP)G(4=Hի(;ɖ;gHZ8Л><3cΫ0 V,^ܻW"9J^b\>tػw˯O+?~ ܬץ,~mgř=;&u-;HP A? z]P@p_Vܷ}U#FLmTkݿ;߷yuUsYf 1>* ֯ADe$"^\ogit:Աd.܌6"[ZO[9{h-z$YSGM?U{.u/JI&fonY"yMD[7[yI 2^)jS=keIٯ~֢2c7g'g2t*ࡴJf։3xg^S0/po&ۈ/P9a(h{;,l{"U92Mod6:1їZѠ1,Y|ކL6Ăo}Xmф+^,ɼ g솲sutMO_/< ;Ew-XC~wW=_bKMozut뗵ԨGA8$"opqB3}W >Sc>9rkG[R'|8,/5xah=' qnłN'*wm"*#*# caQ-Ƙu77n |I1ߏݺǾu_r}PDEN'rI' b3u[KDǧj s ==k~ꎢ܉>TR^w%f3آJ -X0]:DeT# rv-YIfٚGW/j;44j-3E_FwVNfZ%1&wqᦃpV<2 e*e01>Vqݑ_}/buu^_:J6dXwN_3ˆa0&^'<3cSKhCǿk.4cGQWU:r|njB(0 aAB9ZsW7xM-AOPe%G'&._}7dӨ}Ƽŝo#yx 0I>w*c&s]bzZaoVɬua ݾk/60>+qm>]1HoƮK/-*㼉7ȶ·)Fo+n[T&F#J"f(.=2,')dF幫,8'2}tɞ?zMc!Ddg{͔Q;UXRˎ*v)#+fߴPoQwlŃN<7gſ+ e~O=ۊ~}c3+m޷=SGθ]i^y&(eo؁vs5NxnduUZmӜaG+65]{~S*1{Ѫz((sA-vZWXȷo?{[WlQlazs8Sch8Zc̨5[HC=Qm^U.^yyG>3{(ig0zk>IfbZ7{u;ǹg|Yf*X7pM/ԓ>?J(}^6?mtɤ ^@HCBlDލYxA5{>XS: |P#}KJ? n{3GWlѕ;@W_}2rd8-ms=)J1JOH.;Lt¸qUoW/G\ҥB2]b<23ӋV,ό78<: d17 q泵 wʻڭazia~Ⱥm{@Q׆y~+y(:YZj//O ӛm pN/1T+k5>!DjB)Uی%)inl<o#؆+ F m\.ݼyM[ob 3G%ȂANxYf5{&NjjUVlp,FUUEQEi?%}(N$I:?FB?ƾ ȐFٻysMN HAVPE 'Geg[(@:vⴣW-RVA:~Fr[B`HLL,;РTTO9Ţ&'bc&dMMMX,:1dYtBTh!y(t`0~\ 8N$Yz}xxhĤ9e'y'}:.::K.ٟ 0BlBW͛7c0E~~>p-B"#<FBa!FBa!FBa!FBa!FB!|B <Bj]IENDB`liferea-1.12.7/doc/html/help_vfolder_1.6.0.png000066400000000000000000000355501352135647700206500ustar00rootroot00000000000000PNG  IHDRVbsRGB pHYs!3tIME841TtEXtCommentCreated with GIMPW IDATxwXSf&lD@nQ먫V[՟ZWպֶjUZ.Z[+PTddCFdC$"" %G_'$ ,$M5472w.|m=EBRs/Nf6&hxY+K BFtt9d۸ Wf4yf.BE޾=HSԅ>?hOv沞>kk5}$jü~{I tęe=gvMM]{"Igr^uDX}>?LV{¼Ǔ XB hg?Jr@dh#\fyߧc&e.rfRE/~ڼ9q{hDQB$g!>G=~ZIl"ыGHBEɄǜ3n\|T4g%2?P[K D WEDgIY3'wХcG3ޥ5CtԖ+ʗViՠOҐ|Ҷ#`4sD9T<| W2>YuRRIfFV^%nKUV0 X1 Jnlk/Z"?EdlCT<ŷ6ԖnxPѕ'AVmVx#O)tϲ)9oK,dr1OK+iBe~ߝto_D$25 Pn~/)*v 9%ewV^W}=zXZ^ǎR'\;Vn<111li7V>KD"@حs)|R>Kۊ cjnܣ}.ztu"Q@{SKRGԣ!PԳKlx5'K%iNVqDT߸餻nmL-E,5rǐ';4g|8tIѺcwp'Ԛ+dQJ̃oF koee&j-^ju<P'Ej3R):xB@x@x@xx@xx}e¯UHH:^]@@R|MGU'jj-xxatR< ſ2XA;T{T;ѥecGzMyⓚLP6==Ujͤ{m>|>Zx iQ5%Kx)F2)s NmRG,L\:}0?jK#Oը䥻luNBܑ=qqpv:x\9x9pr`uw^皶ݻϘPm;/*Y#_wmɵyÃWiSm]_uig_c!ԶsڢS}d_5]| BKo^vI}Z[ͺ_]ޣp%)Hp:6Ԣ>X>}ᨸgw>gIao9dEn=Dݚ"vأڣwz?SR(%ۀF|˿o4v"&فkUj B{t3d"1L>xRl̃Uslpcc_0iȏ嶮Z3{g2eZ=i>=g{DͲDriQE\f<#+Ϲ٭n/-!+Ȋ5%gft߮sX?Z!"TϮGqЯov͛4lܬ}&ϟ )ȹYᩆyhvڝ8+5$i߭b)ON<y/ov–YLD\v bqBTzNs-E7f=Ո;nl2`^lCTC:ZWQJJ)XNu6ᱬdMDM5ۭJͩyBxڗ+V^Gyi^ic#HI!K\`'s>';XZaJyI,ME{]O="ѺWacrԜ99u67آ]Qna)o?(g7wY|_BYQŻu̹}JI<9e6xcDz4߆=1ߎ/SV4hݫoc56옭F6^􋳒R~5g؂PNv&kdhGv&z_IZUKpۧ|:xkr2?N:k޷62\N}rA˪|ʦ;9r%@NvFJ7I`cxOUʢu o.ϊc@8?t_ﻥgy'w_w(4#_e}hr"F3wRD^Cc1*V߱6JxSu?wNNn}8MmY{_y~znuf9hUmssm/rOuO7vg[-~Vy/,:Z*}|Ock,}/Wzml~um|d_ .G4d;)X{kg-Phï~Zbo+*vkM xmP]oLJڐJ/@w?wu^>4 P;b,ZHHHHHH՛b?ZMǾqou51ج>u=uu| *%D)ZXsF)&4G0;ΉD*G;jމ#c BSQ 5dWy^N^ [1@D:$hX,w9ceBJįtF嚬;bkZlwGWg'٧Gv{...]X""Ib7Qw~[ݣUC4ֽyv'|]|;pVѳaΚUUzڗU9 H3dͽ[DF=޷݋G>D=3'^-9{U6D*jO fkGDGMkrJiE=pzл'J^jx-M݈f * iQv8ђ >ur0=cX" h]IB1UOAGiaT Vwh-G9׍|1wʹ }'":p6d){"d ,B "')ơL^b=ۜsnḿ+{Cb⟆X"{aFnb\i_V:$V~:K.3Xes#'LIN =%䬺=фv]PV ◷ø HU* .rv-E*ɛFX8VXe)"rs/ǐ}] .nK8Ihw^'~O/Uh-^wu 0sX|}TF0"[v̧{:7߃ #Wx[Uh/*Y=Ʉr~h\^O2gUCR5"vQN{ꘓPY/C{— B["Xᾔ<"*.,5!ZPM% ܊n,<_ag VWK1}zj+nor^5#/y/Je9J#z7/Q3%Fr&4'iQf%Ѱ&#UOD4eY;1iWvTSK/CD&Ir1ټO.|PqڍK~{Ow4*lͫ7>'rbV"Zl9^ãGA^ӽZjŗ_nX7_Y2֦h(@e=J4-dx$`-^Dt(m+3ٌ6GdbHv8_DSQn=c-8) i%3RAwiaT4WL7KW<z"ڵafm>myYUwQgy:vfNDO2+uS^ǜ*0yHa֎_<.$Hg;y]xV+I A/%dM,lMu16HlLDkG)7OZ*U頻tFE|AS!|'i51`)xs)D۵Z(`+hJJMcx 3ӟx'R>d[1 YtY}Դ1') 8vYvzL =[l.=PGsЦw}}vNٽmv i.῭Ǝ'8Xt[~tK&.?Ш^RAwiaT4WqVۤYU{BQ"ݭ ~Lg Zui%D;tXyd_{VFXΖ㮝5`x77gw_1헾icNBTO@ 2θz15X,אTލS̄k>OD5]P /5xxYx5n=S>n 5jj3xx@x@JٽE}9HJMME/X@x@xe_}effdz^h)FgdXrǟJ:"ݫQN l[= ૶D_ b< Re`ГZ ޹sΝ;R^7w]B]MWE%/jUV3/9mc*}T& R*|W?1djj:|ٳgϞ={&&&~JRT[55S O2_wuz6L5gjӄAcd}''k:i'- Zѹan_E,{ԩ޽{N Xлw'N,[PbkwigJyI79jũR_Qo3оn9['.q7TQ]\tJ=Ų'+%hO8]NBܑ=qqpv:x\3:ؿugG杗d?dN)z5put :I(wtQ)Jٚ3aU=֎'_\br'b}y֍֧\aaa>>> {dq\(TO&M+*1y;G_p.C>'N;" ]y~c#NULU7yv }\-uO.KZs00ɒMjvCVtXIԭi-bG=JZ9"J 6`0: o| r>XpNk=;1GA,Y*XU9Lz@çC(95g@)Tήw|¬쬢[,"66v߾X ߣɀ?13&|tވѢf}7nh3#bwM( )k80l0;;#W%>novP[T\e*w>ccSU~Rì'>i[hHbY*i~'i_^ /V)Ws%oRi҅{op"mXSOX,D*\%^.b?Oy_(tY&BgvKObچIgtQ)JmlM0P&srWX%q 3a۷n.YCUV".vښD,]oӲTMu.$YYYؗf jbiiYJPH;MH V׬aF_L]NugnLk(Nn9{a|Iim-]ANEK/Ν2UϾ덬J-*taT>~] ٦oN>N&b*=^c4Lӡf' Ԕ$D"IHHY eY8R?TĖ^eIO-<oPuۈ(rҀuJݧ}픴{ LIRRRrrrJJT*MII.Ş`q`_~o˅K0I)RirDZ_5VIWrpyKW[GoК6=LçC; M( ś-bA-&Ld槟0Qi#ݒ$9"gFavƁ>g>zE266ȰkRǢBM:Dinn^(ݡ j}4cg\o"Ɲ7 Dd-?sK-A| ä>azb#[s& Ԉeܼ߮菼@. B,_yۖM[7o ܴa˦ [/1G]ވo༪#1D4!?x ?3aOt޽{DԷSSCA}[:ݻwիW(ݡw_\=lij yX__~dYI؟*yB>LJu'Qu5,,,,W*u˟ZLڔMcwsJdR{{KGG9zvfR 딁e;TU?kw ?ߣGGQܹoP[o7fxAm] w6k֬1b+'y3o=#zկh~{`۔#ͽ =--f~-p1?TnVZϵ]}Gwv׼s_tsi7prkO79fFzn Z/9bɢjjJ@tQ)l͙0PRkDMIϞpŋ7o{S}5D4lښ""" `ffV^&a`V<o֛D'|FweUs1իdDdll|7>ojT 8,yו@ СCTbo`3{׹o|)U99:mظ8KKKݷU)~ *HHP) t1R_`oX,B @HHHHHTא^Q@@@ML2jj-xx@x^J;;;{ |l &쭦*x#HMMXc0{j))MbGX_\[zj5ŋwpnfu u>xK(;rWWʻ~/JRirB~hwoUҫxUjB m>geEGɫQKwYN='!lȞ88wΎ [vK=]N)z5putõ[Rr7-u'ݻϘwX,>yN&^:X'_wmɵyÃWiS5n-:985lmɎDQ/]jaU~u<tJqĩR`U ohC%W5E-0cӭDZ[ZĎ{T=W?ͻnt\%ypiNJ+,%wӡNM싌M|t@n'T`BD7``ؘ+LfF=gIsW4DgQ}+)ڪR./HV/CBBJ~]_F! #aUػ;lO'jJܝsO8w河gD,]oTM%OaT>~] ٦oN>N&VY牊YreTTŋ;vrWP6@TWL>ieZjܼܕ+V~s0D]r[6UaV!"MB'"#u.PL~$-?oVDkY5i+3E΍5q=c_)|c$1z;%-ាHIRRRrrrJJT*MII-3.sE$Hq>IޫO^9ѭ#7xMhuyb|Ν;usN>*[$d5 VąH$񒄄xIff9eWmV)\(Z7[qާDt"^Lg8<ȭq-'w5$i G>v4YO.%JȽ?svk3|ȧ96Q`Ygt<޷3)2i4> "è坥nBSðci'=Q̓o @wz| 47ya4x<_hV G_=_`zf=M޹jSĸs-ʽ4މ ,/UDpi!vZ\Ϻz|Κ "WS\|Ћ)y?oǫXU\ C*DG9zvfR 딁e2z+A{^Y6f_%rV%=kO:_ S-]yۖM[?7niÖb?mZ**zOC' {>orerk5dӪ:cIDsЫ_onbV~߲[ok7hա5q>a\q۵;w_}h~Uwwur5Ệ),?}빹7hP?7k[>~NRlM9ɭްYӂ=kO:_ *zr`YkOk<{料S}֏X3u>F5A[~O|H :kD @Uѽ:ox/i@xx@x@j>~G`6c0{_, R< R< R<R< R< R<  R< R< R<R< R< R< R<R< R< R<  R< R< @9}2T*EG2b 5R<R< R< R<  R< R< R<R< R<t@bggN tvHMME'sj)jŲnL ɺr)~*_x<-ڶQܻ71 )>jW_íܢo+#k e^~4=Ř77'CWWU% };*%8#l+ʕN5tZIbs6&֞ń?ҩcK\ƍCUJxy[PE8HŒ%˨Y)vZ!ٺhRf \]40iVJ>e>dPD}]xR*d~ulb%w P:]e2\y9g h{w{NG'D_\9׽]k]_eV8"c,)Ԕ'9m_@e.]O0T׮SUlɳ$nQ;/R<.}8:gk!V8` ^ qqd,8͢UElqkkfy9yFv- ^4'!lȞ88wEDW}*jɥFYRﯥxgz|^x8c'/DBScPZLf5+~tvh:6|v31:~iI IR\<5]Yߴuo$ðNV2|2{_Nzs@}TVqjVrEGhpt#I2!Ls{YsA\CM Dϓv^צ[xy3XP)Wst$RiJЅC (5Kn 10B $0B>#P@n>8>rC'WuogIV:Se8iiݩc<9װKJ휒b1jB>-P,jbĪHњ) rV%UQsjB+?Q~izzbgH߉H Vk~ߗy#UNΝٽRvvWLA% cR9"cx<"#H͒T,VsqG>@22WD}?ܾ7XxE۶2'0`՜GlM~g DpbS8c'fzy*J{Z~Y'Zg\nHJJ8U5GWc$III)))R4% Sf#HjVji<1#?1C%Oˑg)ry*P$LNqV7X2o"ڇV>CkݗDR_808Rl[6**Rm g)ȫ dm^o>ټTY' J<96xcDzMTq]}#$qnZ&SJM8S95 < }!;7sV2y~+3O&bW5oo8R<b뛛ͲĒ@nu[$R:<@~tD2*RmAXa,[*ZUÙZ>rͷR,'yv܏:iJ߷62\N}rAmʦ;9r%@NvFoۧ|:xkr2?N:{C[9s195:tnb߾}ľv^2NTWEMwb)gw7i;Рȕm[O5 M<S< /76O޸pLGNݶŬнv_G2ƨ~P:ӆi_oz{ͼX;T|!ks#'kR m~|;1v]IR -nvl&>QPHޓ'}l9<Co|X/9ޏM[߮~OԼO]$bُvNIbwo//sc6o$sX8Иo+NHJ3jҴX~0=pg>q#HTr<Ҿoש9}3eJJHHdDؑM{FJ1C&x| +=ML.U|>LeaYVu,?NO/|ǘ<޺Dx(JTjdI;Y)B Schlagzeilen und Sammelordner
Prev Schlagzeilen und Sammelordner Next


Was sind Sammelordner?

Sammelordner sind Ordner die mit Schlagzeilen befüllt werden können. Sie sind selbst keine Abonnements, werden also nie aktualisiert und würden nie eigene Schlagzeilen erhalten. Sie können nur explizit Schlagzeilen vom Benutzer zugewiesen bekommen.

Da sie die Schlagzeilen die in sie hineinkopiert werden niemals aus dem Archiv entfernen können, wie das bei normalen Abonnements immer geschieht, können sie zum permanenten Archivieren von Schlagzeilen benutzt werden, so dass selbst nach dem Löschen eines Abonnements die zuvor im Sammelordner gesicherten Schlagzeilen erhalten bleiben.

Wie erzeugt man einen Sammelordner?

Um einen neuen Sammelordner zu erzeugen muß "Neuer Sammelordner" aus dem Kontextmenü der Feedliste oder aus dem "Abonnements"-Menü ausgewählt werden. Dann muß dem Sammelordner noch ein Name gegegeben werden und er wird in der Feedliste erscheinen.

Schlagzeilen hinzufügen

Um eine Schlagzeile in einen Sammelordner zu kopieren muß im Kontextmenü der Liste der Schlagzeilen "In Sammelordner kopieren" ausgewählt werden.

Schlagzeilen entfernen

Um eine Schlagzeile wieder aus einem Sammelordner zu entfernen kann "Löschen" aus dem Kontextmenü der Liste der Schlagzeilen oder dem "Schlagzeilen"-Menü ausgewählt werden.


Prev Contents Next
liferea-1.12.7/doc/html/newsbin_en.html000066400000000000000000000040331352135647700177540ustar00rootroot00000000000000 Collecting Items in News Bins
Prev News Bins Next

What Are News Bins?

"News Bins" are containers that permanently store items you copy into them. News bins themselves are not subscriptions, get never updated and produce no items of their own. You only can copy items into them and remove items from them.

As they store the items permanently and do never drop them, even when you remove the original feed, news bins are optimal for categorizing and saving items. Just given the news bin a speaking name and use as a category container!

How to Create a News Bin

To create a new empty news bin select "New News Bin" from the feed list context menu or the "Subscriptions" menu. Ensure to give it a good name, click "Ok" and the news bin should be created in the feed list.

How to Add Items

To copy an item into a news bin select an item and select "Copy to News Bin" from the item context menu.

How to Remove Items

Select the news bin and select the item you want to remove. Then select "Delete" either from the "Item" menu or from the item list context menu.


Prev Contents Next
liferea-1.12.7/doc/html/onlineservices_de.html000066400000000000000000000112201352135647700213210ustar00rootroot00000000000000 Abonnements mit Online-Diensten
Zurück Abonnements mit Online-Diensten Vor

Was sind TinyTinyRSS und TheOldReader?

TheOldReader (http://theoldreader.com/) und TinyTinyRSS (http://tt-rss.org/redmine/) sind Online-News-Aggregatoren. Um diese Dienste zu benutzen ist jeweils ein Benutzerkonto notwendig. Mit einem solchen können die im Konto verwalteten Feeds

  • mit Liferea
  • mit einem PC im Browser
  • mit einer Smartphone App
also praktisch von überall aus gelesen werden vorausgesetzt der Benutzer hat einen Internetzugang.

Warum einen Online-Aggregator mit Liferea nutzen?

Liferea als "Desktop Aggregator" ist nicht auf jedem PC und von praktisch überall verfügbar. Liferea als Programm muß auf jedem PC, auf dem es genutzt werden soll, installiert und konfiguriert werden. Es gibt aktuell zudem keine direkte Synchronisation zwischen solchen verteilten Installationen.

Mit einem Online-Aggregator kann das Problem umgangen werden. Mit Hilfe eines Online-Kontos können mehrere Liferea-Installation dieselbe Liste von Abonnements haben. Durch den ständigen Abgleich mit dem Online-Konto haben alle Installation dieselbe Liste von Abonnements und dieselben Schlagzeilenlesezustände. Außerdem kann der Nutzer weiterhin den Online-Aggregator direkt nutzen, sollte mal kein PC mit Liferea in der Nähe sein.

Abonnieren

  1. Zuerst muß, wenn nicht bereits vorhanden, ein Online-Konto angelegt werden.
  2. Danach ist "Neu/Neue Quelle" aus dem Kontextmenü der Liste der Abonnements auszuwählen und im nachfolgenden Dialog "TheOldReader" oder "TinyTinyRSS".
  3. Um den Zugang zu konfigurieren müssen zuletzt Benutzername und Passwort angegeben werden.

Kurz nach dem Abonnieren sollte alle Abonnements des Online-Kontos in der Liste der Abonnements automatisch hinzugefügt werden.

Google Reader

Bis zum 01.07.2013 betrieb Google den Dienst "Google Reader" und Liferea hat das Einbinden der "Google Reader"-Abonnements unterstützt.

Existiert noch ein "Google Reader" Abonnement in Liferea so kann dieses in normale durch Liferea verwaltete Abonnements umgewandelt werden. Dazu dient die Option "Convert To Local Subscriptions" im Kontextmenü des Abonnements. Der Vorteil dieser Umwandlung ist, daß alle von Liferea geladenen Schlagzeilen erhalten bleiben.

TheOldReader

Die Benutzung von TheOldReader setzt ein existierendes Benutzerkonto bei diesem Online-Dienst voraus. Für dieses Konto muss zwingend ein Passwort gesetzt werden! Dies kann auf http://theoldreader.com unter "Einstellungen" gesetzt werden.

Wurde "TheOldReader" als Quelle ausgewählt müssen Benutzername und Paßwort des Nutzerkontos angegeben werden. Liferea lädt dann automatisch die Liste der Abonnements.

Hinweis: Werden TheOldReader Abonnements oder Schlagzeilen in Liferea gelöscht, so werden sie auch im Online-Dienst # TheOldReader entfernt!

Hinweis: TheOldReader Abonnements unterstützen aktuell leider keinen Abgleich des Markierens wichtiger Schlagzeilen. Wird eine solche Markierung in Liferea erstellt, bleibt sie auch nur dort sichtbar. Analog gilt dies für in TheOldReader stellte "Likes".

TinyTinyRSS

Liferea 1.10 unterstützt TinyTinyRSS ab Version 1.5.3.

TinyTinyRSS muss vom Benutzer selbst auf einem eigenen Server installiert werden. Das erfordert Kenntnisse in Serveradministration! Einmal installiert verhälft sich TinyTinyRSS aber wie andere Online-Dienste.


Zurück Inhalt Vor
liferea-1.12.7/doc/html/onlineservices_en.html000066400000000000000000000104321352135647700213370ustar00rootroot00000000000000 Subscribing to Online Services
Prev Subscribing to Online Services Next

What is TheOldReader and TinyTinyRSS?

TheOldReader (http://theoldreader.com/) and TinyTinyRSS (http://tt-rss.org/redmine/) are online news aggregators. To use these services you need an online user account. With such an account you can read your subscriptions

  • from Liferea
  • using any web browser on any PC
  • or using a smartphone app
which means you can read your news simply from everywhere you are.

Why Using an Online News Aggregator with Liferea?

Liferea as a desktop aggregator cannot provide the global accessibility that a online news aggregator provides. While you can access an online aggregator from virtually everywhere, Liferea needs to be installed and configured on every PC you use. Also it ensures no direct synchronisation between the different installations.

Using an online aggregator you can workaround this situation. You can subscribe to your online account from all your Liferea installations and will have synchronous feed lists and item states everywhere. At the same time you can still use a web browser to log in to the online aggregator directly if you are at a public terminal for example.

How to Subscribe

  1. Create a online aggregator account if you not already have one.
  2. Click "New/New Source" and select "TheOldReader" or "TinyTinyRSS" from the dialog.
  3. Enter you account username and password.

Shortly after subscribing the feed list of your online account should appear and items should be retrieved.

Google Reader

Until 01.07.2013 Google did provide the "Google Reader" service which Liferea was able to import into the subscription list.

If you still have the "Google Reader" subscriptions in Liferea you can convert them into normal Liferea feeds. To achieve this select the "Convert To Local Subscriptions" option in the subscription context menu. The advantage of converting is that Liferea can keep all downloaded headline for further use and while fetching new headlines.

TheOldReader

Using "TheOldReader" requires an existing user account with this online service. For this user account having a password is mandatory! You can set a password on http://theoldreader.com under "Preferences".

If you chose "TheOldReader" as source you need to provide user name and password of your online account. After doing so Liferea will provide you with the subscription list fetched from "TheOldReader".

Note: If you delete "TheOldReader" subscriptions or headlines in Liferea then those will also be deleted in the online service "TheOldReader"!

Note: "TheOldReader" doesn't support synchronizing the flagging of important headlines. If you flag an item in Liferea, this flag will only be visible in Liferea. The same is true for "TheOldReader" if you "like" an headline this won't be visible in Liferea.

TinyTinyRSS

Liferea 1.10 and later supports TinyTinyRSS versions starting with version 1.5.3.

TinyTinyRSS must be installed on your own server, which requires server administration knowledge. Once installed, TinyTinyRSS behaves as any other online service.


Prev Contents Next
liferea-1.12.7/doc/html/preferences_de.html000066400000000000000000000155311352135647700206030ustar00rootroot00000000000000 Ändern der Einstellungen
Zurück Ändern der Einstellungen Vor

Ändern der Einstellungen

Der Einstellungen-Dialog kann über den Menüpunkt "Einstellungen" im "Abonnements" Menü aufgerufen werden. Der Dialog ist in sieben Registerkarten unterteilt die im Folgenden beschrieben sind.

Abonnement Einstellungen

  • Caching von Abonnements: Hier kann die Default-Anzahl zu sichernder Schlagzeilen konfiguriert werden. Diese Einstellung kann jedoch für jedes Abonnement einzeln in den Eigenschaften des Abonnements überschrieben werden.
  • Aktualisierung von Abonnements: Hier kann das Default-Aktualisierungsintervall konfiguriert werden. Diese Einstellung kann jedoch für jedes Abonnement einzeln in den Eigenschaften des Abonnements überschrieben werden.
    Im Auswahlmenü "Beim Start" können drei verschiedene Verhaltensweisen beim Programmstart ausgewählt werden:
    • Alle fälligen Abonnements aktualisieren.
    • Alle aktualisieren.
    • Kein Update fälliger Abonnements.

Ordner Einstellungen

  • Anzeigen von Ordnern: Ist die erste Option aktiviert wird Liferea beim Anklicken eines Ordern die Schlagzeilen aller in diesem enthaltenen Abonnements anzeigen. Ist die zweite Option aktiviert werden gelesene Schlagzeilen zusätzlich ausgeblendet. Das Standardverhalten ist es keine Schlagzeilen anzuzeigen.
  • Abonnement Icons (Favicons): Dieser Button erlaubt die Aktualisierung aller Favicons.

Schlagzeilen Einstellungen

  • Schlagzeilen anzeigen: Hier kann der Hotkey zum Auswählen der nächsten ungelesenen Schlagzeilen eingestellt werden.
  • Web-Integration: Hier kann konfiguriert werden welchen Lesezeichen-Dienst Liferea verwenden soll und welcher Blogsuch-Dienst in der Schlagzeilenansicht verlinkt werden soll.

Browser Einstellungen

  • Einstellungen für internen Browser: Hier können drei verschiedene Dinge konfiguriert werden. Erstens kann eingestellt werden ob Liferea angeforderte Links im internen oder externen Browser laden soll. Zweitens ob für den internen Browser und die Schlagzeilenanzeige Javascript aktiviert sein soll und ob Flash-Inhalte in Schlagzeilen angezeigt werden sollen.
  • Externe Browser Einstellungen: Werden Links im zur Anzeige im externen Browser angefordert startet Liferea ein Browser Kommando, das hier konfiguriert werden kann. Im ersten Auswahlmenü kann der zu verwendende Browser verändert werden oder mit "Manuell" ein benutzerspezifisches Kommando eingestellt werden. Mit dem zweiten Auswahlmenü kann eingestellt werden wie der Link im eingestellten Browser geöffnet werden soll.

    Nur wenn "Manuell" im ersten Auswahlmenü eingestellt ist wird das Kommadoeingabefeld auswählbar. Bei der Angabe eines Kommando darf ein "%s" das später durch die URL ersetzt wird nicht fehlen. Der Platzhalter sollte doppelt gequoted werden um Shellprobleme z.B. mit dem #-Zeichen in URLs zu vermeiden.

GUI Einstellungen

  • Benachrichtigung: Mit der ersten Option können Popups aktiviert werden die über neu heruntergeladene Schlagzeilen informieren.

    Aktiviert man die zweite Option zeigt Liferea ein sogenanntes Tray Icon im Benachrichtungsfeld (verfügbar z.B. in GNOME und KDE). Das Icon ändert sich sobald neue Schlagzeilen heruntergeladen wurden und wird wieder zurückgesetzt wenn die Schlagzeilen gelesen werden. Das Icon kann auch benutzt werden um das Programmfenster zu verstecken und wieder hervorzubringen.

    Die zweite Option aktiviert Benachrichtungs-Popupfenster. Nach dem Herunterladen neuer Schlagzeilen wird dann ein Popupfenster mit den Titeln der neuen Schlagzeilen angezeigt.
  • Menü-Einstellungen: Hier kann eingestellt werden, ob Liferea die Werkzeugleiste verbergen soll und wie die Werkzeugleiste aussieht.

Proxy Einstellungen

  • HTTP-Proxy-Server: Mit dieser Registerkarte kann ein HTTP-Proxy konfiguriert werden, den Liferea zum Herunterladen von Feeds benutzt. GNOME-Benutzer sollten hier keine Einstellungen vornehmen sondern den Proxy in der GNOME-Konfiguration einrichten (sofern das nicht bereits geschehen). Liferea wird dann die GNOME-Proxy-Einstellungen automatisch übernehmen.

    Zur Zeit erlaubt Liferea keine Angabe von Rechnern, für die Proxy-Einstellungen ignoriert werden soll.

Anhänge Einstellungen

Diese Registerkarte erlaubt die Konfiguration des Handhabens von Anhängen durch Liferea. Mehr über Anhänge im Abschnitt Enclosures/Podcasting.

  • Herunterladen von Anhängen: Hier kann angegeben werden welches Tool Liferea zum Herunterladen nutzen soll.
  • Öffnen von Anhängen: Mit dem "Eigenschaften" und "Löschen" Button kann die Liste der bekannten Enclosure-Programmverknüpfungen verändert werden. Dies ist nützlich wenn man eine Verknüpfung entfernen oder gezielt ändern will. Neue Verknüpfungen müssen nicht manuell angelegt werden, weil Liferea beim ersten Download eines unbekannten Typs nachfragt mit welchem Programm dieser geöffnet werden soll.

Zurück Inhalt Vor
liferea-1.12.7/doc/html/preferences_en.html000066400000000000000000000157621352135647700206230ustar00rootroot00000000000000 Changing Preferences
Prev Program Preferences Next

Program Preferences

The preferences dialog can be opened by the toolbar or through the "Program" menu. The dialog is divided into seven tabs described in the following text.

Feed Preferences

  • Feed Cache Handling: Here you can set the default number of items to be saved for each subscription. Note that this setting can be overwritten for each subscription by setting the item cache size in the subscriptions properties.
  • Feed Update Settings: Here you can set the default refresh interval for all subscriptions. Note that this setting can be overwritten for each subscription by setting the refresh interval in the subscriptions properties.
    The "At startup" option button allows you to control the update behaviour after startup. You have three possibilities:
    • Update out-dated feeds.
    • Force update all feeds.
    • No feed update at all.

Folder Preferences

  • Folder Display Settings: With these checkbox you can control what Liferea loads into the item list when you click a folder. The default behaviour is not to load any items at all. If you enable the first option all items of all child subscriptions of the selected folder are loaded into the item list. When you enable "Hide read items" then only unread items will be loaded.

    Usually you will want to enable both options as this allows to quickly read through all unread items of a set of feeds.
  • Feed Icons (Favicons): This button allows you to trigger an update of all favicons of all subscriptions.

Headline Preferences

  • Reading Headlines: Here you can set the hotkey for skimming through all unread headlines.
  • Web Integration: Here you can configure your favourite social bookmarking website. This setting is used when you invoke "Post Bookmark" from the item context menu or the HTML view.

Browser Preferences

  • Internal Browser Settings: Here you can configure two things. First you can specify whether or not Liferea should open clicked links in the configured external browser or in the internal browser. The second option allows you to switch off Javascript.
  • External Browser Settings: When you click links in then item HTML view Liferea launches the a browser command you can define with this preferences. The first option button is to select your favourite browser or "Manual" for a user defined browser command. With the second option button you specify how the link is opened inside the previously selected browser.

    Only when selecting "Manual" as browser you can enter a browser command in the command entry. When entering a command don't forget to include a "%s" within the command which will be replaced with the URL that was clicked. Please keep in mind to double quote the place holder to avoid shell problems with the hash character (#) when launching the browser.

GUI Preferences

  • Notification Settings: The first option allows you to enable a notification popup window which present a list of the titles of new headlines of updated subscriptions.

    Enable the second checkbox if you want to use the notification area feature. This feature is also known as system tray icon. The program will add a icon to the active notification area application (as provided for GNOME and KDE) which will change when new items arrive and 'll be reset as soon the program is used again. The icon can be used to show the program window if currently hidden or hide the program window if it is visible.

    There are two additional option which can be used to modify the tray icon behaviour as there is no common default behaviour among applications using tray icons.
  • Menu Settings: Here you can select whether you want to display both menu bar and tool bar or only one of them. Additionally can influence the toolbar button detail.

Proxy Preferences

  • HTTP Proxy Server: Here you can specify how Liferea should determine the proxy configuration. The suggested default configuration is to figure it out automatically from the environment variables and the GNOME configuration.

    If Liferea incorrectly detects the proxy or you want to configure a different proxy then you should use the "No Proxy" or "Manual Setting" option.

    There is currently no SOCKS support.

Enclosures Preferences

This tab allows you to configure how Liferea should handle enclosures. If you are still unsure what enclosures are about please read the Enclosures/Podcasting section first.

  • Downloading Enclosures: Here you specify which download tool Liferea should use.

    When you have problems downloading enclosures please ensure you have installed the configured download tool and that it is working correctly when you run it on the command line.
  • Opening Enclosures: Using the "Properties" and "Delete" button you can edit the list of known enclosures types. Typically you only want to do this if you want to remove or change program associations. You don't need to create this definitions manually because Liferea will create a new one and ask you which program to use when you open or save a type of enclosures.

Prev Contents Next
liferea-1.12.7/doc/html/reference.css000066400000000000000000000002261352135647700174070ustar00rootroot00000000000000table.reftable { border:1px solid black; border-collapse:collapse; } table.reftable tr td { border:1px solid black; } dt { font-weight: bold; }liferea-1.12.7/doc/html/reference_de.html000066400000000000000000000036641352135647700202440ustar00rootroot00000000000000 Kurzreferenz

Kurzreferenz

Strg-U Sofortige Aktualisierung aller Abonnements.
Strg-R Markiert alle Schlagzeilen des ausgewählten Abonnements oder Ordners als gelesen.
Strg-N Springe zur nächsten ungelesenen Schlagzeile.
Strg-M Umschalten des Lesezustands der ausgewählten Schlagzeile.
Strg-T Umschalten des Flaggenstatus der ausgewählten Schlagzeile.
Leertaste Durchblättern der Schlagzeilen. Entsprechend der Programmeinstellungen muß Strg oder Alt gedrückt werden.
u Cursor in der Liste der Abonnements um eine Zeile nach oben bewegen.
d Cursor in der Liste der Abonnements um eine Zeile nach unten bewegen.
b Cursor in der Liste der Schlagzeilen um eine Zeile nach oben bewegen.
f Cursor in der Liste der Schlagzeilen um eine Zeile nach unten bewegen.
Entf Löscht die ausgewählte Schlagzeile oder das ausgewählte Abonnement.
liferea-1.12.7/doc/html/reference_en.html000066400000000000000000000031501352135647700202440ustar00rootroot00000000000000 Quick Reference

Quick Reference

Ctrl-U Updates all your subscriptions at once.
Ctrl-R Marks all items of the selected feed or folder as read.
Ctrl-N Jump to next unread headline.
Ctrl-M Toggle unread state of selected headline.
Ctrl-T Toggle flag of selected headline.
Space Skim through the headlines. Depending on your preferences you might need to use the Ctrl or Alt modifier.
u Move up cursor in the feed list.
d Move down cursor in the feed list.
b Move up cursor in the item list.
f Move down cursor in the item list.
Del Removes the currently selected feed or item.
liferea-1.12.7/doc/html/searching_de.html000066400000000000000000000136631352135647700202510ustar00rootroot00000000000000 Schlagzeilen suchen
Zurück Schlagzeilen suchen Vor

Schlagzeilen suchen

Die Titel der Abonnements oder der Schlagzeilen durchsuchen

Um nach einen Titel zu suchen kann die GTK-Listensuchfunktion sowohl in der Liste der Abonnements als auch der Schlagzeilen benutzt werden. Um sie zu aktivieren muß erst Strg-f gedrückt und dann der zu suchen Text eingegeben werden.

Durchsuchen des Inhalts aller Abonnements

Liferea unterstützt eine einfache case sensitive Suche in den Titeln und Inhalten der Schlagzeilen aller Abonnements. Der Suchen-Dialog kann z.B. mit Hilfe des "Durchsuchen" Buttons der Werkzeugliste aktiviert werden. Nachdem ein Suchbegriff eingegeben und der "Suchen" Button gedrückt wurde startet Liferea die Suche. Als Ergebnis wird jede Schlagzeile deren Titel oder Inhalt den Suchbegriff enthält in der Liste der Schlagzeilen angezeigt. In der Schlagzeilenansicht wird zusätzlich die Anzahl der Treffer angegeben.

Permanent Suche mit einem Suchordner

Ist man immer wieder an einem bestimmten Suchbegriff (z.B. allen Schlagzeilen mit dem Suchbegriff "XML") interessiert kann ein sogenannter Suchordner erzeugt werden. Dieser erscheint dann in der Liste der Abonnements und enthält automatisch immer alle Schlagzeilen auf die der Suchbegriff paßt. Um einen solchen Suchordner anzulegen muß zuerst eine Suche durchgeführt werden und dann im Suchen-Dialog der "+Suchordner" Button aktiviert werden. Darauf sollte ein neuer Eintrag in der Liste der Abonnements erscheinen. Der Titel und die Suchoptionen des Suchordners können über die Auswahl des "Eigenschaften" Menüpunktes im Hauptmenü oder Kontextmenü angepaßt werden

Die nachfolgende Tabelle enthält alle unterstützten Suchregeln und ihre jeweilige Bedeutung.

Schlagzeile enthält Hinzufügen jeder Schlagzeile deren Titel oder Inhalt case insensitiv dem Suchbegriff entspricht.
Schlagzeile enthält nicht Entfernen jeder Schlagzeile deren Titel oder Inhalt case insensitiv dem Suchbegriff entspricht.
Titel der Schlagzeile enthält Hinzufügen jeder Schlagzeile deren Titel case insensitiv dem Suchbegriff entspricht.
Titel der Schlagzeile enthält nicht Entfernen jeder Schlagzeile deren Titel case insensitiv dem Suchbegriff entspricht.
Inhalt der Schlagzeile enthält Hinzufügen jeder Schlagzeile deren Inhalt case insensitiv dem Suchbegriff entspricht.
Inhalt der Schlagzeile enthält nicht Entfernen jeder Schlagzeile deren Inhalt case insensitiv dem Suchbegriff entspricht.
Titel des Abonnements enthält Hinzufügen aller Schlagzeilen jedes Abonnements dessen Titel case insensitiv dem Suchbegriff entspricht.
Titel des Abonnements enthält nicht Entfernen aller Schlagzeilen jedes Abonnements dessen Titel case insensitive dem Suchbegriff entspricht.
Lesestatus ist ungelesen Hinzufügen aller ungelesenen Schlagzeilen.
Lesestatus ist gelesen Entfernen aller gelesenen Schlagzeilen.
Flagge ist gesetzt Hinzufügen aller markierten Schlagzeilen.
Flagge ist nicht gesetzt Entfernen aller nicht markierten Schlagzeilen.

Hinweis: Die Reihenfolge der Regeln ist nicht relevant. Eine additive Regel wird niemals von einer Entfernen-Regel betroffenen Schlagzeilen wieder hinzufügen.


Zurück Inhalt Vor
liferea-1.12.7/doc/html/searching_en.html000066400000000000000000000135341352135647700202600ustar00rootroot00000000000000 Searching
Prev Searching and Search Folders Next

Searching for Feed Content

Liferea supports a simple case sensitive text searching in the item content and titles of all your subscriptions.

To open the search dialog click the search button in the toolbar. Enter the string you want to search for and click the "Search" button. Any items containing the string either in their title or their content should appear in the resulting item list. Also the item content view will give you a message about the number of matches.

Permanent Searches with Search Folders

If you want to have permanent searches (e.g. all items containing the term "XML") you can create a search folder which will be added to your feed list and contains all items matching this search rule. To do so enter your search term into the search box and click the search button. After the results appear click the "Search Folder" button to create a search folder from the search results. Now a search folder should appear in your feed list. If you want you can edit the search folders title or change its rules by opening the properties dialog either from the "Subscriptions" menu or the contextual menu in the feed list.

The following table is a list of all possible search folder rules and their specific meaning.

Item does contain Adds each item whose title or content matches the given case insensitive string to the search folder.
Item does not contain Removes each item whose title or content matches the given case insensitive string from the search folder.
Item title does contain Adds each item whose item title matches the given case insensitive string to the search folder.
Item title does not contain Removes each item whose item title matches the given case insensitive string from the search folder.
Item body does contain Adds each item whose item content matches the given case insensitive string to the search folder.
Item body does not contain Removes each item whose item body matches the given case insensitive string from the search folder.
Feed title does contain Adds each item whose parent feed's title matches the given case insensitive string to the search folder.
Feed title does not contain Removes each item whose parent feed's title matches the given case insensitive string from the search folder.
Read status is unread Adds each unread item to the search folder.
Read status is read Removes each unread item from the search folder.
Flag status is flagged Adds each flagged item to the search folder.
Flag status is unflagged Removes each flagged item from the search folder.
Podcast included Adds all items that contain an enclosure to the search folder.
Podcast not included Removes all items that do not contain an enclosure from the search folder.

Please note that the order of the rules does not matter. An additive rule after a removal rule that does match an item that is to be removed because of to the removal rule will not add this item!


Prev Contents Next
liferea-1.12.7/doc/html/subscriptions_de.html000066400000000000000000000243711352135647700212130ustar00rootroot00000000000000 Abonnements verwalten
Zurück Abonnements verwalten Vor

Diese Sektion beschreibt die Möglichkeiten die Liferea bietet um verschiedene Typen von Online-Abonnements anzulegen.

Was kann abonniert werden?

Als News-Aggregator kann Liferea verschiedenste Quellen von New, Blogs oder anderen Inhalten abonnieren. Liferea unterstützt folgende Abonnementtypen:

  • einzelne Feeds
  • OPML-Quellen (z.B. eine Planet-Feedliste, ein Blogroll...)
  • ein TheOldReader-Konto
  • ein TinyTinyRSS-Konto

Abonnements anlegen

Mit dem Menüpunkt "Neues Abonnement" aus dem Hauptmenü oder dem Kontextmenü der Liste der Abonnements kann ein Dialog zum Anlegen eines neuen Abonnements geöffnet werden.

Abonnements können eine Vielzahl von Quellen haben z.B. eine Feed-URL, ein lokal ausgeführtes Kommando oder vom Rechner aus zugreifbare Datei. In der Mehrzahl der Fälle wird aber eine Feed-URL die Quelle sein. Nachdem der Quelltyp korrekt eingestellt ist kann die Feed-URL, das Kommando oder der Dateiname im Eingabefeld "Quelle" eingetragen werden. Um zum Beispiel Slashdot's RSS News Feed zu abonnieren muß "URL" als Quelltyp ausgewählt werden und die Feed-URL "http://slashdot.org/index.rss" als "Quelle" eingetragen werden.

Im Falle von Kommandos und Dateien als Quelltyp können diese mit Hilfe eines Dateiauswähldialoges mit "Datei auswählen..." gesucht werden.

Es kann vorkommen, daß ein Feed-Format von Liferea nicht unterstützt wird. In diesem Fall kann ein Konvertierungsfilter verwendet werden um die Daten in ein für Liferea lesbares Format zu überführen. Solche Filter können zum Beispiel aus dem Snownews und Liferea Skript-Repository (Englisch) heruntergeladen werden.

Um solche Konvertierungsfilter zu benutzen muß die Option "Benutze Filter zum Konvertieren" aktiviert werden. Der Pfad des Filter-Skriptes muß dann unter "Konvertiere mit" angegeben werden. Alternativ kann das Skript mit "Datei auswählen..." gesucht werden. Ein Filter ist ein einfaches Programm welches die Quelldaten von stdin einliest und in einem von Liferea unterstützten Format auf stdout wieder ausgibt. Solche Filter können z.B. mit Perl leicht geschrieben werden.

Abonnement-Eigenschaften

Der Eigenschaften-Dialog für ein Abonnement wird nach dem Anlegen neuer Abonnements automatisch geöffnet. Zusätzlich kann er mit dem Menüpunkt "Eigenschaften" aus dem Hauptmenü oder dem Kontextmenü eines ausgewählten Abonnements aufgerufen werden. Beim Erzeugen neuer Abonnements ist es oft gar nicht notwendig die Defaultwerte zu verändern und es reicht aus den Dialog mit dem "Ok" Button zu bestätigen.

Der Eigenschaften-Dialog ist in fünf Registerkarten unterteilt: "Allgemein", "Quelle", "Cache", "Authentifizierung" und "Anhänge":

Allgemeine Eigenschaften

Die Registerkarte "Allgemein" erlaubt das Ändern des Titels und des Aktualisierungsintervalls des Abonnements.

Das Aktualisierungsintervall kontrolliert nach welcher Zeit Liferea ein Abonnement aktualisiert. Meistens ist es nicht nötig die Defaulteinstellung zu ändern. Es wird empfohlen das globale Aktualisierungsintervall zu benutzen, welches in den Programmeinstellungen festgelegt wird. Auf diese Weise kann die Aktualisierung aller Abonnements zentral gesteuert werden.

Manchmal geben Feeds ein eigenes Aktualisierungsintervall vor. In diesem Fall wird Liferea automatisch die Option "Benutzerdefinierte Aktualisierung" auswählen und das vom Feed vorgeschlagene Intervall eintragen. Dies passiert nur beim Anlegen neuer Abonnements Gibt ein Feed ein eigenes Interval vor sollte dieses auch beibehalten werden.

Es gibt folgende Modi für das Aktualisierungsinterval

Nutze das globale Aktualisierungsintervall
Mit dieser Option wird das Aktualisierungsintervall durch die globale Programmeinstellung festgelegt.
Benutzerdefinierte Aktualisierung
Mit dieser Option kann ein beliebiges Aktualisierungsintervall für das Abonnement vorgegeben werden. Beim Angeben des Intervalls sollte man sich immer bewußt sein, welchen Datenverkehr man mit unpassenden Werten verursachen kann. Ein Abonnement sollte nie öfter aktualisiert werden als sich seine angebotenen Inhalte ändern.
Feed nicht automatisch aktualisieren
Mit dieser Option kann das Aktualisieren des Abonnements deaktiviert werden. Das ist nützlich für Abonnements die man nur manuell aktualisieren möchte.

Quelle des Abonnements

Die Registerkarte "Quelle" enthält dieselben Dialogelemente die auch beim Anlegen neuer Abonnements angeboten werden. Daher kann hier die Quelle des Abonnements nachträglich verändert werden (z.B. wenn sich die URL der Webseite ändert)

Cache-Eigenschaften

Die dritte Registerkarte, "Cache", erlaubt es die Anzahl zu sichernder Schlagzeilen zu konfigurieren. Diese Einstellungen sind analog zu den globalen Cache-Einstellungen. Normalerweise ist es ausreichend die globale Einstellung zu verwenden.

Default-Cache-Einstellungen
Für das Abonnement soll die globale Cache-Einstellung verwendet werden.
Cache Deaktivieren
Verhindert das Sichern der Schlagzeilen.
Unbeschränkter Cache
Sichert alle Schlagzeilen. Verwirft niemals eine Schlagzeile.
Cache begrenzen auf # Schlagzeilen
Sichert nur # Schlagzeilen. Verwirft alte Schlagzeilen sobald mehr als # Schlagzeilen vorhanden sind.

Hinweis: Markierte Schlagzeilen werden unabhängig von den Cache-Einstellungen niemals gelöscht. Durch das Setzen der Flagge einer Schlagzeile die man gerade gelesen hat verhindert man deren zukünftiges Löschen.

Authentifizierung

Mit dieser Registerkarte kann die HTTP Authentifikation für den Download der Abonnement-Quelle aktiviert werden. Nach dem aktivieren der Checkbox können Benutzername und Paßwort eingegeben werden. Üblicherweise ist es nicht notwendig die Authentifikationsdaten im Voraus anzugeben, da Liferea automatisch nachfragt sobald eine Abonnement-Quelle Authentifikation erfordert.

Erweitert

In dieser Registerkarte können verschiedene Spezialeinstellungen für dieses Abonnement aktiviert werden.

Alle Anänge dieses Abonnements automatisch herunterladen.
Diese Option ist nützlich fpr Podcasts oder Torrent-Feeds. Wenn diese Option aktiviert ist lädt Liferea alle Anhänge automatisch herunter.
Link beim Auswählen der Schlagzeile automatisch öffnen.
Per-default zeigt Liferea den Inhalt einer Schlagzeile. Ist diese Option aktiv wird stattdessen die Schlagzeilen-URL geladen.
Ignoriere Kommentarfeeds dieses Abonnements.
Manchmal sind Kommentarfeeds fehlerhaft oder schlicht nutzlos. Mit dieser Option können sie ausgeblendet werden.
Erzwinge Popups für dieses Abonnement.
Wenn die globale Einstellung für Popups deaktiviert ist können diese trotzdem für dieses Abonnement erzwungen werden.
Keine Popups für dieses Abonnement.
Wenn die globale Einstellung für Popups aktiviert ist können diese trotzdem für dieses Abonnement unterdrückt werden.
Markiere heruntergeladene Schlagzeilen als gelesen.
Neue Schlagzeilen haben immer den Status "ungelesen". Diese Option kann nützlich sein um für uninteressante Abonnements die Schlagzeilen automatisch auf "gelesen" zu stellen.

Abonnieren von OPML-Quellen und Online-Diensten

Um eine OPML-Quelle oder ein Konto eines Online-Dienstes zu abonnieren muß "Neue Quelle" vom Kontextmenü in der Abonnements oder aus dem "Abonnements"-Menü ausgewählt werden. Im dann geöffneten Dialog kann die gewünschte Quelle ausgewählt werden.

OPML-Quelle

Wurde "Planet/BlogRoll/OPML" als Quelle ausgewählt muß die URL einer OPML-Quelle angegeben werden. Wenn nötig auch noch zusätzlich Authentifikation für den Zugriff. Geht alles gut wird ein neuer Eintrag in der Feedliste angelegt und nach dem initialen Download der OPML-Quelle werden die enthaltenen Abonnements hierarchisch hinzugefüht. Ändert sich die OPML-Quelle werden mit der Zeit alte Feeds automatisch entfernt und neue hinzugefügt.


Zurück Inhalt Vor
liferea-1.12.7/doc/html/subscriptions_en.html000066400000000000000000000246371352135647700212320ustar00rootroot00000000000000 Managing Subscriptions
Prev Managing Subscriptions Next

This section documents all user interactions necessary to create and maintain subscription.

Things Liferea Can Subscribe To

As a news aggregator Liferea allows you to subscribe to different syndication sources. The most common use case is to subscribe to single feeds. But Liferea also supports subscribing a source that provides a collection of feeds. So you can subscribe to:

  • a single feed
  • any OPML source (a planet feed list, a blog roll...)
  • a TheOldReader online account
  • a TinyTinyRSS online account

Subscribing to a Feed

To create a new feed subscription select "New Feed" from the feed list's contextual menu or the "Subscriptions" menu. A dialog to create a new subscription will appear.

For example, to subscribe to Slashdot's news feed enter "http://slashdot.org/index.rss" into the text box and click "OK".

Creating Special Feed Subscriptions

Liferea supports obtaining feeds from a variety of different sources including Internet URLs, the output of a locally run command, and by directly reading from a file. Most often, it is desired to subscribe using an URL as described in the previous paragraph. For special subscription you must select "Advanced" to open the following more complex subscription dialog:

After selecting the desired source type, enter the source URL, command name, or filename into the "Source" textbox.

When a command or local file is selected, the command or file can be selected using a file navigation box by clicking "Select File...".

Sometimes, the data in a feed is in a format that is unknown to Liferea. If this is the case, a conversion filter can be used to convert the data into a useable format. Many filters can be downloaded from the Snownews and Liferea script repository.

To use conversion filters, the "Use conversion filter" option needs to be activated in the subscription dialog box. The filter is specified by either typing the path of the filter script into the "Convert using" textbox or selecting the filter after clicking the "Select File..." button. The filters are simple programs that read the non-supported feed format using stdin and output the valid feed to stdout. Conversion filters are often written using perl.

Changing Subscription Properties

The feed properties dialog is used to configure additional feed properties and can be activated in the "Subscriptions" menu or from feed context menu. After successfully creating a new subscription you usually don't need to change the feed properties.

Only if you want to change the HTTP authentication, the caching behaviour or other feed specific options then you need to use the feed properties dialog.

The dialog groups the feed properties into five sets: "General", "Source", "Archive", "Download" and "Advanced":

General Properties

The "General" pane allows you to set feed title and update interval. The feed name is the feed's name shown in the feed list. Multiple feeds can have the same name.

The feed update interval controls how often Liferea attempts to update a feed. Typically, the feed update interval can be left at its default. We recommend to use the global update interval preference which you can find in the preference dialog because it allows one to change the update interval of all feed simultaneously.

Sometimes a feed provides a feed specific update interval. If this is the case Liferea automatically activates the user defined update interval setting and enters the feed specific update interval. This is only done during the initial feed subscription. You should never need to change such a setting.

The update interval can be set using the following options:

Use global default update interval
This preference is used for all feeds that have the update interval setting to follow the global default update interval setting.
Feed specific update interval
There might be situations where you want to specify a update interval which might be more or less frequent than the global update interval. Then you should select the user defined interval option and enter the interval value you want. When specifying an update interval, you should consider the web traffic you will cause with an inappropriate update interval. Don't update more often than the feed's content is updated.
Don't update this feed automatically
This option allows you to prevent updating the feed. You can use this option for feeds you always want to have only updated manually.

Source Properties

The "Source" pane contains the same fields that the advanced subscription dialog provides. You can use these settings to change the feed source (e.g. after a feed's URL has changed).

Archive Properties

The third pane, "Archive", controls how many items of a feed are kept when Liferea saves a feed to disk. Similar to the update interval settings there is a corresponding global preference which sets a default cache size for all feeds. You should use the feed specific cache settings only to implement exceptions from the global default cache size.

Default Cache Settings
Makes the feed use the default cache settings, which are stored in the main Liferea preferences.
Disable Cache
Disable the feed's items from ever being saved.
Unlimited cache
Save all items ever downloaded.
Number of items to save
Limits the cache size to a fixed number.

Note: Flagged items are always saved, regardless of the cache settings. So if you have found an important headline and want to prevent it from being dropped from the cache just flag this headline.

Download Properties

This tab allows you to disable the use of the global proxy setting and to enable HTTP authentication when downloading the feed. Enable the checkbox and enter appropriate user and password values to use password-protected feeds. Usually you won't need to use these settings because you will be asked username and password when subscribing to the feed that requires authentication.

Advanced Properties

This panel provides different special options to control how Liferea handles the subscription. These options are:

Automatically download all enclosures of this feed.
This might be useful for podcasts or torrent feeds. If you enable the option Liferea downloads attached enclosures.
Auto-load item link in configured browser when selecting articles.
Per-default Liferea shows the item description in the HTML view pane. When this check box is enabled it will automatically load the item link when the item selection changes.
Ignore comment feeds for this subscription.
Sometimes there are feeds with broken or useless comment feeds. This option allows to ignore those.
Enforce popup notification for this subscription.
If the global notification preference is disabled you can enabled this option to generate notifications for only this feed.
Never do popup notification for this subscription.
If the global notification preference is enabled you can use this option to prevent notifications for this feed. This might be useful for high-traffic feeds.
Mark downloaded items as read.
Normally new items have the status "unread". Sometimes you might want to use this option for new items of a special feed not to show up as "unread" so you don't have to mark them "read" manually.

Subscribing to OPML Sources and Online Services

To subscribe to OPML feed lists or a online service account select "New Source" from the context menu of the feed list or from the "Subscriptions" menu. From the following dialog select the source type you like to create.

OPML Sources

If you have selected "Planet/BlogRoll/OPML" you need to supply the source URL of the OPML document. If necessary provide authentication information. After doing so a new OPML source node will be inserted in the feed list and after downloading the OPML document for the first time new subscriptions as described by the OPML source will be created. If the OPML feed list changes over time old subscriptions are automatically dropped and new ones are added.


Prev Contents Next
liferea-1.12.7/doc/html/topics_de.html000066400000000000000000000031671352135647700176050ustar00rootroot00000000000000 Hilfe Inhalt
  Liferea Hilfe  

Dies ist die Endnutzerdokumentation für Liferea 1.12.

Hilfe Themen

Online Support

Schnelle Hilfe benötigt? Einfach im IRC-Channel #liferea von freenode.org fragen!

liferea-1.12.7/doc/html/topics_en.html000066400000000000000000000031031352135647700176050ustar00rootroot00000000000000 Help Contents
  Liferea Help  

This user documentation applies for Liferea 1.12.

Help Topics

Online Support

If you need instant help: try our IRC channel #liferea at freenode.org!

liferea-1.12.7/doc/html/updating_de.html000066400000000000000000000057601352135647700201200ustar00rootroot00000000000000 Aktualisieren von Abonnements
Zurück Aktualisieren von Abonnements Vor

Aktualisieren von Abonnements

Wie man ein einzelnes Abonnement aktualisiert

Zum sofortigen Aktualisieren eines einzelnen Abonnement reicht es aus den "Aktualisieren" Menüpunkt aus dem Hauptmenü oder Kontextmenü des Abonnements aufzurufen.

Wie man alle Abonnements auf einmal aktualisiert

Eine Aktualisierung aller Abonnements kann mit dem "Alle Aktualisieren" Button in der Werkzeugleiste oder dem entsprechenden Menupünkt im "Abonnement" Menü gestartet werden.

Die automatische Aktualisierung benutzen

Um alle Abonnements regelmäßig automatisch zu aktualisieren kann in den Einstellungen ein globales Aktualisierungsintervall in Minutengenauigkeit eingestellt werden. Dazu muß der Einstellungen-Dialog aufgerufen werden. Mehr dazu im Abschnitt Einstellungen ändern.

Soll ein einzelnes Abonnement öfter oder seltener als nach dem globalen Aktualisierungsintervall aktualisiert werden kann ein spezifisches Aktualisierungsintervall in den Eigenschaften des Abonnements konfiguriert werden. Dazu muß der Eigenschaften-Dialog mit dem "Eigenschaften" Menüpunkt aus dem Hauptmenü oder aus dem Kontextmenü des Abonnements aufgerufen werden. Hinweis: Abonnements sollten nicht öfter aktualisiert werden als sich ihr Inhalt ändert. Ansonsten wird unnötig Datenverkehr erzeugt wenn z.B. tausende Clients alle paar Minuten das Feed abrufen!

Manche Feeds geben ein eigenes Aktualisierungsinterval vor. In diesem Fall verwendet Liferea automatisch dieses Intervall anstatt des globalen Aktualisierungsintervall.

Aktualisieren von Abonnements beim Programmstart

Standardmäßig aktualisiert Liferea nach dem Start alle veralteten Abonnements. Ist das nicht erwünscht kann das Verhalten in den Programmeinstellungen deaktiviert werden. Mehr dazu im Abschnitt Einstellungen ändern.


Zurück Inhalt Vor
liferea-1.12.7/doc/html/updating_en.html000066400000000000000000000054051352135647700201260ustar00rootroot00000000000000 Updating Subscriptions
Prev Updating Subscriptions Next

Updating Subscriptions

How to update a single subscription

To update a single subscription select it in the feed list and select "Update" or "Update Folder" from the program menu or the context menu from within the feed list.

How to update all feeds at once

To update all subscriptions at once use the "Refresh" button from the toolbar or the option "Update All" from the "Subscriptions" menu.

Using Auto Update

To automatically update all subscriptions you can set a global update interval with the resolution of one minute. To do so you have to use the preferences dialog. To learn more about this refer to the Program Preferences section.

If you like to have some subscriptions to be updated more or less frequently than the global default update interval you can set an per-subscription update interval in the subscription properties. To do so select a subscription from the feed list and select "Properties" from the "Feed" menu or the contextual menu. Note: you should not update a feed more often then the content is changing. Think of the web traffic some thousands of clients polling each minute could create!

To help with the decision for a good update interval some subscriptions provide an own update interval. When you create a new subscription this value will be set as the default update interval. This setting will overrule the global default update interval.

Updating all feeds on program startup

On startup Liferea automatically updates all out-dated subscriptions. If you don't like this you can disable this behaviour in the program preferences. To learn more about this refer to the Program Preferences section.


Prev Contents Next
liferea-1.12.7/dtd/000077500000000000000000000000001352135647700140015ustar00rootroot00000000000000liferea-1.12.7/dtd/html.ent000066400000000000000000000725631352135647700154720ustar00rootroot00000000000000 liferea-1.12.7/glade/000077500000000000000000000000001352135647700143025ustar00rootroot00000000000000liferea-1.12.7/glade/Makefile.am000066400000000000000000000011221352135647700163320ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in gladedir = $(pkgdatadir) glade_DATA = about.ui \ auth.ui \ enclosure_handler.ui \ google_source.ui \ liferea_menu.ui \ liferea_toolbar.ui \ mainwindow.ui \ mark_read_dialog.ui \ new_folder.ui \ new_newsbin.ui \ new_subscription.ui \ node_source.ui \ opml_source.ui \ prefs.ui \ properties.ui \ reedah_source.ui \ rename_node.ui \ search_folder.ui \ search.ui \ simple_search.ui \ simple_subscription.ui \ theoldreader_source.ui \ ttrss_source.ui \ update_monitor.ui \ liferea.css EXTRA_DIST = \ $(glade_DATA) liferea-1.12.7/glade/about.ui000066400000000000000000000100051352135647700157470ustar00rootroot00000000000000 False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 5 About False center-on-parent dialog Liferea Liferea is a news aggregator for GTK+ https://lzone.de/liferea/ Liferea Homepage Developers: Lars Windolf Nathan Conrad Arnold Noronha Adrian Bunk Emilio Pozuelo Monfort Contributors: Code, Patches, Debugging James Doherty Jeremy Messenger John McKnight Tomasz Maka Karl Soderstrom Christophe Barbe Juho Snellman Roshan Revankar Johannes Schlueter Niklas Morberg Pierre Phaneuf ahmed el-helw James Bowes Marc Deslauriers Amit D. Chaudhary Christoph Hohmann Raphael Slinckx Bjorn Monnens Thomas de Grenier de Latour Aristotle Pagaltzis Norman Jonas Sebastian Droege Daniel Gryniewicz Remi Cardona Frederic Peters Don Malcolm Ed Catmur Chris Pirillo Eric Anderson Daniel Gryniewicz Ori Avtalion Stephan Maka Alexander Sack Gustavo Chain Lars Strojny Jon Forsberg Mathie Leplatre Mikel Olasagasti Maia Kozheva Peter Oliver Sergey Snitsaruk and many more... Lars Windolf Bart Kreska Wojciech Myrda Piotr Sokół Dario Conigliaro Emanuele Grande Gianvito Cavasoli Fernando Ike de Oliveira Og Maciel Leon Nardella Khaled Hosny Sargate Kanogan Rodrigo Gallardo Takeshi AIHANA Takeshi Hamasaki Vincent Lefèvre Daniel Nylander Mehmet Atif Ergun Eren Türkay Ihar Hrachyshka António Lima Bruno Miguel Martin Picek Justin Forest Oleg Maloglovets Sergey Rudchenko Leonid Selivanov Máté Őry Gabor Kelemen Pavol Klačanský Evgenia Petoumenou Besnik Bleta Christian Dywan Robin Stocker Paul Seyfert Gil Forcada Iñaki Larrañaga Murgoitio Mikel Olasagasti Uranga Adi Roiban Erwin Poeze Anxo Outeiral Aron Xu Joe Hansen Marquinos Iñigo Varela Yaron Sheffer Yuri Chornoivan Rūdolfs Mazurs Rihards Priedītis Mindaugas Baranauskas Trần Ngọc Quân Pauli Virtanen Jorma Karvonen Guillaume Bernard liferea gpl-2-0 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK vertical 2 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK end False False end 0 liferea-1.12.7/glade/auth.ui000066400000000000000000000163521352135647700156110ustar00rootroot00000000000000 True False 5 Authentication False dialog True False vertical 2 True False end gtk-cancel True True True False True False False 0 gtk-ok True True True True False True False False 1 False False end 0 True False start False 5 vertical 12 True False Enter the username and password for "%s" (%s): True 0 0 0 True False 6 12 True False User_name: True usernameEntry 0 0 0 True True True 1 0 True False _Password: True passwordEntry 0 0 1 True True False True 1 1 0 1 False True 1 cancelbutton2 okbutton1 liferea-1.12.7/glade/enclosure_handler.ui000066400000000000000000000217701352135647700203440ustar00rootroot00000000000000 True False 5 Open Enclosure False dialog True False vertical 2 True False end gtk-cancel True True True False True False False 0 gtk-ok True True True False True False False 1 False False end 0 True False 5 12 True False 6 True False Open an enclosure of type: 0 False False 0 True False 6 text/plain False False 1 True False What should Liferea do with this enclosure? Please enter the command you want to be executed below. The enclosures URL will be supplied as an argument for this command: True 60 60 0 False False 2 True False 6 True True True True 0 _Browse True True False True False False 1 True True 3 _Do this automatically for enclosures like this from now on. True True False True True False False 4 False True 0 False True 1 cancelbutton4 okbutton3 liferea-1.12.7/glade/google_source.ui000066400000000000000000000151331352135647700175000ustar00rootroot00000000000000 True Add Google Reader Account dialog True True 12 12 True 0 Please enter your Google Reader account settings. True False False 0 True 2 2 6 6 True True False 1 2 1 2 True True 1 2 True 0 _Password True passwordEntry 1 2 GTK_FILL True 0 _Username (Email) True userEntry GTK_FILL False 1 2 True end gtk-cancel True True True False True False False 0 gtk-ok True True True False True False False 1 False end 0 cancelbutton1 okbutton1 liferea-1.12.7/glade/liferea.css000066400000000000000000000001211352135647700164150ustar00rootroot00000000000000#browsertabs, box > box { margin-right: 5px; margin-top: 5px; margin-left: 5px} liferea-1.12.7/glade/liferea_menu.ui000066400000000000000000000205241352135647700172770ustar00rootroot00000000000000 _Subscriptions
app.update-all Update _All app.mark-all-feeds-read Mark All As _Read
app.new-subscription _New Subscription... app.new-folder New _Folder... app.new-vfolder New S_earch Folder... app.new-source New _Source... app.new-newsbin New _News Bin...
app.import-feed-list _Import Feed List... app.export-feed-list _Export Feed List...
app.quit _Quit
_Feed
app.update-selected _Update app.mark-selected-feed-as-read _Mark Items Read
app.remove-selected-feed-items Remove _All Items app.delete-selected _Remove
app.selected-node-properties _Properties
_Item
app.next-unread-item _Next Unread Item
app.prev-read-item Previous Item app.next-read-item Next Item
app.toggle-selected-item-read-status Toggle _Read Status app.toggle-selected-item-flag Toggle Item _Flag app.remove-selected-item R_emove
app.launch-selected-item-in-tab Open In _Tab app.launch-selected-item-in-browser _Open In Browser app.launch-selected-item-in-external-browser Open In _External Browser
_View
app.fullscreen _Fullscreen
app.zoom-in _Increase Text Size app.zoom-out _Decrease Text Size
app.set-view-mode _Normal View normal app.set-view-mode _Wide View wide app.set-view-mode _Combined View combined
app.reduced-feed-list _Reduced Feed List
_Tools
app.show-update-monitor _Update Monitor app.show-preferences _Preferences
S_earch
app.search-feeds Search All Feeds...
_Help
app.show-help-contents _Contents app.show-help-quick-reference _Quick Reference app.show-help-faq _FAQ
app.show-about _About
liferea-1.12.7/glade/liferea_toolbar.ui000066400000000000000000000072221352135647700177750ustar00rootroot00000000000000 True True True app.new-subscription True _New Subscription... Adds a subscription to the feed list. list-add True True app.mark-selected-feed-as-read True _Mark Items Read Marks all items of the selected feed list node / in the item list as read. gtk-apply True False app.prev-read-item Previous Item go-previous True False app.next-read-item Next Item go-next True True app.next-unread-item True _Next Unread Item go-jump True True app.update-all True Update _All Updates all subscriptions. view-refresh True True app.search-feeds Search All Feeds... Show the search dialog. edit-find liferea-1.12.7/glade/mainwindow.ui000066400000000000000000000441031352135647700170170ustar00rootroot00000000000000 100 1 1 False Liferea 640 480 liferea True False True True vertical True True True True 170 True True never in True True False True False True True True False True True True False False True True vertical 199 True True False none False True True False vertical True False True True none 0 0 True True True False page 1 False True True 100 True True False none False True True False True False True True none 0 0 True True 1 True False page 2 1 False True False True True vertical False True False gtk-go-back True True False True False False True False gtk-go-forward True True False True False False True False True True 0 adjustment6 1 False False True False True False View Headlines False False 0 0 True False True True none 0 1 2 True False page 3 2 False True False Headlines False True True 0 0 True False 0 1 liferea-1.12.7/glade/mark_read_dialog.ui000066400000000000000000000075341352135647700201160ustar00rootroot00000000000000 True False True Mark all as read ? True dialog question Mark items as read ? Are you sure you want to mark all items in the selected feed as read ? False 5 5 5 5 vertical 2 False True end Mark all as read True True True True True 0 gtk-cancel True True True True True True 1 False False 0 Do not ask again True True False start center 12 True True True 2 okButton cancelButton liferea-1.12.7/glade/new_folder.ui000066400000000000000000000117151352135647700167720ustar00rootroot00000000000000 False 5 New Folder False True center-on-parent dialog True False vertical 2 True False end gtk-cancel True True True False True False False 0 gtk-ok True True True True False True False False 1 False False end 0 True False 5 6 12 True False _Folder name: True 0 0 True True True 1 0 False True 1 button3 button2 liferea-1.12.7/glade/new_newsbin.ui000066400000000000000000000117311352135647700171620ustar00rootroot00000000000000 False 5 Create News Bin True center-on-parent dialog True False vertical 2 True False end gtk-cancel True True True False True False False 0 gtk-ok True True True True False True False False 1 False False end 0 True False 5 6 12 True False _News Bin Name: True 0 0 True True True 1 0 False True 1 cancelbutton6 newnewsbinbtn liferea-1.12.7/glade/new_subscription.ui000066400000000000000000000403101352135647700202340ustar00rootroot00000000000000 True False 5 New Subscription True center 400 dialog True False vertical 2 True False end gtk-cancel True True True False True False False 0 gtk-ok True True True False True False False 1 False False end 0 True False vertical 18 True False True 6 12 True False Feed Source 0 0 0 3 True False 12 Source Type: 0 0 0 1 3 _URL True True False True True True 1 1 2 _Command True True False True True feed_loc_url 1 2 2 _Local File True True False True True feed_loc_url 1 3 Select File... True True False True 2 3 True False 12 _Source: True sourceEntry 0 0 4 True True True 1 4 2 0 0 True False 6 12 True False Download / Postprocessing 0 0 0 _Don't use proxy for download True True False 12 True True 0 1 Use conversion _filter True True False 12 True True 0 2 True False 12 6 12 True False Liferea can use external filter plugins in order to access feeds and directories in non-supported formats. See the documentation for more information. True 0 0 0 3 True False Convert _using: True filterEntry 0 0 1 True True 1 1 Select File... True True False True 2 1 0 3 0 1 True True 1 cancelbtn newfeedbtn liferea-1.12.7/glade/node_source.ui000066400000000000000000000127241352135647700171540ustar00rootroot00000000000000 True False Source Selection True 300 400 True dialog 450 True False vertical True False end gtk-cancel True True True False True False False 0 gtk-ok True False True True False True False False 1 False True end 0 True False vertical True False 0 Select the source type you want to add... False False 0 True True True never in 400 True True False True True True 1 True True 1 cancelbutton1 ok_button liferea-1.12.7/glade/opml_source.ui000066400000000000000000000131031352135647700171660ustar00rootroot00000000000000 True Add OPML/Planet dialog True True 12 12 True 0 Please specify a local file or an URL pointing to a valid OPML feed list. True False False 0 True 6 True _Location True location_entry False False 0 True True 1 _Select File True True False True False False 2 False 1 2 True end gtk-cancel True True True False True False False 0 gtk-ok True True True False True False False 1 False end 0 cancelbutton1 okbutton1 liferea-1.12.7/glade/prefs.ui000066400000000000000000002335631352135647700157740ustar00rootroot00000000000000 1 10000 1 1 1000000 1 1 True False 5 Liferea Preferences center 300 dialog True False vertical 2 True False end gtk-close True True True False True False False 0 False True end 0 True True 5 left True False 12 vertical 18 True False 6 12 True False Feed Cache Handling 0 0 0 2 True False 12 Default _number of items per feed to save: True True itemCountBtn 0 0 1 60 True True 0 adjustment3 1 True 1 1 0 0 True False 6 12 True False Feed Update Settings 0 0 0 3 True False 12 False False False 0 False True False Note: <i>Please remember to set a reasonable refresh time. Usually it is a waste of bandwidth to poll feeds more often than each hour.</i> True True 0 False True 0 False False 0 0 4 3 _Update all subscriptions at startup. True True False start 12 12 True True 0 1 3 True False 12 12 Default Feed Refresh _Interval: True globalRefreshIntervalSpinButton 0 0 2 60 True True 1 adjustment2 1 1 1 2 True False 0 2 2 0 1 True False Feeds False True False 12 vertical 18 True False 6 True False Folder Display Settings 0 0 0 _Show the items of all child feeds when a folder is selected. True True False start 12 True True 0 1 _Hide read items. True True False start 12 True True 0 2 0 0 True False 6 True False Feed Icons (Favicons) 0 0 0 _Update all favicons now True True False 12 True 0 1 0 1 1 True False Folders 1 False True False 12 vertical 18 True False vertical 6 12 True False Reading Headlines 0 0 0 2 True False 12 _Skim through articles with: True skimKeyCombo 0 0 1 True False 12 _Default View Mode: True defaultViewModeCombo 0 0 2 True False 0 1 1 True False 0 1 2 0 0 True False vertical 6 12 True False Web Integration 0 0 0 2 True False 12 _Post Bookmarks to True socialpopup 0 0 1 True False 1 1 0 1 2 True False Headlines 2 False True False 12 vertical 18 True False vertical 6 True False Internal Browser Settings 0 0 0 Open links in Liferea's _window. True True False start 12 True True 0 1 _Disable Javascript. True True False start 12 True True 0 2 _Enable browser plugins. True True False start 12 True True 0 3 0 0 True False vertical 6 12 True False External Browser Settings 0 0 0 2 True False 12 _Browser: True browserpopup 0 0 1 True False 12 _Manual: True browsercmd 0 0 2 True True True 1 2 True False <small>(%s for URL)</small> True True browsercmd 0 1 3 True False 1 1 0 1 3 True False Browser 3 False True False 12 vertical 6 12 True False Toolbar Settings 0 0 0 2 _Hide toolbar. True True False start 12 True True 0 1 2 True False 12 Toolbar _button labels: True toolbarCombo 0 0 2 True False 0 1 2 True False Other 0 0 3 2 Ask for confirmation when marking all items as read True True 12 False start True 0 4 2 4 True False GUI 4 False True False 12 6 True False HTTP Proxy Server 0 0 0 _Auto Detect (GNOME or environment) True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK start 12 True True True 0 2 _No Proxy True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK start 12 True True proxyAutoDetectRadio 0 3 _Manual Setting: True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK start 12 True True proxyAutoDetectRadio 0 4 True False start 12 vertical 6 12 True False 12 Proxy _Host: True proxyhostentry 0 0 0 True True True 1 0 True False 12 Proxy _Port: True proxyportentry 0 0 1 True True True 1 1 Use Proxy Au_thentication True True False start 12 True True 0 2 2 True False start 21 6 12 True False 12 Proxy _Username: True 0 0 0 True True True 1 0 True False 12 Proxy Pass_word: True proxypasswordentry 0 0 1 True True start False True 1 1 0 3 2 0 5 True False warning False 6 end False False 0 False 16 True False Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per application proxy settings. The system's default proxy settings will be used. True False True 0 False False 0 0 1 5 True False Proxy 5 False True False 12 vertical 6 12 True False Privacy Settings 0 0 0 Tell sites that I do _not want to be tracked True True False start 12 True True 0 1 6 True False Privacy 6 False True False 12 18 True False 6 12 True False Downloading Enclosures 0 0 0 3 True False 12 _Download using True 0 0 1 True True False True True 1 1 True True False True True predefinedDownload 1 2 True False <small>(%s for URL)</small> True 1 0 2 True False 0 2 1 True True custom-command %s 2 2 0 0 True False True True vertical 6 12 True False Opening Enclosures 0 0 0 True True 12 True True in 100 True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True True 0 1 True False start 12 12 start gtk-properties True True False start True False False 0 gtk-delete True True False start True False False 1 0 2 0 1 7 True False Enclosures 7 False False True 1 prefclosebtn liferea-1.12.7/glade/properties.ui000066400000000000000000001246531352135647700170500ustar00rootroot00000000000000 10000 1 1 10000 1 1 True False 5 Subscription Properties center 300 dialog True False vertical 2 True False end gtk-cancel True True True False True False False 0 gtk-ok True True True True False True False False 1 False False end 0 True True 5 True False 12 vertical 18 True False 6 12 True False Feed Name 0 0 0 2 True False 12 Feed _Name: True feedNameEntry 0 1 True True True True 1 1 0 0 True False 6 12 True False Update Interval 0 0 0 3 _Use global default update interval. True True False 12 True True True 0 1 3 _Feed specific update interval of True True False 12 True True updateIntervalDefault 0 2 True True 1 adjustment5 1 1 1 2 True False liststore6 0 2 2 _Don't update this feed automatically. True True False 12 True True updateIntervalDefault 0 3 3 True False 0 4 3 339 True False 12 This feed provider suggests an update interval of %d minutes. True 0 0 5 3 0 1 True False General False True False 12 6 12 True False Feed Source 0 0 0 3 True False 12 Source Type: 0 0 0 1 3 _URL True True False True True True 1 1 2 _Command True True False True True feed_loc_url 1 2 2 _Local File True True False True True feed_loc_url 1 3 Select File... True True False True 2 3 True False 12 _Source: True sourceEntry 0 0 4 True True 1 4 2 Use conversion _filter True True False 12 True True 0 5 3 True False 24 Liferea can use external filter scripts in order to access feeds and directories in non-supported formats. True 0 0 6 3 True False 12 6 12 True False Convert _using: True filterEntry 0 0 True True True 1 0 Select File... True True False True 2 0 0 7 3 1 True False Source 1 False True False 12 6 12 347 True False The cache setting controls if the contents of feeds are saved when Liferea exits. Marked items are always saved to the cache. True 0 0 0 2 _Default cache settings True True False True True True 0 1 2 Di_sable cache True True False True True feedCacheDefault 0 2 2 _Unlimited cache True True False True True feedCacheDefault 0 3 2 _Number of items to save: True True False True True feedCacheDefault 0 4 True True 0 adjustment4 1 True True 1 4 2 True False Archive 2 False True False 12 6 12 Use HTTP _authentication True True False True True 0 0 _Don't use proxy for download True True False True True 0 2 True False 12 True 6 12 True False User_name: True usernameEntry 0 0 0 True True True 1 0 True False _Password: True passwordEntry 0 0 1 True True True False 1 1 0 1 3 True False Download 3 False True False 12 6 12 _Automatically download all enclosures of this feed. True True False True True 0 0 Auto-_load item link in configured browser when selecting articles. True True False True True 0 1 Ignore _comment feeds for this subscription. True True False True True 0 2 _Mark downloaded items as read. True True False True True 0 3 Extract full content from HTML5 and Google AMP True True False True True 0 4 4 True False Advanced 4 False False True 1 prop_cancel prop_ok liferea-1.12.7/glade/reedah_source.ui000066400000000000000000000170301352135647700174520ustar00rootroot00000000000000 True False Add Reedah Account dialog True False vertical True False end gtk-cancel False True True True False False True False False 0 gtk-ok False True True True False False True False False 1 False True end 0 True False 12 12 True False 0 Please enter your Reedah account settings. True False False 0 True False 2 2 6 6 True True False 1 2 1 2 True True 1 2 True False 0 _Password True passwordEntry 1 2 GTK_FILL True False 0 _Username (Email) True userEntry GTK_FILL False True 1 False True 2 cancelbutton1 okbutton1 liferea-1.12.7/glade/rename_node.ui000066400000000000000000000114171352135647700171210ustar00rootroot00000000000000 False 5 Rename False True center-on-parent dialog True False vertical 2 True False end gtk-cancel True True True False True False False 0 gtk-ok True True True True False True False False 1 False False end 0 True False 5 6 12 True False _New Name: True 0 0 True True True 1 0 False True 1 cancelbutton1 namechangebtn liferea-1.12.7/glade/search.ui000066400000000000000000000332371352135647700161160ustar00rootroot00000000000000 True False 5 Advanced Search 600 250 dialog True False vertical 2 True False end gtk-close True True True False True False False 0 True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-add True True 0 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK _Search Folder... True savesearchbtn True True 1 False False 1 gtk-find True True True False True False False 2 False False end 0 True False vertical True False Find Items that meet the following criteria 0 False False 0 True False 12 True False 6 True False vertical 12 True False 6 gtk-add True True False True False False 0 A_ny Rule Matches True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 0 True allRuleRadioBtn2 False True 1 _All Rules Must Match True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 0 True True True True 2 False True 0 True True True False True False 6 True True 1 True True 1 True True 1 cancelbutton8 savesearchbtn okbutton5 liferea-1.12.7/glade/search_folder.ui000066400000000000000000000275061352135647700174530ustar00rootroot00000000000000 True False 5 Search Folder Properties 640 400 dialog True False vertical 2 True False vertical 12 True False 12 True False Search _Name: True False False 0 True True True True 1 False True 0 True False 0 Find Items that meet the following criteria False False 1 True False 12 True False vertical 12 True False 6 gtk-add True True False True False False 0 A_ny Rule Matches True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 0 True allRuleRadioBtn False True 1 _All Rules Must Match True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 0 True True True True 2 False True 0 True True True False True False 6 True True 1 True True 2 True True 0 True False end gtk-cancel True True True False True False False 0 gtk-ok True True True False True False False 1 False True end 0 cancelbutton3 okbutton2 liferea-1.12.7/glade/simple_search.ui000066400000000000000000000137011352135647700174610ustar00rootroot00000000000000 True False 5 Search All Feeds False dialog True False vertical 2 True False end gtk-close True True True False True False False 0 _Advanced... True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True False False 1 gtk-find True False True True False Starts searching for the specified text in all feeds. The search result will appear in the item list. True False False 2 False False end 0 True False True 5 12 12 True False _Search for: True searchentry 0 0 True True Enter a search string Liferea should find either in a items title or in its content. True 1 0 True True 1 closebutton2 advancedbtn searchstartbtn liferea-1.12.7/glade/simple_subscription.ui000066400000000000000000000143511352135647700207420ustar00rootroot00000000000000 True False New Subscription dialog True False vertical True False end gtk-cancel False True True True False True False False 0 Advanced... False True True True False True False False 1 gtk-ok False True True True True False True False False 2 False True end 0 True False 12 12 True False Feed Source 0 0 0 True False 12 Enter a website location to use feed autodiscovery or in case you know it the exact feed location. True 0 0 0 1 True True 12 0 2 True True 1 cancelbutton5 advancedbtn1 button6 liferea-1.12.7/glade/theoldreader_source.ui000066400000000000000000000151371352135647700206720ustar00rootroot00000000000000 True Add TheOldReader Account dialog True True 12 12 True 0 Please enter your TheOldReader account settings. True False False 0 True 2 2 6 6 True True False 1 2 1 2 True True 1 2 True 0 _Password True passwordEntry 1 2 GTK_FILL True 0 _Username (Email) True userEntry GTK_FILL False 1 2 True end gtk-cancel True True True False True False False 0 gtk-ok True True True False True False False 1 False end 0 cancelbutton1 okbutton1 liferea-1.12.7/glade/ttrss_source.ui000066400000000000000000000177351352135647700174150ustar00rootroot00000000000000 True Add Tiny Tiny RSS Account dialog True True 12 12 True 0 Please enter your TinyTinyRSS account settings. True False False 0 True 3 2 6 6 True True 1 2 2 3 True True False 1 2 1 2 True True 1 2 True 0 _Server URL True serverUrlEntry 2 3 GTK_FILL True 0 _Password True passwordEntry 1 2 GTK_FILL True 0 _Username True userEntry GTK_FILL False 1 2 True end gtk-cancel True True True False True False False 0 gtk-ok True True True False True False False 1 False end 0 cancelbutton1 okbutton1 liferea-1.12.7/glade/update_monitor.ui000066400000000000000000000157161352135647700177040ustar00rootroot00000000000000 True False Update Monitor 400 300 True dialog True False vertical True False end Cancel All True True True False False False 0 gtk-close True True True False True False False 1 False False end 0 True False 6 6 6 True True True True in True True False 0 1 True True True True in True True False 1 1 True False Pending Requests 0 1 0 True False Downloading Now 0 0 0 True True 1 button4 button5 liferea-1.12.7/liferea.appdata.xml.in000066400000000000000000000047321352135647700174030ustar00rootroot00000000000000 net.sourceforge.liferea.desktop CC0 Liferea <_summary>RSS feed reader <_p>Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator for online news feeds. It supports a number of different feed formats including RSS/RDF, CDF and Atom. There are many other news readers available, but these others are not available for Linux or require many extra libraries to be installed. Liferea tries to fill this gap by creating a fast, easy to use, easy to install news aggregator for GTK/GNOME. <_p>Distinguishing features:
    <_li>Read articles when offline <_li>Synchronizes with TheOldReader <_li>Synchronizes with TinyTinyRSS <_li>Synchronizes with InoReader <_li>Synchronizes with Reedah <_li>Permanently save headlines in news bins <_li>Match items using search folders <_li>Play Podcasts
https://lzone.de/liferea/screenshots/screenshot1.png https://lzone.de/liferea/screenshots/screenshot2.png https://lzone.de/liferea/screenshots/screenshot3.png https://lzone.de/liferea/screenshots/screenshot4.png https://lzone.de/liferea/screenshots/screenshot5.png https://lzone.de/liferea/screenshots/screenshot6.png https://lzone.de/liferea/screenshots/screenshot7.png https://lzone.de/liferea/screenshots/screenshot8.png https://lzone.de/liferea/screenshots/screenshot9.png https://lzone.de/liferea/ liferea-devel@lists.sf.net
liferea-1.12.7/liferea.convert000066400000000000000000000033701352135647700162420ustar00rootroot00000000000000[net.sf.liferea:/org/gnome/liferea/] browse-inside-application = /apps/liferea/browse-inside-application browse-key-setting = /apps/liferea/browse-key-setting browser = /apps/liferea/browser browser-id = /apps/liferea/browser_id default-view-mode = /apps/liferea/default-view-mode default-update-interval = /apps/liferea/default-update-interval disable-javascript = /apps/liferea/disable-javascript disable-toolbar = /apps/liferea/disable-toolbar last-hpane-pos = /apps/liferea/last-hpane-pos last-vpane-pos = /apps/liferea/last-vpane-pos last-wpane-pos = /apps/liferea/last-wpane-pos last-window-height = /apps/liferea/last-window-height last-window-maximized = /apps/liferea/last-window-maximized last-window-width = /apps/liferea/last-window-width last-window-x = /apps/liferea/last-window-x last-window-y = /apps/liferea/last-window-y last-window-state = /apps/liferea/last-window-state last-zoomlevel = /apps/liferea/last-zoomlevel maxitemcount = /apps/liferea/maxitemcount startup-feed-action = /apps/liferea/startup_feed_action toolbar-style = /apps/liferea/toolbar_style folder-display-mode = /apps/liferea/folder-display-mode folder-display-hide-read = /apps/liferea/folder-display-hide-read reduced-feedlist = /apps/liferea/reduced-feedlist download-tool = /apps/liferea/enclosure-download-tool proxy-detect-mode = /apps/liferea/proxy/detect-mode proxy-host = /apps/liferea/proxy/host proxy-port = /apps/liferea/proxy/port proxy-use-authentication = /apps/liferea/proxy/use_authentication proxy-authentication-user = /apps/liferea/proxy/authentication_user proxy-authentication-password = /apps/liferea/proxy/authentication_password social-bm-site = /apps/liferea/social-bm-site enable-plugins = /apps/liferea/enable-plugins browser-font = /apps/liferea/browser-font liferea-1.12.7/man/000077500000000000000000000000001352135647700140015ustar00rootroot00000000000000liferea-1.12.7/man/Makefile.am000066400000000000000000000000721352135647700160340ustar00rootroot00000000000000SUBDIRS = pl EXTRA_DIST = liferea.1 man_MANS = liferea.1liferea-1.12.7/man/liferea.1000066400000000000000000000054711352135647700155010ustar00rootroot00000000000000.TH LIFEREA "1" "Dec 26, 2015" .SH NAME Liferea \- GTK desktop news aggregator .SH SYNOPSIS .B liferea .RI [\fIOPTIONS\fR] .SH DESCRIPTION \fBLiferea\fP (Linux Feed Reader) is an aggregator for online news feeds. It can be used to maintain a list of subscribed feeds, browse and search through their items and displays their contents. Additionally Liferea allows one to sync subscriptions and read headlines with online accounts of TinyTinyRSS and TheOldReader. .SH OPTIONS Liferea options: .TP .B \-v, \-\-version Print version information and exit .TP .B \-h, \-\-help Display a option overview and exit .TP .B \-a, \-\-add\-feed=\fIURI\fR Add a new subscription URI which can be a feed or website URL .TP .B \-w, \-\-mainwindow\-state=\fISTATE\fR Start Liferea with its mainwindow in STATE: shown, iconified, hidden .TP .B \-\-debug\-all Print debugging messages of all types .TP .B \-\-debug\-cache Print debugging messages for the cache handling .TP .B \-\-debug\-conf Print debugging messages of the configuration handling .TP .B \-\-debug\-gui Print debugging messages of all GUI functions .TP .B \-\-debug\-html Enables HTML rendering debugging. Each time Liferea renders HTML output it will also dump the generated HTML into $XDG_CACHE_DIR/liferea/output.xhtml. .TP .B \-\-debug\-parsing Print debugging messages of all parsing functions .TP .B \-\-debug\-performance Print debugging messages when a function takes too long to process .TP .B \-\-debug\-trace Print debugging messages when entering/leaving functions .TP .B \-\-debug\-update Print debugging messages of the feed update processing .TP .B \-\-debug\-verbose Print verbose debugging messages .SH DBUS INTERFACE To allow integration with other programs \fBLiferea\fP profives a DBUS interface for automatic creation of new subscriptions. The script \fBliferea-add-feed\fP is a convenient way to use this interface. Just pass a valid feed URL as parameter and the feed will be added to the feed list. You can also pass non-feed URLs to use feed auto discovery. Example: liferea-add-feed "http://www.newsforge.com/newsforge.rss" Please note that Liferea needs to be running for \fBliferea-add-feed\fP to work. .SH ENVIRONMENT .TP .B http_proxy If a proxy is not specified in the Liferea preferences (which uses the proxy settings provided by dconf), then Liferea will use the proxy specified in $http_proxy. $http_proxy should be set to a URI specifying the desired proxy, for example .RB \(oqhttp://proxy.example.com:3128/\(cq. .SH FILES .TP $XDG_CONFIG_DIR/liferea/feedlist.opml Contains the current list of subscriptions .TP $XDG_CONFIG_DIR/liferea/liferea.css Stylesheet that can be used to override default HTML style .TP $XDG_DATA_DIR/liferea/liferea.db Sqlite3 database with all subscriptions and headlines .SH AUTHOR This manual page was written by Lars Windolf . liferea-1.12.7/man/pl/000077500000000000000000000000001352135647700144145ustar00rootroot00000000000000liferea-1.12.7/man/pl/Makefile.am000066400000000000000000000001021352135647700164410ustar00rootroot00000000000000mandir = @mandir@/pl EXTRA_DIST = liferea.1 man_MANS = liferea.1liferea-1.12.7/man/pl/liferea.1000066400000000000000000000041071352135647700161070ustar00rootroot00000000000000.TH LIFEREA "1" "Luty 1, 2005" .SH NAME Liferea \- Czytnik wiadomoci RSS/RDF i Atom .SH SKADNIA .B liferea .RI [\fIOPCJE\fR] .SH OPIS \fBLiferea\fP (Linuksowy Czytnik Wiadomoci) to przegldarka kanaw RSS/RDF oraz Atom obsugujca rwnie kanay CDF, OCS i katalogi OPML. Z zaoenia jest klonem Windowsowego czytnika FeedReader. Umoliwia zarzdzanie list subskrypcji, przegldanie, wyszukiwanie w elementach oraz wywietlanie ich zawartoci z wykorzystaniem bibliotek GtkHTML lub Mozilli. .SH OPCJE .TP .B \-\-version Wywietl informacj o wersji i wyjd .TP .B \-\-help Wywietl podsumowanie opcji i wyjd .TP .B \-\-mainwindow\-state=\fISTAN\fR Uruchom gwne okno Liferea w jednym ze STANw: shown, iconified, hidden .TP .B \-\-debug\-cache Wywietl informacje debugowania obsugi pamici podrcznej .TP .B \-\-debug\-conf Wywietl informacje debugowania obsugi konfiguracji .TP .B \-\-debug\-update Wywietl informacje debugowania procesu uaktualniania subskrypcji .TP .B \-\-debug\-parsing Wywietl informacje debugowania funkcji przetwarzajcych .TP .B \-\-debug\-gui Wywietl informacje debugowania wszystkich funkcji interfejsu graficznego .TP .B \-\-debug\-trace Wywietl informacje debugowania wykonywania funkcji .TP .B \-\-debug\-all Wywietl wszelkie moliwe informacje debugowania .TP .B \-\-debug\-verbose Wywietl szczegowe informacje debugowania .SH ZMIENNE RODOWISKOWE .TP .B http_proxy Jeli porednik sieciowy (proxy) nie zosta podany w Preferencjach Liferea (pobierany z konfiguracji Gconf), uywany bdzie serwer podany w zmiennej $http_proxy. Warto zmiennej $http_proxy powinna zawiera URI danego serwera proxy, na przykad .RB \(oqhttp://proxy.example.com:3128/\(cq. .SH PLIKI .TP \fI/usr/lib/liferea/\fR Wtyczki Liferea .TP \fI/usr/share/liferea/css/\fR Arkusze stylw uywane do modyfikowania wygldu przegldarki artykuw .TP \fI/usr/share/liferea/opml/\fR Przykadowe listy subskrypcji .TP \fI~/.liferea/\fR Listy subskrypcji uytkownika oraz pliki pamici podrcznej .SH AUTORZY Lars Windolf .br Nathan J. Conrad liferea-1.12.7/net.sf.liferea.gschema.xml.in000066400000000000000000000270551352135647700205770ustar00rootroot00000000000000 false Open links inside of Liferea? If set to true, links clicked will be opened inside of Liferea, otherwise they will be opened in the selected external browser. 1 Selects which key to use to pagedown or go to the next unread item Selects which key to use to pagedown or go to the next unread item. Set to 0 to use space, 1 to use ctrl-space, or 2 to use alt-space. 'mozilla %s' Selects the browser command to use when browser_module is set to manual Selects the browser command to use when browser_module is set to manual. 'gnome' Selects which browser to use to open external links Selects which browser to use to open external links. The choices include "default" and "manual". true Get a confirmation dialog when marking all read If TRUE Liferea will display a confirmation dialog before marking all items of the selected feed as read. 0 The default view mode for feed list nodes. The default view mode for displaying feed list nodes. Possible values: 0=email like 3-pane, 1=wide view 3-pane, 2=combined view 2-pane 0 Default interval for fetching feeds. This value specifies how often Liferea tries to update feeds. The value is given in minutes. When setting the interval always consider the traffic it produces. Setting a value less than 15min almost never makes sense. false Allows to disable Javascript. Allows to disable Javascript. false Disable displaying the toolbar in the Liferea main window Disable displaying the toolbar in the Liferea main window. 0 Height of the itemlist pane in the mainwindow Height of the itemlist pane in the mainwindow. Use 0 to let GTK+ decide the height. 0 Width of the feedlist pane in the mainwindow Width of the feedlist pane in the mainwindow. Use 0 to let GTK+ decide the width. 0 Height of the Liferea main window Height of the Liferea main window. Use 0 to let GTK+ decide on the height. false Mainwindow is maximized when Liferea starts up Determines if the Liferea main window will be maximized at startup. 0 Width of the Liferea main window Width of the Liferea main window. Use 0 to let GTK+ decide on the width. 0 Left position of the Liferea main window Left position of the Liferea main window. 0 Top position of the Liferea main window Top position of the Liferea main window. 0 Last saved stat of the Liferea main window Last saved of the Liferea main window. Controls how Liferea shows the window on next startup. Possible values see src/ui/liferea_shell.h 100 Zoom level of the HTML view Zoom level of the HTML view. (100 = 1:1) '' Node id of the last feed list selection When shutting down Liferea saves the last selected node id here to be restored on startup. 100 Determines the default number of items saved on each feed This value is used to determine how many items are saved in each feed when Liferea exits. Note that marked items are always saved. 0 Determines if subscriptions are to be updated at startup Numeric value determines whether Liferea shall updates all subscriptions at startup (0=yes, otherwise=no). Inverse logic for compatibility reasons. '' Determines the style of the toolbar buttons Determines the style of the toolbar buttons locally, overriding the GNOME settings. Valid values are "both", "both-horiz", "icons", and "text". If empty or not specified, the GNOME settings are used. 1 Determine if folders show all child content. If set to 0 no items are displayed when selecting a folder. If set to 1 all items of all childs are displayed when selecting a folder. true Filter read items when displaying folders. If this option is enabled and folder-display-mode is not 0 when clicking a folder only the unread items of all childs will be displayed. false Filter feeds without unread items from feed list. If this option is enabled the feed list will contain only feeds that have unread items. '' Custom download command. A command used to download enclosures if download-use-custom-command is true. %s in the command will be replaced by the URL. 0 Which tool to download enclosures. This options determines which download tool Liferea uses to download enclosures (0 = steadyflow, 1 = gwget, 2=kget). false Whether to use the custom command or one of the predefined command. Set to true to use the command defined in download-custom-command, false to use the predefined command set in download-tool. 0 Proxy mode. This options determines what kind of proxy will be used. '' Proxy host. This options determines the proxy host. 8080 Proxy port. This options determines the proxy port. false Proxy auth. This options determines if auth is requiered. '' Proxy user. This options determines auth username. '' Proxy password. This options determines auth password. '' Social bookmark site This option determines which social bookmark site use to save links. 0 Width of the itemlist pane in the mainwindow Width of the itemlist pane in the mainwindow. Use 0 to let GTK+ decide the Width. false Enable plugins This options determines if liferea should enable plugins. '' User defined browser-font This option defines which font should be used to render in the browser. If not specified system setting will be used. false Send "Do Not Track" header Configures wether the "DNT" header is to be sent. If enabled sends "DNT: 1", meaning Do Not Track. [ 'state', 'favicon', 'headline', 'enclosure', 'date' ] Item list view column order The column order in the item list view. ['gnome-keyring','media-player','trayicon','plugin-installer'] Active plugins List of active plugins. It contains the "Module" names of the active plugins. See the .plugin file for obtaining the"Module" name of a given plugin. liferea-1.12.7/net.sourceforge.liferea.desktop.in000066400000000000000000000007071352135647700217500ustar00rootroot00000000000000[Desktop Entry] _Name=Liferea _GenericName=Feed Reader _X-GNOME-FullName=Liferea Feed Reader _Comment=Read news feeds and blogs _Keywords=news;feed;aggregator;blog;podcast;syndication;rss;atom Exec=liferea %U DBusActivatable=true Icon=liferea StartupNotify=true Terminal=false Type=Application Categories=Network;News; X-Ubuntu-Gettext-Domain=liferea Version=1.1 MimeType=application/rss+xml;application/atom+xml;application/rdf+xml;x-scheme-handler/feed liferea-1.12.7/net.sourceforge.liferea.json000066400000000000000000000025601352135647700206420ustar00rootroot00000000000000{ "app-id":"net.sourceforge.liferea", "runtime":"org.gnome.Platform", "runtime-version":"3.26", "sdk":"org.gnome.Sdk", "command":"liferea", "desktop-file-name-suffix":" (Master)", "cleanup":[ "/include", "/lib/pkgconfig", "/share/pkgconfig", "/share/aclocal", "*.la", "*.a" ], "finish-args":[ "--share=ipc", "--socket=x11", "--socket=wayland", "--share=network", "--filesystem=home", "--filesystem=xdg-run/dconf", "--filesystem=~/.config/dconf:ro", "--talk-name=ca.desrt.dconf", "--env=DCONF_USER_CONFIG_DIR=.config/dconf" ], "modules":[ { "name":"libpeas", "cleanup":[ "/bin/*", "/lib/peas-demo" ], "sources":[ { "type":"archive", "url":"https://download.gnome.org/sources/libpeas/1.22/libpeas-1.22.0.tar.xz", "sha256":"5b2fc0f53962b25bca131a5ec0139e6fef8e254481b6e777975f7a1d2702a962" } ] }, { "name":"liferea", "sources":[ { "type":"git", "url":"https://github.com/lwindolf/liferea.git" } ] } ] } liferea-1.12.7/opml/000077500000000000000000000000001352135647700141755ustar00rootroot00000000000000liferea-1.12.7/opml/Makefile.am000066400000000000000000000007371352135647700162400ustar00rootroot00000000000000EXTRA_DIST = \ feedlist_en.opml \ feedlist_bg.opml \ feedlist_ca.opml \ feedlist_de.opml \ feedlist_es.opml \ feedlist_eu.opml \ feedlist_fr.opml \ feedlist_he.opml \ feedlist_hu.opml \ feedlist_gl.opml \ feedlist_id.opml \ feedlist_it.opml \ feedlist_pl.opml \ feedlist_pt.opml \ feedlist_pt_BR.opml \ feedlist_sk.opml \ feedlist_sv.opml \ feedlist_nl.opml \ feedlist_no.opml lifereadistopmldir = $(datadir)/liferea/opml lifereadistopml_DATA = $(EXTRA_DIST) liferea-1.12.7/opml/feedlist_bg.opml000066400000000000000000000100711352135647700173340ustar00rootroot00000000000000 Liferea Default Feed List liferea-1.12.7/opml/feedlist_ca.opml000066400000000000000000000060011352135647700173250ustar00rootroot00000000000000 Canals predeterminats liferea-1.12.7/opml/feedlist_de.opml000066400000000000000000000062351352135647700173430ustar00rootroot00000000000000 Liferea Default Feed List liferea-1.12.7/opml/feedlist_en.opml000066400000000000000000000053041352135647700173510ustar00rootroot00000000000000 Liferea Default Feed List liferea-1.12.7/opml/feedlist_es.opml000066400000000000000000000053741352135647700173650ustar00rootroot00000000000000 Fuentes por defecto liferea-1.12.7/opml/feedlist_eu.opml000066400000000000000000000055741352135647700173710ustar00rootroot00000000000000 Iturri lehenetsiak liferea-1.12.7/opml/feedlist_fr.opml000066400000000000000000000063101352135647700173540ustar00rootroot00000000000000 Liste des flux par défaut de Liferea liferea-1.12.7/opml/feedlist_gl.opml000066400000000000000000000052731352135647700173560ustar00rootroot00000000000000 Lista de fontes predeterminadas do Liferea liferea-1.12.7/opml/feedlist_he.opml000066400000000000000000000266661352135647700173610ustar00rootroot00000000000000 Liferea Default Feed List liferea-1.12.7/opml/feedlist_hu.opml000066400000000000000000000051351352135647700173650ustar00rootroot00000000000000 Liferea alapértelmezett hírforráslista liferea-1.12.7/opml/feedlist_id.opml000066400000000000000000000062611352135647700173460ustar00rootroot00000000000000 Daftar Feed Default Liferea liferea-1.12.7/opml/feedlist_it.opml000066400000000000000000000100101352135647700173510ustar00rootroot00000000000000 Elenco notiziari predefiniti liferea-1.12.7/opml/feedlist_nl.opml000066400000000000000000000054311352135647700173610ustar00rootroot00000000000000 Liferea Dutch Feed List liferea-1.12.7/opml/feedlist_no.opml000066400000000000000000000060451352135647700173660ustar00rootroot00000000000000 Liferea eksempelkanaler liferea-1.12.7/opml/feedlist_pl.opml000066400000000000000000000062411352135647700173630ustar00rootroot00000000000000 Przykładowa lista subskrypcji Liferea liferea-1.12.7/opml/feedlist_pt.opml000066400000000000000000000066471352135647700174050ustar00rootroot00000000000000 Lista de Fontes liferea-1.12.7/opml/feedlist_pt_BR.opml000066400000000000000000000055551352135647700177650ustar00rootroot00000000000000 Lista de Fontes de Notícias liferea-1.12.7/opml/feedlist_sk.opml000066400000000000000000000056311352135647700173670ustar00rootroot00000000000000 Liferea Default Feed List liferea-1.12.7/opml/feedlist_sv.opml000066400000000000000000000054451352135647700174050ustar00rootroot00000000000000 Liferea Default Feed List liferea-1.12.7/pixmaps/000077500000000000000000000000001352135647700147075ustar00rootroot00000000000000liferea-1.12.7/pixmaps/16x16/000077500000000000000000000000001352135647700154745ustar00rootroot00000000000000liferea-1.12.7/pixmaps/16x16/Makefile.am000066400000000000000000000002601352135647700175260ustar00rootroot00000000000000themedir = $(datadir)/icons/hicolor size = 16x16 context = apps EXTRA_DIST = liferea.png lifereadistpixdir = $(themedir)/$(size)/$(context) lifereadistpix_DATA = $(EXTRA_DIST) liferea-1.12.7/pixmaps/16x16/liferea.png000066400000000000000000000013711352135647700176130ustar00rootroot00000000000000PNG  IHDRasRGBbKGD pHYs  ~tIME18>tEXtCommentCreated with The GIMP (c) 2003 Jakub 'jimmac' Steiner'3X/IDAT8˥KHTQgfL:8|TiOƅN.|LBAa]-"aZ&FALcpFIܹ-̫=p~?=Q6'|B׊@UUr(s,k V~ewL# ܡ!J](3nwpq+,33I8Jp{woYv$$'I";SBΠ8ICݜ&5@33LہCS, dbF,HͿa$UH"%NnNSsv{փͮs4T-ҘU9v7F|1I^(f#(}mlLE2K1ڝ,mrsc i.h?wUl!.#.x9'84ՄM)_Bq?~ Hv+ikpi 6xP(S44-ښ:<%L! 0Y}X<"x4>>\^V8Fsa _9ҔIENDB`liferea-1.12.7/pixmaps/22x22/000077500000000000000000000000001352135647700154665ustar00rootroot00000000000000liferea-1.12.7/pixmaps/22x22/Makefile.am000066400000000000000000000002601352135647700175200ustar00rootroot00000000000000themedir = $(datadir)/icons/hicolor size = 22x22 context = apps EXTRA_DIST = liferea.png lifereadistpixdir = $(themedir)/$(size)/$(context) lifereadistpix_DATA = $(EXTRA_DIST) liferea-1.12.7/pixmaps/22x22/liferea.png000066400000000000000000000016721352135647700176110ustar00rootroot00000000000000PNG  IHDRĴl;sRGBbKGD pHYs  ~tIME my>tEXtCommentCreated with The GIMP (c) 2003 Jakub 'jimmac' Steiner'3XIDAT8˵OI?[hZ++VXW)pQ7oiٸK<=m<C4DeFQh Zxmw<*DI'swfM qy?ϞdžA\Z(J umRW L244T710 DѺ9ʗ] M$$Drse155ՠ^I&fr4M7I'rmA>-u}o׋nl8?DZzCJYPT9En1;FvX[.b},-- 3-4U022Ҡ8{xrwb q_NtS,y;tb(R 6|>_E$6.W)4#DpXst+¥6ȟ l€[!E _;a6@ T6-IENDB`liferea-1.12.7/pixmaps/24x24/000077500000000000000000000000001352135647700154725ustar00rootroot00000000000000liferea-1.12.7/pixmaps/24x24/Makefile.am000066400000000000000000000002601352135647700175240ustar00rootroot00000000000000themedir = $(datadir)/icons/hicolor size = 24x24 context = apps EXTRA_DIST = liferea.png lifereadistpixdir = $(themedir)/$(size)/$(context) lifereadistpix_DATA = $(EXTRA_DIST) liferea-1.12.7/pixmaps/24x24/liferea.png000066400000000000000000000017161352135647700176140ustar00rootroot00000000000000PNG  IHDRw=sRGBbKGD pHYs  ~tIME->tEXtCommentCreated with The GIMP (c) 2003 Jakub 'jimmac' Steiner'3XIDATHՕoG^{1K $>@>TԂ[8E=c/=UD5AH@HLK!%Jb`';l\x5ҎfycM\rQn6/Sm,;æ_2 ܨT*Lzc #N300jz{{0 J---5+STԡXlP(`Y) yttt:0|~ F4U)u8LdR45 rZVZOOk,p5v[h]}>^ULrEdsܺNt7lǏtеUPuۓ}8KYe2R1rIBVL垡:mՁ؎$9CMAx+T~FO@2οϧoS\#R L/1ڐ$Pý,fIח;ƋL搫ǎiԜJiIH)ON`FCWՠTYv$σmX"BDQvDsmTdB]jV /5aaFwEP0??Xi5&IB^{iC|SeۉEt8R or{"Ɩ,canQ`brLS8)Dklc*`+ocsxbIENDB`liferea-1.12.7/pixmaps/32x32/000077500000000000000000000000001352135647700154705ustar00rootroot00000000000000liferea-1.12.7/pixmaps/32x32/Makefile.am000066400000000000000000000002601352135647700175220ustar00rootroot00000000000000themedir = $(datadir)/icons/hicolor size = 32x32 context = apps EXTRA_DIST = liferea.png lifereadistpixdir = $(themedir)/$(size)/$(context) lifereadistpix_DATA = $(EXTRA_DIST) liferea-1.12.7/pixmaps/32x32/liferea.png000066400000000000000000000030121352135647700176010ustar00rootroot00000000000000PNG  IHDR szzsRGBbKGD pHYs  tIME#IDATXoT?`m 1Vcd%" " J-Bv 6UUUP7j+6m*T4@!ĵc0xܱc]vl @Hʑt;sॽw]8{}ʊiY2MBYBm[E"u]muum۶بֿ2FMSml6+637Ol8?8}t}lFX뺄B!|G)p]t@|rfll0 @&QJ).]ĕ3RE p슳C?/^ĉ>|ke6 w{*id^~2}ɮ(u²g"?ɑH3g0<<CCCm ^__Ϯ]FH)< ?BzE{ݿof[Ķ7)3(@CN52{_wh8ضRj{GA4ulf{W;()ƪWc6w342PLD8yK*Al9!acƟt]076pd*7àkXm)HC[DZf |z5m<H)tycWOo0z;Y\P#H t@G+ir={cA<}' w t:]7== X Mxe*Oȭ2 Fq,7?￙"?7@4ð,83s5[mDUnݙd~̞VZc8ŪWaqSY\G3Eu`6R΍G 2r H6;$v\Sd92Z BU}{Z[ZZhjjB)jW۷Qǻ**kyk׮ u&FFF~*l8X/ }t…r=ӆ@~}@oxkn |َ6Ȟ3zm IENDB`liferea-1.12.7/pixmaps/48x48/000077500000000000000000000000001352135647700155065ustar00rootroot00000000000000liferea-1.12.7/pixmaps/48x48/Makefile.am000066400000000000000000000002601352135647700175400ustar00rootroot00000000000000themedir = $(datadir)/icons/hicolor size = 48x48 context = apps EXTRA_DIST = liferea.png lifereadistpixdir = $(themedir)/$(size)/$(context) lifereadistpix_DATA = $(EXTRA_DIST) liferea-1.12.7/pixmaps/48x48/liferea.png000066400000000000000000000055341352135647700176320ustar00rootroot00000000000000PNG  IHDR00WsRGBbKGD pHYs B(xtIME . '( IDATh[l\yr/$w&RKSWʖN+AP[դR׭kopV`@aҦE}s!;ȱ[뒈XbIKH.Erogϙ9$S-Q3s09as7z/ly[O4Ms u]?]Ϸ߶퍯1瞫F7չR;iJ)RÇrϞ= Ձ@ F)J4-[ܹQii|kѢEu[qM(zD"sˀ}oVnݺMVZ 4u^`ƍk..]kӧ_$HuV.]Dcc#[n%{1::J?555 0111+3 X ]QJחڽ{wlcg5i>Fu)%yGyd2ttt.RWWɓ'ywٱck׮eϞ=={" ގi;E\EAss~z۷B`0< {n0J)FFF`Æ 444fljb;=z7|3G˲PJ!$ 筷*)'O\Z__/ReYtwwS(ؼy3lR)89r>,iiӦiꫯFEE^k WJjn*l޼ySGGOVX,뺛-#Kee]0P(B5.roocǎtC/ihh !@~y#H)04FP>5w\sCӃ8!^7 G7FWUUU,￿ʪ |ju N3*Pߝ0x;uÆa $z͖-[W x7*ZO6e|<~/l!??@jCNS5oY['_5)~3OH$H)Yt{u (J,Yv]כկ??~C'zA3EOezܝY^>ŇSQFDpu}e"(B?w/ /- xMY + B+ h! T_K]m5~22rb>G)8qkɤ~] Gjkk>yI41_)uu5 Q]Qν O躎Zv ;;D" m{yee%{;wʿ,?qte\ޗhu ]@,R4p]XTAʼ% xBxb_WWwgL& B`]l 9O5VsCB K(\)VL!bbꇖpWT)&i|Ejmm;ΆsdCiph(@8d^yBJϣ8Ikkm |h48Kd0L`+tZDc-d%\W(Bl=9W(?ms1=U0t/N(uuuwiR:sW 0 Zh Rì|Q߆RP%٢pO~a6m- ]ԐB266vb`0Xxq```ɫ$r!Ds(4u/9=bA")W=Ԁ;u҅ŃJ1۶eYJ%511 ?K<㺦i]D"˶mO(GIcs:U476O{pIP"^UQ((<&= + S(x<BRH2$qsT.1D15As[UY~{9{{‹% JCz8KG.7#΃XZ`~spK `rrrF﷤ ϟ6JS8_^" /{﮾c  [H,[`JL]#122PC޶***0M]|Es熧g}Db"N"*>| Ea=S+1M0(ZgsA4#$%[̈plc-[NvKW1OPnWJٶm Iq_<) a45F?X~xHEbȾ?c ,[R+XbIpl}q-8!?o"!UeqzNiYTIRC=ӓ ! vڥ?TJ-EO) empty.png, modified GNOME stock icons (Lars Windolf ) vfolder.png directory.png, copy of GNOME stock icons attachment.png, unread.png liferea.png (news-reader-48.png) Jakub Steiner fl_opml.png OPML icon (Chris Pirillo ) newsbin.png created for Liferea, Lars Windolf 16x16/liferea.png, 22x22/liferea.png, 24x24/liferea.png, 32x32/liferea.png, 48x48/liferea.png and scalable/liferea.svg: Jeff Fortin , creative commons share-alike license (http://creativecommons.org/licenses/by-sa/3.0/) liferea-1.12.7/pixmaps/Makefile.am000066400000000000000000000013541352135647700167460ustar00rootroot00000000000000SUBDIRS = 16x16 22x22 24x24 32x32 48x48 scalable EXTRA_DIST = \ mail-attachment.png \ available.png \ available_offline.png \ default.png \ folder.png \ empty.png \ empty_offline.png \ emblem-important.png \ unread.png \ folder-saved-search.png \ fl_opml.png \ newsbin.png lifereadistpixdir = $(datadir)/$(PACKAGE)/pixmaps lifereadistpix_DATA = $(EXTRA_DIST) gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor install-data-hook: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi liferea-1.12.7/pixmaps/available.png000066400000000000000000000015141352135647700173360ustar00rootroot00000000000000PNG  IHDRabKGDCIDATx]Kk$eꪾ&$Nm:㘌q\ "b*wnAƭ? ^ r@$&LL\Ituݿʅ=zVy^*o*܅'f jښcKvSi9@< c3 թW|L%%R{41yzp H2eKŬg._˨ny @?kч/\Otť;ᄃT.L'bGFyy5egw~d $*'AJ##R d9V~z;5_T/]룅R-J#BFM:78 2B&k+b4mz'lI\&+BTUf.N!|pnԞ~VH4H]il@F8~xx~cܽZgZV)wǭӀX2?[#%=q $1ipڙ 'e!OUljd>[]l˥^ bN8;iF@Xr~gA>c[iRrxH{: `;to;k&q>mc[mtacv'p j?(p+a}bv>@4_k+;S"=Ό>f %-XjEX+[Uwx 0?eETt7ߛvW7BIENDB`liferea-1.12.7/pixmaps/available_offline.png000066400000000000000000000015751352135647700210470ustar00rootroot00000000000000PNG  IHDRa pHYs  tIME KIDAT8O]k\u373Ltr=Ĵ5 DnZpFD;\(hI$Fib2dR봙۹͜"VOC3XBQVQZ^+kk#Ϻ5hJq}r٬u;K*_Ѿ쇉'NMe/M~c'PevG6of}Q̸rt^W ENnQ@!A~AY][Z[Nҟ"?š8?X^HvbqdRJ|_Dc=Whտj*WЎٳ\D%va6@xm f/M/fkC(9vJچV6c$2y=^R ,.7y-'y`R+X(c60,\qqtEXtCommentCreated with The GIMP (c) 2003 Jakub 'jimmac' Steiner'3XDIDATxݒMKQ8$\Fm$" DR''ZjQmE MAՙMAݜ{>{ Q1 f/R>Wb:ATp iqT>e`wĀJumO-|Rzw4)q푰2t 5"$p&iq; 5dz  ?UzwaN}v65,v 9:܇ L p $B<66hIJ zb٨^/mWGXIENDB`liferea-1.12.7/pixmaps/empty.png000066400000000000000000000014601352135647700165540ustar00rootroot00000000000000PNG  IHDRa pHYs  ~tIME 8IDATxejdUsʩSRKF6Jkc 682| ;Q 6BęFp"tb.ֽ\}o'(pkEǬFf|jFq eYcQ~}?]ovow?uZ8oɈX;O'˙z po~(IBirƏ?|m—.`N^΃G.vH)!xVlA~M 18ʹ2{,//L6g _|ӋkSd:GJ #cc̷`L7,9?I4K08Ȅ@\/כipD/>sL*{dҠF*R[?ﯯj%vesc:C؜/C!t^&Z1@q n? h Ao=!x/z^ IENDB`liferea-1.12.7/pixmaps/fl_opml.png000066400000000000000000000014311352135647700170440ustar00rootroot00000000000000PNG  IHDRaIDAT8MKlUwg&(}HqjP(ZHj`#BPm{₍d4QQkV l( %h )-$PFJN;|=.A\;{Gv|3.tE^ Ź(&ɚ#}B;t>;8+O,hB $7)j ^P7.Yx k_aWj2M 0N,@LyƁ*M W{;n+"B1¹|{eYO Pu;[=7>C=hOٶu,l †5I:[SqyrK <맋ܝɳg:Q`8ڂ] PPچ(J^-/^Bks s\ʡVHӿ'};Ԍ[O(!T5 !x 6w+UUU/@r3x+U˹O>DhBt#g?tL04Sy)oąʧm{R <0#8)_鿊E_hKֱdR+Aa|9}Op{t?+Z9/T|eQ>h|EK e?M\q\>⅃~V0/@1 F[e&k5Z7 BIENDB`liferea-1.12.7/pixmaps/folder-saved-search.png000066400000000000000000000017341352135647700212400ustar00rootroot00000000000000PNG  IHDRa pHYs  ~tIME ([8tEXtCommentCreated with The GIMPd%nRIDATxU]L[uA۰d*Le%bELfFEa/wwfL Z8u1cet Jf7^NB{z w|.~OSJ_! aםgOsX̽}Aln\sssdxxƦ&'oɟ Sӿuj޵Wb1ygEmV6]ܷ~^8r7Ǣ[E8V^Z][G7(T$nx)wc۶rOn/@ |:va=_,%.WJ@5===\<? v5MSQ*\lz+:l*.RJ>$r ˁ~h mۊUԨ ZEQ@R\oob]*A111!4GX*d eW⸒)T,  %m<g~1Mᥡ*Hm0yB%k.)Gv|49yt]ס>Ə#Py>}z R:j:@E}pC=v.+1:kk\;#cgk_=k1d5=u+ ߽}Qh;WCH f4f W~zaasʠi R,/.2t$ǻ_%Ld2Yv]QUEH$WeH~y-͡y}PJ qWnO.sss%)[τim@'j ܲ,k6Ɍ%{{{ձ1RT?6 lB hв8N?Y|s+IENDB`liferea-1.12.7/pixmaps/folder.png000066400000000000000000000006151352135647700166720ustar00rootroot00000000000000PNG  IHDRaTIDAT8˥NAYV4v$'ЂG0L)l,@k4KT*c0I؝bvIdI9{.,xL|}A>/*kZxn}<r<e<:=a]jvP\%?TU&!/&@vEis(4@ա"0 DQ@e(ϛ(T-Jt"EDV佢".~aV9Q,@ .D\~ Ok}:-߁18;NS&$t$yO@Ϲ?kNƨK;:7O*o hKtIENDB`liferea-1.12.7/pixmaps/mail-attachment.png000066400000000000000000000005701352135647700204670ustar00rootroot00000000000000PNG  IHDRabKGD-IDATxڵ=n0_rT9ǖii(SD9ƶ&[Jni,PXK*R,{<2En5߯>ܝ3Go?f5}_QQDx<84pa8#EZkApŸucy~ <"B!*\f(8@DRSm(3X!'hۖ"ªfu]3MSðMq:o}Skj(&$IhaY:aETnEn(vúU8ȲOBGw˵ozyXjR,&+0kVeXB$Mp(ZLy}áW*y$'`Ma3]ٷP@EmH* p?̀M\I~!v`YQDd@"6"8 C"(ILos u|M̨mm)a4oۨ#ɾ]ě1{L%`Yb? %2EbIENDB`liferea-1.12.7/pixmaps/scalable/000077500000000000000000000000001352135647700164555ustar00rootroot00000000000000liferea-1.12.7/pixmaps/scalable/Makefile.am000066400000000000000000000003161352135647700205110ustar00rootroot00000000000000themedir = $(datadir)/icons/hicolor size = scalable context = apps EXTRA_DIST = \ liferea.svg \ liferea-symbolic.svg lifereadistpixdir = $(themedir)/$(size)/$(context) lifereadistpix_DATA = $(EXTRA_DIST) liferea-1.12.7/pixmaps/scalable/liferea-symbolic.svg000066400000000000000000000031021352135647700224200ustar00rootroot00000000000000 image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme liferea-1.12.7/pixmaps/scalable/liferea.svg000066400000000000000000001723511352135647700206160ustar00rootroot00000000000000 image/svg+xml News 2005-03-11 Jakub Steiner http://jimmac.musichall.cz/ news usenet new N E W S liferea-1.12.7/pixmaps/unread.png000066400000000000000000000006431352135647700166760ustar00rootroot00000000000000PNG  IHDRa pHYs  ~tIME  )>ͩ>tEXtCommentCreated with The GIMP (c) 2003 Jakub 'jimmac' Steiner'3XIDATxڥ1r0Ef8J]s$ 83vrtZU>..u#$V_/iWxPV54 <1c6xdY6A'л` P@2@.&I@UUdVy/}~N'W 2Hqr>SMpsR^_@R}XDA1Qڵ~۷qR-vK`Ιc`yTc(CDtIENDB`liferea-1.12.7/plugins/000077500000000000000000000000001352135647700147075ustar00rootroot00000000000000liferea-1.12.7/plugins/bold-unread.plugin000066400000000000000000000007561352135647700203330ustar00rootroot00000000000000[Plugin] Module=bold-unread Loader=python3 Icon=format-text-bold IAge=2 Name=Bold Unread Name[de]=Ungelesene Feeds hervorheben Name[it]=Non letti in grassetto Description=Bold text for subscriptions with unread items in the feedlist Description[de]=Abonnements mit ungelesenen Schlagzeilen werden mit fetter Schrift dargestellt Description[it]=Testo in grassetto per gli abbonamenti con articoli non letti nell'elenco dei notiziari Authors=Yanko Kaneti Copyright=Copyright © 2017 Yanko Kaneti liferea-1.12.7/plugins/bold-unread.py000066400000000000000000000017671352135647700174700ustar00rootroot00000000000000from gi.repository import GObject, Peas, PeasGtk, Gtk, Liferea, Gdk, Pango def cell_func_bold_unread(column, cell, model, iter, data): unread_count = model.get(iter, 3) cell.set_property("weight", Pango.Weight.BOLD if (unread_count[0] > 0) else Pango.Weight.NORMAL) return class NrBoldUnreadPlugin (GObject.Object, Liferea.ShellActivatable): __gtype_name__ = 'NrBoldUnreadPlugin' shell = GObject.property (type=Liferea.Shell) def do_activate (self): self.treeview = self.shell.lookup ("feedlist") self.ticol = self.treeview.get_column (0) area = self.ticol.get_property ("cell-area") self.layout = area.get_cells () self.ticol.set_cell_data_func (self.layout[1], cell_func_bold_unread) self.treeview.queue_draw () return def do_deactivate (self): self.ticol.set_cell_data_func (self.layout[1], None) self.layout[1].set_property("weight", Pango.Weight.NORMAL) self.treeview.queue_draw () return liferea-1.12.7/plugins/gnome-keyring.plugin000066400000000000000000000013741352135647700207070ustar00rootroot00000000000000[Plugin] Module=gnome-keyring Loader=python3 Icon=security-medium IAge=2 Name=Libsecret Support Name[de]=Unterstützung für Libsecret Name[he]=תמיכה עבור Libsecret Name[it]=Supporto al portachiavi di Libsecret Description=Allow Liferea to use libsecret as password store Description[de]=Erlaubt Liferea Passwörter mit libsecret zu speichern Description[he]=אפשר ליישום Liferea להשתמש בתוכנה libsecret כמחסן סיסמאות Description[it]=Consente all'applicazione di usare come archivio delle password il portachiavi di libsecret. Authors=Lars Windolf ;Bastian Germann Copyright=Copyright © 2012 Lars Windolf Website=https://lzone.de/liferea/ Help=https://lzone.de/liferea/ liferea-1.12.7/plugins/gnome-keyring.py000066400000000000000000000051731352135647700200420ustar00rootroot00000000000000# # Libsecret Plugin # # Copyright (C) 2013 Lars Windolf # Copyright (C) 2018 Bastian Germann # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library 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 Library General Public License # along with this library; see the file COPYING.LIB. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # import gi gi.require_version('Peas', '1.0') gi.require_version('PeasGtk', '1.0') gi.require_version('Liferea', '3.0') gi.require_version('Secret', '1') from gi.repository import GObject, Peas, PeasGtk, Gtk, Liferea, Secret LABEL = 'liferea' SCHEMA = Secret.Schema.new( "net.sf.liferea.Secret", Secret.SchemaFlags.NONE, {'id': Secret.SchemaAttributeType.STRING} ) class LibsecretPlugin(GObject.Object, Liferea.AuthActivatable): __gtype_name__ = 'LibsecretPlugin' object = GObject.property(type=GObject.Object) def get_collection(self): service = Secret.Service.get_sync(Secret.ServiceFlags.LOAD_COLLECTIONS, None) colls = service.get_collections() for c in colls: if c.get_label() == LABEL: return c return None def do_deactivate(self): window = self.object def do_query(self, id): coll = self.get_collection() if coll: items = coll.search_sync(None, {'id': id}, Secret.SearchFlags.UNLOCK, None) if items and items[0].load_secret_sync(None): username, password = items[0].get_secret().get_text().split('@@@') Liferea.auth_info_from_store(id, username, password) def do_delete(self, id): Secret.password_clear_sync(SCHEMA, {'id': id}, None) def do_store(self, id, username, password): coll = self.get_collection() if not coll: coll = Secret.Collection.create_sync(None, LABEL, None, Secret.CollectionCreateFlags(0), None) login = '@@@'.join([username, password]) secret = Secret.Value.new(login, len(login), 'text/plain') Secret.Item.create_sync(coll, SCHEMA, {'id': id}, repr(id), secret, Secret.ItemCreateFlags.REPLACE, None) liferea-1.12.7/plugins/headerbar.plugin000066400000000000000000000004551352135647700200500ustar00rootroot00000000000000[Plugin] Module=headerbar Loader=python3 IAge=2 Name=Header Bar Version=0.1 Description=Get a GNOME style header bar for Liferea Authors=Lars Windolf Copyright=Copyright © 2018 Lars Windolf Website=https://lzone.de/liferea/ Help=https://lzone.de/liferea/ liferea-1.12.7/plugins/headerbar.py000066400000000000000000000101531352135647700171760ustar00rootroot00000000000000#!/usr/bin/python3 # vim:fileencoding=utf-8:sw=4:et # # Liferea Header Bar Plugin # # Copyright (C) 2018 Lars Windolf # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 3 of the License, or (at your option) any later version. # # This library 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 Library General Public License # along with this library; see the file COPYING.LIB. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # import gi gi.require_version('Gtk', '3.0') from gi.repository import GObject, Gio, Gtk, Gdk, PeasGtk, Liferea # Initialize translations for tooltips # Fallback to English if gettext module can't find the translations # (That's possible if they are installed in a nontraditional dir) import gettext _ = lambda x: x try: t = gettext.translation("liferea") except FileNotFoundError: pass else: _ = t.gettext class HeaderBarPlugin (GObject.Object, Liferea.ShellActivatable): __gtype_name__ = "HeaderBarPlugin" object = GObject.property (type=GObject.Object) shell = GObject.property (type=Liferea.Shell) def __init__(self): GObject.Object.__init__(self) def do_activate (self): self.hb = Gtk.HeaderBar() self.hb.props.show_close_button = True self.hb.set_title("Liferea") # Left side buttons box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) Gtk.StyleContext.add_class(box.get_style_context(), "linked") button = Gtk.Button() button.add(Gtk.Arrow(Gtk.ArrowType.LEFT, Gtk.ShadowType.NONE)) button.set_action_name("app.prev-read-item") button.set_tooltip_text(_("Previous Item")) box.add(button) button = Gtk.Button() button.add(Gtk.Arrow(Gtk.ArrowType.RIGHT, Gtk.ShadowType.NONE)) button.set_action_name("app.next-read-item") button.set_tooltip_text(_("Next Item")) box.add(button) button = Gtk.Button() icon = Gio.ThemedIcon(name="edit-redo-symbolic") image = Gtk.Image.new_from_gicon(icon, Gtk.IconSize.BUTTON) button.add(image) button.set_action_name("app.next-unread-item") button.set_tooltip_text(_("_Next Unread Item").replace("_", "")) box.add(button) button = Gtk.Button() icon = Gio.ThemedIcon(name="emblem-ok-symbolic") image = Gtk.Image.new_from_gicon(icon, Gtk.IconSize.BUTTON) button.add(image) button.set_action_name("app.mark-selected-feed-as-read") button.set_tooltip_text(_("_Mark Items Read").replace("_", "")) box.add(button) self.hb.pack_start(box) # Right side buttons button = Gtk.MenuButton() icon = Gio.ThemedIcon(name="open-menu-symbolic") image = Gtk.Image.new_from_gicon(icon, Gtk.IconSize.BUTTON) builder = self.shell.get_property("builder") button.set_menu_model(builder.get_object("menubar")) button.add(image) self.hb.pack_end(button) button = Gtk.Button() icon = Gio.ThemedIcon(name="edit-find-symbolic") image = Gtk.Image.new_from_gicon(icon, Gtk.IconSize.BUTTON) button.add(image) button.set_action_name("app.search-feeds") button.set_tooltip_text(_("Search All Feeds...")) self.hb.pack_end(button) self.shell.lookup("mainwindow").set_titlebar(self.hb) self.shell.lookup("mainwindow").set_show_menubar(False) self.shell.lookup("maintoolbar").set_visible(False) self.hb.show_all() def do_deactivate (self): self.shell.lookup("mainwindow").set_titlebar(None) self.shell.lookup("mainwindow").set_show_menubar(True) self.shell.lookup("maintoolbar").set_visible(True) self.hb = None liferea-1.12.7/plugins/libnotify.plugin000066400000000000000000000012151352135647700201250ustar00rootroot00000000000000[Plugin] Module=libnotify Loader=python3 Icon=preferences-system-notification IAge=2 Name=Popup Notifications Name[de]=Popup-Benachrichtigungen Name[he]=התראות קופצות Name[it]=Notifiche popup Description=Display popups informing about new updates. Description[de]=Zeigt Popup-Benachrichtigungen an wenn Abonnements aktualisiert werden Description[he]=הצג התראות המיידעות על עדכונים חדשים Description[it]=Mostra dei popup che informano sui nuovi aggiornamenti. Authors=Lars Windolf Copyright=Copyright © 2013 Lars Windolf Website=https://lzone.de/liferea/ Help=https://lzone.de/liferea/ liferea-1.12.7/plugins/libnotify.py000066400000000000000000000031331352135647700172600ustar00rootroot00000000000000# # libnotify Popup Notifications Plugin # # Copyright (C) 2013-2015 Lars Windolf # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library 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 Library General Public License # along with this library; see the file COPYING.LIB. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # import gi gi.require_version('Notify', '0.7') from gi.repository import GObject, Peas, PeasGtk, Gtk, Liferea, Notify class LibnotifyPlugin (GObject.Object, Liferea.ShellActivatable): __gtype_name__ = 'LibnotifyPlugin' object = GObject.property (type=GObject.Object) shell = GObject.property (type=Liferea.Shell) def do_activate (self): self._handler_id = self.shell.props.feed_list.connect ("node-updated", self.on_node_updated) def do_deactivate (self): self.shell.props.feed_list.disconnect (self._handler_id) def on_node_updated (self, widget, nodeTitle): Notify.init ('Liferea') notification = Notify.Notification.new (nodeTitle, "was updated", "dialog-information") notification.show () liferea-1.12.7/plugins/media-player.plugin000066400000000000000000000012601352135647700204770ustar00rootroot00000000000000[Plugin] Module=media-player Loader=python3 Icon=audio-x-generic IAge=2 Name=Media Player Name[de]=Media Player Name[he]=נגן מדיה Name[it]=Riproduttore multimediale Description=Play music and videos directly from Liferea Description[de]=Musik und Videos können direkt in Liferea abgespielt werden Description[he]=נגן מוזיקה וסרטונים היישר מתוך Liferea Description[it]=Riproduce musica e video direttamente nell'applicazione. Authors=Lars Windolf ; Simon Kagedal Reimer ; Mozbugbox Copyright=Copyright © 2012 Lars Windolf Website=https://lzone.de/liferea/ Help=https://lzone.de/liferea/ liferea-1.12.7/plugins/media-player.py000066400000000000000000000217511352135647700176400ustar00rootroot00000000000000# # GStreamer based embedded Media Player # # Copyright (C) 2013 Lars Windolf # Copyright (C) 2013 Simon Kagedal Reimer # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library 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 Library General Public License # along with this library; see the file COPYING.LIB. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # import gi gi.require_version('Gst', '1.0') gi.require_version('Peas', '1.0') gi.require_version('PeasGtk', '1.0') gi.require_version('Liferea', '3.0') from gi.repository import GObject, Peas, PeasGtk, GLib, Gtk, Liferea, Gst GMARGIN = 6 def enum(*sequential, **named): """Create an ENUM data type""" enums = dict(zip(sequential, range(len(sequential))), **named) return type('Enum', (), enums) PlayState = enum("PLAY", "PAUSE", "STOP") class MediaPlayerPlugin(GObject.Object, Liferea.MediaPlayerActivatable): __gtype_name__ = 'MediaPlayerPlugin' object = GObject.property(type=GObject.Object) def __init__(self): Gst.init_check(None) self.IS_GST010 = Gst.version() < (0, 11) playbin = "playbin2" if self.IS_GST010 else "playbin" self.playing = PlayState.STOP self.player = Gst.ElementFactory.make(playbin, "player") if not self.IS_GST010: fakesink = Gst.ElementFactory.make("fakesink", "fakesink") self.player.set_property("video-sink", fakesink) bus = self.player.get_bus() bus.add_signal_watch() bus.connect("message::eos", self.on_eos) bus.connect("message::error", self.on_error) self.player.connect("about-to-finish", self.on_finished) self.moving_slider = False def on_error(self, bus, message): self.playing = PlayState.STOP self.player.set_state(Gst.State.NULL) err, debug = message.parse_error() print("Error: {}".format(err), debug) self.updateButtons() def on_eos(self, bus, message): self.playing = PlayState.STOP self.player.set_state(Gst.State.NULL) self.updateButtons() def on_finished(self, player): self.playing = PlayState.STOP self.slider.set_value(0) self.set_label(0) self.updateButtons() def play(self): self.playing = PlayState.PLAY uri = Liferea.enclosure_get_url(self.enclosures[self.pos]) self.player.set_property("uri", uri) self.player.set_state(Gst.State.PLAYING) Liferea.ItemView.select_enclosure(self.pos) self.updateButtons() GObject.timeout_add(1000, self.updateSlider) def stop(self): self.playing = PlayState.STOP self.player.set_state(Gst.State.NULL) self.slider.set_value(0) self.updateButtons() def pause(self): self.playing = PlayState.PAUSE self.player.set_state(Gst.State.PAUSED) self.updateButtons() def playToggled(self, w): self.set_label(0) if(self.playing != PlayState.PLAY): self.play() else: self.pause() def next(self, w): self.stop() self.pos+=1 self.play() def prev(self, w): self.stop() self.pos-=1 self.play() def set_label(self, position): format = "%d:%02d" if self.moving_slider: format = "%s" % format self.label.set_markup (format % (position / 60, position % 60)) def get_player_position(self): """Get the GStreamer player's position in nanoseconds""" try: if self.IS_GST010: return self.player.query_position(Gst.Format.TIME)[2] else: return self.player.query_position(Gst.Format.TIME)[1] except Exception as e: # pipeline must not be ready and does not know position print(e) return 0 def get_player_duration(self): """Get the GStreamer player's duration in nanoseconds""" try: if self.IS_GST010: return self.player.query_duration(Gst.Format.TIME)[2] else: return self.player.query_duration(Gst.Format.TIME)[1] except Exception as e: # pipeline must not be ready and does not know position print(e) return 0 def updateSlider(self): if self.playing != PlayState.PLAY or self.moving_slider: return False # cancel timeout duration = self.get_player_duration() / Gst.SECOND position = self.get_player_position() / Gst.SECOND self.slider.set_range(0, duration) self.slider.set_value(position) self.set_label(position) return True def updateButtons(self): Gtk.Widget.set_sensitive(self.prevButton, (self.pos != 0)) Gtk.Widget.set_sensitive(self.nextButton, (len(self.enclosures) - 1 > self.pos)) if(self.playing != PlayState.PLAY): self.playButtonImage.set_from_icon_name("media-playback-start", Gtk.IconSize.BUTTON) else: self.playButtonImage.set_from_icon_name("media-playback-pause", Gtk.IconSize.BUTTON) def on_slider_change_value(self, widget, scroll, value): self.set_label(value) self.move_to_nanosecs = value * Gst.SECOND return False def on_slider_button_press(self, widget, event): self.moving_slider = True def on_slider_button_release(self, widget, event): self.moving_slider = False # Stop when moving slider to very near the end end_cutoff = self.get_player_duration() - Gst.SECOND if self.move_to_nanosecs > end_cutoff and self.playing == PlayState.PLAY: self.playToggled(None) else: self.player.seek_simple(Gst.Format.TIME, Gst.SeekFlags.FLUSH | Gst.SeekFlags.KEY_UNIT, self.move_to_nanosecs) def do_load(self, parentWidget, enclosures): if parentWidget == None: print("ERROR: Could not find media player insertion widget!") # Test whether Media Player widget already exists childList = Gtk.Container.get_children(parentWidget) if len(childList) == 1: # We need to add a media player... vbox = Gtk.Box(Gtk.Orientation.HORIZONTAL, 0) vbox.props.margin = GMARGIN vbox.props.spacing = GMARGIN Gtk.Box.pack_start(parentWidget, vbox, True, True, 0); image = Gtk.Image() image.set_from_icon_name("media-skip-backward", Gtk.IconSize.BUTTON) self.prevButton = Gtk.Button.new() self.prevButton.add(image) self.prevButton.connect("clicked", self.prev) Gtk.Box.pack_start(vbox, self.prevButton, False, False, 0) self.playButtonImage = Gtk.Image() self.playButtonImage.set_from_icon_name("media-playback-start", Gtk.IconSize.BUTTON) self.playButton = Gtk.Button.new() self.playButton.add(self.playButtonImage) self.playButton.connect("clicked", self.playToggled) Gtk.Box.pack_start(vbox, self.playButton, False, False, 0) image = Gtk.Image() image.set_from_icon_name("media-skip-forward", Gtk.IconSize.BUTTON) self.nextButton = Gtk.Button.new() self.nextButton.add(image) self.nextButton.connect("clicked", self.next) Gtk.Box.pack_start(vbox, self.nextButton, False, False, 0) self.slider = Gtk.Scale(orientation = Gtk.Orientation.HORIZONTAL) self.slider.set_draw_value(False) self.slider.set_range(0, 100) self.slider.set_increments(1, 10) self.slider.connect("change-value", self.on_slider_change_value) self.slider.connect("button-press-event", self.on_slider_button_press) self.slider.connect("button-release-event", self.on_slider_button_release) Gtk.Box.pack_start(vbox, self.slider, True, True, 0) self.label = Gtk.Label() self.set_label(0) Gtk.Box.pack_start(vbox, self.label, False, False, 0) Gtk.Widget.show_all(vbox) self.enclosures = enclosures self.pos = 0 self.player.set_state(Gst.State.NULL) # FIXME: Make this configurable? self.on_finished(self.player) #def do_activate(self): #print("=== MediaPlayer activate") def do_deactivate(self): window = self.object liferea-1.12.7/plugins/plugin-installer.plugin000066400000000000000000000006471352135647700214270ustar00rootroot00000000000000[Plugin] Loader=python3 Module=plugin-installer IAge=3 Name=Plugin Installer Name[de]=Plugin Installer Description=Discover and install useful Liferea extensions more easily. Description[de]=Einfaches Auffinden und Installieren von Liferea Plugins Builtin=true Icon=emblem-default Authors=Lars Windolf Copyright=Copyright © 2017 Lars Windolf Website=https://github.com/lwindolf/liferea Version=0.1.0 liferea-1.12.7/plugins/plugin-installer.py000066400000000000000000000404111352135647700205520ustar00rootroot00000000000000# -*- coding: utf-8 -*- # vim: set ts=4 et sw=4 sts=4: # Plugin browser plugin for Liferea # Copyright (C) 2018 Lars Windolf # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import urllib.request, json import os, sys, glob, shutil, subprocess import gi gi.require_version('Gtk', '3.0') from gi.repository import GObject, Liferea, Gtk, Gio, PeasGtk class AppActivatable(GObject.Object, Liferea.ShellActivatable): __gtype_name__ = "PluginBrowserAppActivatable" shell = GObject.property(type=Liferea.Shell) def __init__(self): GObject.Object.__init__(self) def do_activate(self): action = Gio.SimpleAction.new ('InstallPlugins', None) action.connect("activate", self._run) self._app = self.shell.get_window().get_application () self._app.add_action (action) toolsmenu = self.shell.get_property("builder").get_object ("tools_menu") toolsmenu.append ('Plugins', 'app.InstallPlugins') def do_deactivate(self): self._browser = None self._app.remove_action ('InstallPlugins') self.app = None def _run(self, action, data=None): self._browser = PluginBrowser() self._browser.show_all() class PluginBrowser(Gtk.Window): SCHEMA_ID = "net.sf.liferea.plugins" def __init__(self): Gtk.Window.__init__(self, title="Plugin Installer") # FIXME: using safe XDG paths would be better self.target_dir = os.path.expanduser("~/.local/share/liferea/plugins/") self.schema_dir = os.path.expanduser("~/.local/share/glib-2.0/schemas/") self.set_border_width(10) self.set_default_size(600,300) self._grid = Gtk.Grid() self._grid.set_column_homogeneous(True) self._grid.set_row_homogeneous(True) self._notebook = Gtk.Notebook() self._notebook.append_page(PeasGtk.PluginManager(None), Gtk.Label("Activate Plugins")) self._notebook.append_page(self._grid, Gtk.Label("Download Plugins")) self.add(self._notebook) self._liststore = Gtk.ListStore(bool, str, str, str, str) self._plugin_list = self.fetch_list() for ref in self._plugin_list['plugins']: try: name = next(iter(ref)) installed = False if(os.path.isfile('%s%s.plugin' % (self.target_dir, ref[name]['module'])) or os.path.isdir('%s%s' % (self.target_dir, ref[name]['module']))): installed = True if not 'icon' in ref[name]: ref[name]['icon'] = 'libpeas-plugin' self._liststore.append((installed, ref[name]['icon'], name, ref[name]['category'], ('%s\n%s') % (name, ref[name]['description']))) except: print("Bad fields for plugin entry %s" % name) self.current_filter_category = None self.category_filter = self._liststore.filter_new() self.category_filter.set_visible_func(self.category_filter_func) # creating the treeview, making it use the filter as a model, and adding the columns self.treeview = Gtk.TreeView.new_with_model(self.category_filter) self.treeview.get_selection().connect("changed", self.on_selection_changed) for i, column_title in enumerate(["Inst.", "Icon", "Description"]): if column_title == 'Inst.': renderer = Gtk.CellRendererToggle() column = Gtk.TreeViewColumn(column_title, renderer, active=i) elif column_title == 'Icon': renderer = Gtk.CellRendererPixbuf() column = Gtk.TreeViewColumn(column_title, renderer, icon_name=i) else: renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(column_title, renderer, markup=4) self.treeview.append_column(column) column.set_sort_column_id(i) self._categories = Gtk.ListStore(str) for category in ["All", "Advanced", "Menu", "Notifications"]: self._categories.append([category]) self._catcombo = Gtk.ComboBox.new_with_model(self._categories) renderer_text = Gtk.CellRendererText() self._catcombo.pack_start(renderer_text, True) self._catcombo.add_attribute(renderer_text, "text", 0) self._catcombo.connect("changed", self.on_catcombo_changed) self._catlabel = Gtk.Label("Filter by category") self._catcombo.set_active(0) # Setting up the layout, putting the treeview in a scrollwindow, and the buttons in a row self.scrollable_treelist = Gtk.ScrolledWindow() self.scrollable_treelist.set_vexpand(True) self._installButton = Gtk.Button.new_with_mnemonic("_Install") self._installButton.connect("clicked", self.install) self._installButton.set_sensitive(False) self._uninstallButton = Gtk.Button.new_with_mnemonic("_Uninstall") self._uninstallButton.connect("clicked", self.uninstall) self._uninstallButton.set_sensitive(False) self._grid.attach(self.scrollable_treelist, 0, 0, 8, 10) self._grid.attach_next_to(self._catlabel, self.scrollable_treelist, Gtk.PositionType.TOP, 1, 1) self._grid.attach_next_to(self._catcombo, self._catlabel, Gtk.PositionType.RIGHT, 2, 1) self._grid.attach_next_to(self._installButton, self.scrollable_treelist, Gtk.PositionType.BOTTOM, 1, 1) self._grid.attach_next_to(self._uninstallButton, self._installButton, Gtk.PositionType.RIGHT, 1, 1) self.scrollable_treelist.add(self.treeview) self.show_all() def fetch_list(self): """Fetch list from github project repo and parse JSON""" list_url = "https://raw.githubusercontent.com/lwindolf/liferea/master/plugins/plugin-list.json" data = None req = urllib.request.Request(list_url) resp = urllib.request.urlopen(req).read() return json.loads(resp.decode('utf-8')) def category_filter_func(self, model, iter, data): """Tests if the category in the row is the one in the filter""" if self.current_filter_category is None or self.current_filter_category == "All": return True else: return model[iter][3] == self.current_filter_category def on_catcombo_changed(self, combo): tree_iter = combo.get_active_iter() if tree_iter != None: model = combo.get_model() self.current_filter_category = model[tree_iter][0] else: self.current_filter_category = None self.category_filter.refilter() def on_selection_changed(self, selection): self.update_buttons() def update_buttons(self): model, treeiter = self.treeview.get_selection().get_selected() if treeiter != None: self._installButton.set_sensitive(model[treeiter][0] == 0) self._uninstallButton.set_sensitive(model[treeiter][0] != 0) def get_plugin_by_name(self, plugin): plugin_info = None # Get infos on selected plugin for ref in self._plugin_list['plugins']: if plugin == next(iter(ref)): plugin_info = ref[plugin] if plugin_info == None: raise Exception("Fatal: Failed to get plugin infos from tree list!") return plugin_info def install(self, path=None, column=None, user_data=None): selection = self.treeview.get_selection() model, treeiter = selection.get_selected() if treeiter != None: model[treeiter][0] = self.install_plugin(self.get_plugin_by_name(model[treeiter][2])) self.update_buttons() def uninstall(self, path=None, column=None, user_data=None): selection = self.treeview.get_selection() model, treeiter = selection.get_selected() if treeiter != None: model[treeiter][0] = self.uninstall_plugin(self.get_plugin_by_name(model[treeiter][2])) self.update_buttons() def show_message(self, message, error = False, buttons = Gtk.ButtonsType.CLOSE): dialog = Gtk.MessageDialog(self, Gtk.DialogFlags.DESTROY_WITH_PARENT, (Gtk.MessageType.ERROR if error else Gtk.MessageType.INFO), buttons, message) response = Gtk.Dialog.run(dialog) Gtk.Widget.destroy(dialog) return response def install_plugin(self, plugin_info): """Fetches github repo for a plugin and tries to install the plugin""" DIR_NAME = "/tmp/liferea-pluginbrowser-%s" % plugin_info['module'] if os.path.isdir(DIR_NAME): shutil.rmtree(DIR_NAME) os.mkdir(DIR_NAME) os.chdir(DIR_NAME) # Check and install dependencies if 'deps' in plugin_info: # First check if package manager is available try: # Run package manager check command p = subprocess.Popen(' '.join(plugin_info['deps']['pkgmgr']['check']), shell=True) p.wait() pkg_mgr_missing = p.returncode except: pkg_mgr_missing = 0 if pkg_mgr_missing != 0: self.show_message("Missing package manager '%s'. Cannot check nor install necessary dependencies!" % plugin_info['deps']['pkgmgr']['name'], True) return False try: # For each package run package check command for pkg in plugin_info['deps']['packages']: print("Checking for %s..."%pkg) cmd = plugin_info['deps']['pkgmgr']['checkPkg'][:] cmd.append(pkg) print(" -> %s"%' '.join(cmd)) p = subprocess.Popen(cmd) p.wait() if p.returncode != 0: cmd = plugin_info['deps']['pkgmgr']['installPkg'][:] cmd.append(pkg) response = self.show_message("Missing package '%s'. Do you want to install it? (Will run '%s')" % (pkg, ' '.join(cmd)), False, Gtk.ButtonsType.OK_CANCEL) if Gtk.ResponseType.OK != response: return False p = subprocess.Popen(cmd) p.wait() if p.returncode != 0: self.show_message("Package installation failed (%s)! Check console output for further problem details!" % sys.exc_info()[0], True) return False except: self.show_message("Failed to check plugin dependencies (%s)!" % sys.exc_info()[0], True) return False # Git checkout p = subprocess.Popen(["git", "clone", "https://github.com/%s" % plugin_info['source'], "."]) p.wait() # FIXME: error checking # Now copy the plugin source, there are 2 variants: # - either there is a subdir named after the module / # - or there is a module file with language extension .py try: src_dir = '%s/%s' % (DIR_NAME, plugin_info['module']) if os.path.isdir(src_dir): print("Copying %s to %s" % (src_dir, self.target_dir)) shutil.copytree(src_dir, "%s/%s" % (self.target_dir, plugin_info['module'])) except: self.show_message("Failed to copy plugin directory (%s)!" % sys.exc_info()[0], True) return False # FIXME: support other plugin languages besides Python try: src_file = '%s/%s.py' % (DIR_NAME, plugin_info['module']) if os.path.isfile(src_file): shutil.copy(src_file, self.target_dir) except: self.show_message("Failed to copy plugin .py file (%s)!" % sys.exc_info()[0], True) return False # Copy .plugin file if it is not inside the plugin source itself try: # Do not copy .plugin file if it is inside plugin source src_file = '%s/%s/%s.plugin' % (DIR_NAME, plugin_info['module'], plugin_info['module']) if not os.path.isfile(src_file): shutil.copy('%s/%s.plugin' % (DIR_NAME, plugin_info['module']), self.target_dir) except: self.show_message("Failed to copy .plugin file (%s)!" % sys.exc_info()[0], True) return False # Optional: find and install schemata try: schema_found = False # We allow for schema either at top level or in first subdir for schema_file in glob.iglob('%s/**/*.gschema.xml' % (DIR_NAME), recursive = True): schema_found = True if not os.path.isdir(self.schema_dir): print('Creating schema directory %s' % self.schema_dir) os.makedirs(self.schema_dir) print('Installing schema %s' % schema_file) shutil.copy(schema_file,self.schema_dir) if schema_found: print('Compiling schemas...') p = subprocess.Popen(["glib-compile-schemas", self.schema_dir]) p.wait() # FIXME: error checking except: self.show_message("Failed to install schema files (%s)!" % sys.exc_info()[0], True) return False # Enable plugin (for next restart) try: settings = Gio.Settings.new(self.SCHEMA_ID) current_plugins = settings.get_strv('active-plugins') current_plugins.append(plugin_info['module']) settings.set_strv('active-plugins', current_plugins) except: self.show_message("Failed to enable plugin (%s)!" % sys.exc_info()[0], True) return False # Cleanup shutil.rmtree(DIR_NAME) self.show_message("Plugin '%s' is now installed. Ensure to restart Liferea!" % plugin_info['module']) return True def uninstall_plugin(self, plugin_info): """Deletes all possible files and directories that might belong to the plugin""" error = False # Remove plugin from active-plugins try: settings = Gio.Settings.new(self.SCHEMA_ID) current_plugins = settings.get_strv('active-plugins') current_plugins.remove(plugin_info['module']) settings.set_strv('active-plugins', current_plugins) except: print("Failed to disable plugin (%s)!" % sys.exc_info()[0]) error = True # Drop plugin dir (for directory plugins) src_dir = '%s/%s' % (self.target_dir, plugin_info['module']) try: if os.path.isdir(src_dir): print("Deleting '%s'" % src_dir) shutil.rmtree(src_dir) except: print("Failed to remove directory '%s' (%s)!" % (src_dir, sys.exc_info()[0])) error = True # Drop plugin source file (for single file plugins) src_file = '%s/%s.py' % (self.target_dir, plugin_info['module']) try: if os.path.isfile(src_file): print("Deleting '%s'" % src_file) os.remove(src_file) except: print("Failed to remove .py file!") error = True # Drop plugin file src_file = '%s/%s/%s.plugin' % (self.target_dir, plugin_info['module'], plugin_info['module']) try: if os.path.isfile(src_file): print("Deleting '%s'" % src_file) os.remove(src_file) except: print("Failed to remove .plugin file!") error = True # FIXME: Drop plugin schema files # # Removing schemas does not really work, as the schema files can have # arbitrary names... if error: self.show_message("Sorry! Plugin removal failed!.", True) else: self.show_message("Plugin was removed. Please restart Liferea once for it to take full effect!.", False) liferea-1.12.7/plugins/plugin-list.json000066400000000000000000000043611352135647700200550ustar00rootroot00000000000000{ "schemaVersion": 1, "plugins":[ { "Floating Statusbar": { "module" : "floating-statusbar", "category" : "Menu", "source" : "whizse/liferea-plugins", "description" : "Regain some screen real estate by replacing the static statusbar with a floating counterpart. Similar to the ones used in web browsers" }}, { "Python Console": { "module" : "python-console", "category" : "Advanced", "source" : "whizse/liferea-plugins", "description" : "Add a Python console option to the 'Tools' menu. Great for debugging." }}, { "No Mark All Read": { "module" : "markallreadinactive", "category" : "Menu", "source" : "whizse/liferea-plugins", "description" : "Disables the menu entry for 'Subscriptions' → 'Mark All As Read' as it is a little bit too easy to hit by mistake." }}, { "Feed Alerts": { "module" : "feedalerts", "category" : "Notifications", "source" : "ExpatPaul/liferea-plugins", "description" : "Configurable feed notifier. Needs to be configured with regex filters in ~/.local/share/liferea/plugins/feedalerts/feedalerts.conf" }}, { "Webkit Inspector": { "module" : "inspector", "category" : "Advanced", "source" : "lwindolf/liferea-webkit2-inspector", "description" : "Press F12 to launch the Webkit2 inspector (web developer tool)." }}, { "Webkit Settings": { "module" : "webkit-setting", "category" : "Advanced", "source" : "mozbugbox/liferea-plugin-studio", "description" : "Change advanced WebKitGtk settings for HTML rendering." }}, { "Custom Accels": { "module" : "accels", "category" : "Advanced", "source" : "mozbugbox/liferea-plugin-studio", "description" : "Editing Accels/shortcuts for Liferea action." }} ] } liferea-1.12.7/plugins/trayicon.plugin000066400000000000000000000014171352135647700177620ustar00rootroot00000000000000[Plugin] Module=trayicon Loader=python3 Icon=preferences-desktop-accessibility IAge=2 Name=Tray Icon (GNOME Classic) Name[de]=Tray Icon (GNOME Klassik) Name[it]=Icona di vassoio (GNOME Classic) Name[he]=סמל מגש (GNOME קלאסי) Description=Display a small system tray icon to hide/unhide Liferea. Description[de]=Zeigt ein kleines Tray Icon an mit dem Liferea schnell angezeigt und wieder versteckt werden kann Description[it]=Mostra una piccola icona nel vassoio di sistema per visualizzare o nascondere l'applicazione. Description[he]=הצג סמל מגש מערכת קטן כדי להסתיר או להציג את Liferea Authors=Lars Windolf Copyright=Copyright © 2013 Lars Windolf Website=https://lzone.de/liferea/ Help=https://lzone.de/liferea/ liferea-1.12.7/plugins/trayicon.py000066400000000000000000000170101352135647700171100ustar00rootroot00000000000000# # System Tray Icon Plugin # # Copyright (C) 2013-2018 Lars Windolf # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library 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 Library General Public License # along with this library; see the file COPYING.LIB. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # import gi gi.require_version('Peas', '1.0') gi.require_version('PeasGtk', '1.0') gi.require_version('Liferea', '3.0') from gi.repository import GObject, Peas, PeasGtk, Gtk, Liferea from gi.repository import Gdk, GdkPixbuf import cairo from collections import namedtuple # Cairo text extents Extents = namedtuple("Extents", [ "x_bearing", "y_bearing", "width", "height", "x_advance", "y_advance" ]) def pixbuf_text(width, height, text, font_size=16, bg_pix=None): """Draw text to pixbuf at lower right corner @width: canvas width @height: canvas height @text: UTF-8 text to draw @font_size: font size @bg_pix: pixbuf to draw as background @return: a new pixbuf with the given canvas width and height """ bg_color = (0.8, 0.8, 0.8, 1) text_color = (0.8, 0.2, 0, 1) surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) context = cairo.Context(surface) if bg_pix is not None: bg_w, bg_h = bg_pix.get_width(), bg_pix.get_height() Gdk.cairo_set_source_pixbuf(context, bg_pix, max(width - bg_w, 0)/2, max(height - bg_h, 0)/2) context.paint() #paint the pixbuf context.set_font_size(font_size) context.select_font_face("condensed") # extents: (x_bearing, y_bearing, width, height, x_advance, y_advance) extents = Extents._make(context.text_extents(text)) # draw text with a background color x_off = width - extents.width - 1 y_off = height - extents.height - 1 context.set_source_rgba(*bg_color) context.rectangle(x_off, y_off, extents.width + 2, extents.height + 2) context.fill() x_off = max(width - extents.x_bearing - extents.width, 1) y_off = height - (extents.height + extents.y_bearing) - 1 context.move_to(x_off, y_off) context.set_source_rgba(*text_color) context.show_text(text) pixbuf= Gdk.pixbuf_get_from_surface(surface, 0, 0, width, height) return pixbuf class TrayiconPlugin (GObject.Object, Liferea.ShellActivatable): __gtype_name__ = 'TrayiconPlugin' object = GObject.property(type=GObject.Object) shell = GObject.property(type=Liferea.Shell) def do_activate(self): self.staticon = Gtk.StatusIcon () # FIXME: Support a scalable image! self.read_pix = Liferea.icon_create_from_file ("available.png") self.unread_pix = Liferea.icon_create_from_file ("unread.png") self.staticon.set_from_pixbuf(Liferea.icon_create_from_file("unread.png")) self.staticon.connect("activate", self.trayicon_click) self.staticon.connect("popup_menu", self.trayicon_popup) self.staticon.connect("size-changed", self.trayicon_size_changed) self.staticon.set_visible(True) self.menu = Gtk.Menu() menuitem_toggle = Gtk.MenuItem("Show / Hide") menuitem_quit = Gtk.MenuItem("Quit") menuitem_toggle.connect("activate", self.trayicon_toggle) menuitem_quit.connect("activate", self.trayicon_quit) self.menu.append(menuitem_toggle) self.menu.append(menuitem_quit) self.menu.show_all() self.window = self.shell.get_window() self.delete_signal_id = GObject.signal_lookup("delete_event", Gtk.Window) GObject.signal_handlers_block_matched (self.window, GObject.SignalMatchType.ID | GObject.SignalMatchType.DATA, self.delete_signal_id, 0, None, None, None) self.window.connect("delete_event", self.trayicon_minimize_on_close) self.window.connect("window-state-event", self.window_state_event_cb) # show the window if it is hidden when starting liferea self.window.deiconify() self.window.show() feedlist = self.shell.props.feed_list self.feedlist_new_items_cb(feedlist) sigid = feedlist.connect("new-items", self.feedlist_new_items_cb) self.feedlist_new_items_cb_id = sigid self.feedlist = feedlist def window_state_event_cb(self, widget, event): "Hide window when minimize" if event.changed_mask & event.new_window_state & Gdk.WindowState.ICONIFIED: self.window.deiconify() self.window.hide() def trayicon_click(self, widget, data = None): self.window.deiconify() self.window.show() def trayicon_minimize_on_close(self, widget, event): self.window.hide() return True def trayicon_toggle(self, widget, data = None): self.shell.toggle_visibility() def trayicon_quit(self, widget, data = None): Liferea.shutdown() def trayicon_popup(self, widget, button, time, data = None): self.menu.popup(None, None, self.staticon.position_menu, self.staticon, 3, time) def show_new_count(self, new_count): """display new count on status icon""" pix_size = self.staticon.props.size font_size = max(10, pix_size/4*2) #print(pix_size, font_size, double_figure) pix = pixbuf_text(pix_size, pix_size, "{}".format(new_count), font_size, self.unread_pix) self.staticon.props.pixbuf = pix return pix def feedlist_new_items_cb(self, feedlist=None, new_count=-1): if new_count < 0: if feedlist is None: feedlist = self.shell.props.feed_list new_count = feedlist.get_new_item_count() if new_count > 0: double_figure = min(99, new_count) # show max 2 digit pix = self.show_new_count(double_figure) else: pix = self.read_pix if None == pix: return icon_size = self.staticon.props.size if pix.props.height < icon_size: pix = pix.scale_simple(icon_size, icon_size, GdkPixbuf.InterpType.HYPER) if self.staticon.props.pixbuf != pix: self.staticon.props.pixbuf = pix def trayicon_size_changed(self, widget, size): self.feedlist_new_items_cb() return True def do_deactivate(self): self.staticon.set_visible(False) self.window.disconnect_by_func(self.trayicon_minimize_on_close) GObject.signal_handlers_unblock_matched (self.window, GObject.SignalMatchType.ID | GObject.SignalMatchType.DATA, self.delete_signal_id, 0, None,None,None) self.window.disconnect_by_func(self.window_state_event_cb) self.feedlist.disconnect(self.feedlist_new_items_cb_id) # unhide the window when deactivating the plugin self.window.deiconify() self.window.show() del self.staticon del self.window del self.menu liferea-1.12.7/po/000077500000000000000000000000001352135647700136445ustar00rootroot00000000000000liferea-1.12.7/po/LINGUAS000066400000000000000000000001771352135647700146760ustar00rootroot00000000000000ar ast be@latin bg ca cs da de el es eu fi fr gl he hu id it ja ko lt lv mk nl pl pt pt_BR ro ru sk sq sv tr uk vi zh_CN zh_TW liferea-1.12.7/po/POTFILES.in000066400000000000000000000116071352135647700154260ustar00rootroot00000000000000[encoding: UTF-8] # List of source files containing translatable strings. liferea.appdata.xml.in net.sourceforge.liferea.desktop.in xslt/feed.xml.in xslt/source.xml.in xslt/folder.xml.in xslt/item.xml.in xslt/newsbin.xml.in xslt/vfolder.xml.in src/browser.c src/browser_history.c src/comments.c src/comments.h src/common.c src/common.h src/conf.c src/conf.h src/date.c src/date.h src/db.c src/db.h src/debug.c src/debug.h src/enclosure.c src/export.c src/export.h src/favicon.c src/favicon.h src/feed.c src/feed.h src/feed_parser.c src/feed_parser.h src/feedlist.c src/feedlist.h src/folder.c src/folder.h src/html.c src/html.h src/htmlview.c src/htmlview.h src/item.c src/item.h src/item_history.c src/item_history.h src/item_loader.c src/item_loader.h src/itemlist.c src/itemlist.h src/itemset.c src/itemset.h src/liferea_application.c src/main.c src/metadata.c src/metadata.h src/migrate.c src/net.c src/net.h src/node.c src/node.h src/node_type.c src/node_type.h src/render.c src/render.h src/rule.c src/rule.h src/social.c src/social.h src/subscription.c src/subscription.h src/subscription_type.h src/update.c src/update.h src/vfolder.c src/vfolder.h src/vfolder_loader.c src/vfolder_loader.h src/xml.c src/xml.h src/ui/enclosure_list_view.c src/ui/enclosure_list_view.h src/ui/icons.c src/ui/icons.h src/ui/itemview.c src/ui/itemview.h src/ui/liferea_shell.c src/ui/liferea_shell.h src/ui/rule_editor.c src/ui/rule_editor.h src/ui/search_dialog.c src/ui/search_dialog.h src/ui/search_folder_dialog.h src/ui/search_folder_dialog.c src/ui/auth_dialog.c src/ui/auth_dialog.h src/ui/liferea_dialog.c src/ui/liferea_dialog.h src/ui/ui_common.c src/ui/ui_dnd.c src/ui/ui_dnd.h src/ui/feed_list_view.c src/ui/feed_list_view.h src/ui/ui_folder.c src/ui/ui_folder.h src/ui/liferea_htmlview.c src/ui/liferea_htmlview.h src/ui/item_list_view.c src/ui/item_list_view.h src/ui/liferea_shell.c src/ui/liferea_shell.h src/ui/popup_menu.c src/ui/popup_menu.h src/ui/preferences_dialog.c src/ui/preferences_dialog.h src/ui/feed_list_node.c src/ui/feed_list_node.h src/ui/subscription_dialog.c src/ui/subscription_dialog.h src/ui/browser_tabs.c src/ui/browser_tabs.h src/ui/ui_update.c src/ui/ui_update.h src/parsers/atom10.c src/parsers/atom10.h src/parsers/cdf_channel.c src/parsers/cdf_channel.h src/parsers/cdf_item.c src/parsers/cdf_item.h src/parsers/ns_admin.c src/parsers/ns_admin.h src/parsers/ns_ag.c src/parsers/ns_ag.h src/parsers/ns_blogChannel.c src/parsers/ns_blogChannel.h src/parsers/ns_cC.c src/parsers/ns_cC.h src/parsers/ns_content.c src/parsers/ns_content.h src/parsers/ns_dc.c src/parsers/ns_dc.h src/parsers/ns_photo.c src/parsers/ns_photo.h src/parsers/ns_slash.c src/parsers/ns_slash.h src/parsers/ns_syn.c src/parsers/ns_syn.h src/parsers/pie_entry.c src/parsers/pie_entry.h src/parsers/pie_feed.c src/parsers/pie_feed.h src/parsers/rss_channel.c src/parsers/rss_channel.h src/parsers/rss_item.c src/parsers/rss_item.h src/fl_sources/default_source.c src/fl_sources/default_source.h src/fl_sources/dummy_source.c src/fl_sources/dummy_source.h src/fl_sources/google_source.c src/fl_sources/google_source.h src/fl_sources/opml_source.c src/fl_sources/opml_source.h src/fl_sources/node_source.c src/fl_sources/node_source.h src/fl_sources/reedah_source.c src/fl_sources/reedah_source.h src/fl_sources/reedah_source_feed.c src/fl_sources/reedah_source_feed_list.c src/fl_sources/reedah_source_feed_list.h src/fl_sources/ttrss_source.c src/fl_sources/ttrss_source.h src/fl_sources/ttrss_source_feed.c src/fl_sources/ttrss_source_feed_list.c src/fl_sources/ttrss_source_feed_list.h src/fl_sources/theoldreader_source.c src/fl_sources/theoldreader_source.h src/fl_sources/theoldreader_source_feed.c src/fl_sources/theoldreader_source_feed_list.c src/fl_sources/theoldreader_source_feed_list.h src/webkit/webkit.c src/webkit/liferea_web_view.c src/webkit/web_extension/liferea_web_extension.c src/webkit/web_extension/web_extension_main.c plugins/headerbar.py [type: gettext/glade]glade/about.ui [type: gettext/glade]glade/auth.ui [type: gettext/glade]glade/enclosure_handler.ui [type: gettext/glade]glade/google_source.ui [tyep: gettext/glade]glade/liferea_menu.ui [tyep: gettext/glade]glade/liferea_toolbar.ui [type: gettext/glade]glade/mainwindow.ui [type: gettext/glade]glade/mark_read_dialog.ui [type: gettext/glade]glade/new_folder.ui [type: gettext/glade]glade/new_newsbin.ui [type: gettext/glade]glade/new_subscription.ui [type: gettext/glade]glade/node_source.ui [type: gettext/glade]glade/opml_source.ui [type: gettext/glade]glade/prefs.ui [type: gettext/glade]glade/properties.ui [type: gettext/glade]glade/reedah_source.ui [type: gettext/glade]glade/rename_node.ui [type: gettext/glade]glade/search_folder.ui [type: gettext/glade]glade/search.ui [type: gettext/glade]glade/simple_search.ui [type: gettext/glade]glade/simple_subscription.ui [type: gettext/glade]glade/theoldreader_source.ui [type: gettext/glade]glade/ttrss_source.ui [type: gettext/glade]glade/update_monitor.ui liferea-1.12.7/po/ar.po000066400000000000000000002576161352135647700146270ustar00rootroot00000000000000# translation of liferea_trunk_ar.po to Arabic # This file is distributed under the same license as the Lifearea package. # Copyright (C) 2006-2009 Khaled Hosny # Khaled Hosny , 2006, 2007, 2009, 2010, 2013, 2014. msgid "" msgstr "" "Project-Id-Version: liferea_trunk_ar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2014-10-11 19:28+0200\n" "Last-Translator: Khaled Hosny \n" "Language-Team: Arabic \n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" "X-Generator: Virtaal 1.0.0-beta1\n" "X-Project-Style: gnome\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "قارئ تلقيمات" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" "لايفريا هو مجمّع أخبار لتلقيمات الأخبار. يدعم عددًا من أنساق التلقيمات مثل RSS/" "RDF و CDF و Atom. يوجد العديد من قارئات تلقيمات الأخبار لكنها إما غير متوفرة " "على لينكس أو تتطلب الكثير من المكتبات الإضافية. يحاول لايفريا سد هذه الهوّة " "بتوفير مجمّع أخبار سهل الاستخدام و التثبيت لجنوم." #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "الخصائص المميزة:" #: ../liferea.appdata.xml.in.h:4 msgid "Read articles when offline" msgstr "قراءة المقالات دون اتصال" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "المزامنة مع قارئ TheOldReader" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "المزامنة مع TinyTinyRSS" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "المزامنة مع قارئ InoReader" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "المزامنة مع قارئ Reedah" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "حفظ عناوين الأخبار بشكل دائم في سلة الأخبار" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "تجميع العناصر باستخدام مجلدات البحث" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "تشغيل التدوين صوتي" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "لايفريا" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "قارئ تلقيمات" # ARABEYES: keep the html code, this is # intentional #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "قارئ التلقيمات لايفريا" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "اقرأ تلقيمات الأخبار و المدونات" #: ../net.sourceforge.liferea.desktop.in.h:5 #, fuzzy msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "أخبار;تلقيمات;مدونة;تدوين;" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "توقّفت هذه التلقيمة. لم تعد متوفّرة. لن يستطيع لايفريا التحديث بعد الآن لكن " "يظل بإمكانك الوصول إلى العناوين الرئيسية المخبّأة." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
HTTP error code : " msgstr "" "فشل التحديث الأخير لهذا الاشتراك!
رمز خطأ HTTP: " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "كانت هناك أخطاء أثناء تحليل هذه التلقيمة!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "تفاصيل خطأ المحلِّل" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "التفاصيل" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "قد ترغب في التواصل من مع مؤلف\\مسئول التلقيمة عن هذا." #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "كانت هناك أخطاء أثناء ترشيح هذه التلقيمة!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "تفاصيل خطأ المرشَّح" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "تلقيمة:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "المصدر:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "الناشر" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "حقوق النشر" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "أبناء مع" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "رؤوس العناوين لم تقرأ" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "مجلّد:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "المصدر" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "تلقيمة" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "وُضِع تحت" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "المؤلّف" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "شارَكهُ" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "عبر" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "متعلق" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "منشورة أيضا في" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "المنشيء" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "التعليقات" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "يجري تحديث..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "القسم" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "المصلحة" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "سلّة أخبار:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "أضِف عناصر لسلّة الأخبار هذه باختيار \"انسخ لسلّة الأخبار\" من قائمة سياق لائحة " "العناصر." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "مجلّد بحث:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "فشل أمر المتصفح: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "يبدأ: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "خطأ في الاستيثاق" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "تعذّر إنشاء مجلّد المخبئية \"%s\"!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "اليوم %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "بالأمس %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d %b %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" ليس ملف إعداد أنواع مغلّفات سليم!" #: ../src/enclosure.c:292 #, fuzzy msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "لم تضبط أداة للتنزيلات، يمكنك ضبطها من لسان 'التنزيل' في أدوات ← التفضيلات." #: ../src/enclosure.c:311 #, fuzzy, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "لم تضبط أداة للتنزيلات، يمكنك ضبطها من لسان 'التنزيل' في أدوات ← التفضيلات." #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "خطأ أثناء إعادة تسمية %s إلى %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "خطأ XML أثناء قراءة ملف OPML! تعذّر استيراد \"%s\"!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "مستند فارغ! يجب ألا يكون مستند OPML \"%s\" فارغا أثناء التصدير." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "‏\"%s\" ليس مستند OPML صالحاً! لا يستطيع لايفريا استيراد هذا الملف!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "قائمة التلقيمات المستوردة" #: ../src/export.c:481 msgid "Import Feed List" msgstr "استورد قائمة التلقيمات" #: ../src/export.c:481 msgid "Import" msgstr "استورد" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "ملفات OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "خطأ أثناء تصدير قائمة التلقيمات!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "صُدّرت قائمة التلقيمات!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "صدّر قائمة التلقيمات" #: ../src/export.c:498 msgid "Export" msgstr "صدّر" #: ../src/feed.c:317 msgid "" "

Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

" msgstr "" "

لم أستطع تحديد نوع هذه التلقيمة! رجاء تأكّد من أن المصدر يشير فعلا إلى " "مورِد متوفّر بأحد تنسيقات تجميع الأخبار المدعومة!

خرْج محلّل XML:
" #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "حُدِّث \"%s\"..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "‏\"%s\" ليس متوفّرا" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "العنوان الذي تريد أن يشترك به لايفريا يشير لصفحة وِب ولم يجد الاكتشاف " "التلقائي أية تلقيمات في هذه الصفحة. ربما لا تدعم هذه الصفحة الاكتشاف " "التلقائي للتلقيمات." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "خطأ XML أثناء قراءة التلقيمة! لا يمكن تحميل التلقيمة \"%s\"!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "مستند فارغ!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "‏XML غير صحيح!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "يشير المصدر إلى مستند HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "تعذّر تحديد نوع التلقيمة." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "لا توجد عناصر غير مقروءة" #: ../src/liferea_application.c:282 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "ابدأ لايفريا والنافذة الرئيسية في الحالة STATE، و التي قد تكون `shown' أو " "`hidden'" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "STATE" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "أضف اشتراكا جديدا" #: ../src/liferea_application.c:284 msgid "uri" msgstr "" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "أُلغي طلب التحديث" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "تعذّر الوصول إلى المستضيف المقصود" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "تعذّر الوصول إلى الوسيط" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "تعذّر الاتصال بالمستضيف البعيد" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "تعذّر الاتصال بالوسيط" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "حدث خطأ شبكي، أو أن الطرف الآخر أنهى الاتصال فجأة" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "انتقل المورد إلى مكان جديد بشكل دائم" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "غير مرخّص لك بتنزيل هذه التلقيمة. رجاء حدّث اسم مستخدمك وكلمة سرّك في صندوق " "حوار خصائص التلقيمة" #: ../src/net.c:476 msgid "Payment required" msgstr "الدّفع مطلوب" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "غير مسموح لك بالوصول إلى هذا المورد" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "المورِد غير موجود" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "الطريقة غير مسموحة" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "غير مقبول" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "استيثاق الوسيط مطلوب" #: ../src/net.c:482 msgid "Request timed out" msgstr "انتهت مهلة الطلب" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "ذهب. المورِد غير موجود. رجاء اشترك!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "حدث خطأ داخلي أثناء عملية التحديث" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "التلقيم غير متوفّر: طلب الخادم إعادة توجيه غير مدعوم!" #: ../src/net.c:492 msgid "Client Error" msgstr "خطأ عميل" #: ../src/net.c:494 msgid "Server Error" msgstr "خطأ خادوم" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "حدث خطأ شبكي مجهول." #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "عنصر" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "يحتوي" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "لا يحتوي" #: ../src/rule.c:175 msgid "Item title" msgstr "عنوان العنصر" #: ../src/rule.c:176 msgid "Item body" msgstr "متن العنصر" #: ../src/rule.c:177 msgid "Read status" msgstr "حالة القراءة" #: ../src/rule.c:177 msgid "is unread" msgstr "غير مقروء" #: ../src/rule.c:177 msgid "is read" msgstr "مقروء" #: ../src/rule.c:178 msgid "Flag status" msgstr "حالة الشارة" #: ../src/rule.c:178 msgid "is flagged" msgstr "مؤشّر" #: ../src/rule.c:178 msgid "is unflagged" msgstr "غير مؤشّر" #: ../src/rule.c:179 msgid "Podcast" msgstr "تدوين صوتي" #: ../src/rule.c:179 msgid "included" msgstr "مُدْرج" #: ../src/rule.c:179 msgid "not included" msgstr "غير مُدْرج" #: ../src/rule.c:180 msgid "Category" msgstr "الفئة" #: ../src/rule.c:180 msgid "is set" msgstr "ضُبِطَ" #: ../src/rule.c:180 msgid "is not set" msgstr "لم يضبط" #: ../src/rule.c:181 msgid "Feed title" msgstr "عنوان التلقيمة" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "يجري تحديث الاشتراك \"%s\" بالفعل!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "أُوقِف الاشتراك \"%s\". لن يقوم لايفريا بالتحديث بعد الآن!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "يجري تحديث أيقونة \"%s\"" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "كانت هناك مشكلة أثناء قراءة هذا الاشتراك. رجاء تحقق من العنوان وخرْج الطرفية." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "تغير عنوان \"%s\" بشكل دائم وتم تحديثه" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "توقّف \"%s\". لن يحدّثه لايفريا بعد الآن!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "لم يتغيّر \"%s\" منذ آخر تحديث" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "يجري تحديث \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "خطأ أثناء فتح الملف المؤقّت %s لاستخدامه في الترشيح!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "خرج %s بالحالة %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "خطأ: تعذّر فتح الأنبوب \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "خطأ: تعذّر فتح الملف \"%s\"" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "خطأ: ليس ثمّة ملف \"%s\"" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "مجلّد بحث جديد" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[كان هناك المزيد من الأخطاء. بُتِر الخرْج]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "محلّل XML: لا يمكن تحليل المستند:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "مرفقات" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " بايت" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "ك.بايت" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "م.ب" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "ج.بايت" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "لا مرفقات" msgstr[1] "مُرفق واحد" msgstr[2] "مُرفقين" msgstr[3] "%d مُرفقات" msgstr[4] "%d مُرفقا" msgstr[5] "%d مُرفق" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "اختر ملفا" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "امتداد الملف .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "تعذّر العثور على ملف الصورة: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (لا جديد)" msgstr[1] " (واحد جديد)" msgstr[2] " (اثنان جديدان)" msgstr[3] " (%d جديدة)" msgstr[4] " (%d جديدا)" msgstr[5] " (%d جديد)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%.0sلا غير مقروء%s" msgstr[1] "%.0sواحد غير مقروء%s" msgstr[2] "%.0sاثنان غير مقروءان%s" msgstr[3] "%d غير مقروءة%s" msgstr[4] "%d غير مقروء%s" msgstr[5] "%d غير مقروء%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "مواضيع المساعدة" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "مرجع سريع" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "أسئلة شائعة" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "بحث متقدّم" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "أدخل اسم المستخدم وكلمة السر لـ \"%s\" (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "مصدر مجهول" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 msgid "_Cancel" msgstr "أ_لغِ" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "كل الملفات" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "لايفريا في وضع دون اتصال. لا يمكن التحديث." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "ابحث في كل التلقيمات" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "علّم الكل مقروء" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "أواثق من رغبتك في حذف \"%s\"؟" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "لا وصلة محددة لهذا العنصر!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** بلا عنوان ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "عنوان رئيسي" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "التاريخ" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "يجب أن تختار تلقيمة لحذف عناصرها!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "لم تختر أية عناصر" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "افتح _لسان" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "ا_فتح في المتصفح" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "افتح في متصفح _خارجي" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "انسخ لسلّة الأخبار" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "_علّم في %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "انسخ م_كان العنصر" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "بدّل حالة ال_قراءة" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "بدّل _شارة العنصر" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "أ_زل العنصر" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "افتح مغلّفا..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "احفظ ك‍..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "انسخ موقع الوصلة" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_حدّث" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_حدّث المجلّد" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "اشتراك _جديد..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "_مجلّد جديد..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "مجلّد _بحث جديد..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "م_صدر جديد..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "_سلّة أخبار جديدة..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_جديد" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "رتّب التلقيمات" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_علّم الكل مقروء" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "أعد الب_ناء" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "ا_حذف" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "ال_خصائص" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "حوّل إلى اشتراكات محلية..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "افتراضي جنوم" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "نص تحت الأيقونات" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "نص بجانب الأيقونات" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "أيقونات فقط" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "نص فقط" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "دقائق" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "ساعات" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "أيّام" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "مسافة" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Space" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Space" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "المنظور العادي" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "المنظور العريض" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "المنظور المركّب" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "المتصفح المبدئي" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "يدوي" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "النوع" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "البرنامج" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(فارغ)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "يُعيد البناء" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "يجريِ حذف الخانة" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "أواثق من رغبتك في حذف \"%s\" ومحتوياته؟" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "أواثق من رغبتك في حذف \"%s\"؟" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "تأكيد الحذف" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "تأكيد الحذف" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "ا_فتح" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "مزوّد هذه التلقيمة لا يقترح فترة تحديث." msgstr[1] "مزوّد هذه التلقيمة يقترح فترة تحديث دقيقة واحدة." msgstr[2] "مزوّد هذه التلقيمة يقترح فترة تحديث دقيقتين." msgstr[3] "مزوّد هذه التلقيمة يقترح فترة تحديث %d دقائق." msgstr[4] "مزوّد هذه التلقيمة يقترح فترة تحديث %d دقيقة." msgstr[5] "مزوّد هذه التلقيمة يقترح فترة تحديث %d دقيقة." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "لا تُحدِّد هذه التلقيمة فترة تحديث افتراضيّة." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "بدون عنوان" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "الموقع" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "اشتراك جديد" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "قارئ جوجل" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "اختر ملف OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "اشتراك OPML جديد" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "لم يُعثر على أنواع مصادر قائمة التلقيمات!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "نوع المصدر" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "لم يكتمل الولوج إلى '%s'، من فضلك انتظر اكتماله." #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "حُوِّلَ اشتراك '%s' بنجاح إلى تلقيمات محلية." #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "فشل الولوج!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "قارئ Reedah" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "تعذر تحليل البيانات المجلوبة من واجهة Reedah البرمجية!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "تعذر الوصول إلى واجهة TinyTinyRSS البرمجية عبر HTTP!" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" "فشل الاشتراك في تلقيمة TinyTinyRSS! تأكد من أنك أعطيت مسار التلقيمة فعلًا." #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "فشل إلغاء الاشتراك في تلقيمة TinyTinyRSS!" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" "لا تدعم إصدارة TinyTinyRSS هذه إزالة التلقيمات. من فضلك رقِّ إلى الإصدارة %s " "أو أحدث." #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "تعذر تحليل البيانات المجلوبة من واجهة TinyTinyRSS البرمجية!" #: ../src/fl_sources/theoldreader_source.c:329 msgid "TheOldReader" msgstr "قارئ TheOldReader" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "افتح الوصلة في _لسان" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "ا_فتح الوصلة في المتصفّح" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "ا_فتح الوصلة في المتصفّح الخارجي" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_علّم الوصلة في %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "ا_نسخ مكان الوصلة" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "احف_ظ الصورة ك‍" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "انسخ مكان ال_صورة" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "احفظ الو_صلة ك‍" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "احف_ظ الصورة ك‍" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "ا_شترك..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "ا_نسخ" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "زِ_د حجم النص" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_قلل حجم النص" #: ../glade/about.ui.h:1 msgid "About" msgstr "عن" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "لايفريا هو مُجمِّع أخبار لجتك+" # ARABEYES: keep the html code, this is # intentional #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "صفحة لايفريا" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "الاستيثاق" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "ا_سم المستخدم:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_كلمة السر:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "افتح مغلّفًا" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "افتح مغلّفًا من نوع:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "ماذا يجب على لايفريا عمله مع هذا المغلّف؟ من فضلك أدخل الأمر الذي تريد تنفيذه " "بأسفل. سيكون مسار الملف معطى لهذا الأمر:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_تصفّح" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "ا_فعل هذا تلقائيا مع المغلّفات مثل هذا من الآن فصاعداَ." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "أضِف حساب قارئ جوجل" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "من فضلِك أدخل اعدادات حسابك في قارئ جوجل." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_كلمة السر" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "ا_سم المستخدم (البريد)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "اعرض العناوين الرئيسية" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "رؤوس العناوين" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "علّم الكل مقروء" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "علّم الكل مقروء" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "مجلّد جديد" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "ا_سم المجلّد:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "أنشئ سلّة أخبار" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "اسم سلّة الأ_خبار:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "مصدر التلقيمة" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "نوع المصدر:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_مسار" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "أ_مر" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "ملف _محلّي" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "اختر ملفا..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "ال_مصدر:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "تنزيل / معالجة بعديّة" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "_لا تستخدم وسيط للتنزيل" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "استخدم _مرشّح تحويل" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "يستطيع لايفريا استخدام ملحق مرشِّح خارجي للنفاذ إلى أدلّة التلقيمات ذات " "التنسيقات غير المدعومة. راجع الوثائق لمعلومات أكثر." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "حوّل با_ستخدام:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "اختيار المصدر" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "اختر نوع المصدر الذي ترغب بإضافته..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "أضِف OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "من فضلك حدّد ملفا محلّيا أو مسارا لقائمة تلقيمات OPML سليمة." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "ال_مكان" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "ا_ختر ملفا" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "تفضيلات لايفريا" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "التعامل مع خبيئة التلقيمات" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_عدد العناصر الافتراضي لحفظة في كل تلقيمة:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "إعدادات تحديث التلقيمات" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "ملحوظة: من فضلك تذكّر أن تضبط فترة تحديث معقولة. سحب التحديثات أكثر من مرّة " "كل ساعة مضيعة للتحميل." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "ح_دّث كل الاشتراكات عند بدء التشغيل." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "_فترة تحديث التلقيمات الافتراضيّة:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "التلقيمات" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "إعدادات عرض المجلّد" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "أ_ظهر العناصر لكل التلقيمات الإبنة عند اختيار مجلّد." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "أ_خفِ العناصر المقروءة." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "أيقونات التلقيمات (Favicons)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_حدّث كل الأيقونات الآن" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "المجلّدات" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "قراءة رؤوس العناوين" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "_تصفّع عبر المقالات باستخدام:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "و_ضع المنظور الافتراضي:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "التكامل مع الوب" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "ا_نشر العلامات في" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "إعدادات المتصفّح الداخلي" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "افتح الوصلات في _نافذة لايفريا." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_عطّل جافاسكريبت." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_فعّل ملحقات المتصفح." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "إعدادات المتصفّح الخارجي" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "ال_متصفح:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "ي_دويا:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s للمسار)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "المتصفح" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "إعدادات شريط الأدوات" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "أخفِ _شريط الأدوات." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "عناوين أ_زرار شريط الأدوات:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "الواجهة" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "خادم وكيل HTTP" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_تعرف آلي (جنوم أو البيئة)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_لا وسيط" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "إعدادات _يدويّة:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_مضيف الوسيط:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "م_نفذ الوسيط:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "استخدم استيثاق ال_وسيط" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "اسم م_ستخدم الوسيط:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "_كلمة سرّ الوسيط:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "الوسيط" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "إعدادات عرض المجلّد" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "تنزيل المغلّفات" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_نزّل باستخدام" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "فتح المغلّفات" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "المغلّفات" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "خصائص الاشتراك" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "اسم التلقيمة" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "ا_سم التلقيمة:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "فترة التحديث" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "ا_ستخدم فترة التحديث الإفتراضية العموميّة." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "فترة التحديث الخاصة بال_تلقيمة من" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_لا تحدّث هذه التلقيمة آلياً." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "يقترح مُزوّد التلقيمة فترة تحديث %d من الدقائق." #: ../glade/properties.ui.h:11 msgid "General" msgstr "عام" #: ../glade/properties.ui.h:20 msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "يستطيع لايفريا استخدام ملحق مرشِّح خارجي للنفاذ إلى أدلّة التلقيمات ذات " "التنسيقات غير المدعومة." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "تتحكم إعدادات الذاكرة المخبّأة في ما إذا كانت ستُحفظ محتويات التلقيمات عند " "خروج لايفريا أم لا. ستحفظ العناصر المختارة دائما في الذاكرة المخبّأة." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "إعدادات الذاكرة المخبأة الا_فتراضيّة" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_عطّل الذاكرة المخبّأة" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "ذاكرة مخبّأة _غير محدودة" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "_عدد العناصر التي ستُحفظ:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "أرشيف" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "استخدم ا_ستيثاق HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "تنزيل" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "نزّل كل مغلّفات هذه التلقيمة آ_ليّاً." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "_حمّل عنصر الوصلة آليا في المتصفّح المحدد عند انتقاء المقالات." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "تجاهل تلقيمات تعليقات _هذا الاشتراك." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_علّم العناصر المنزّلة مقروءة." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "متقدّم" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "أضِف حساب قارئ Reedah" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "من فضلِك أدخل إعدادات حسابك في Reedah." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "أعِد التسمية" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "اسم _جديد:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "خصائص مجلّد البحث" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "ا_سم البحث:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "ابحث عن العناصر التي تُطابق هذه المعايير" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "أي _قاعدة تطابق" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "_كل القواعد يجب أن تطابق" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "بحث متقدّم" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "ا_بحث في المجلّد..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "ابحث في كل التلقيمات" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_متقدّم..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "يبدأ البحث عن النصّ المحدد في كل التلقيمات. ستظهر نتيجة البحث في قائمة " "العناصر." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "ا_بحث عن:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "أدخل نص بحث ليبحث عنه ليعثر عليه لايفريا في عنصر أو مُحتواه." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "متقدّم..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "أدخِل موقع وب لتستخدم الاكتشاف التلقائي أو -في حال إذا كنت تعرفه- موقع " "التلقيمة بالتحديد." #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "أضِف حساب قارئ TheOldReader" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "من فضلِك أدخل إعدادات حسابك في قارئ TheOldReader." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "أضِف حساب Tiny Tiny RSS" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "من فضلِك أدخل إعدادات حسابك في InoReader." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "عنوان ال_خادوم" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "ا_سم المستخدم" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "مراقب التحديثات" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "ألغِ ال_كل" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "الطلبات المنتظرة" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "يُنزّل الآن" #~ msgid "_Subscriptions" #~ msgstr "الا_شتراكات" #~ msgid "Update _All" #~ msgstr "حدّث ال_كل" #~ msgid "Updates all subscriptions." #~ msgstr "حدّث كل الاشتراكات." #~ msgid "Mark All As _Read" #~ msgstr "علّم الكل _مقروء" #~ msgid "Marks read every item of every subscription." #~ msgstr "علّم كل عنصر في كل اشتراك مقروء." #~ msgid "_Import Feed List..." #~ msgstr "ا_ستورد قائمة التلقيمات..." #~ msgid "Imports an OPML feed list." #~ msgstr "استورد قائمة تلقيمات OPML." #~ msgid "_Export Feed List..." #~ msgstr "_صدّر قائمة التلقيمات..." #~ msgid "Exports the feed list as OPML." #~ msgstr "يصدّر قائمة التلقيمات كـ OPML." #~ msgid "_Quit" #~ msgstr "ا_خرج" #~ msgid "_Feed" #~ msgstr "_تلقيم" #~ msgid "Remove _All Items" #~ msgstr "احذف _كل العناصر" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "يحذف كل عناصر التلقيمات المُحددة حالياً." #~ msgid "_Item" #~ msgstr "_عنصر" #~ msgid "Previous Item" #~ msgstr "العنصر السابق" #~ msgid "Next Item" #~ msgstr "العنصر التالي" #~ msgid "_Next Unread Item" #~ msgstr "العنصر غير المقروء ال_تالي" #~ msgid "_View" #~ msgstr "_عرض" #~ msgid "Increases the text size of the item view." #~ msgstr "يزيد حجم النص عند عرض العنصر." #~ msgid "Decreases the text size of the item view." #~ msgstr "يقلل حجم النص عند عرض العنصر." #~ msgid "_Tools" #~ msgstr "أ_دوات" #~ msgid "_Update Monitor" #~ msgstr "_مراقب التحديثات" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "اعرض قائمة بكل التلقيمات الموجودة حاليا في طابور التحديث" #~ msgid "_Preferences" #~ msgstr "ال_تفضيلات" #~ msgid "Edit Preferences." #~ msgstr "حرّر التفضيلات." #~ msgid "S_earch" #~ msgstr "_بحث" #~ msgid "Search All Feeds..." #~ msgstr "ابحث في كل التلقيمات..." #~ msgid "Show the search dialog." #~ msgstr "اعرض حوار البحث." #~ msgid "_Help" #~ msgstr "_مساعدة" #~ msgid "_Contents" #~ msgstr "الم_حتويات" #~ msgid "View help for this application." #~ msgstr "اعرض مساعدة هذا التطبيق." #~ msgid "_Quick Reference" #~ msgstr "مرجع _سريع" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "اعرض قائمة بكل اختصارات لايفريا." #~ msgid "_FAQ" #~ msgstr "أ_سئلة شائعة" #~ msgid "View the FAQ for this application." #~ msgstr "اعرض الأسئلة الشائعة عن التطبيق." #~ msgid "_About" #~ msgstr "_عن" #~ msgid "Shows an about dialog." #~ msgstr "اعرض حوار عن." #~ msgid "_Normal View" #~ msgstr "المنظور ال_عادي" #~ msgid "Set view mode to mail client mode." #~ msgstr "اضبط نمط العرض كنمط عميل البريد." #~ msgid "_Wide View" #~ msgstr "منظور _عريض" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "اضبط نمط العرض ليستخدم ثلاث ألواح رأسيّة." #~ msgid "_Combined View" #~ msgstr "منظور مركّ_ب" #~ msgid "Set view mode to two pane mode." #~ msgstr "اضبط نمط العرض إلى نمط اللوحين." #~ msgid "_Reduced Feed List" #~ msgstr "_ضُم قائمة التلقيمات" #~ msgid "Hide feeds with no unread items." #~ msgstr "أخفِ التلقيمات التي لا تحتوي عناصر غير مقروءة." #~ msgid "_New Subscription..." #~ msgstr "اشتراك _جديد..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "أضِف اشتراك إلى قائمة التلقيمات." #~ msgid "Adds a folder to the feed list." #~ msgstr "أضِف مجلّد إلى قائمة التلقيمات." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "أضِف مجلّد بحث جديد إلى قائمة التلقيمات." #~ msgid "New _Source..." #~ msgstr "م_صدر جديد..." #~ msgid "Adds a new feed list source." #~ msgstr "أضِف مصدر قائمة تلقيمات جديد." #~ msgid "Adds a new news bin." #~ msgstr "أضِف سلّة أخبار جديدة." #~ msgid "_Mark Items Read" #~ msgstr "_علّم العناصر مقروءة" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "علّم كل عناصر الاشتراك المحدد مقروءة." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "يُحدّث الاشتراك المُحدد أو كل الاشتراكات في المجلّد المُحدد." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "يفتح حوار خصائص الاشتراك المحدد." #~ msgid "_Remove" #~ msgstr "ا_حذف" #~ msgid "Removes the selected subscription." #~ msgstr "يحذف الاشتراك المحدد." #~ msgid "Toggles the read status of the selected item." #~ msgstr "تبدّل حالة قراءة العناصر المحددة." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "تبدّل حالة شارة العنصر المحدد." #~ msgid "R_emove" #~ msgstr "أ_زل" #~ msgid "Removes the selected item." #~ msgstr "يحذف العنصر المحدد." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "يفتح وصله العنصر في لسان جديد في متصفّح لايفريا." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "يفتح وصله العنصر في عمود العنصر في لايفريا." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "يفتح وصله العنصر في المتصفّح الخارجي المعدّ." #~ msgid "_Fullscreen" #~ msgstr "_ملء الشاشة" #~ msgid "Browse at full screen" #~ msgstr "تصفح مع ملء الشاشة" #~ msgid "_Work Offline" #~ msgstr "ا_عمل دون اتّصال" #~ msgid "_Update All" #~ msgstr "_حدّث الكل" #~ msgid "_Show Liferea" #~ msgstr "أ_ظهر لايفريا" #~ msgid "InoReader" #~ msgstr "قارئ InoReader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "ملحوظة: سيُحفظ اسم المستخدم وكلمة السر في قائمة تلقيمات لايفريا بدون " #~ "تعمية." #~ msgid "Add InoReader Account" #~ msgstr "أضِف حساب قارئ InoReader" #~ msgid "Please enter your InoReader account settings." #~ msgstr "من فضلِك أدخل إعدادات حسابك في InoReader." #~ msgid "Plugins" #~ msgstr "الملحقات" #~ msgid "normal view" #~ msgstr "المنظور العادي" #~ msgid "wide view" #~ msgstr "المنظور العريض" #~ msgid "combined view" #~ msgstr "المنظور المركّب" # ARABEYES: keep the html code, this is # intentional #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "

لايفريا، قارئ تلقيمات لينكس

" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "للمزيد من المعلومات، طالع https://lzone.de/liferea/" #~ msgid "_Open Link In Browser" #~ msgstr "ا_فتح الوصلة في المتصفّح" #~ msgid "_Open Link In External Browser" #~ msgstr "ا_فتح الوصلة في المتصفّح الخارجي" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "أنشئ تلقيمة محرّك بحث" #~ msgid "enter any search string you want" #~ msgstr "ادخل أي عبارة بحث ترغب فيها" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "ال_عدد الأقصى من عناصر الناتج:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "ملاحظة: سيوّلد لايفريا اشتراك تلقيم سيستخدم للاستعلام عن نتائج محرّك البحث " #~ "لعبارة البحث المحدّدة. يمكنك إبقاء هذه التلقيمة وتحديثها كأي اشتراك آخر." #~ msgid "Browser default" #~ msgstr "افتراضي المتصفح" #~ msgid "Existing window" #~ msgstr "نافذة موجودة" #~ msgid "New window" #~ msgstr "نافذة جديدة" #~ msgid "New tab" #~ msgstr "لسان جديد" #~ msgid "AOL Reader Login" #~ msgstr "ولوج قارئ AOL" #~ msgid "AOL Reader" #~ msgstr "قارئ AOL" #~ msgid "_Open link in:" #~ msgstr "ا_فتح الوصلة في:" #~ msgid "Liferea is now online" #~ msgstr "الآن لايفريا متّصل" #~ msgid "Work Offline" #~ msgstr "اعمل دون اتّصال" #~ msgid "Liferea is now offline" #~ msgstr "الآن لايفريا غير متّصل" #~ msgid "Work Online" #~ msgstr "اعمل باتّصال" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "يسمح لك هذا الخيار بتعطيل تحديث الاشتراك." #~ msgid "Online/Offline Button" #~ msgstr "زر متصّل/غير متّصل" #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "ادمج مع قائمة الرسائل" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "أنهِ بدلا من التصغير إلى قائمة الرسائل" #~ msgid "Start minimized to the messaging menu" #~ msgstr "ابدأ مصغّرًا في قائمة الرسائل" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "لا عناصر جديدة" #~ msgstr[1] "عنصر جديد" #~ msgstr[2] "عنصران جديدان" #~ msgstr[3] "%d عناصر جديدة" #~ msgstr[4] "%d عنصرا جديدا" #~ msgstr[5] "%d عنصر جديد" #~ msgid "No new items" #~ msgstr "لا عناصر جديدة" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "لا عناصر غير مقروءة" #~ msgstr[1] "" #~ "%s\n" #~ "عنصر غير مقروء" #~ msgstr[2] "" #~ "%s\n" #~ "عنصران غير مقروءان" #~ msgstr[3] "" #~ "%s\n" #~ "%d عناصر غير مقروءة" #~ msgstr[4] "" #~ "%s\n" #~ "%d عنصرا غير مقروء" #~ msgstr[5] "" #~ "%s\n" #~ "%d عنصر غير مقروء" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "لا عناصر غير مقروءة" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "تلقيمة Atom غير صحيحة: مؤلف مجهول" #~ msgid "AOL Reader login failed!" #~ msgstr "فشل الولوج إلى قارئ AOL!" #~ msgid "" #~ "Integrate the feed list of your AOL Reader account. Liferea will present " #~ "your AOL Reader subscriptions, and will synchronize your feed list and " #~ "reading lists." #~ msgstr "" #~ "يتكامل مع قائمة تلقيمات حسابك في قارئ AOL. سيعرض لايفريا اشتراكات قارئ " #~ "AOL وسيزامن قائمة التلقيمات مع قائمة قراءة AOL." #~ msgid "InoReader login failed!" #~ msgstr "فشل الولوج إلى قارئ InoReader!" #~ msgid "" #~ "Integrate the feed list of your InoReader account. Liferea will present " #~ "your InoReader subscriptions, and will synchronize your feed list and " #~ "reading lists." #~ msgstr "" #~ "يتكامل مع قائمة تلقيمات حسابك في قارئ InoReader. سيعرض لايفريا اشتراكات " #~ "قارئ InoReader وسيزامن قائمة التلقيمات مع قائمة قراءة InoReader." #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "يتكامل مع قائمة تلقيمات حسابك في قارئ جوجل. سيعرض لايفريا اشتراكات قارئ " #~ "جوجل وسيزامن قائمة التلقيمات مع قائمة قراءة جوجل." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "يدرج blogrolls أو Planets في قائمة تلقيماتك. سيضيف ويحذف لايفريا " #~ "التلقيمات آليا تبعاً للتغيّر في مصدر مستند OPML " #~ msgid "" #~ "Integrate the feed list of your Reedah account. Liferea will present your " #~ "Reedah subscriptions, and will synchronize your feed list and reading " #~ "lists." #~ msgstr "" #~ "يتكامل مع قائمة تلقيمات حسابك في قارئ Reedah. سيعرض لايفريا اشتراكات قارئ " #~ "Reedah وسيزامن قائمة التلقيمات مع قائمة قراءة Reedah." #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "يتكامل مع قائمة تلقيمات حسابك في قارئ Tiny Tiny RSS. سيعرض لايفريا " #~ "اشتراكات قارئ Tiny Tiny RSS وسيزامن قائمة التلقيمات مع قائمة قراءة Tiny " #~ "Tiny RSS." #~ msgid "TheOldReader login failed!" #~ msgstr "فشل الولوج إلى قارئ TheOldReader!" #~ msgid "" #~ "Integrate the feed list of your TheOldReader account. Liferea will " #~ "present your TheOldReader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "يتكامل مع قائمة تلقيمات حسابك في قارئ TheOldReader. سيعرض لايفريا " #~ "اشتراكات قارئ TheOldReader وسيزامن قائمة التلقيمات مع قائمة قراءة " #~ "TheOldReader." #~ msgid "This feed does not exist anymore!" #~ msgstr "لا وجود لهذه التلقيمة بعد الآن!" #~ msgid "This news entry has no headline" #~ msgstr "مدخلة الأخبار بلا عناوين رئيسية" #~ msgid "Visit" #~ msgstr "زُر" #~ msgid "Open feed" #~ msgstr "افتح التلقيمة" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "لا تحديثات%2$.0s في %1$s" #~ msgstr[1] "يوجد تحديث%2$.0s في %1$s" #~ msgstr[2] "يوجد تحديثان%2$.0s في %1$s" #~ msgstr[3] "يوجد %2$d تحديثات في %1$s" #~ msgstr[4] "يوجد %2$d تحديثا في %1$s" #~ msgstr[5] "يوجد %2$d تحديث في %1$s" #~ msgid "Feed Update" #~ msgstr "تحديث التلقيمة" #~ msgid "Show details" #~ msgstr "اعرض التفاصيل" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "ا_فرض إشعار قافز لهذا الاشتراك." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_لا تعرض إشعار قافز لهذا الاشتراك، أبدا." #~ msgid "Notification Settings" #~ msgstr "إعدادات التنبيه" #~ msgid "Show a _popup window with new headlines." #~ msgstr "اعرض نافذة _منبثقة مع العناوين الرئيسية الجديدة." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "اعرض أ_يقونة حالة في منطقة التنبيه (لوح النظام)." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "اعرض _عدد العناصر الجديدة في أيقونة اللوحة." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "أ_نهِ بدلا من التصغير إلى أيقونة اللوحة." #~ msgid "_Start in tray icon." #~ msgstr "ابدأ _كأيقونة في اللوحة." #~ msgid "Please enter your tt-rss account settings." #~ msgstr "من فضلِك أدخل إعدادات حسابك في Tiny Tiny RSS." #~ msgid "No comments yet." #~ msgstr "لا تعليقات حتى الآن." #~ msgid "Refresh" #~ msgstr "حدِّث" # ARABEYES: keep the html code, this is # intentional #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "

لايفريا - قارئ تلقيمات لينكس

" #, fuzzy #~ msgid "" #~ "

Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

You can add new subscriptions

  • From main menu " #~ "'Subscription' -> 'New Subscription'
  • By dropping feed links " #~ "into the subscription list
  • By right clicking links and choosing " #~ "'Subscribe' within Liferea

" #~ msgstr "" #~ "

مرحبا في لايفريا، مجمّع أخبار لتلقيمات الأخبار " #~ "عالخط.

اللوح الأيسر يحتوي قائمة باشتراكاتك. لإضافة " #~ "اشتراك اختر الاشتراكات -> اشتراك جديد. لتصفّح العناوين الرئيسية لتلقيمة " #~ "اخترها في قائمة التلقيمات وستحمّل العناوين الرئيسية في اللوح الأيمن.

" #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "حقوق النشر © 2003-2011\n" #~ "فريق لايفريا\n" #~ msgid "Download and view feeds" #~ msgstr "نزّل واعرض التلقيمات" #~ msgid "You may want to validate the feed using" #~ msgstr "ربما تريد التأكد من سلامة التلقيمة باستخدام" #~ msgid "Launch Item In _Tab" #~ msgstr "افتح العنصر في _لسان" #~ msgid "_Launch Item In Browser" #~ msgstr "ا_فتح العنصر في المتصفّح" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "انسخ _عنوان العنصر إلى الحافظة" #~ msgid "flag" #~ msgstr "شارة" #~ msgid "bookmark" #~ msgstr "علامة" #~ msgid "comments" #~ msgstr "تعليقات" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "فشل تنزيل المغلّف: \"%s\"" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "انتهى تنزيل المغلّف: \"%s\"" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "تستخدم هذه الإصدارة من لايفرريا نسق خبيئة جديدة وقد نقلت خبيئة تلقيماتك " #~ "إلى النسق الجديد. لم يحذف محتوى الخبيئة من %s تلقائيا. من فضلك احذف هذا " #~ "الدليل يدويا عندما تتأكد من نجاح النقل." #, fuzzy #~ msgid "Download FAILED: \"%s\"" #~ msgstr "فشل تنزيل المغلّف: \"%s\"" #, fuzzy #~ msgid "Download finished." #~ msgstr "_نزّل باستخدام" #~ msgid "Choose download directory" #~ msgstr "اختر دليل التنزيل" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_يدوي:\n" #~ "(%s للمسار)" #~ msgid "_Save downloads in" #~ msgstr "ا_حفظ التنزيلات في" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "_فعّل كل مزامنة الشبكة المحلية" #~ msgid "_Service Name" #~ msgstr "اسم ال_خدمة" #~ msgid "Sync" #~ msgstr "زامن" #~ msgid "Downloading Enclosure" #~ msgstr "تنزيل المغلّفات" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "_مرر المسار ولا تُنزّل المغلف." #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "تقفز للعنصر الغِر مقروء التالي. تختار التلقيمة التالية ذات العناصر غير " #~ "المقروءة إذا كان ضرورياً." #~ msgid "Liferea Sync %s@%s" #~ msgstr "مزامنة ليفريا %s@%s" #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%.0sلا نتائج بحث عن \"%s\"" #~ msgstr[1] "%.0sنتيجة بحث واحدة عن \"%s\"" #~ msgstr[2] "%.0sنتيجتي بحث عن \"%s\"" #~ msgstr[3] "%d نتائج بحث عن \"%s\"" #~ msgstr[4] "%d نتيجة بحث عن \"%s\"" #~ msgstr[5] "%d نتيجة بحث عن \"%s\"" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "لا نتائج للبحث" #~ msgstr[1] "نتيجة بحث واحدة" #~ msgstr[2] "نتيجتي بحث" #~ msgstr[3] "%d نتائج بحث" #~ msgstr[4] "%d نتيجة بحث" #~ msgstr[5] "%d نتيجة بحث" #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "تحتوى قائمة العناصر الآن كل العناصر التي تطابق نمط البحث المحدّد. إذا أردت " #~ "حفظ نتائج البحث بشكل دائم فانقر زر \"مجلّد بحث\" في حوار البحث وسيضيف " #~ "لايفريا مجلّد بحث في قائمة تلقيماتك." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "لا يستطيع لايفريا عرض محتويات هذا العنصر." #~ msgid "

View this item's content.

" #~ msgstr "

اعرض محتويات هذا العنصر.

" #~ msgid " (Website)" #~ msgstr " (الموقع)" #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "يتكامل مع قائمة تلقيمات حسابك في Bloglines. سيعرض لايفريا اشتراك " #~ "Bloglines كشجرة فرعية للقرائة فقط في قائمة تلقيماتك." #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Hook" #~ msgstr "خُطَّاف" #~ msgid "Registered Scripts" #~ msgstr "سكريبتات مسجّلة" #~ msgid "Script Code" #~ msgstr "كود سكريبت" #~ msgid "text/plain" #~ msgstr "نص/صِرف" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "قد يؤدي هذا الخيار لتأخير ملحوظ عند تحميل مجلّدات تحتوي الكثير من " #~ "التلقيمات." #~ msgid "Downloading Enclosures" #~ msgstr "تنزيل المغلّفات" #~ msgid "Feed Cache Handling" #~ msgstr "التعامل مع ذاكرة التلقيمات المخبّأة" #~ msgid "Feed Name" #~ msgstr "اسم التلقيمة" #~ msgid "Feed Update Settings" #~ msgstr "إعدادات تحديث التلقيمات" #~ msgid "HTTP Proxy Server" #~ msgstr "خادوم وسيط HTTP" #~ msgid "Opening Enclosures" #~ msgstr "فتح المغلّفات" #~ msgid "Reading Headlines" #~ msgstr "قراءة العناوين الرئيسية" #~ msgid "Toolbar Settings" #~ msgstr "إعدادات شريط الأدوات" #~ msgid "Update Interval" #~ msgstr "فترة التحديث" #~ msgid "Web Integration" #~ msgstr "التكامل مع وِب" #~ msgid "Add Script" #~ msgstr "أضف سكريبت" #~ msgid "Create new script" #~ msgstr "أنشئ سكريبت جديد" #~ msgid "Exec Command" #~ msgstr "أمر التنفيذ" #~ msgid "Reuse existing script" #~ msgstr "أعد استخدام سكريبت موجود" #~ msgid "Script Manager" #~ msgstr "مدير السكريبت" #~ msgid "Update status" #~ msgstr "حدّث الحالة" #~ msgid "was updated" #~ msgstr "حُدِّث" #~ msgid "was not updated" #~ msgstr "لم يُحَدّث" #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "_Properties..." #~ msgstr "ال_خصائص..." #~ msgid "Update out-dated feeds" #~ msgstr "حدّث التلقيمات القديمة" #~ msgid "Force update of all feeds" #~ msgstr "افرض تحديث كل التلقيمات" #~ msgid "No feed update at all" #~ msgstr "لم تُحدّث أي تلقيمات" #~ msgid "feedlist.opml" #~ msgstr "feedlist.opml" #~ msgid "At _startup:" #~ msgstr "عند ال_بدأ:" #~ msgid "link cosmos" #~ msgstr "محيط الوصلة" #~ msgid "_Script Manager" #~ msgstr "مدير ال_سكريبت" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "يسمح بإعداد وتحرير LUA hook scripts" #~ msgid "Attention Profile" #~ msgstr "لاحة الانتباه" #~ msgid "Presents statistics on your most read categories" #~ msgstr "يعطي إحصائيات عن أكثر الفئات المقروؤة" #~ msgid "Search With ..." #~ msgstr "ابحث باستخدام..." #~ msgid "Count" #~ msgstr "عدد" #~ msgid "(empty)" #~ msgstr "(فارغ)" #~ msgid "startup" #~ msgstr "البدأ" #~ msgid "feed updated" #~ msgstr "حُدِّثت التلقيمة" #~ msgid "feed added" #~ msgstr "أُضِيفت التلقيمة" #~ msgid "item selected" #~ msgstr "حُدِّد العنصر" #~ msgid "feed selected" #~ msgstr "حُدِّدت التلقيمة" #~ msgid "item unselected" #~ msgstr "أُلغِيَ تحديد العنصرِ" #~ msgid "feed unselected" #~ msgstr "أُلغِي تحديد التلقيمة" #~ msgid "shutdown" #~ msgstr "أطفيء" #~ msgid "Sorry, no scripting support available!" #~ msgstr "آسف، لا يتوفّر دعم للسكريبت" #~ msgid "Script Name" #~ msgstr "اسم السكريبت" #~ msgid "No script selected!" #~ msgstr "لم يُنحدد أية سكريبت!" #~ msgid "Create a new search feed." #~ msgstr "أنشيء تلقيمة بحث جديدة." #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "لا عناوين جديدة / مُحدّثة لـ %s %.0s\n" #~ msgstr[1] "‏%s له عنوان %.0sواحد جديد / مُحدّث\n" #~ msgstr[2] "‏%s له %.0sعنوانين جديدين / مُحدّثين\n" #~ msgstr[3] "‏%s له %d عناوين جديدة / مُحدّثة\n" #~ msgstr[4] "‏%s له %d عنوانا جديدا / مُحدّثا\n" #~ msgstr[5] "‏%s له %d عنوان جديد / مُحدّث\n" #~ msgid "Search _Link Cosmos with" #~ msgstr "ابحث في محيط ال_وصلة عن:" #~ msgid "Liferea seems to be running already!" #~ msgstr "يبدو أن لايفريا يعمل بالفعل!" #~ msgid "The orientation of the tray." #~ msgstr "اتجاه اللوحة." #~ msgid "%s" #~ msgstr "%s" #~ msgid "You have to select a feed entry" #~ msgstr "عليك اختيار عنصر تلقيمة" #~ msgid "_Allow Flash in Feeds." #~ msgstr "ا_سمح بالفلاش في التلقيمات" #, fuzzy #~ msgid "FAILED to download enclosure: \"%s\"" #~ msgstr "انتهى تنزيل المغلّف: \"%s\" " #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2009\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgstr "" #~ "حقوق النشر © 2003-2007\n" #~ "Lars Lindner و \n" #~ "Nathan J. Conrad \n" #~ msgid "/_Bookmark Link at %s" #~ msgstr "/_علّم الوصلة في %s" #~ msgid "/Toggle _Read Status" #~ msgstr "/بدّل حالة ال_قراءة" #~ msgid "/Toggle Item _Flag" #~ msgstr "/بدّل _شارة العنصر" #~ msgid "/_Preferences" #~ msgstr "/ال_تفضيلات" #~ msgid "/_Quit" #~ msgstr "/ا_خرج" #~ msgid "/Copy Link Location" #~ msgstr "/انسخ موقع الوصلة" #~ msgid "/_Update" #~ msgstr "/_حدّث" #~ msgid "/_New/New _Subscription..." #~ msgstr "/_جديد/ا_شتراك جديد..." #~ msgid "/_New/New _Folder..." #~ msgstr "/_جديد/_مجلّد جديد..." #~ msgid "/_New/New S_earch Folder..." #~ msgstr "/_جديد/مجلّد _بحث جديد..." #~ msgid "/_New/New S_ource..." #~ msgstr "/_جديد/م_صدر جديد..." #~ msgid "/_New/New _News Bin..." #~ msgstr "/_جديد/_سلّة أخبار جديدة..." #~ msgid "" #~ "This program is free software; you can redistribute it and/or modify\n" #~ "it under the terms of the GNU General Public License as\n" #~ "published by the Free Software Foundation; either version 2 of the\n" #~ "License, or (at your option) any later version.\n" #~ "\n" #~ "This program is distributed in the hope that it will be useful,\n" #~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" #~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" #~ "GNU General Public License for more details.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License\n" #~ "along with this program; if not, write to the Free Software\n" #~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, " #~ "USA." #~ msgstr "" #~ "هذا البرنامج برمجية حرة، يمكنك توزيعه و/أو تعديله حسب بنود رخصة جنو " #~ "العمومية كما \n" #~ "نشرتها مؤسسة البرامج الحرة، الإصدار الثاني أو أي إصدار أحدث (حسب رغبتك).\n" #~ "\n" #~ "\n" #~ "\n" #~ "يوزع هذا البرنامج على أمل أن يكون مفيدًا، ولكن دون أية ضمانات، بما في ذلك " #~ "ضمانات \n" #~ "قابلية البرنامج للتسويق أو الملاءمة لغرض معين. انظر نص رخصة جنو " #~ "العمومية \n" #~ "لمزيد من التفاصيل.\n" #~ "\n" #~ "\n" #~ "\n" #~ "من المفترض أنك تلقيت نسخة من رخصة جنو العمومية مع هذا البرنامج؛ إذا لم " #~ "يحدث \n" #~ "هذا فاكتب إلى مؤسسة البرمجيات الحرة\n" #~ "\n" #~ "Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA \n" #~ "02111-1307, USA." #~ msgid "Access Forbidden" #~ msgstr "النفاذ ممنوع" #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "فشَل الاكتشاف الآلي لوصلة التلقيم! لم يُعثر على أي وصلة تلقيم!" #~ msgid " --help Print this help and exit" #~ msgstr " --help اطبع هذه المساعدة واخرج" #~ msgid " --mainwindow-state=STATE" #~ msgstr " --mainwindow-state=STATE" #~ msgid " Possible topics are: all,cache,conf,db,gui,html" #~ msgstr " المواضيع الممكنة هي: all,cache,conf,db,gui,html" #~ msgid " net,parsing,plugins,trace,update,verbose" #~ msgstr " net,parsing,plugins,trace,update,verbose" #~ msgid "The --mainwindow-state argument must be given a parameter.\n" #~ msgstr "يجب أن يعطى الخيار --mainwindow-state معاملا.\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "يجب أن يعطى الخيار --session معاملا.\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "واجه لايفريا معطى مجهول: %s\n" #~ msgid "Cookie for %s has expired!" #~ msgstr "انتهت مدّة سكاكر %s" #~ msgid "Network error" #~ msgstr "خطأ شبكي" #~ msgid "Could not download \"%s\". Will retry in %d seconds." #~ msgstr "تعذّر تنزيل \"%s\". سأعيد المحاولة خلال %d من الثواني." #~ msgid "http://lzone.de/liferea/" #~ msgstr "http://lzone.de/liferea/" #~ msgid "_Limit cache to" #~ msgstr "حُدّ الذاكرة المخبّأة بـ" #~ msgid "items." #~ msgstr "عناصر." liferea-1.12.7/po/ast.po000066400000000000000000002171361352135647700150050ustar00rootroot00000000000000# Asturian translations for Liferea. # Copyright (C) 2009 The Free Software Foundation, Inc. # This file is distributed under the same license as the Liferea package. # Marquinos , 2010. # msgid "" msgstr "" "Project-Id-Version: liferea 1.8-rc1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2013-03-31 17:15+0100\n" "Last-Translator: Iñigo Varela \n" "Language-Team: Asturian \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Poedit-Language: Asturian\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Llector de noticies" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Liferea ta ensin conexón" #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "Sincronización con equipos cercanos" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "Sincronización con equipos cercanos" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "Sincronización con equipos cercanos" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "Sincronización con equipos cercanos" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 #, fuzzy msgid "Play Podcasts" msgstr "Podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Llector de noticies" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea, llector de noticies" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Esta canal foi abandonada y ya nun tá algamable. Liferea nun va anovala pero " "puedes siguir accediendo a los sos artículos atroxaos." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
HTTP error code : " msgstr "" "Falló el caberu anovamientu d'esta fonte

Fallu HTTP : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Atopáronse fallos al procesar esta canal." #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Detalles del fallu d'analís" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Detalles" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Atopáronse fallos al peñerar esta canal." #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Peñerar los detalles de fallos" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Canal:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Orixe:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Editor" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Copyright" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "fíos con" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "titulares non lleíos" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Carpeta:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Fonte" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Canal" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Archiváu en" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Autor" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Compartíu por" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Vía" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Rellacionáu" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Tamién escritu en" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Creador" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Comentarios" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Anovando..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Seición" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Departamentu" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Bandexa de noticies:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Amestar elementos a esti contenedor de noticies seleicionáu «Copiar al " "contenedor de noticies» dende la llista d'elementos nel menú de contestu." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Carpeta de Gueta:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Falló al llanzar el restolador: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Aniciando: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Fallu n'autorización" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "¡Nun pudo criase'l direutoriu d'almacenamientu \"%s\"!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Güei %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Ayeri %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d %b %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%b %d %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" nun ye un ficheru de configuración d'axuntos válidu" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Fallu al renomar %s a %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "XML erróneu nel documentu OPML «%s». Nun foi dable importalu." #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "El documentu OPML \"%s\", que se quería importar, taba vacíu." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" nun ye un documentu OPML válidu. Liferea nun pudo importar el ficheru." #: ../src/export.c:469 msgid "Imported feed list" msgstr "Llista de canales importaos" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importar llista de canales" #: ../src/export.c:481 msgid "Import" msgstr "Importar" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "Ficheros OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Ocurrió un fallu mientres s'esportaba la llista de canales." #: ../src/export.c:491 msgid "Feed List exported!" msgstr "La llista de canales esportóse con ésitu." #: ../src/export.c:498 msgid "Export Feed List" msgstr "Esportar llista de canales" #: ../src/export.c:498 msgid "Export" msgstr "Esportar" #: ../src/feed.c:317 msgid "" "

Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

" msgstr "" "

Nun pudo deteutase la triba de la canal. Por favor, comprueba que la URL " "apunta a un documentu con dalgún de los formatos sofitaos.

Salida del " "procesador de XML:
" #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" anovada..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" nun ta disponible" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "La URL que disti a Liferea apunta a una páxina web, y el mecanismu " "d'autodescubrimientu nun atopó denguna canal de noticies nella. Seique esti " "sitiu nun sofita'l deteutalos automáticamente." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "Fallu XML mientres se lleía'l canal \"%s\". ¡Nun se pudo baxar!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Documentu baleru." #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "XML inválidu" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "La direición apunta a un documentu HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Nun pudo determinase la triba de la canal." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Nun hai artículos ensin lleer " #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Aniciar Liferea cola ventana principal nel ESTÁU, que puede ser «shown» " "p'amosala, «iconified» pa dexala na estaya de notificación, o «hidden» " "p'anubrila" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "ESTÁU" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Amosar información de la versión y colar" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Amestar una nueva soscripción" #: ../src/liferea_application.c:284 msgid "uri" msgstr "uri" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Amosar tolos mensaxes de depuración" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "" "Amosar mensaxes de depuración tocante a remanar l'área d'almacenamientu" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Amosar mensaxes de depuración tocante a la configuración" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Amosar mensaxes de depuración tocante a la base de datos" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "" "Amosar mensaxes de depuración tocante toles funciones de la interface gráfica" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Activa la depuración de la xeneración de HTML. Cada vegada que Liferea " "xenere HTML atroxarálo en ~/.cache/liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Amosar mensaxes de depuración tocante a los accesos a la rede" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "" "Amosar mensaxes de depuración tocante a toles funciones de procesamientu" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Amosar mensaxes de depuración cuando una función allánciase más de la cuenta" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Amosar mensaxes de depuración al entrar y colar de funciones" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "" "Amosar mensaxes de depuración tocante al procesu d'anovamientu de canales" #: ../src/liferea_application.c:301 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "" "Amosar mensaxes de depuración tocante a remanar l'área d'almacenamientu" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Amosar información estra nos mensaxes de depuración" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Amosar mensaxes de depuración tocante al tema especificáu" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "L'anovamientu solicitáu encaboxóse" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Nun pudo resolvese'l nome del sirvidor remotu" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Nun pudo resolvese'l nome del sirvidor proxy" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Nun pudo coneutase col sirvidor" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Nun foi dable coneutar col proxy" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "Asocedió un fallu de rede, o el sirvidor remotu peslló la conexón" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "L'elementu solicitáu camudó permanentemente d'allugamientu" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Nun tas autorizáu pa ver esta canal. Por favor, especifica'l nome d'usuariu " "y la contraseña nel cuadru de propiedaes de la canal." #: ../src/net.c:476 msgid "Payment required" msgstr "Requierse Pagu" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Nun tienes permisu p'acceder a esti elementu" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Recursu non atopáu" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Métodu non permitíu" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Non aceutable" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "El proxy requier autenticación" #: ../src/net.c:482 msgid "Request timed out" msgstr "Espiró'l tiempu de rempuesta" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Esta fonte yá nun esiste. Por favor, desaníciala." #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Asocedió un fallu internu durante l'anovamientu" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Canal nun disponible: El sirvidor solicitó una redireición desconocida." #: ../src/net.c:492 msgid "Client Error" msgstr "Fallu del veceru" #: ../src/net.c:494 msgid "Server Error" msgstr "Fallu del sirvidor" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Hebo un fallu de rede desconocíu" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "L'artículu" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "contién" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "nun contién" #: ../src/rule.c:175 msgid "Item title" msgstr "El títulu" #: ../src/rule.c:176 msgid "Item body" msgstr "El cuerpu del artículu" #: ../src/rule.c:177 msgid "Read status" msgstr "L'estáu de llectura" #: ../src/rule.c:177 msgid "is unread" msgstr "ye nuevu" #: ../src/rule.c:177 msgid "is read" msgstr "ye lleíu" #: ../src/rule.c:178 msgid "Flag status" msgstr "La etiqueta" #: ../src/rule.c:178 msgid "is flagged" msgstr "ta activada" #: ../src/rule.c:178 msgid "is unflagged" msgstr "ta desactivada" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "incluyíu" #: ../src/rule.c:179 msgid "not included" msgstr "non incluyíu" #: ../src/rule.c:180 msgid "Category" msgstr "Categoría" #: ../src/rule.c:180 msgid "is set" msgstr "ta afitada" #: ../src/rule.c:180 msgid "is not set" msgstr "nun ta afitada" #: ../src/rule.c:181 msgid "Feed title" msgstr "El títulu de la canal" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "La canal \"%s\" yá ta anovándose!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "La canal \"%s\" yá nun esiste. Liferea nun volverá a anovala." #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Anovando'l iconu de \"%s\"" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Atopóse un problema al lleer la canal. Por favor, comprueba la URL y la " "salida na consola." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "La URL de \"%s\" camudó permanentemente y foi anovada" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" Abandonóse. Liferea yá nun va anovala." #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "El conteníu de \"%s\" nun camudó dende'l caberu anovamientu" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Anovando: \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Prodúxose un fallu al abrir el ficheru temporal %s pal filtráu" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s finóse col estáu %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Nun pudo abrise la tubería \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Fallu: Nun pudo abrise'l ficheru \"%s\"" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Fallu: Nun esiste'l ficheru \"%s\"" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Nueva carpeta de gueta" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Hai más fallos. ¡La salida truncóse!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "XML Parser: Nun pudo procesase'l documentu:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Axuntos" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " Bytes" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d axuntu" msgstr[1] "%d axuntos" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Escoyer Ficheru" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Estensión de ficheru .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Nun pudo atopase la imaxe: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d nuevu)" msgstr[1] " (%d nuevos)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d non lleíu%s" msgstr[1] "%d non lleíos%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Temes d'aida" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Manual de referencia" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "FAQ" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Gueta Avanzada" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Escribi'l nome d'usuariu y la contraseña pa \"%s\" (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Fonte desconocida" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "Encaboxar _too" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Tolos ficheros" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea ta trabayando ensin conexón. Nun pueden anovase les fontes" #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Guetar en toles canales" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Conseñar too como lleíu" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "¿Daveres quies desaniciar \"%s\"?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "¡Esti artículu nun tien un enllaz asignáu!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Ensin títulu ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Titular" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "¡Seleiciona una canal pa desaniciar los sos artículos!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Nun se seleicionó dengún artículu" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "" #: ../src/ui/popup_menu.c:111 #, fuzzy msgid "_Open In Browser" msgstr "_Abrir nel restolador" #: ../src/ui/popup_menu.c:115 #, fuzzy msgid "Open In _External Browser" msgstr "Opciones del restolador esternu" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Copiar a una bandexa" #: ../src/ui/popup_menu.c:147 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "Crear un marcador del enllaz en %s" #: ../src/ui/popup_menu.c:153 #, fuzzy msgid "Copy Item _Location" msgstr "_Copiar direición de la imaxe" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "_Camudar ente lleíu y non lleíu" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Asignar o quitar _etiqueta" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "_Desaniciar artículu" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Abrir axuntu..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Guardar como..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "_Copiar la direición del enllaz" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Anovar" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Anovar Carpeta" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Nueva _soscripción" #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Nueva _carpeta..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Nueva carpeta de _gueta..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Nueva f_onte..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Nueva ban_dexa..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Nueva" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Ordenar canales" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_Conseñar toos como lleíos" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Desaniciar" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Propiedaes" #: ../src/ui/popup_menu.c:343 #, fuzzy msgid "Convert To Local Subscriptions..." msgstr "_Nueva soscripción..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "Predetermináu de Gnome" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Testu embaxo de los iconos" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Testu xunto a los iconos" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Namái iconos" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Namái testu" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minutos" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "hores" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "díes" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Espaciu" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Espaciu" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Espaciu" #: ../src/ui/preferences_dialog.c:112 #, fuzzy msgid "Normal View" msgstr "_Vista normal" #: ../src/ui/preferences_dialog.c:113 #, fuzzy msgid "Wide View" msgstr "_Vista enantada" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Combined View" msgstr "Vista _combinada" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Restolador predefiníu" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Triba" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Programa" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Desaniciando entrada" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "¿Daveres quies desaniciar \"%s\" y tolos sos conteníos?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "¿Daveres quies desaniciar \"%s\"?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Confirmar Desaniciu" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Confirmar Desaniciu" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "Esta canal suxer un intervalu d'anovamientu de %d minutu." msgstr[1] "Esta canal suxer un intervalu d'anovamientu de %d minutos." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Esta canal nun especifica un intervalu d'anovamientos predetermináu." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Sitiu web" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nueva canal" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Llector Google" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Escoyer Ficheru OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Nueva soscripción OPML" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Nun s'atoparon tribes de fontes de llistes de canales." #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Triba de fonte" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Falló l'accesu a Google Reader" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Llector de noticies" #: ../src/webkit/liferea_web_view.c:175 #, fuzzy msgid "Open Link In _Tab" msgstr "Abrir l'enllaz nuna lli_ngüeta nueva" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "Abrir l'enllaz n_el restolador" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "Abrir l'enllaz n_el restolador" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "Crear un marcador del enllaz en %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Copiar direición del enllaz" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "G_uarda imaxe como" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "_Copiar direición de la imaxe" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "Guardar enllaz c_omo" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "G_uarda imaxe como" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Soscribise..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "_Aumentar el tamañu del testu" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Amenorgar el tamañu del testu" #: ../glade/about.ui.h:1 msgid "About" msgstr "Tocante a" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea ye un llector de noticies pa GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Sitiu web de Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autenticación" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Nome d'usuariu:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "Contraseña:" #: ../glade/enclosure_handler.ui.h:1 #, fuzzy msgid "Open Enclosure" msgstr "Abrir axuntu..." #: ../glade/enclosure_handler.ui.h:2 #, fuzzy msgid "Open an enclosure of type:" msgstr "Baxando un axuntu de triba:" #: ../glade/enclosure_handler.ui.h:3 #, fuzzy msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "¿Qué tien de facer Liferea con esti axuntu? Escribi debaxo la orde que quies " "executar. El nome del ficheru descargáu va usase como parámetru pa la orde:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "Restolar" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "Facer lo mesmo _de mou automáticu pa esta triba de ficheros." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Axuntar cuenta de Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Por favor escribi los datos de la to cuenta de Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "Cont_raseña" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "Nome d'_usuariu (Email)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Ver titulares" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Titulares" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Conseñar too como lleíu" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Conseñar too como lleíu" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Nueva carpeta" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "_Nome de la carpeta:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Crea una bandexa de noticies" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Nome de la bandexa de noticies:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Orixe de la canal" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Mou d'accesu:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Comandu" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "Ficheru _llocal" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Restolar Ficheru..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "Orixe:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Baxada / Postprocesamientu" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "Nu_n usar proxy pa baxaes" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Usar _peñera de charra" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea puede usar peñeres esternes p'acceder a canales y direutorios en " "formatos que nun tean sofitaos. Por favor, llee la documentación pa más " "información." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Convertir _usando:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Seleición de fonte" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Seleiciona la triba de fonte que quies amestar..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Axuntar OPML/Planeta" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Indica un ficheru llocal o una URL qu'apunte a una llista de canales en " "formatu OPML." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "A_llugamientu" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Seleicionar Ficheru" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Preferencies" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_Númberu d'artículos de cada canal que van atroxase:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Axustes d'anovamientu de canal" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Nota: Por favor, usa un tiempu razonable. Guetar anovamientos más d'una " "vez por hora ye, casi siempres, un desperdiciu d'anchu de banda." #: ../glade/prefs.ui.h:8 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Anova toles soscripciones" #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "_Intervalu d'anovamientu predetermináu" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Canales" #: ../glade/prefs.ui.h:12 #, fuzzy msgid "Folder Display Settings" msgstr "Opciones de presentación de carpetes" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "Amo_sar los elementos de toles fontes fíes al seleicionar una carpeta." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "_Anubrir elementos lleíos." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Iconos de los canales (Favicons)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Anovar tolos favicons agora" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Carpetes" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Leendo titulares" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "_Saltar a artículos con:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Integración web" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Unviar los marcadores a" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Axustes del restolador internu" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Abrir los enllaces na ventana de Liferea." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Desautivar JavaScript." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "Habilitar «plugins» del restolador." #: ../glade/prefs.ui.h:28 #, fuzzy msgid "External Browser Settings" msgstr "Opciones del restolador esternu" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "Restolador:" #: ../glade/prefs.ui.h:30 #, fuzzy msgid "_Manual:" msgstr "Manual" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Restolador" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Axustes de la barra de ferramientes" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "Anubrir la barra de ferramientes." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Etiquetes de los _botones de la barra de ferramientes:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Interfaz gráfica" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "HTTP Proxy Server" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Auto deteición (GNOME o entornu)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "Ensin proxy" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "Configuración _manual:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "Sirvidor proxy:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Puertu del proxy:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "_Identificase énte'l proxy" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Nome d'_usuariu nel proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Contraseña del proxy:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Opciones de presentación de carpetes" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 #, fuzzy msgid "Downloading Enclosures" msgstr "Baxando axuntos" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "Baxar usan_do" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 #, fuzzy msgid "Opening Enclosures" msgstr "Abrir axuntu..." #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Axuntos" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Propiedaes de la fonte" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Nome de la canal" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Nome de la canal:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Intervalu anovamientu" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Usar l'intervalu establecíu globalmente." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "Afitar un intervalu especí_ficu de" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "Nun anovar automáticamente esta canal" #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "El fornidor d'conteníu d'esta canal suxier un intervalu d'anovación de %d " "minutos." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Xeneral" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea puede usar peñeres esternes p'acceder a canales y direutorios en " "formatos que nun tean sofitaos. Por favor, llee la documentación pa más " "información." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "La opción d'almacenaxe remana si los artículos de la canal s'atroxen en " "discu cuando Liferea fina. Ensin importar les opciones, los artículos con " "etiqueta atróxense siempres." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "Usar la configuración _xeneral" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Desactivar almacenamientu" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "Almacenamientu _illimitáu" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "_Númberu d'artículos a atroxar:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Archivu" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Usar _autenticación HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Baxar" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "Baxar _automáticamente tolos axuntos d'esta canal." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Cargar automáticamente nel restolador internu l'en_llaz de los artículos " "seleicionaos." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Inorar les canales de comentarios d'esta soscripción." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Conseñar elementos descargaos como lleíos." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Avanzáu" #: ../glade/reedah_source.ui.h:1 #, fuzzy msgid "Add Reedah Account" msgstr "Axuntar cuenta de Google Reader" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Por favor escribi los datos de la to cuenta de Google Reader." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Renomar" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Nuevu nome:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Propiedaes de la carpeta de gueta" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "Guetar _Nome:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 #, fuzzy msgid "Find Items that meet the following criteria" msgstr "Alcontrar artículos colos criterios siguientes" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Cúmpl_ese cualesquier regla" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "_Cúmplense toles regles" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Gueta Avanzada" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "_Guetar carpeta..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Guetar en toles canales" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Avanzáu…" #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Gueta'l testu especificáu en tolos canales. El resultáu aparecerá na llista " "d'artículos." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "Términu a guetar:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Escribi un testu. Liferea va guetalu tanto nos títulos de los artículos como " "nos conteníos." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Avanzáu..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Escribi la direición d'un sitiu web pa usar l'autodescubrimientu o, si la " "conoces, la direición esauta de la canal." #: ../glade/theoldreader_source.ui.h:1 #, fuzzy msgid "Add TheOldReader Account" msgstr "Axuntar cuenta de Google Reader" #: ../glade/theoldreader_source.ui.h:2 #, fuzzy msgid "Please enter your TheOldReader account settings." msgstr "Por favor escribi los datos de la to cuenta de Google Reader." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Amestar cuenta de Tiny Tiny RSS" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "Escribi los datos de la to cuenta de Bloglines." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "_Sirvidor URL" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "Nome d'_usuariu" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Monitor d'anovamientos" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "Encaboxar _too" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Solicitúes pendientes" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Baxando agora" #~ msgid "_Subscriptions" #~ msgstr "_Soscripciones" #~ msgid "Update _All" #~ msgstr "_Anovar toes" #~ msgid "Updates all subscriptions." #~ msgstr "Anova toles soscripciones" #~ msgid "Mark All As _Read" #~ msgstr "Conseñar _too como lleío" #~ msgid "Marks read every item of every subscription." #~ msgstr "Conseña como lleíos tolos artículos de toles soscripciones." #~ msgid "_Import Feed List..." #~ msgstr "_Importar llista de canales..." #~ msgid "Imports an OPML feed list." #~ msgstr "Importa una llista de canales en formatu OPML." #~ msgid "_Export Feed List..." #~ msgstr "_Esportar llista de canales..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Esporta la llista de canales en formatu OPML." #~ msgid "_Quit" #~ msgstr "_Colar" #~ msgid "_Feed" #~ msgstr "_Canal" #~ msgid "Remove _All Items" #~ msgstr "Desanici_ar tolos elementos" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Desaniciar tolos artículos de la canal seleccionada." #~ msgid "_Item" #~ msgstr "_Elementu" #, fuzzy #~ msgid "Next Item" #~ msgstr "Siguiente artículu _nuevu" #~ msgid "_Next Unread Item" #~ msgstr "Siguiente artículu _nuevu" #~ msgid "_View" #~ msgstr "_Ver" #~ msgid "Increases the text size of the item view." #~ msgstr "Aumenta'l tamañu del testu na vista del artículu." #~ msgid "Decreases the text size of the item view." #~ msgstr "Amenorga'l tamañu del testu de la vista del artículu" #~ msgid "_Tools" #~ msgstr "_Ferramientes" #~ msgid "_Update Monitor" #~ msgstr "Monitor d'anovamiento_s" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Amosar llista de tolos canales con anovamientos pendientes" #~ msgid "_Preferences" #~ msgstr "_Preferencies" #~ msgid "Edit Preferences." #~ msgstr "Editar Preferencies." #~ msgid "S_earch" #~ msgstr "Gu_etar" #~ msgid "Search All Feeds..." #~ msgstr "Guetar en toles canales..." #~ msgid "Show the search dialog." #~ msgstr "Amosar el ventanu de gueta." #~ msgid "_Help" #~ msgstr "A_ida" #~ msgid "_Contents" #~ msgstr "_Conteníos" #~ msgid "View help for this application." #~ msgstr "Amosa aida pa esta aplicación." #~ msgid "_Quick Reference" #~ msgstr "_Referencia rápida" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Amosar toles combinaciones de tecles de Liferea." #~ msgid "_FAQ" #~ msgstr "_FAQ" #~ msgid "View the FAQ for this application." #~ msgstr "Amosar les entrugues más frecuentes (FAQ) del programa." #~ msgid "_About" #~ msgstr "_Tocante a" #~ msgid "Shows an about dialog." #~ msgstr "Amosar el ventanu Tocante a." #~ msgid "_Normal View" #~ msgstr "_Vista normal" #~ msgid "Set view mode to mail client mode." #~ msgstr "Visualiza en mou veceru de corréu." #~ msgid "_Wide View" #~ msgstr "_Vista enantada" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Afita la visualización usando tres paneles verticales." #~ msgid "_Combined View" #~ msgstr "Vista _combinada" #~ msgid "Set view mode to two pane mode." #~ msgstr "Afita la visualización usando dos paneles." #~ msgid "_Reduced Feed List" #~ msgstr "Llista de canales _amenorgada" #~ msgid "Hide feeds with no unread items." #~ msgstr "Anubrir los canales ensin artículos nuevos" #~ msgid "_New Subscription..." #~ msgstr "_Nueva soscripción..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Axuntar una soscripción a la llista de canales." #~ msgid "Adds a folder to the feed list." #~ msgstr "Axuntar una carpeta a la llista de canales." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Axuntar una carpeta de gueta a la llista de canales." #~ msgid "New _Source..." #~ msgstr "Nueva _fonte..." #~ msgid "Adds a new feed list source." #~ msgstr "Axuntar una nueva fonte de llistes de canales." #~ msgid "Adds a new news bin." #~ msgstr "Axuntar una nueva bandexa de noticies." #~ msgid "_Mark Items Read" #~ msgstr "_Conseñar artículos lleíos" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Conseña como lleíos tolos artículos de la canal esbillada o, nel casu " #~ "d'una carpeta de tolos sos canales." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Anovar la canal seleicionáu o, nel casu d'una carpeta, tolos canales que " #~ "caltenga." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Abre'l cuadru de propiedaes de la canal esbillada." #~ msgid "_Remove" #~ msgstr "D_esaniciar" #~ msgid "Removes the selected subscription." #~ msgstr "Desaniciar la canal esbillada." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Pasa'l artículu actual de lleíu a non lleíu o viceversa." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Crea o desanicia una etiqueta nel artículu seleccionáu." #~ msgid "R_emove" #~ msgstr "D_esaniciar" #~ msgid "Removes the selected item." #~ msgstr "Desaniciar l'artículu esbilláu." #, fuzzy #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Abre l'enllaz del artículu nel restolador." #, fuzzy #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Abre l'enllaz del artículu nel restolador." #, fuzzy #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Abre l'enllaz del artículu nel restolador." #~ msgid "_Work Offline" #~ msgstr "Trabayar ensin conexón" #~ msgid "_Update All" #~ msgstr "_Anovar too" #~ msgid "_Show Liferea" #~ msgstr "_Amosar Liferea" #, fuzzy #~ msgid "InoReader" #~ msgstr "Llector Google" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Nota: El nome d'usuariu y la contraseña van atroxase en discu, ensin " #~ "cifrar." #, fuzzy #~ msgid "Add InoReader Account" #~ msgstr "Axuntar cuenta de Google Reader" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "Por favor escribi los datos de la to cuenta de Google Reader." #~ msgid "normal view" #~ msgstr "vista normal" #~ msgid "wide view" #~ msgstr "vista panorámica" #~ msgid "combined view" #~ msgstr "vista combinada" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, llector de noticies pa Linux" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "Pa más información, visita https://lzone.de/liferea/" #, fuzzy #~ msgid "_Open Link In Browser" #~ msgstr "Abrir l'enllaz n_el restolador" #, fuzzy #~ msgid "_Open Link In External Browser" #~ msgstr "Abrir l'enllaz n_el restolador" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Crear una canal de resultaos de gueta" #~ msgid "enter any search string you want" #~ msgstr "escribi una cadena de testu a guetar" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "_Númberu máximu de resultaos:" #, fuzzy #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Nota: Liferea xenerará una canal que podrá usase pa consultar los " #~ "resultaos de gueta de la cadena especificada. Puedes caltener esta canal " #~ "de mou permanente y anovala como cualisquier otra. " #~ msgid "Liferea is now online" #~ msgstr "Liferea ta coneutáu" #~ msgid "Work Offline" #~ msgstr "Trabayar ensin conexón" #~ msgid "Liferea is now offline" #~ msgstr "Liferea ta ensin conexón" #~ msgid "Work Online" #~ msgstr "Trabayar coneutáu" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Esta opción permite deshabilitar l'anovamientu de soscripciones." #~ msgid "Browser default" #~ msgstr "Restolador predetermináu" #~ msgid "Existing window" #~ msgstr "Ventana esistente" #~ msgid "New window" #~ msgstr "Nueva ventana" #~ msgid "New tab" #~ msgstr "Nueva llingüeta" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Llector de noticies" #~ msgid "Online/Offline Button" #~ msgstr "Boton Coneutáu/Desconeutáu" #~ msgid "_Open link in:" #~ msgstr "Abrir enllaz en:" #~ msgid "No comments yet." #~ msgstr "Entá nun hai comentarios." #~ msgid "Refresh" #~ msgstr "Anovar" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea, llector de noticies Linux" #~ msgid "" #~ "

Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

You can add new subscriptions

  • From main menu " #~ "'Subscription' -> 'New Subscription'
  • By dropping feed links " #~ "into the subscription list
  • By right clicking links and choosing " #~ "'Subscribe' within Liferea

" #~ msgstr "" #~ "

Bienllegáu a Liferea, un llector de noticies en llinia pal " #~ "escritoriu.

Pues amestar soscripciones nueves

  • Dende'l menú " #~ "'Soscripción' -> 'Nueva soscripción'
  • Arrastrando enllaces de " #~ "feeds dientro de la llista de soscripciones
  • Calcando col botón " #~ "derechu y esbillando 'Soscribir' con Liferea

" #, fuzzy #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "Aniciar amenorgáu nel menú mensaxería" #, fuzzy #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Finar, _en llugar de minimizar na estaya de notificación." #~ msgid "Start minimized to the messaging menu" #~ msgstr "Aniciar amenorgáu nel menú mensaxería" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d artículu nuevu" #~ msgstr[1] "%d artículos nuevos" #~ msgid "No new items" #~ msgstr "Nun hai artículos nuevos" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d elementu ensin lleer" #~ msgstr[1] "" #~ "%s\n" #~ "%d elementos ensin lleer" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Nun hai artículos ensin lleer" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Canal Atom inválida: autor desconocíu" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Integra la llista de canales de la cuenta de Google Reader. Liferea " #~ "presentará la soscripción a Google Reader como un subárbol na llista de " #~ "canales y la caltendrala sincronizada." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Incluye blogrolls o Planets na to llista de canales. Liferea axuntará o " #~ "desaniciará canales, d'acordies a los cambeos nel documentu OPML" #, fuzzy #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Integra la llista de canales de la cuenta de Google Reader. Liferea " #~ "presentará la soscripción a Google Reader como un subárbol na llista de " #~ "canales y la caltendrala sincronizada." #~ msgid "This feed does not exist anymore!" #~ msgstr "¡Esta canal yá nun esiste!" #~ msgid "This news entry has no headline" #~ msgstr "Esti artículu nun tien titular" #~ msgid "Visit" #~ msgstr "Visitar" #~ msgid "Open feed" #~ msgstr "Ver la canal" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "%s tien %d anovamientu" #~ msgstr[1] "%s tien %d anovamientos" #~ msgid "Feed Update" #~ msgstr "Anovar canal" #~ msgid "Show details" #~ msgstr "Amosar detalles" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "Siempre xenerar notificaciones pa esta soscripción." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "Enxamás xenerar notificaciones pa esta soscripción." #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgid "Notification Settings" #~ msgstr "Axustes de notificación" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Amosar una ventana emerxente al recibir nuevos elementos." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Amosar un iconu na estaya de notificación (system tray)." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Amosar el _númberu d'elementos nuevos nel iconu de la bandexa." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "Finar, _en llugar de minimizar na estaya de notificación." #~ msgid "_Start in tray icon." #~ msgstr "_Aniciar na bandexa d'iconos." #~ msgid "Download and view feeds" #~ msgstr "Baxar y ver noticies" #~ msgid "You may want to validate the feed using" #~ msgstr "Seique quieras validar el feed usáu" #~ msgid "bookmark" #~ msgstr "marcador" #~ msgid "comments" #~ msgstr "comentarios" #~ msgid "flag" #~ msgstr "etiqueta" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Falló la descarga del axuntu: «%s»" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Completóse la baxada del axuntu: \"%s\"" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Esta versión de Liferea usa un formatu nuevu d'almacenamientu y treslladó " #~ "a ésti lo que s'atroxara anteriormente. El conteníu del almacén anterior " #~ "(en %s) nun se desanició automáticamente. Por favor, desanicia talu " #~ "direutoriu de mou manual tres d'asegurate que l'anovamientu foi correutu." #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Salta al siguiente artículu nuevu. Si fore necesario, salta a la " #~ "siguiente canal que tenga artículos nuevos." #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Falló la descarga: \"%s\"" #~ msgid "Download finished." #~ msgstr "Descarga finada." #~ msgid "Launch Item In _Tab" #~ msgstr "Abrir l'artículu nuna llingü_eta nueva" #~ msgid "_Launch Item In Browser" #~ msgstr "Abrir l'artículu nel restolador" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Copiar la _URL del artículu al cartafueyos" #~ msgid "Choose download directory" #~ msgstr "Escueyi'l direutoriu de descarga" #~ msgid "Liferea Sync %s@%s" #~ msgstr "Sincronización de Liferea %s@%s" #~ msgid "Downloading Enclosure" #~ msgstr "Baxando axuntos" #~ msgid "Sync" #~ msgstr "Sincronizar" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "Habilitar sincronización c_ola rede llocal" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Manual:\n" #~ "(%s pa URL)" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "_Pasar URL y non descargar l'axuntu." #~ msgid "_Save downloads in" #~ msgstr "_Guardar baxaes en" #~ msgid "_Service Name" #~ msgstr "Nome de _serviciu" #~ msgid "link cosmos" #~ msgstr "universu d'enllaces" #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "Amosar mensaxes de depuración tocante a la carga de «plugins»" #~ msgid "Liferea seems to be running already!" #~ msgstr "¡Paez que Liferea ya taba executándose!" #~ msgid "Update status" #~ msgstr "Anova l'estáu" #~ msgid "was updated" #~ msgstr "anovóse" #~ msgid "was not updated" #~ msgstr "nun s'anovó" #~ msgid "The orientation of the tray." #~ msgstr "La orientación de la bandexa." #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "_Script Manager" #~ msgstr "Xestor de guione_s" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Permite configurar y editar scripts LUA" #~ msgid "Search With ..." #~ msgstr "Guetar Con ..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d resultáu de guetar \"%s\"" #~ msgstr[1] "%d resultaos de guetar \"%s\"" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d resultáu" #~ msgstr[1] "%d resultaos" #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "La llista d'elementos amuesa toos aquellos que concasen col patrón " #~ "buscáu. Si quies guardar esti resultáu puedes usar el botón \"Carpeta de " #~ "gueta\" na ventada de gueta. Liferea amestará entós una carpeta virtual a " #~ "la to llista de canales." #~ msgid "You have to select a feed entry" #~ msgstr "Tienes d'esbillar una canal" #~ msgid "(empty)" #~ msgstr "(ermu)" #~ msgid "_Properties..." #~ msgstr "_Propiedaes..." #~ msgid "Update out-dated feeds" #~ msgstr "Anovar les canales non actualizaes" #~ msgid "Force update of all feeds" #~ msgstr "Forciar l'anovamientu de toles canales" #~ msgid "No feed update at all" #~ msgstr "Nun hai dengún anovamientu" #~ msgid "startup" #~ msgstr "Aniciar" #~ msgid "feed updated" #~ msgstr "canal anovada" #~ msgid "feed added" #~ msgstr "canal axuntada" #~ msgid "item selected" #~ msgstr "artículu seleicionáu" #~ msgid "feed selected" #~ msgstr "canal seleicionada" #~ msgid "item unselected" #~ msgstr "artículu non-seleicionáu" #~ msgid "feed unselected" #~ msgstr "canal non-seleicionada" #~ msgid "shutdown" #~ msgstr "finar" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Nun hai sofitu pa scripts." #~ msgid "Script Name" #~ msgstr "Nome del guión" #~ msgid "No script selected!" #~ msgstr "Nun hai un script seleicionáu." #~ msgid "Create a new search feed." #~ msgstr "Crear una nueva canal de gueta." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea nun puede amosar el conteníu d'esti artículu." #~ msgid "

View this item's content.

" #~ msgstr "

Ver el conteníu d'esti artículu.

" #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "Integrar la llista de canales de la so cuenta en Bloglines. Liferea " #~ "presentará la so soscripción a Bloglines como un subárbol de namái " #~ "llectura na llista de canales." #~ msgid "feedlist.opml" #~ msgstr "feedlist.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s tien %d titular nuevu / anováu\n" #~ msgstr[1] "%s tien %d titulares nuevos / anovaos\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Hook" #~ msgstr "Ganchu" #~ msgid "Registered Scripts" #~ msgstr "Scripts rexistraos" #~ msgid "Script Code" #~ msgstr "Códigu del Script" #~ msgid "text/plain" #~ msgstr "testu/planu" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Esta opción puede causar allancios significantes al cargar carpetes " #~ "que caltengan munchos canales." #~ msgid "Downloading Enclosures" #~ msgstr "Baxada d'axuntos" #~ msgid "Feed Cache Handling" #~ msgstr "Opciones d'almacenaxe" #~ msgid "Feed Name" #~ msgstr "Nome de la canal" #~ msgid "Feed Update Settings" #~ msgstr "Opciones d'anovamientu de la canal" #~ msgid "HTTP Proxy Server" #~ msgstr "Sirvidor «proxy» HTTP" #~ msgid "Opening Enclosures" #~ msgstr "Apertura d'axuntos" #~ msgid "Reading Headlines" #~ msgstr "Llectura de titulares" #~ msgid "Toolbar Settings" #~ msgstr "Opciones de la barra de ferramientes" #~ msgid "Update Interval" #~ msgstr "Intervalu d'anovación" #~ msgid "Web Integration" #~ msgstr "Integración web" #~ msgid "Add Script" #~ msgstr "Amestar un script" #~ msgid "At _startup:" #~ msgstr "Al aniciar:" #~ msgid "Create new script" #~ msgstr "Crear un script nuevu" #~ msgid "Exec Command" #~ msgstr "Executar una orde" #~ msgid "Reuse existing script" #~ msgstr "Reutilizar un script esistente" #~ msgid "Script Manager" #~ msgstr "Alministrador de scripts" #~ msgid "Search _Link Cosmos with" #~ msgstr "Guetar nel universu d'enll_aces con" #~ msgid "Count" #~ msgstr "Cuntar" #~ msgid "Attention Profile" #~ msgstr "Perfil d'atención" liferea-1.12.7/po/be@latin.po000066400000000000000000002460521352135647700157330ustar00rootroot00000000000000# Belarusian translations for liferea package. # Copyright (C) 2007 THE liferea'S COPYRIGHT HOLDER # This file is distributed under the same license as the liferea package. # , 2007. # msgid "" msgstr "" "Project-Id-Version: liferea 1.2.20\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2007-08-19 13:26+0300\n" "Last-Translator: \n" "Language-Team: Belarusian Latin\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Hartač RSS" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Liferea ciapier adłučany" #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "Nazva kanału" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "Nazva kanału" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "Nazva kanału" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "Nazva kanału" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 #, fuzzy msgid "Play Podcasts" msgstr "Podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Hartač RSS" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Hartač RSS Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Hety kanał skončyŭ pracu. Ciapier jon niedastupny. Liferea nia budzie jaho " "aktualizoŭvać, ale ty možaš čytać zahałoŭki z padručnaj pamiaci." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
HTTP error code : " msgstr "" "Apošniaja aktualizacyja hetaj padpiski była niepaśpiachovaj!
Kod " "pamyłki HTTP : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Pry razbory hetaha kanału adbylisia pamyłki!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Padrabiaznaści ab pamyłcy razboru" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Padrabiaznaści" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Pry filtravańni hetaha kanału adbylisia pamyłki!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Padrabiaznaści ab pamyłcy ŭ filtry" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Kanał:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Krynica:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Apublikavaŭ" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Aŭtarskija pravy" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "dzieci z" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "niečytanyja zahałoŭki" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Kataloh:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Krynica" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Kanał" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Vykładziena na" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Aŭtar" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Ad" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Padobnyja" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Taksama napisana ŭ" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Stvaralnik" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Kamentary" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Aktualizacyja..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Raździeł" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Addzieł" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Koš navinaŭ:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Dadaj elementy da hetaha košu z navinami, abraŭšy \"Skapijuj u koš navinaŭ\" " "u kantekstnym menu dla śpisu elementaŭ." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Kataloh pošuku:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Pamyłka zahadu hartača: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Startujecca: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Pamyłka aŭtaryzacyi" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Niemahčyma stvaryć kataloh padručnaj pamiaci \"%s\"!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Siońnia %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Učora %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%b %d %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%b %d %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" nie źjaŭlajecca pravilnym fajłam kanfihuracyi typu dałučeńnia!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Pamyłka źmieny nazvy %s na %s\n" #: ../src/export.c:417 ../src/export.c:419 #, fuzzy, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "Pamyłka XML pry čytańni padručnaha fajłu! Niemahčyma impartavać \"%s\"!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Pusty dakument! Dakument OPML \"%s\" nie pavinny być pustym pry impartavańni." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" nie źjaŭlajecca pravilnym dakumentam OPML! Liferea nia moža " "impartavać hety fajł!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Śpis impartavanych kanałaŭ" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Impartuj śpis kanałaŭ" #: ../src/export.c:481 msgid "Import" msgstr "Impartuj" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 #, fuzzy msgid "OPML Files" msgstr "Abiary fajł OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Pamyłka pry ekspartavańni śpisu kanałaŭ!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Śpis kanałaŭ ekspartavany!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Ekspartuj śpis kanałaŭ" #: ../src/export.c:498 msgid "Export" msgstr "Ekspartuj" #: ../src/feed.c:317 msgid "" "

Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

" msgstr "" "

Niemahčyma vyznačyć typ dla hetaha kanału! Pravier, ci krynica sapraŭdy " "viadzie da resursu ŭ adnym z padtrymanych farmataŭ syndykacyi!

Vyjście " "raźbiralnika XML:
" #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" aktualizavany..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" niedastupny" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "Spasyłka, jakuju ty pieradaŭ Liferea dziela padpiski, pakazvaje na " "sieciŭnuju staronku, i aŭtapošuk nie znajšoŭ kanałaŭ na hetaj staroncy. " "Moža, hetaja sieciŭnaja staronka nie padtrymvaje aŭtapošuku kanałaŭ." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "Pamyłka XML pry čytańni kanału! Niemahčyma zahruzić kanał \"%s\"!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Pusty dakument!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Niapravilny XML!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Krynica pakazvaje na dakument HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Niemahčyma vyznačyć typ kanału." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 #, fuzzy msgid "There are no unread items" msgstr "Nia niečytanych elementaŭ " #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr " STAN moža być `shown', `iconified' albo `hidden'" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "" #: ../src/liferea_application.c:283 #, fuzzy msgid "Show version information and exit" msgstr " --version Pakažy źviestki ab versii i vyjdzi" #: ../src/liferea_application.c:284 #, fuzzy msgid "Add a new subscription" msgstr "Novaja padpiska" #: ../src/liferea_application.c:284 msgid "uri" msgstr "" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 #, fuzzy msgid "Print debugging messages of all types" msgstr " --debug-all Pakazvaj debugavyja paviedamleńni ŭsich typaŭ" #: ../src/liferea_application.c:291 #, fuzzy msgid "Print debugging messages for the cache handling" msgstr "" " --debug-conf Pakazvaj debugavyja paviedamleńni dla pracy z " "kanfihuracyjaj" #: ../src/liferea_application.c:292 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "" " --debug-conf Pakazvaj debugavyja paviedamleńni dla pracy z " "kanfihuracyjaj" #: ../src/liferea_application.c:293 #, fuzzy msgid "Print debugging messages of the database handling" msgstr "" " --debug-conf Pakazvaj debugavyja paviedamleńni dla pracy z " "kanfihuracyjaj" #: ../src/liferea_application.c:294 #, fuzzy msgid "Print debugging messages of all GUI functions" msgstr "" " --debug-gui Pakazvaj debugavyja paviedamleńni dla ŭsich funkcyj GUI" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" #: ../src/liferea_application.c:296 #, fuzzy msgid "Print debugging messages of all network activity" msgstr "" " --debug-net Pakazvaj debugavyja paviedamleńni dla dostupu da sietki" #: ../src/liferea_application.c:297 #, fuzzy msgid "Print debugging messages of all parsing functions" msgstr "" " --debug-parsing Pakazvaj debugavyja paviedamleńni dla ŭsich funkcyj " "razboru" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/liferea_application.c:299 #, fuzzy msgid "Print debugging messages when entering/leaving functions" msgstr "" " --debug-trace Pakazvaj debugavyja paviedamleńni dla dunkcyj uvachodu/" "vychadu" #: ../src/liferea_application.c:300 #, fuzzy msgid "Print debugging messages of the feed update processing" msgstr "" " --debug-update Pakazvaj debugavyja paviedamleńni dla aktualizacyj kanałaŭ" #: ../src/liferea_application.c:301 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "" " --debug-conf Pakazvaj debugavyja paviedamleńni dla pracy z " "kanfihuracyjaj" #: ../src/liferea_application.c:302 #, fuzzy msgid "Print verbose debugging messages" msgstr " --debug-verbose Pakazvaj padrabiaznyja debugavyja paviedamleńni" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 #, fuzzy msgid "Print debugging messages for the given topic" msgstr "" " --debug- Pakazvaj debugavyja paviedamleńni dla peŭnaj temypamiaćciu" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "" #: ../src/net.c:466 #, fuzzy msgid "Unable to connect to remote host" msgstr "Pamyłka spałučeńnia z addalenym kamputaram" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "" #. http 4xx client error #: ../src/net.c:474 #, fuzzy msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Tabie nie dazvolena čytać hety kanał. Kali łaska, aktualizuj nazvu " "karystalnika j parol u dyjalohavym aknie ŭłaścivaściaŭ kanału." #: ../src/net.c:476 #, fuzzy msgid "Payment required" msgstr "Patrabujecca apłata" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Resurs nia znojdzieny" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Metad nie dazvoleny" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Nie pryjmalna" #: ../src/net.c:481 #, fuzzy msgid "Proxy authentication required" msgstr "Patrabujecca aŭtaryzacyja dla proxy" #: ../src/net.c:482 #, fuzzy msgid "Request timed out" msgstr "Skončyŭsia termin čakańnia zapytu" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Źnik. Resurs nie isnuje. Kali łaska, adpišysia!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Kanał niedastupny: Server vymahaje niepadtrymanaje pieranakiravańnie!" #: ../src/net.c:492 msgid "Client Error" msgstr "Pamyłka klijenta" #: ../src/net.c:494 msgid "Server Error" msgstr "Pamyłka servera" #: ../src/net.c:496 #, fuzzy msgid "An unknown networking error happened!" msgstr "(adbyłasia nieviadomaja sietkavaja pamyłka)" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Element" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "źmiaščaje" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "nie źmiaščaje" #: ../src/rule.c:175 msgid "Item title" msgstr "Zahałovak elementu" #: ../src/rule.c:176 msgid "Item body" msgstr "Cieła elementu" #: ../src/rule.c:177 msgid "Read status" msgstr "Stan pračytanaści" #: ../src/rule.c:177 msgid "is unread" msgstr "nie pračytany" #: ../src/rule.c:177 msgid "is read" msgstr "pračytany" #: ../src/rule.c:178 msgid "Flag status" msgstr "Stan ściahu" #: ../src/rule.c:178 msgid "is flagged" msgstr "zaznačany" #: ../src/rule.c:178 msgid "is unflagged" msgstr "nie zaznačany" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "ułučany" #: ../src/rule.c:179 msgid "not included" msgstr "nia ŭłučany" #: ../src/rule.c:180 #, fuzzy msgid "Category" msgstr "Stvaralnik" #: ../src/rule.c:180 #, fuzzy msgid "is set" msgstr "pračytany" #: ../src/rule.c:180 msgid "is not set" msgstr "" #: ../src/rule.c:181 msgid "Feed title" msgstr "Zahałovak kanału" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Padpiska \"%s\" užo była aktualizavanaja!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "Padpiska \"%s\" skončyła pracu. Liferea bolš nia budzie jaje aktualizoŭvać!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Aktualizacyja ikony kanału dla \"%s\"" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Pry čytańni hetaj padpiski ŭźnikli prablemy. Pravier adras spasyłki i " "vyjście ŭ kansoli." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "Spasyłka na \"%s\" niadaŭna źmianiłasia i była aktualizavanaja" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" skončyŭ pracu. Liferea bolš nia budzie aktualizoŭvać jaho!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" nie źmianiŭsia ad apošniaj aktualizacyi" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Aktualizacyja \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Pamyłka adčynieńnia časovaha fajłu %s dziela filtracyi!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s vyjšaŭ sa statusam %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Pamyłka: Niemahčyma adčynić trubu \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Pamyłka: Niemahčyma adčynić fajł \"%s\"" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Pamyłka: Fajł \"%s\" nie isnuje" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Novy kataloh pošuku" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Byli jašče pamyłki. Vyjście abatnutaje!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "Raźbiralnik XML: Niemahčyma razabrać dakument:\n" #: ../src/ui/enclosure_list_view.c:175 #, fuzzy msgid "Attachments" msgstr "kamentary" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr "" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Abiary fajł" #: ../src/ui/enclosure_list_view.c:444 #, fuzzy, c-format msgid "File Extension .%s" msgstr "Pašyreńnie fajłu .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Niemahčyma znajści fajł pikselnaj mapy: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d novy)" msgstr[1] " (%d novyja)" msgstr[2] " (%d novych)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d niepračytany%s" msgstr[1] "%d niepračytanyja%s" msgstr[2] "%d niepračytanych%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Temy dapamohi" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Chutki ahlad" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "Pytańni j adkazy" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Admysłovaje" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Uviadzi nazvu karystalnika j parol dla \"%s\" (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Nieviadomaja krynica" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "Anuluj _usie" #: ../src/ui/ui_common.c:211 #, fuzzy msgid "All Files" msgstr "_Lakalny fajł" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea u adłučanym režymie. Aktualizacyja niemahčymaja." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Šukaj va ŭsich kanałach" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Zaznač usie jak pračytanyja" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Ty ŭpeŭnieny, što chočaš vydalić \"%s\"?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Hety element nia maje akreślenaje spasyłki!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Biaz nazvy ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Zahałovak" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Ty pavinny abrać kanał, dla jakoha vydalić elementy!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Elementy nie zaznačanyja" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "" #: ../src/ui/popup_menu.c:111 #, fuzzy msgid "_Open In Browser" msgstr "_Adčyni ŭ hartačy" #: ../src/ui/popup_menu.c:115 #, fuzzy msgid "Open In _External Browser" msgstr "Nałady vonkavaha hartača" #: ../src/ui/popup_menu.c:139 #, fuzzy msgid "Copy to News Bin" msgstr "/Skapijuj u koš navinaŭ/%s" #: ../src/ui/popup_menu.c:147 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "/_Zrabi zakładku dla spasyłki na %s" #: ../src/ui/popup_menu.c:153 #, fuzzy msgid "Copy Item _Location" msgstr "/_Skapijuj adras spasyłki" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Źmiani _stan pračytanaści" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Źmiani ś_ciah elementu" #: ../src/ui/popup_menu.c:170 #, fuzzy msgid "R_emove Item" msgstr "/_Vydal element" #: ../src/ui/popup_menu.c:200 #, fuzzy msgid "Open Enclosure..." msgstr "/Adčyni dałučeńnie..." #: ../src/ui/popup_menu.c:201 #, fuzzy msgid "Save As..." msgstr "/Zapišy jak..." #: ../src/ui/popup_menu.c:202 #, fuzzy msgid "Copy Link Location" msgstr "/_Skapijuj adras spasyłki" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Aktualizuj" #: ../src/ui/popup_menu.c:282 #, fuzzy msgid "_Update Folder" msgstr "/_Aktualizuj kataloh" #: ../src/ui/popup_menu.c:292 #, fuzzy msgid "New _Subscription..." msgstr "_Novaja padpiska..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Novy _kataloh..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Novy kataloh _pošuku..." #: ../src/ui/popup_menu.c:299 #, fuzzy msgid "New S_ource..." msgstr "Novaja _krynica..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Novy _koš navinaŭ..." #: ../src/ui/popup_menu.c:303 #, fuzzy msgid "_New" msgstr "/_Novy" #: ../src/ui/popup_menu.c:312 #, fuzzy msgid "Sort Feeds" msgstr "Impartuj śpis kanałaŭ" #: ../src/ui/popup_menu.c:320 #, fuzzy msgid "_Mark All As Read" msgstr "/_Zaznač usie jak pračytanyja" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 #, fuzzy msgid "_Delete" msgstr "/_Vydal" #: ../src/ui/popup_menu.c:336 #, fuzzy msgid "_Properties" msgstr "_Ułaścivaści..." #: ../src/ui/popup_menu.c:343 #, fuzzy msgid "Convert To Local Subscriptions..." msgstr "_Novaja padpiska..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "zmoŭčany dla GNOME'a" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Tekst pad ikonami" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Tekst pa bakoch ikonaŭ" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Tolki ikony" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Tolki tekst" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "chvilin" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "hadzin" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dzion" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Prabieł" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Prabieł" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Prabieł" #: ../src/ui/preferences_dialog.c:112 #, fuzzy msgid "Normal View" msgstr "_Zvyčajny vyhlad" #: ../src/ui/preferences_dialog.c:113 #, fuzzy msgid "Wide View" msgstr "Š_yroki vyhlad" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Combined View" msgstr "_Kambinavany vyhlad" #: ../src/ui/preferences_dialog.c:476 #, fuzzy msgid "Default Browser" msgstr "Zmoŭčany hartač GNOME'a" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Admysłovy" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Typ" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Prahrama" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Vydaleńnie elementu" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Ty ŭpeŭnieny, što chočaš vydalić \"%s\" i jaho źmieściva?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Ty ŭpeŭnieny, što chočaš vydalić \"%s\"?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Paćvierdžańnie vydaleńnia" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Paćvierdžańnie vydaleńnia" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "Vydaviec hetaha kanału raić intervał aktualizacyi ŭ %d chvilinu." msgstr[1] "Vydaviec hetaha kanału raić intervał aktualizacyi ŭ %d chvilin." msgstr[2] "Vydaviec hetaha kanału raić intervał aktualizacyi ŭ %d chvilin." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Dla hetaha kanału nie akreśleny zmoŭčany intervał aktualizacyi." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Biaz nazvy" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Novaja padpiska" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Abiary fajł OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Novaja padpiska OPML" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Typy krynic dla śpisu kanałaŭ nia znojdzienyja!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Typ krynicy" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Pamyłka ŭruchamleńnia kontu na Google Reader'y!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Hartač RSS" #: ../src/webkit/liferea_web_view.c:175 #, fuzzy msgid "Open Link In _Tab" msgstr "/Adčyni spasyłku ŭ _kartcy" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "/_Adčyni spasyłku ŭ hartačy" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "/_Adčyni spasyłku ŭ hartačy" #: ../src/webkit/liferea_web_view.c:183 #, fuzzy, c-format msgid "_Bookmark Link at %s" msgstr "/_Zrabi zakładku dla spasyłki na %s" #: ../src/webkit/liferea_web_view.c:190 #, fuzzy msgid "_Copy Link Location" msgstr "/_Skapijuj adras spasyłki" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "_Vyhlad" #: ../src/webkit/liferea_web_view.c:194 #, fuzzy msgid "_Copy Image Location" msgstr "/_Skapijuj adras spasyłki" #: ../src/webkit/liferea_web_view.c:197 #, fuzzy msgid "S_ave Link As" msgstr "/Zapišy jak..." #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "" #: ../src/webkit/liferea_web_view.c:207 #, fuzzy msgid "_Subscribe..." msgstr "/_Padpišysia..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "Pa_vialič pamier tekstu" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "Pa_mienš pamier tekstu" #: ../glade/about.ui.h:1 msgid "About" msgstr "Ab prahramie" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea - heta ahrehatar navinaŭ dziela GTK+" #: ../glade/about.ui.h:3 #, fuzzy msgid "Liferea Homepage" msgstr "Hartač RSS Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Aŭtaryzacyja" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Nazva karystalnika:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Parol:" #: ../glade/enclosure_handler.ui.h:1 #, fuzzy msgid "Open Enclosure" msgstr "/Adčyni dałučeńnie..." #: ../glade/enclosure_handler.ui.h:2 #, fuzzy msgid "Open an enclosure of type:" msgstr "Zahruzka dałučeńnia typu:" #: ../glade/enclosure_handler.ui.h:3 #, fuzzy msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Što Liferea musić zrabić z hetym dałučeńniem? Uviadzi zahad, jaki ty chočaš " "vykanać, nižej. Zahružany fajł budzie pieradadzieny zahadu jak arhument:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Ahladaj" #: ../glade/enclosure_handler.ui.h:5 #, fuzzy msgid "_Do this automatically for enclosures like this from now on." msgstr "_Rabi heta aŭtamatyčna nadalej dla padobnych fajłaŭ." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Dadaj kont na Google Reader'y" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Uviadzi nałady tvajho kontu na Google Reader'y." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Parol" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_Nazva karystalnika (Email)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Pakažy zahałoŭki" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Zahałoŭki" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Zaznač usie jak pračytanyja" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Zaznač usie jak pračytanyja" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Novy kataloh" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "Nazva _katalohu:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Stvary koš navinaŭ" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Nazva dla koša navinaŭ:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Krynica kanału" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Typ krynicy:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_Spasyłka" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Zahad" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Lakalny fajł" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Abiary fajł..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Krynica:" #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Zahruzka / Kancavaja apracoŭka" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "_Nie ŭžyvaj proxy dziela zahruzki" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Užyj _filter kavertacyi" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea moža vykarystoŭvać vonkavyja filtry kanertacyi, kab mahčy čytać " "kanały j katalohi ŭ niepadtrymanym farmacie. Hladzi padrabiaźniejšyja " "źviestki ŭ dakumentacyi." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Kanvertuj _praz:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Vybar krynicy" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Abiary typ krynicy, jakuju chočaš dadać..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Dadaj OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Akreśl lakalny fajł albo spasyłku na pravilny śpis kanałaŭ u farmacie OPML." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Adras" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Abiary fajł" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Pieravahi Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "Zmoŭčanaja _kolkaść elementaŭ na kanał dziela zapisu:" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "Feed Update Settings" msgstr "Aktualizacyja kanału" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Uvaha: Kali łaska, nie zabudźsia akreślić sensoŭny termin pamiž " "aktualizacyjami. Zvyčajna apytvańnie kanałaŭ čaściej za raz na hadzinu " "źjaŭlajecca marnavańniem trafiku." #: ../glade/prefs.ui.h:8 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Novaja padpiska" #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Zmoŭčany _intervał aktualizacyi kanału:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Kanały" #: ../glade/prefs.ui.h:12 #, fuzzy msgid "Folder Display Settings" msgstr "Nałady pakazu katalohaŭ" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "_Pakazvaj elementy dla ŭsich padkanałaŭ pry zaznačeńni katalohu." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "_Schavaj pračytanyja elementy." #: ../glade/prefs.ui.h:15 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Ikony kanałaŭ" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Aktualizuj zaraz usie ikony kanałaŭ" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Katalohi" #: ../glade/prefs.ui.h:18 #, fuzzy msgid "Reading Headlines" msgstr "niečytanyja zahałoŭki" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "_Pierachodź pa artykułach z:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:21 #, fuzzy msgid "Web Integration" msgstr "Aryjentacyja" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "Ź_miaści zakładki na" #: ../glade/prefs.ui.h:24 #, fuzzy msgid "Internal Browser Settings" msgstr "Nałady ŭnutranaha hartača" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Adčyniaj spasyłki ŭ _vaknie Liferea." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Adklučy Javascript." #: ../glade/prefs.ui.h:27 #, fuzzy msgid "_Enable browser plugins." msgstr "Nałady vonkavaha hartača" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "External Browser Settings" msgstr "Nałady vonkavaha hartača" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Hartač:" #: ../glade/prefs.ui.h:30 #, fuzzy msgid "_Manual:" msgstr "Admysłovy" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Hartač" #: ../glade/prefs.ui.h:34 #, fuzzy msgid "Toolbar Settings" msgstr "_Etykiety knopak z paneli pryładździa:" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "" #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "_Etykiety knopak z paneli pryładździa:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Aŭtamatyčna vyznač (GNOME albo asiarodździe)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Biaz proxy" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Admysłovaje akreśleńnie:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Host proxy:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Port proxy:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Užyj _aŭtaryzacyju proxy" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "_Nazva karystalnika proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Pa_rol proxy:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Nałady pakazu katalohaŭ" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 #, fuzzy msgid "Downloading Enclosures" msgstr "Zahruzka dałučeńnia" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Zahružaj z dapamohaj" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 #, fuzzy msgid "Opening Enclosures" msgstr "/Adčyni dałučeńnie..." #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Dałučeńni" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Ułaścivaści padpiski" #: ../glade/properties.ui.h:2 #, fuzzy msgid "Feed Name" msgstr "_Nazva kanału:" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Nazva kanału:" #: ../glade/properties.ui.h:4 #, fuzzy msgid "Update Interval" msgstr "Manitor aktualizacyj" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Užyj hlabalny zmoŭčany intervał aktualizacyi." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_Admysłovy intervał aktualizacyi kanału" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Nie aktualizuj aŭtamatyčna hety kanał." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Vydaviec hetaha kanału raić intervał aktualizacyi ŭ %d chvilin." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Ahulnaje" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea moža vykarystoŭvać vonkavyja filtry kanertacyi, kab mahčy čytać " "kanały j katalohi ŭ niepadtrymanym farmacie. Hladzi padrabiaźniejšyja " "źviestki ŭ dakumentacyi." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Nałada padručnaj pamiaci akreślaje, ci zapisvajecca źmieściva kanału pry " "vychadzie Liferea. Zaznačanyja elementy zaŭsiody zapisvajucca ŭ padručnaj " "pamiaci." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "_Zmoŭčanyja nałady padručnaj pamiaci" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Adklučy padručnuju pamiać" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Nieabmiežavanaja padručnaja pamiać" #: ../glade/properties.ui.h:27 #, fuzzy msgid "_Number of items to save:" msgstr "Zmoŭčanaja _kolkaść elementaŭ na kanał dziela zapisu:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Archiŭ" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Užyj _aŭtaryzacyju HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Zahruzi" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_Aŭtamatyčna zahružaj usie dałučeńni dla hetaha kanału." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Aŭtamatyčna zahružaj spasyłku elementu ŭ skanfihuravanym hartačy pry vybary " "artykułaŭ." #: ../glade/properties.ui.h:37 #, fuzzy msgid "Ignore _comment feeds for this subscription." msgstr "Adčyniaje dyjalohavaje vakno ŭłaścivaściaŭ dla abranaje padpiski." #: ../glade/properties.ui.h:38 #, fuzzy msgid "_Mark downloaded items as read." msgstr "_Zaznač abranaje jak pračytanaje" #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Admysłovaje" #: ../glade/reedah_source.ui.h:1 #, fuzzy msgid "Add Reedah Account" msgstr "Dadaj kont na Google Reader'y" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Uviadzi nałady tvajho kontu na Google Reader'y." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Pieranazavi" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Novaja nazva:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Ułaścivaści katalohu pošuku" #: ../glade/search_folder.ui.h:2 #, fuzzy msgid "Search _Name:" msgstr "_Nazva kanału:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "" #: ../glade/search.ui.h:1 #, fuzzy msgid "Advanced Search" msgstr "Admysłovaje" #: ../glade/search.ui.h:2 #, fuzzy msgid "_Search Folder..." msgstr "Kataloh pošuku" #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Šukaj va ŭsich kanałach" #: ../glade/simple_search.ui.h:2 #, fuzzy msgid "_Advanced..." msgstr "Admysłovaje..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Pačynaje pošuk akreślenaha tekstu va ŭsich kanałach. Vynik pošuku źjavicca ŭ " "śpisie elementaŭ." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Šukaj:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Uviadzi radok pošuku, jaki Liferea musić šukać albo ŭ zahaloŭkach elementaŭ, " "albo ŭ ichnym źmieścivie." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Admysłovaje..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Uviadzi adras web-placoŭki, kab užyć aŭtamatyčny pošuk kanałaŭ, albo, kali " "ty viedaješ, dakładny adras kanału." #: ../glade/theoldreader_source.ui.h:1 #, fuzzy msgid "Add TheOldReader Account" msgstr "Dadaj kont na Google Reader'y" #: ../glade/theoldreader_source.ui.h:2 #, fuzzy msgid "Please enter your TheOldReader account settings." msgstr "Uviadzi nałady tvajho kontu na Google Reader'y." #: ../glade/ttrss_source.ui.h:1 #, fuzzy msgid "Add Tiny Tiny RSS Account" msgstr "Dadaj kont na Bloglines" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "Uviadzi nałady tvajho kontu na Bloglines." #: ../glade/ttrss_source.ui.h:3 #, fuzzy msgid "_Server URL" msgstr "Pamyłka servera" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Nazva karystalnika" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Manitor aktualizacyj" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "Anuluj _usie" #: ../glade/update_monitor.ui.h:3 #, fuzzy msgid "Pending Requests" msgstr "Zapyty ŭ čakańni" #: ../glade/update_monitor.ui.h:4 #, fuzzy msgid "Downloading Now" msgstr "Zahružajecca zaraz" #~ msgid "_Subscriptions" #~ msgstr "_Padpiski" #~ msgid "Update _All" #~ msgstr "Aktualizuj _usie" #, fuzzy #~ msgid "Updates all subscriptions." #~ msgstr "Novaja padpiska" #~ msgid "Mark All As _Read" #~ msgstr "Paznač usie jak _čytanyja" #~ msgid "Marks read every item of every subscription." #~ msgstr "Paznačaje čytanym kožny element z kožnaje padpiski." #~ msgid "_Import Feed List..." #~ msgstr "_Impartuj śpis kanałaŭ..." #~ msgid "Imports an OPML feed list." #~ msgstr "Impartuje śpis kanałaŭ u farmacie OPML." #~ msgid "_Export Feed List..." #~ msgstr "_Ekspartuj śpis kanałaŭ..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Ekspartuje śpis kanałaŭ u farmacie OPML." #~ msgid "_Quit" #~ msgstr "_Vyjdzi" #~ msgid "_Feed" #~ msgstr "Kanał" #~ msgid "Remove _All Items" #~ msgstr "Vydal _usie elementy" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Vydalaje ŭsie elementy z dziejna abranaha kanału." #~ msgid "_Item" #~ msgstr "_Element" #, fuzzy #~ msgid "Next Item" #~ msgstr "_Nastupny niečytany element" #~ msgid "_Next Unread Item" #~ msgstr "_Nastupny niečytany element" #~ msgid "_View" #~ msgstr "_Vyhlad" #~ msgid "Increases the text size of the item view." #~ msgstr "Pavialičvaje pamier tekstu ŭ vyhladzie elementaŭ." #~ msgid "Decreases the text size of the item view." #~ msgstr "Pamianšaje pamier tekstu ŭ vyhladzie elementaŭ." #~ msgid "_Tools" #~ msgstr "_Pryładździe" #~ msgid "_Update Monitor" #~ msgstr "_Manitor aktualizacyj" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "" #~ "Pakažy śpis usich kanałaŭ, što dziejna znachdziacca ŭ čarzie na " #~ "aktualizacyju" #~ msgid "_Preferences" #~ msgstr "_Nałady" #~ msgid "Edit Preferences." #~ msgstr "Redahuj nałady." #, fuzzy #~ msgid "S_earch" #~ msgstr "_Šukaj" #~ msgid "Search All Feeds..." #~ msgstr "Šukaj va ŭsich kanałach..." #~ msgid "Show the search dialog." #~ msgstr "Pakažy dyjalohavaje vakno pošuku." #~ msgid "_Help" #~ msgstr "_Dapamoha" #~ msgid "_Contents" #~ msgstr "_Źmieściva" #~ msgid "View help for this application." #~ msgstr "Pakažy dapamohu dla hetaje aplikacyi." #~ msgid "_Quick Reference" #~ msgstr "_Chutki ahlad" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Pakažy śpis usich skarotaŭ Liferea." #~ msgid "_FAQ" #~ msgstr "_Pytańni j adkazy" #~ msgid "View the FAQ for this application." #~ msgstr "Pakažy Pytańni j Adkazy dla hetaje aplikacyi." #~ msgid "_About" #~ msgstr "_Ab prahramie" #~ msgid "Shows an about dialog." #~ msgstr "Pakazvaje dyjalohavaje vakno sa źviestkami ab prahramie." #~ msgid "_Normal View" #~ msgstr "_Zvyčajny vyhlad" #~ msgid "Set view mode to mail client mode." #~ msgstr "Vyznač režym ahladu paštovaha klijenta." #~ msgid "_Wide View" #~ msgstr "Š_yroki vyhlad" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Vyznač režym ahladu z tryma vertykalnymi panelami." #~ msgid "_Combined View" #~ msgstr "_Kambinavany vyhlad" #~ msgid "Set view mode to two pane mode." #~ msgstr "Vyznač režym ahladu z dvuma panelami." #, fuzzy #~ msgid "Hide feeds with no unread items." #~ msgstr "Nia niečytanych elementaŭ " #~ msgid "_New Subscription..." #~ msgstr "_Novaja padpiska..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Dadaje padpisku ŭ śpis kanałaŭ." #~ msgid "Adds a folder to the feed list." #~ msgstr "Dadaje kataloh u śpis kanałaŭ." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Dadaje novy kataloh pošuku ŭ śpis kanałaŭ." #~ msgid "New _Source..." #~ msgstr "Novaja _krynica..." #~ msgid "Adds a new feed list source." #~ msgstr "Dadaje novuju krynicu śpisu kanałaŭ." #~ msgid "Adds a new news bin." #~ msgstr "Dadaje novy koš navinaŭ." #, fuzzy #~ msgid "_Mark Items Read" #~ msgstr "/_Zaznač jak pračytanaje" #, fuzzy #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Zaznačaje ŭsie elementy abranaje padpiski albo ŭsich padpisak abranaha " #~ "katalohu jak pračytanyja." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Aktualizuje abranuju padpisku albo ŭsie padpiski z abranaha katalohu." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Adčyniaje dyjalohavaje vakno ŭłaścivaściaŭ dla abranaje padpiski." #~ msgid "_Remove" #~ msgstr "_Vydal" #~ msgid "Removes the selected subscription." #~ msgstr "Vydalaje abranuju padpisku." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Źmianiaje stan pračytanaści abranaha elementu." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Źmianiaje stan ściahu dla abranaha elementu." #~ msgid "R_emove" #~ msgstr "_Vydal" #~ msgid "Removes the selected item." #~ msgstr "Vydalaje abrany element." #, fuzzy #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Adčyniaja spasyłku elementu ŭ skanfihuravanym hartačy." #, fuzzy #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Adčyniaja spasyłku elementu ŭ skanfihuravanym hartačy." #, fuzzy #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Adčyniaja spasyłku elementu ŭ skanfihuravanym hartačy." #~ msgid "_Work Offline" #~ msgstr "_Pracuj adłučana" #, fuzzy #~ msgid "_Update All" #~ msgstr "/_Aktualizuj usie" #, fuzzy #~ msgid "_Show Liferea" #~ msgstr "Liferea" #, fuzzy #~ msgid "InoReader" #~ msgstr "Google Reader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Uvaha: Nazva karystalnika j parol buduć zachavanyja ŭ fajle śpisu " #~ "kanałaŭ, niezašyfravanyja." #, fuzzy #~ msgid "Add InoReader Account" #~ msgstr "Dadaj kont na Google Reader'y" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "Uviadzi nałady tvajho kontu na Google Reader'y." #~ msgid "normal view" #~ msgstr "zvyčajny vyhlad" #~ msgid "wide view" #~ msgstr "šyroki vyhlad" #~ msgid "combined view" #~ msgstr "kambinavany vyhlad" #, fuzzy #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea - Čytač kanałaŭ dla Linuksa" #, fuzzy #~ msgid "_Open Link In Browser" #~ msgstr "/_Adčyni spasyłku ŭ hartačy" #, fuzzy #~ msgid "_Open Link In External Browser" #~ msgstr "/_Adčyni spasyłku ŭ hartačy" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Stvary kanał pošukavika" #~ msgid "enter any search string you want" #~ msgstr "uviadzi luby radok dziela pošuku" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "Maksymalnaja _kolkaść vynikovych elementaŭ:" #, fuzzy #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Uvaha: Liferea zhieneruje padpisku na kanał, jakaja vykarystoŭvajecca " #~ "dziela zapytańnia vynikaŭ ad pošukavika na akreśleny radok pošuku. Ty " #~ "možaš pakinuć hety kanał i aktualizoŭvać jaho tak sama, jak i inšyja " #~ "padpiski. " #~ msgid "Liferea is now online" #~ msgstr "Liferea ciapier spałučany" #~ msgid "Work Offline" #~ msgstr "Pracuj adłučana" #~ msgid "Liferea is now offline" #~ msgstr "Liferea ciapier adłučany" #~ msgid "Work Online" #~ msgstr "Pracuj spałučana" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Hetaja opcyja adklučaje aktualizacyi padpisak." #~ msgid "Browser default" #~ msgstr "Zmoŭčanaje dla hartača" #~ msgid "Existing window" #~ msgstr "Najaŭnaje vakno" #~ msgid "New window" #~ msgstr "Novaje vakno" #~ msgid "New tab" #~ msgstr "Novaja kartka" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Hartač RSS" #~ msgid "Online/Offline Button" #~ msgstr "Knopka źmieny spałučanaści" #~ msgid "_Open link in:" #~ msgstr "_Adčyni spasyłku ŭ:" #~ msgid "No comments yet." #~ msgstr "Jašče niama kamentaroŭ." #~ msgid "Refresh" #~ msgstr "Aktualizuj" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - Čytač kanałaŭ dla Linuksa" #, fuzzy #~ msgid "" #~ "

Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

You can add new subscriptions

  • From main menu " #~ "'Subscription' -> 'New Subscription'
  • By dropping feed links " #~ "into the subscription list
  • By right clicking links and choosing " #~ "'Subscribe' within Liferea

" #~ msgstr "" #~ "

Ciabie vitaje Liferea, ahrehatar navinaŭ dla sieciŭnych " #~ "navinnych kanałaŭ.

Levaja panel źmiaščaje śpis tvaich padpisak. Kab " #~ "dadać padpisku, abiary Kanały -> Novaja padpiska. Kab čytać zahałoŭki " #~ "kanału, abiary jaho ŭ spisie kanałaŭ, i tady zahałoŭki buduć pakazanyja ŭ " #~ "pravaj paneli.

" #, fuzzy #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "_Zakančvaj pracu zamiest minimizacyi ŭ ikonu traju." #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d novy element" #~ msgstr[1] "%d novyja elementy" #~ msgstr[2] "%d novych elementaŭ" #~ msgid "No new items" #~ msgstr "Niama novych elementaŭ" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d niepračytany element" #~ msgstr[1] "" #~ "%s\n" #~ "%d niepračytanyja elementy" #~ msgstr[2] "" #~ "%s\n" #~ "%d niepračytanych elementaŭ" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Niama niepračytanych elementaŭ" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Niapravilny kanał Atom: nieviadomy aŭtar" #, fuzzy #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Intehruj śpis kanałaŭ z kontam na Google Reader'y. Liferea pakaža tvaju " #~ "padpisku na Google Reader'y ŭ vyhladzie abaronienaha ad źmienaŭ dreva ŭ " #~ "śpisie kanałaŭ." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Intehruj blogroll'y albo Planet'y z tvaim śpisam kanałaŭ. Liferea budzie " #~ "aŭtamatyčna dadavać i vydalać kanały zhodna sa źmienami kryničnaha " #~ "dakumentu OPML." #, fuzzy #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Intehruj śpis kanałaŭ z kontam na Google Reader'y. Liferea pakaža tvaju " #~ "padpisku na Google Reader'y ŭ vyhladzie abaronienaha ad źmienaŭ dreva ŭ " #~ "śpisie kanałaŭ." #~ msgid "This feed does not exist anymore!" #~ msgstr "Hety kanał bolš nie isnuje!" #~ msgid "This news entry has no headline" #~ msgstr "Hety element navinaŭ nia maje zahałoŭka" #~ msgid "Visit" #~ msgstr "Naviedaj" #~ msgid "Open feed" #~ msgstr "Adčyni kanał" #~ msgid "Feed Update" #~ msgstr "Aktualizacyja kanału" #~ msgid "Show details" #~ msgstr "Pakažy padrabiaznaści" #, fuzzy #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "Adčyniaje dyjalohavaje vakno ŭłaścivaściaŭ dla abranaje padpiski." #, fuzzy #~ msgid "Notification Settings" #~ msgstr "Nałady nahadvańnia" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Pakažy _padručnaje vakno z novymi zahałoŭkami." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Pakazvaj _ikonu stanu ŭ abšary nahadvańniaŭ (systemnym trai)." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Pakazvaj _kolkaść novych elementaŭ na ikonie ŭ trai." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "_Zakančvaj pracu zamiest minimizacyi ŭ ikonu traju." #~ msgid "Download and view feeds" #~ msgstr "Atrymvaj i ahladaj kanały RSS" #~ msgid "You may want to validate the feed using" #~ msgstr "Ty možaš pravieryć kanał z dapamohaj" #, fuzzy #~ msgid "Launch Item In _Tab" #~ msgstr "/Adčyni element u _kartcy" #, fuzzy #~ msgid "_Launch Item In Browser" #~ msgstr "/_Adčyni element u _hartačy" #, fuzzy #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "/Skapijuj adras elementu ŭ bufer" #~ msgid "flag" #~ msgstr "ściah" #~ msgid "bookmark" #~ msgstr "zakładka" #~ msgid "comments" #~ msgstr "kamentary" #, fuzzy #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Zahruzka dałučeńnia skončanaja: \"%s\"" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Zahruzka dałučeńnia skončanaja: \"%s\"" #, fuzzy #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Hetaja versija Liferea vykarystoŭvaje padručnuju pamiać u novym farmacie, " #~ "tamu tvaje padručnyja fajły byli skanvertavanyja. Padručnyja fajły versii " #~ "1.2 u ~/.liferea_1.2 nie byli vydalenyja aŭtamatyčna. Vydal hety kataloh " #~ "samastojna, jak tolki ŭpeŭniśsia ŭ paśpiachovaści mihracyi!" #, fuzzy #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Zahruzka dałučeńnia skončanaja: \"%s\"" #, fuzzy #~ msgid "Download finished." #~ msgstr "_Zahružaj z dapamohaj" #~ msgid "Choose download directory" #~ msgstr "Abiary kataloh dziela zahruzak" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Admysłovy:\n" #~ "(%s dziela adrasu)" #~ msgid "_Save downloads in" #~ msgstr "_Zapisvaj zahružanaje ŭ" #, fuzzy #~ msgid "_Service Name" #~ msgstr "Nazva skryptu" #~ msgid "Downloading Enclosure" #~ msgstr "Zahruzka dałučeńnia" #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Pierskokvaje da nastupnaha niečytanaha elementu. Kali treba, abiraje " #~ "nastupny kanał ź niečytanymi elementami." #, fuzzy #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "" #~ " --debug- Pakazvaj debugavyja paviedamleńni dla peŭnaj " #~ "temypamiaćciu" #~ msgid "Liferea seems to be running already!" #~ msgstr "Liferea ŭžo pracuje!" #~ msgid "Update status" #~ msgstr "Stan aktualizavanaści" #~ msgid "was updated" #~ msgstr "byŭ aktualizavany" #~ msgid "was not updated" #~ msgstr "nia byŭ aktualizavany" #~ msgid "The orientation of the tray." #~ msgstr "Aryjentacyja traju." #~ msgid "%s" #~ msgstr "%s" #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "_Script Manager" #~ msgstr "_Kiraŭnik skryptoŭ" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Dazvalaje skanfihuravać i adredahavać skrypty LUA" #~ msgid "Search With ..." #~ msgstr "Šukaj u..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d vynik pošuku dla \"%s\"" #~ msgstr[1] "%d vyniki pošuku dla \"%s\"" #~ msgstr[2] "%d vynikaŭ pošuku dla \"%s\"" #, fuzzy #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d vynik pošuku dla \"%s\"" #~ msgstr[1] "%d vyniki pošuku dla \"%s\"" #~ msgstr[2] "%d vynikaŭ pošuku dla \"%s\"" #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "Śpis elementaŭ ciapier źmiaščaje ŭsie elementy, što adpaviadajuć " #~ "akreślenamu šablonu pošuku. Kali ty chočaš stała zachavać hety vynik " #~ "pošuku, možaš kliknuć knopku \"Kataloh pošuku\" ŭ dyjalohavym aknie " #~ "pošuku, i tady Liferea dadaść kataloh pošuku ŭ tvoj śpis kanałaŭ." #, fuzzy #~ msgid "Count" #~ msgstr "Kamentary" #~ msgid "You have to select a feed entry" #~ msgstr "Ty pavinny abrać zapis kanału" #~ msgid "(empty)" #~ msgstr "(pusty)" #~ msgid "_Properties..." #~ msgstr "_Ułaścivaści..." #~ msgid "Update out-dated feeds" #~ msgstr "Aktualizuj nieaktualnyja kanały" #~ msgid "Force update of all feeds" #~ msgstr "Prymusova aktualizuj usie kanały" #~ msgid "No feed update at all" #~ msgstr "Naohuł biez aktualizacyj kanału" #~ msgid "startup" #~ msgstr "pačatak" #~ msgid "feed updated" #~ msgstr "kanał aktualizavany" #~ msgid "feed added" #~ msgstr "kanał dadadzieny" #~ msgid "item selected" #~ msgstr "element abrany" #~ msgid "feed selected" #~ msgstr "kanał abrany" #~ msgid "item unselected" #~ msgstr "z elementu źniaty vybar" #~ msgid "feed unselected" #~ msgstr "z kanału źniaty vybar" #~ msgid "shutdown" #~ msgstr "vyklučeńnie" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Padtrymka skryptavańnia adsutničaje!" #~ msgid "Script Name" #~ msgstr "Nazva skryptu" #~ msgid "No script selected!" #~ msgstr "Skrypt nie abrany!" #~ msgid "Create a new search feed." #~ msgstr "Stvary novy kanał pošuku." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea nia moža pakazać źmieściva hetaha elementu." #~ msgid "

View this item's content.

" #~ msgstr "

Pakažy źmieściva hetaha elementu.

" #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "Intehruj śpis kanałaŭ z kontam na Bloglines. Liferea pakaža tvaju " #~ "padpisku na Bloglines u vyhladzie abaronienaha ad źmienaŭ dreva ŭ śpisie " #~ "kanałaŭ." #~ msgid "feedlist.opml" #~ msgstr "feedlist.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s maje %d novy / aktualizavany zahałovak\n" #~ msgstr[1] "%s maje %d novyja / aktualizavanyja zahałoŭki\n" #~ msgstr[2] "%s maje %d novych / aktualizavanych zahałoŭkaŭ\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Hook" #~ msgstr "Kruk" #~ msgid "Registered Scripts" #~ msgstr "Zarehistravanyja skrypty" #~ msgid "Script Code" #~ msgstr "Kod skryptu" #~ msgid "text/plain" #~ msgstr "text/plain" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Hetaja opcyja moža pryvieści da zaŭvažnych zatrymak pry zahruzcy " #~ "katalohaŭ, što źmiaščajuć šmat kanałaŭ." #~ msgid "Downloading Enclosures" #~ msgstr "Zahruzka dałučeńniaŭ" #~ msgid "Feed Cache Handling" #~ msgstr "Praca z padručnaj pamiaćciu kanału" #~ msgid "Feed Name" #~ msgstr "Nazva kanału" #~ msgid "Feed Update Settings" #~ msgstr "Nałady aktualizacyi kanału" #~ msgid "HTTP Proxy Server" #~ msgstr "Proxy-server HTTP" #~ msgid "Opening Enclosures" #~ msgstr "Adčynieńnie dałučeńniaŭ" #~ msgid "Reading Headlines" #~ msgstr "Čytańnie zahałoŭkaŭ" #, fuzzy #~ msgid "Toolbar Settings" #~ msgstr "Nałady menu j paneli pryładździa" #~ msgid "Update Interval" #~ msgstr "Intervał aktualizacyi" #~ msgid "Web Integration" #~ msgstr "Intehracyja z Web" #~ msgid "Add Script" #~ msgstr "Dadaj skrypt" #~ msgid "At _startup:" #~ msgstr "Na _pačatku:" #, fuzzy #~ msgid "Attention Profile" #~ msgstr "Pamyłka aŭtaryzacyi" #~ msgid "Create new script" #~ msgstr "Stvary novy skrypt" #~ msgid "Exec Command" #~ msgstr "Vykanaj zahad" #~ msgid "Reuse existing script" #~ msgstr "Znoŭ vykarystaj najaŭny skrypt" #~ msgid "Script Manager" #~ msgstr "Kiraŭnik skryptoŭ" #, fuzzy #~ msgid "Search _Link Cosmos with" #~ msgstr "Šukaj _spasyłku dla" #, fuzzy #~ msgid "FAILED to download enclosure: \"%s\"" #~ msgstr "Zahruzka dałučeńnia skončanaja: \"%s\"" #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2009\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgstr "" #~ "Aŭtarskija pravy (c) 2003-2007\n" #~ "Lars Lindner i \n" #~ "Nathan J. Conrad \n" #~ msgid "Rule" #~ msgstr "Praviła" #~ msgid "Liferea Homepage" #~ msgstr "" #~ "Chatniaja staronka Liferea" #~ msgid "" #~ "Code, Patches, Debugging\n" #~ "\n" #~ "James Doherty\n" #~ "Jeremy Messenger\n" #~ "John McKnight\n" #~ "Tomasz Maka\n" #~ "Karl Soderstrom\n" #~ "Christophe Barbe\n" #~ "Juho Snellman\n" #~ "Roshan Revankar\n" #~ "Oliver Feiler\n" #~ "Niklas Morberg\n" #~ "Johannes Schlueter\n" #~ "Pierre Phaneuf\n" #~ "ahmed el-helw\n" #~ "James Bowes\n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary\n" #~ "Christoph Hohmann\n" #~ "Raphael Slinckx\n" #~ "Bjorn Monnens\n" #~ "Thomas de Grenier de Latour\n" #~ "Aristotle Pagaltzis\n" #~ "Norman Jonas\n" #~ "Sebastian Droege\n" #~ "Daniel Gryniewicz\n" #~ "Remi Cardona\n" #~ "Frederic Peters\n" #~ "Don Malcolm\n" #~ "Ed Catmur\n" #~ "Chris Pirillo\n" #~ "Eric Anderson\n" #~ "and many more...\n" #~ "\n" #~ "Code from other projects\n" #~ "\n" #~ "Anders Carlsson (tray icon support)\n" #~ "Philippe Martin, Brion Vibber (favicon support)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Included Software\n" #~ "\n" #~ "Liferea uses the XSPF Web Music Player to \n" #~ "allow direct podcast playback. This player was \n" #~ "written by Fabricio Zuardi and can be found \n" #~ "at http://musicplayer.sourceforge.net" #~ msgstr "" #~ "Kadavańnie, patch'y, debugavańnie\n" #~ "\n" #~ "James Doherty\n" #~ "Jeremy Messenger\n" #~ "John McKnight\n" #~ "Tomasz Maka\n" #~ "Karl Soderstrom\n" #~ "Christophe Barbe\n" #~ "Juho Snellman\n" #~ "Roshan Revankar\n" #~ "Oliver Feiler\n" #~ "Niklas Morberg\n" #~ "Johannes Schlueter\n" #~ "Pierre Phaneuf\n" #~ "ahmed el-helw\n" #~ "James Bowes\n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary\n" #~ "Christoph Hohmann\n" #~ "Raphael Slinckx\n" #~ "Bjorn Monnens\n" #~ "Thomas de Grenier de Latour\n" #~ "Aristotle Pagaltzis\n" #~ "Norman Jonas\n" #~ "Sebastian Droege\n" #~ "Daniel Gryniewicz\n" #~ "Remi Cardona\n" #~ "Frederic Peters\n" #~ "Don Malcolm\n" #~ "Ed Catmur\n" #~ "Chris Pirillo\n" #~ "Eric Anderson\n" #~ "i šmat chto inšy...\n" #~ "\n" #~ "Kod ad inšych prajektaŭ\n" #~ "\n" #~ "Anders Carlsson (padtrymka ikony traju)\n" #~ "Philippe Martin, Brion Vibber (padtrymka ikonaŭ kanałaŭ)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Ułučanaje prahramnaje zabieśpiačeńnie\n" #~ "\n" #~ "Liferea vykarystoŭvaje Sieciŭny Muzyčny Prajhravalnik XSPF\n" #~ "(XSPF Web Music Player), kab dazvolić prostaje hrańnie\n" #~ "podcastaŭ. Hety prajhravalnik napisaŭ Fabricio Zuardi,\n" #~ "i jaho možna znajści na http://musicplayer.sourceforge.net" #~ msgid "Contributors" #~ msgstr "Udzielniki" #~ msgid "" #~ "Note: Items are added to the search folder if at least one additive rule\n" #~ "matches. They are removed if at least one removing rule matches." #~ msgstr "" #~ "Uvaha: Elementy dadajucca ŭ kataloh pošuku, kali choć adzno dadatnaje\n" #~ "praviła spracoŭvaje. Jany vydalajucca, kali chacia b adno vydalalnaje " #~ "praviła spracoŭvaje." #~ msgid "" #~ "Saves this search as a search folder, which will appear in the feed list." #~ msgstr "" #~ "Zapisvaje hety pošuk jak kataloh pošuku, jaki źjavicca ŭ śpisie kanałaŭ." #~ msgid "Show Menu _And Toolbar" #~ msgstr "Pakazvaj menu _i panel pryładździa" #~ msgid "Show _Menu Only" #~ msgstr "Pakazvaj _tolki menu" #~ msgid "Show _Toolbar Only" #~ msgstr "Pakazvaj tolki _panel pryładździa" #~ msgid "Translation" #~ msgstr "Pierakład" #~ msgid "_Limit cache to" #~ msgstr "_Abmiažuj padručnuju pamiać da" #~ msgid "_Name:" #~ msgstr "_Nazva:" #~ msgid "items." #~ msgstr "elementaŭ." #~ msgid "" #~ "minutes\n" #~ "hours\n" #~ "days" #~ msgstr "" #~ "chvilin\n" #~ "hadzin\n" #~ "dzion" #~ msgid "search" #~ msgstr "pošuk" #~ msgid "Access Forbidden" #~ msgstr "Dostup zabaronieny" #~ msgid "URL is invalid" #~ msgstr "Spasyłka niapravilnaja" #~ msgid "Unsupported network protocol" #~ msgstr "Niepadtrymany sietkavy pratakoł" #~ msgid "Hostname could not be found" #~ msgstr "Niemahčyma znajści nazvu kamputara" #~ msgid "Network connection was refused by the remote host" #~ msgstr "Addaleny kamputar admoviŭ u sietkavym spałučeńni" #~ msgid "Remote host did not finish sending data" #~ msgstr "Addaleny kamputar nia skončyŭ dasyłać źviestki" #~ msgid "Too many HTTP redirects were encountered" #~ msgstr "Adbyłosia nadta šmat pieranakiravańniaŭ HTTP" #~ msgid "Remote host sent an invalid response" #~ msgstr "Addaleny kamputar dasłaŭ niapravilny adkaz" #~ msgid "Webserver's authentication method incompatible with Liferea" #~ msgstr "Metad aŭtaryzacyi na web-servery niesumiaščalny ź Liferea" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "" #~ "Niečakany kaniec paśladoŭnaści znakaŭ albo kiepskaje kadavańnie UTF-8! " #~ "Niekatoryja znaki praihnaravanyja!" #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "" #~ "Aŭtamatyčny pošuk spasyłki na kanał biespaśpiachovy! Spasyłki na kanały " #~ "nia znojdzienyja!" #~ msgid " --help Print this help and exit" #~ msgstr " --help Pakažy hetuju dapamohu j vyjdzi" #~ msgid " --mainwindow-state=STATE" #~ msgstr " --mainwindow-state=STAN" #~ msgid " Start Liferea with its main window in STATE." #~ msgstr " Startuj Liferea z hałoŭnym aknom u STANIE." #~ msgid " Possible topics are: all,cache,conf,db,gui,html" #~ msgstr "" #~ "Mahčymyja temy: \"all\" (usie), \"cache\" (padručnaja pamiać), \"conf" #~ "\" (kanfihuracyja), \"db\" (baza źviestak), \"gui\" (interfejs), \"html" #~ "\" (HTML)" #~ msgid " net,parsing,plugins,trace,update,verbose" #~ msgstr "" #~ "\"net\" (sietka), \"parsing\" (razbor), \"plugins\" (pluginy), \"trace" #~ "\" (trejs), \"update\" (aktualizacyja), \"verbose\" (padrabiaznaść)" #~ msgid "The --mainwindow-state argument must be given a parameter.\n" #~ msgstr "Arhumentu --mainwindow-state treba pieradavać parametar.\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "Arhumentu --session treba pieradavać parametar.\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "Liferea napatkała nieviadomy arhument: %s\n" #~ msgid "does match" #~ msgstr "adpaviadaje" #~ msgid "does not match" #~ msgstr "nie adpaviadaje" #~ msgid "Could not download \"%s\". Will retry in %d seconds." #~ msgstr "" #~ "Niemahčyma zahruzić \"%s\". Sproba budzie paŭtoranaja praz %d sekundaŭ." #~ msgid "" #~ "Sorry, I was not able to load any installed browser plugin! Try the --" #~ "debug-plugins option to get debug information!" #~ msgstr "" #~ "Vybačajusia, ale ja nia zmoh zahruzić zainstalavanyja pluginy dla " #~ "hartača. Pasprabuj opcyju --debug-plugins, kab atrymać debugavyja " #~ "źviestki!" #~ msgid "This item does not have a link assigned!" #~ msgstr "Hety element nia maje suadniesienaje spasyłki!" #~ msgid "No link selected!" #~ msgstr "Spasyłka nie zaznačanaja!" #~ msgid "http://lzone.de/liferea/" #~ msgstr "http://lzone.de/liferea/" #~ msgid "Updates all subscriptions. This does not update OCS directories." #~ msgstr "Aktualizoŭvaje ŭsie padpiski. Katalohi OCS nie aktualizoŭvajucca." #~ msgid "/Toggle _Read Status" #~ msgstr "/Źmiani _stan pračytanaści" #~ msgid "/Toggle Item _Flag" #~ msgstr "/Źmiani ś_ciah elementu" #~ msgid "/_Increase Text Size" #~ msgstr "/Pa_vialič pamier tekstu" #~ msgid "/_Decrease Text Size" #~ msgstr "/Pa_mienš pamier tekstu" #~ msgid "/Toggle _Online|Offline" #~ msgstr "/Źmiani _stan spałučanaści" #~ msgid "/_Preferences..." #~ msgstr "/_Nałady..." #~ msgid "/_Show|Hide Window" #~ msgstr "/_Pakažy/Schavaj vakno" #~ msgid "/_Quit" #~ msgstr "/_Vyjdzi" #~ msgid "/_Update" #~ msgstr "/_Aktualizuj" #~ msgid "/_New/New _Subscription..." #~ msgstr "/_Novy/Novaja _padpiska..." #~ msgid "/_New/New _Folder..." #~ msgstr "/_Novy/Novy _kataloh..." #~ msgid "/_New/New S_earch Folder..." #~ msgstr "/_Novy/Novy kataloh p_ošuku..." #~ msgid "/_New/New S_ource..." #~ msgstr "/_Novy/Novaja krynica..." #~ msgid "/_New/New _News Bin..." #~ msgstr "/_Novy/Novy _koš navinaŭ..." #~ msgid "/_Properties..." #~ msgstr "/_Ułaścivaści..." #~ msgid "Cookie for %s has expired!" #~ msgstr "Ciestak dla %s sastareŭ!" #~ msgid "" #~ "Error while reading cache file \"%s\" ! Cache file could not be loaded!" #~ msgstr "" #~ "Pamyłka pry čytańni pdručnaha fajłu \"%s\"! Niemahčyma zahruzić padručny " #~ "fajł!" #~ msgid "" #~ "

XML error while parsing cache file! Feed cache file \"%s\" could not " #~ "be loaded!

" #~ msgstr "" #~ "

Pamyłka XML pry razbory padručnaha fajłu! Niemahčyma zahruzić padručny " #~ "fajł kanału \"%s\"!

" #~ msgid "

\"%s\" is no valid cache file! Cannot read cache file!

" #~ msgstr "" #~ "

\"%s\" nie źjaŭlajecca pravilnym padručnym fajłam! Niemahčyma adčytać " #~ "padručny fajł!

" #~ msgid "There were errors while parsing cache file \"%s\"" #~ msgstr "Pry razbory padručnaha fajłu \"%s\" adbylisia pamyłki" #~ msgid "Feed Loading Settings" #~ msgstr "Nałady zahruzki kanałaŭ" #~ msgid "Optimize for reduced _memory usage." #~ msgstr "Aptymizuj dziela abmiežavanaha ŭžytku _pamiaci." #~ msgid "Optimize for _speed." #~ msgstr "Aptymizuj dziela _chutkaści." #~ msgid "_View Headlines With" #~ msgstr "_Pakazvaj zahałoŭki z dapamohaj" #~ msgid "Please restart Liferea for changes to take effect." #~ msgstr "Kali łaska, uruchom znoŭ Liferea, kab zadziejničać źmieny." #~ msgid "" #~ "Liferea reuses the GNOME proxy settings. If you use GNOME you can " #~ "change these settings in the GNOME Control Center." #~ msgstr "" #~ "Liferea vykarystoŭvaje nałady proxy ad GNOME'a. Kali ty karystajeśsia " #~ "GNOME'am, ty možaš źmianić hetyja nałady ŭ Centry kiravańnia GNOME'u." #~ msgid "_Enable Proxy" #~ msgstr "_Uklučy proxy" #~ msgid "" #~ " --debug-html Enable HTML debugging (saving to ~/.liferea_1.2/output." #~ "xhtml)" #~ msgstr "" #~ " --debug-html Uklučy debugavańnie HTML (zapis u ~/.liferea_1.2/" #~ "output.xhtml)" #~ msgid " --debug-plugins Print debugging messages when loading plugins" #~ msgstr "" #~ " --debug-plugins Pakazvaj debugavyja paviedamleńni pry zahruzcy pluginaŭ" #~ msgid "_Program" #~ msgstr "_Prahrama" #~ msgid "Update _Selected" #~ msgstr "Aktualizuj _abranaje" #~ msgid "_Delete Selected" #~ msgstr "_Vydal abranaje" #~ msgid "Update only feeds scheduled for updates" #~ msgstr "Aktualizuj tolki kanały, pryznačanyja dla aktualizacyi" #~ msgid "Reset feed update timers (Update no feeds)" #~ msgstr "Abnuli hadzińniki aktualizacyi kanałaŭ (Nie aktualizuj kanały)" #~ msgid "Searching for \"%s\"" #~ msgstr "Pošuk \"%s\"" #~ msgid "There were errors while parsing the feed %s!" #~ msgstr "Pry razbory kanału %s adbylisia pamyłki!" #~ msgid "Liferea notification" #~ msgstr "Nahadvańnie Liferea" liferea-1.12.7/po/bg.po000066400000000000000000003127601352135647700146050ustar00rootroot00000000000000# Bulgarian translation for Liferea. # Copyright (C) Free Software Foundation, 2004, 2005, 2006. # This file is distributed under the same license as the Liferea package. # Vladimir Petkov , 2004, 2005, 2006. # # msgid "" msgstr "" "Project-Id-Version: Liferea Bulgarian translation\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2006-03-17 12:10+0200\n" "Last-Translator: Vladimir Petkov \n" "Language-Team: Bulgarian \n" "Language: bg\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" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Временни файлове на емисията" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Liferea е в режим „изключен“" #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "Име на емисията" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "Име на емисията" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "Име на емисията" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "Име на емисията" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Събирач на RSS емисии (Liferea)" #: ../net.sourceforge.liferea.desktop.in.h:2 #, fuzzy msgid "Feed Reader" msgstr "Временни файлове на емисията" #: ../net.sourceforge.liferea.desktop.in.h:3 #, fuzzy msgid "Liferea Feed Reader" msgstr "Събирач на RSS емисии (Liferea)" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Тази емисия не е продължена. Вече не е налична. Liferea няма да я " "актуализира, но все още можете да преглеждате старите заглавия от кеша." #: ../xslt/feed.xml.in.h:2 #, fuzzy msgid "" "The last update of this subscription failed!
HTTP error code : " msgstr "" "Последното осъвременяване на тази емисия е неуспешно!
Грешка на HTTP " "%d: %s" #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Имаше грешки докато се изтегляше тази емисия!" #: ../xslt/feed.xml.in.h:4 #, fuzzy msgid "Parser Error Details" msgstr "Подробности" #: ../xslt/feed.xml.in.h:5 #, fuzzy msgid "Details" msgstr "Подробности" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Имаше грешки при изтеглянето на тази емисия!" #: ../xslt/feed.xml.in.h:8 #, fuzzy msgid "Filter Error Details" msgstr "Подробности" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Емисия:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Изходен код:" #: ../xslt/feed.xml.in.h:11 #, fuzzy msgid "Publisher" msgstr "издател" #: ../xslt/feed.xml.in.h:12 #, fuzzy msgid "Copyright" msgstr "авторски права" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 #, fuzzy msgid "unread headlines" msgstr "Заглавия" #: ../xslt/folder.xml.in.h:1 #, fuzzy msgid "Folder:" msgstr "Виртуална папка:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 #, fuzzy msgid "Source" msgstr "Изходен код:" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Емисия" #: ../xslt/item.xml.in.h:3 #, fuzzy msgid "Filed under" msgstr "Временни файлове на емисията" #: ../xslt/item.xml.in.h:4 #, fuzzy msgid "Author" msgstr "автор" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "" #: ../xslt/item.xml.in.h:9 #, fuzzy msgid "Creator" msgstr "създател" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 #, fuzzy msgid "Comments" msgstr "коментари" #: ../xslt/item.xml.in.h:13 #, fuzzy msgid "Updating..." msgstr "Актуализиране на „%s“" #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "" #: ../xslt/newsbin.xml.in.h:1 #, fuzzy msgid "News Bin:" msgstr "Нов прозорец" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" #: ../xslt/vfolder.xml.in.h:1 #, fuzzy msgid "Search Folder:" msgstr "Нова папка" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Командата за стартиране на браузъра е неуспешна: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Стартиране: „%s“" #. unauthorized #: ../src/comments.c:120 #, fuzzy msgid "Authorization Error" msgstr "Идентифициране" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Не може да създаде директорията за временните файлове „%s“!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "„%s“ не е валиден тип за файл с настройки за приложенията!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Грешка при преименуването на %s в %s\n" #: ../src/export.c:417 ../src/export.c:419 #, fuzzy, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "Грешка в XML по време на четенето на временния файл! „%s“ не може да бъде " "внесен!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Празен документ! OPML документа „%s“ не трябва да е празен при внасяне." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "„%s“ не е валиден OPML документ! Liferea не може да внесе този файл!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Списък с внесените емисии" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Вмъкване на списък с емисии" #: ../src/export.c:481 msgid "Import" msgstr "Внасяне" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 #, fuzzy msgid "OPML Files" msgstr "Избор на файл" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Грешка при изнасянето на списъкът с емисии!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Списъкът с емисии е изнесен успешно!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Изнасяне на списък с емисиите" #: ../src/export.c:498 msgid "Export" msgstr "Изнасяне" #: ../src/feed.c:317 #, fuzzy msgid "" "

Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

" msgstr "" "

Видът на емисията не може да бъде определен. Проверете дали това е " "поддържан от програмата формат!

%s" #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "„%s“ е актуализирана..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "„%s“ не е достъпна" #: ../src/feed_parser.c:137 #, fuzzy msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "

Адресът, към който искате да абонирате Liferea, сочи към страница, в " "която системата за автоматично откриване не успя да открие емисии. Възможно " "е тази страница просто да не поддържа автоматично откриване на емисии.

" #: ../src/feed_parser.c:170 #, fuzzy, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "" "

Грешка в XML по време на четенето на емисията! Емисията „%s“ не може да " "бъде заредена!

" #: ../src/feed_parser.c:175 #, fuzzy msgid "Empty document!" msgstr "

Празен документ!

" #: ../src/feed_parser.c:187 #, fuzzy msgid "Invalid XML!" msgstr "

Невалиден XML!

" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "" #: ../src/feed_parser.c:230 #, fuzzy msgid "Could not determine the feed type." msgstr "

Не може да намери началото на RDF!

" #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 #, fuzzy msgid "There are no unread items" msgstr "Няма непрочетени записи " #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" " СЪСТОЯНИЕ-то може да е „shown“, „iconified“ или „hidden“" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "" #: ../src/liferea_application.c:283 #, fuzzy msgid "Show version information and exit" msgstr " --version Изписване на информация за версията и напускане" #: ../src/liferea_application.c:284 #, fuzzy msgid "Add a new subscription" msgstr "Нова емисия" #: ../src/liferea_application.c:284 msgid "uri" msgstr "" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 #, fuzzy msgid "Print debugging messages of all types" msgstr "" " --debug-all Отпечатване на всички съобщения за откриване на грешки" #: ../src/liferea_application.c:291 #, fuzzy msgid "Print debugging messages for the cache handling" msgstr "" " --debug-cache Отпечатване на съобщенията за откриване на грешки при " "обработката на кеша" #: ../src/liferea_application.c:292 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "" " --debug-conf Отпечатване на съобщенията за откриване на грешки при " "обработката на настройките" #: ../src/liferea_application.c:293 #, fuzzy msgid "Print debugging messages of the database handling" msgstr "" " --debug-cache Отпечатване на съобщенията за откриване на грешки при " "обработката на кеша" #: ../src/liferea_application.c:294 #, fuzzy msgid "Print debugging messages of all GUI functions" msgstr "" " --debug-gui Отпечатване на съобщенията за откриване на грешки във " "всички функции за графичния интерфейс" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" #: ../src/liferea_application.c:296 #, fuzzy msgid "Print debugging messages of all network activity" msgstr "" " --debug-all Отпечатване на всички съобщения за откриване на грешки" #: ../src/liferea_application.c:297 #, fuzzy msgid "Print debugging messages of all parsing functions" msgstr "" " --debug-parsing Отпечатване на съобщенията за откриване на грешки във " "всички функции за синтактичен анализ" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/liferea_application.c:299 #, fuzzy msgid "Print debugging messages when entering/leaving functions" msgstr "" " --debug-trace Отпечатване на съобщенията за откриване на грешки при " "влизане и излизане от функции" #: ../src/liferea_application.c:300 #, fuzzy msgid "Print debugging messages of the feed update processing" msgstr "" " --debug-update Отпечатване на съобщенията за откриване на грешки при " "обработката на обновяването на емисиите" #: ../src/liferea_application.c:301 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "" " --debug-cache Отпечатване на съобщенията за откриване на грешки при " "обработката на кеша" #: ../src/liferea_application.c:302 #, fuzzy msgid "Print verbose debugging messages" msgstr "" " --debug-verbose Отпечатване на подробни съобщения за откриване на грешки" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 #, fuzzy msgid "Print debugging messages for the given topic" msgstr "" " --debug-cache Отпечатване на съобщенията за откриване на грешки при " "обработката на кеша" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "" #: ../src/net.c:466 #, fuzzy msgid "Unable to connect to remote host" msgstr "Грешка при свързването с отдалечения адрес" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "" #. http 4xx client error #: ../src/net.c:474 #, fuzzy msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Нямате право да изтеглите тази емисия. Актуализирайте вашето име и парола в " "настройките на емисията." #: ../src/net.c:476 #, fuzzy msgid "Payment required" msgstr "Изисква се заплащане" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Ресурсът не е намерен" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Непозволен метод" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Неприемлив" #: ../src/net.c:481 #, fuzzy msgid "Proxy authentication required" msgstr "Нужна е идентификация в сървъра-посредник" #: ../src/net.c:482 #, fuzzy msgid "Request timed out" msgstr "Заявката изтече" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Този ресурс вече не съществува. Изтрийте го!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Емисията не е на разположение: Сървърът докладва за неподдържано " "пренасочване!" #: ../src/net.c:492 msgid "Client Error" msgstr "Грешка в клиента" #: ../src/net.c:494 msgid "Server Error" msgstr "Грешка в сървъра" #: ../src/net.c:496 #, fuzzy msgid "An unknown networking error happened!" msgstr "(непозната мрежова грешка)" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Запис" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "съдържа" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "не съдържа" #: ../src/rule.c:175 msgid "Item title" msgstr "Заглавие на записа" #: ../src/rule.c:176 msgid "Item body" msgstr "Тяло на записа" #: ../src/rule.c:177 msgid "Read status" msgstr "Поставяне на статус на прочетен" #: ../src/rule.c:177 msgid "is unread" msgstr "е непрочетен" #: ../src/rule.c:177 msgid "is read" msgstr "е прочетен" #: ../src/rule.c:178 msgid "Flag status" msgstr "Състояние на флаг" #: ../src/rule.c:178 msgid "is flagged" msgstr "е с флаг" #: ../src/rule.c:178 msgid "is unflagged" msgstr "е без флаг" #: ../src/rule.c:179 msgid "Podcast" msgstr "" #: ../src/rule.c:179 #, fuzzy msgid "included" msgstr "включена фотография" #: ../src/rule.c:179 #, fuzzy msgid "not included" msgstr "включена фотография" #: ../src/rule.c:180 #, fuzzy msgid "Category" msgstr "категория" #: ../src/rule.c:180 #, fuzzy msgid "is set" msgstr "е прочетен" #: ../src/rule.c:180 msgid "is not set" msgstr "" #: ../src/rule.c:181 msgid "Feed title" msgstr "Заглавие на емисията" #: ../src/subscription.c:106 #, fuzzy, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Тази емисия „%s“ вече беше актуализирана!" #: ../src/subscription.c:111 #, fuzzy, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "Емисията „%s“ няма продължение. Liferea няма да я актуализира повече!" #: ../src/subscription.c:145 #, fuzzy, c-format msgid "Updating favicon for \"%s\"" msgstr "Актуализиране иконата на емисията „%s“" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Имаше проблем при прочитането на емисията. Проверете адреса и изходната " "информация в конзолата." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "Адресът на „%s“ беше променен за постоянно и затова беше осъвременен" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "„%s“ не е продължен. Liferea няма да го осъвременява повече!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "„%s“ не се промени след последното осъвременяване" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Актуализиране на „%s“" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Грешка при отваряне на временния файл %s за филтриране!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s приключи работа със статус %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Грешка: Тръбата „%s“ не може да бъде отворена" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Грешка: Файлът „%s“ не може да бъде отворен" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Грешка: Файлът „%s“ не съществува" #: ../src/vfolder.c:54 #, fuzzy msgid "New Search Folder" msgstr "Нова папка" #: ../src/xml.c:410 #, fuzzy msgid "[There were more errors. Output was truncated!]" msgstr "[Четенето беше прекъснато!]" #: ../src/xml.c:563 #, fuzzy msgid "XML Parser: Could not parse document:\n" msgstr "" "xmlReadMemory(): Документът не може да бъде анализиран:\n" "%s%s" #: ../src/ui/enclosure_list_view.c:175 #, fuzzy msgid "Attachments" msgstr "коментари" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr "" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "" msgstr[1] "" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Избор на файл" #: ../src/ui/enclosure_list_view.c:444 #, fuzzy, c-format msgid "File Extension .%s" msgstr "Файлово разширение .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Файлът с картата с пиксели %s не може да бъде открит." #: ../src/ui/liferea_shell.c:404 #, fuzzy, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] "%d нов запис" msgstr[1] "%d нови записа" #: ../src/ui/liferea_shell.c:409 #, fuzzy, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "е непрочетен" msgstr[1] "е непрочетен" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Раздели в помощта" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Бърз справочник" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "Често задавани въпроси" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Търсене с Feedster" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Въведете потребителското име и паролата за „%s“ (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Непознат източник" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "Актуализиране на _всички" #: ../src/ui/ui_common.c:211 #, fuzzy msgid "All Files" msgstr "Локален _файл" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea е в режим „изключен“. Не е възможно да актуализирате емисиите." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Търсене във всички емисии." #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Отбелязване на всички като _прочетени" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Сигурни ли сте, че искате да изтриете „%s“?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Този запис няма не съдържа връзка!" #: ../src/ui/item_list_view.c:484 #, fuzzy msgid "*** No title ***" msgstr "[Без заглавие]" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Заглавие" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Дата" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Трябва да изберете емисия, за да изтриете нейните записи!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Няма избран запис" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "" #: ../src/ui/popup_menu.c:111 #, fuzzy msgid "_Open In Browser" msgstr "_Отваряне в браузър" #: ../src/ui/popup_menu.c:115 #, fuzzy msgid "Open In _External Browser" msgstr "Външен браузър" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "" #: ../src/ui/popup_menu.c:153 #, fuzzy msgid "Copy Item _Location" msgstr "/_Копиране адреса на записа" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "П_ревключване на състояние: \"прочетено/непрочетено“" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Прикрепяне на флаг към записа" #: ../src/ui/popup_menu.c:170 #, fuzzy msgid "R_emove Item" msgstr "/Пре_махване на запис" #: ../src/ui/popup_menu.c:200 #, fuzzy msgid "Open Enclosure..." msgstr "/Отваряне на приложение..." #: ../src/ui/popup_menu.c:201 #, fuzzy msgid "Save As..." msgstr "/Запазване като..." #: ../src/ui/popup_menu.c:202 #, fuzzy msgid "Copy Link Location" msgstr "/_Копиране адреса на записа" #: ../src/ui/popup_menu.c:280 #, fuzzy msgid "_Update" msgstr "/_Актуализиране" #: ../src/ui/popup_menu.c:282 #, fuzzy msgid "_Update Folder" msgstr "/_Актуализиране на папка" #: ../src/ui/popup_menu.c:292 #, fuzzy msgid "New _Subscription..." msgstr "_Нова емисия..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Нова _папка..." #: ../src/ui/popup_menu.c:298 #, fuzzy msgid "New S_earch Folder..." msgstr "Нова _папка..." #: ../src/ui/popup_menu.c:299 #, fuzzy msgid "New S_ource..." msgstr "/_Нов/_Нова папка..." #: ../src/ui/popup_menu.c:300 #, fuzzy msgid "New _News Bin..." msgstr "/_Нов/Нова _приставка..." #: ../src/ui/popup_menu.c:303 #, fuzzy msgid "_New" msgstr "/_Нов" #: ../src/ui/popup_menu.c:312 #, fuzzy msgid "Sort Feeds" msgstr "Вмъкване на списък с емисии" #: ../src/ui/popup_menu.c:320 #, fuzzy msgid "_Mark All As Read" msgstr "/_Отбелязване на всички като прочетени" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 #, fuzzy msgid "_Delete" msgstr "/_Изтриване" #: ../src/ui/popup_menu.c:336 #, fuzzy msgid "_Properties" msgstr "_Настройки..." #: ../src/ui/popup_menu.c:343 #, fuzzy msgid "Convert To Local Subscriptions..." msgstr "_Нова емисия..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 #, fuzzy msgid "minutes" msgstr "минути." #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Space" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Space" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Space" #: ../src/ui/preferences_dialog.c:112 #, fuzzy msgid "Normal View" msgstr "Локален _файл" #: ../src/ui/preferences_dialog.c:113 #, fuzzy msgid "Wide View" msgstr "_Изглед" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Combined View" msgstr "_Общ изглед" #: ../src/ui/preferences_dialog.c:476 #, fuzzy msgid "Default Browser" msgstr "Браузър" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Ръчно зададено" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Тип" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Програма" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Изтриване на запис" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Сигурни ли сте, че искате да изтриете „%s“ и всички негови записи?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Сигурни ли сте, че искате да изтриете „%s“?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Потвърждаване на изтриването" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Потвърждаване на изтриването" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, fuzzy, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "" "Доставчикът на този източник предлага да поставите период за осъвременяване " "от %d минути." msgstr[1] "" "Доставчикът на този източник предлага да поставите период за осъвременяване " "от %d минути." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Този източник няма подразбиращ се интервал за осъвременяване" #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Без име" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Нова емисия" #: ../src/fl_sources/google_source.c:111 #, fuzzy msgid "Google Reader" msgstr "Временни файлове на емисията" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "" #: ../src/fl_sources/opml_source.c:379 #, fuzzy msgid "Choose OPML File" msgstr "Избор на файл" #: ../src/fl_sources/opml_source.h:28 #, fuzzy msgid "New OPML Subscription" msgstr "Нова емисия" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "" #: ../src/fl_sources/node_source.c:363 #, fuzzy msgid "Source Type" msgstr "Вид на източника:" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Временни файлове на емисията" #: ../src/webkit/liferea_web_view.c:175 #, fuzzy msgid "Open Link In _Tab" msgstr "/_Зареждане на връзката в _таб" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "/_Зареждане на връзката в браузър" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "/_Зареждане на връзката в браузър" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "" #: ../src/webkit/liferea_web_view.c:190 #, fuzzy msgid "_Copy Link Location" msgstr "/_Копиране адреса на записа" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "_Изглед" #: ../src/webkit/liferea_web_view.c:194 #, fuzzy msgid "_Copy Image Location" msgstr "/_Копиране адреса на записа" #: ../src/webkit/liferea_web_view.c:197 #, fuzzy msgid "S_ave Link As" msgstr "/Запазване като..." #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "" #: ../src/webkit/liferea_web_view.c:207 #, fuzzy msgid "_Subscribe..." msgstr "/_Абониране..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "_Увеличаване на големината на шрифта" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Намаляване на големината на шрифта" #: ../glade/about.ui.h:1 msgid "About" msgstr "Относно програмата" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea е събирач на RSS емисии за GTK+" #: ../glade/about.ui.h:3 #, fuzzy msgid "Liferea Homepage" msgstr "Събирач на RSS емисии (Liferea)" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Идентифициране" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "Потребителско _име:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Парола:" #: ../glade/enclosure_handler.ui.h:1 #, fuzzy msgid "Open Enclosure" msgstr "/Отваряне на приложение..." #: ../glade/enclosure_handler.ui.h:2 #, fuzzy msgid "Open an enclosure of type:" msgstr "Изтегля се приложения от вида:" #: ../glade/enclosure_handler.ui.h:3 #, fuzzy msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Какво да прави Liferea с това приложение? Въведете командата, която искате " "да бъде изпълнена, отдолу. Изтегленият файл ще бъде подаден като аргумент на " "следната команда:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Преглед:" #: ../glade/enclosure_handler.ui.h:5 #, fuzzy msgid "_Do this automatically for enclosures like this from now on." msgstr "" "_Действието да се извършва автоматично за файловете подобни на този от сега " "нататък." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "" #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 #, fuzzy msgid "_Password" msgstr "_Парола:" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 #, fuzzy msgid "View Headlines" msgstr "_Преглед на заглавията чрез" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Заглавия" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Отбелязване на всички като _прочетени" #: ../glade/mark_read_dialog.ui.h:2 #, fuzzy msgid "Mark all as read" msgstr "Отбелязване на всички като _прочетени" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Нова папка" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "_Име на папката:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Източник на емисията" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Вид на източника:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Команда" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "Локален _файл" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Избиране на файл..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Изходен код:" #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "_Чрез програмата" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Използване на филтър за _конвертиране" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea може да използва външни модули и филтри, за да достига емисии и " "директории в неподдържани формати. Погледнете документацията за повече " "информация." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Конвертиране _чрез:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "" #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" #: ../glade/opml_source.ui.h:3 #, fuzzy msgid "_Location" msgstr "/_Копиране адреса на записа" #: ../glade/opml_source.ui.h:4 #, fuzzy msgid "_Select File" msgstr "Избиране на файл..." #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Настройки на Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "Стандартен _брой записи, за запазване от източник:" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "Feed Update Settings" msgstr "Временни файлове на емисията" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 #, fuzzy msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Забележка: Не пропускайте да настройте разумен период на осъвременяване. " "Не е удобно да настроите емисиите да бъдат проверявани през 15 минути! За да " "изключите автоматичното осъвременяване - поставете за период на " "осъвременяване 0." #: ../glade/prefs.ui.h:8 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Добавяне на нова емисия." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "_Период за актуализиране на емисията:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Емисии" #: ../glade/prefs.ui.h:12 #, fuzzy msgid "Folder Display Settings" msgstr "Изобразяване на папките" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "Показване на всички заглавия от всички под-емисии при избор на папка." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "_Скриване на прочетените записи." #: ../glade/prefs.ui.h:15 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Икони на емисиите" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Актуализиране на всички икони на емисии" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Папки" #: ../glade/prefs.ui.h:18 #, fuzzy msgid "Reading Headlines" msgstr "Заглавия" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Бърз преглед чрез:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:21 #, fuzzy msgid "Web Integration" msgstr "Ориентация" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "" #: ../glade/prefs.ui.h:24 #, fuzzy msgid "Internal Browser Settings" msgstr "Вътрешен браузър" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Отваряне на връзките в _Liferea." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Забраняване на Javascript." #: ../glade/prefs.ui.h:27 #, fuzzy msgid "_Enable browser plugins." msgstr "Външен браузър" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "External Browser Settings" msgstr "Външен браузър" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Браузър:" #: ../glade/prefs.ui.h:30 #, fuzzy msgid "_Manual:" msgstr "Ръчно зададено" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Браузър" #: ../glade/prefs.ui.h:34 #, fuzzy msgid "Toolbar Settings" msgstr "Изобразяване на папките" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "" #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Интерфейс" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "" #: ../glade/prefs.ui.h:42 #, fuzzy msgid "_No Proxy" msgstr "Сървър-посредник" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Адрес:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Порт:" #: ../glade/prefs.ui.h:46 #, fuzzy msgid "Use Proxy Au_thentication" msgstr "Използване на _идентификация" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Потребителско _име:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "_Парола:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Сървър-посредник" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Изобразяване на папките" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 #, fuzzy msgid "Downloading Enclosures" msgstr "Изтегля се приложения" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Чрез програмата" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 #, fuzzy msgid "Opening Enclosures" msgstr "/Отваряне на приложение..." #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Приложения" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Настройки на емисията" #: ../glade/properties.ui.h:2 #, fuzzy msgid "Feed Name" msgstr "_Име на емисията:" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Име на емисията:" #: ../glade/properties.ui.h:4 #, fuzzy msgid "Update Interval" msgstr "/_Актуализиране на папка" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Използване на стандартния интервал за осъвременяване." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "Специфичен интервал за осъвременяване на _емисия" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "Тези емисии _да не бъдат осъвременявани автоматично." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "Доставчикът на тази емисия предлага да поставите период за осъвременяване от " "%d минути." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Основен" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea може да използва външни модули и филтри, за да достига емисии и " "директории в неподдържани формати. Погледнете документацията за повече " "информация." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Настройките на временните файлове определят дали съдържанието на емисиите се " "запазва при спирането на Liferea. Избраните емисии винаги се записват в кеша." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "_Настройки по подразбиране" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "Сп_иране на временните файлове" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Неограничени временни файлове" #: ../glade/properties.ui.h:27 #, fuzzy msgid "_Number of items to save:" msgstr "Стандартен _брой записи, за запазване от източник:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Използване на HTTP _идентификация" #: ../glade/properties.ui.h:34 #, fuzzy msgid "Download" msgstr "_Чрез програмата" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_Автоматично изтегляне на всички приложения към емисията." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" #: ../glade/properties.ui.h:37 #, fuzzy msgid "Ignore _comment feeds for this subscription." msgstr "Отваряне на прозореца за предпочитанията за избраната емисия." #: ../glade/properties.ui.h:38 #, fuzzy msgid "_Mark downloaded items as read." msgstr "_Отбелязване на избраните като прочетени" #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "" #: ../glade/rename_node.ui.h:1 #, fuzzy msgid "Rename" msgstr "Преименуване на папката" #: ../glade/rename_node.ui.h:2 #, fuzzy msgid "_New Name:" msgstr "_Име:" #: ../glade/search_folder.ui.h:1 #, fuzzy msgid "Search Folder Properties" msgstr "Настройки на виртуалната папка" #: ../glade/search_folder.ui.h:2 #, fuzzy msgid "Search _Name:" msgstr "_Име на емисията:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "" #: ../glade/search.ui.h:1 #, fuzzy msgid "Advanced Search" msgstr "Търсене с Feedster" #: ../glade/search.ui.h:2 #, fuzzy msgid "_Search Folder..." msgstr "Нова _папка..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Търсене във всички емисии" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "" #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Стартиране на търсене на указания текст във всички емисии. Резултатът от " "търсенето ще се появи в списъка със записи." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Търсене за:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Въведете низа, който Liferea са търси както в заглавията, така и в " "съдържанието на емисиите." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "" #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "" #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "" #: ../glade/ttrss_source.ui.h:3 #, fuzzy msgid "_Server URL" msgstr "Грешка в сървъра" #: ../glade/ttrss_source.ui.h:5 #, fuzzy msgid "_Username" msgstr "Потребителско _име:" #: ../glade/update_monitor.ui.h:1 #, fuzzy msgid "Update Monitor" msgstr "/_Актуализиране на папка" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "Актуализиране на _всички" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "" #: ../glade/update_monitor.ui.h:4 #, fuzzy msgid "Downloading Now" msgstr "Изтегля се приложения" #, fuzzy #~ msgid "_Subscriptions" #~ msgstr "Нова емисия" #~ msgid "Update _All" #~ msgstr "Актуализиране на _всички" #, fuzzy #~ msgid "Updates all subscriptions." #~ msgstr "Добавяне на нова емисия." #~ msgid "Mark All As _Read" #~ msgstr "Отбелязване на всички като _прочетени" #~ msgid "Marks read every item of every subscription." #~ msgstr "Отбелязване на абсолютно всички обекти като прочетени" #~ msgid "_Import Feed List..." #~ msgstr "_Внасяне на списък с емисии..." #~ msgid "Imports an OPML feed list." #~ msgstr "Внасяне на списък с емисии в OPML формат." #~ msgid "_Export Feed List..." #~ msgstr "_Изнасяне на списък с емисии..." #, fuzzy #~ msgid "Exports the feed list as OPML." #~ msgstr ">Изнасяне на списък с емисии във формат OPML." #~ msgid "_Quit" #~ msgstr "_Спиране на програмата" #, fuzzy #~ msgid "_Feed" #~ msgstr "_Емисии" #, fuzzy #~ msgid "Remove _All Items" #~ msgstr "Премахване на _всички" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Премахване на всички записи от текущата емисия." #, fuzzy #~ msgid "_Item" #~ msgstr "_Записи" #, fuzzy #~ msgid "Next Item" #~ msgstr "_Следващ непрочетен запис" #~ msgid "_Next Unread Item" #~ msgstr "_Следващ непрочетен запис" #~ msgid "_View" #~ msgstr "_Изглед" #~ msgid "Increases the text size of the item view." #~ msgstr "Увеличаване на размера на текста на записите." #~ msgid "Decreases the text size of the item view." #~ msgstr "Намаляване на размера на текста, при прегледа на записи." #, fuzzy #~ msgid "_Update Monitor" #~ msgstr "/_Актуализиране на папка" #~ msgid "_Preferences" #~ msgstr "_Настройки" #~ msgid "Edit Preferences." #~ msgstr "Промяна на настройките." #, fuzzy #~ msgid "S_earch" #~ msgstr "Търсене" #, fuzzy #~ msgid "Search All Feeds..." #~ msgstr "Търсене във всички емисии" #~ msgid "Show the search dialog." #~ msgstr "Показване на полето за търсене." #~ msgid "_Help" #~ msgstr "_Помощ" #~ msgid "_Contents" #~ msgstr "_Ръководство" #~ msgid "View help for this application." #~ msgstr "Преглед на помощта за тази програма." #~ msgid "_Quick Reference" #~ msgstr "_Бърз справочник" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Преглед на списък с всички бързи клавиши в Liferea." #~ msgid "_FAQ" #~ msgstr "_Често задавани въпроси" #~ msgid "View the FAQ for this application." #~ msgstr "Преглед на често задаваните въпроси." #~ msgid "_About" #~ msgstr "_Относно програмата" #~ msgid "Shows an about dialog." #~ msgstr "Показване на диалогов прозорец с информация за програмата." #, fuzzy #~ msgid "_Normal View" #~ msgstr "Локален _файл" #, fuzzy #~ msgid "_Wide View" #~ msgstr "_Изглед" #, fuzzy #~ msgid "_Combined View" #~ msgstr "_Общ изглед" #, fuzzy #~ msgid "Hide feeds with no unread items." #~ msgstr "Няма непрочетени записи " #~ msgid "_New Subscription..." #~ msgstr "_Нова емисия..." #, fuzzy #~ msgid "Adds a subscription to the feed list." #~ msgstr "Добавяне на нова емисия." #, fuzzy #~ msgid "Adds a folder to the feed list." #~ msgstr "Добавяне на папка към списъка с емисии." #, fuzzy #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Добавяне на нова виртуална папка към списъка с емисии." #, fuzzy #~ msgid "New _Source..." #~ msgstr "/_Нов/_Нова папка..." #, fuzzy #~ msgid "Adds a new feed list source." #~ msgstr "Добавяне на нова виртуална папка към списъка с емисии." #, fuzzy #~ msgid "Adds a new news bin." #~ msgstr "Добавяне на нова емисия." #, fuzzy #~ msgid "_Mark Items Read" #~ msgstr "Избиране като прочетен" #, fuzzy #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "Отбелязване като прочетено на всичко в избраната папка." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Актуализиране на избраните емисии или на всички емисии от избраната папка." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Отваряне на прозореца за предпочитанията за избраната емисия." #, fuzzy #~ msgid "_Remove" #~ msgstr "Премахване на _всички" #~ msgid "Removes the selected subscription." #~ msgstr "Изтриване на избраната емисия." #~ msgid "Toggles the read status of the selected item." #~ msgstr "" #~ "Превключване на състоянието „прочетено/непрочетено“ на избрания запис." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Превключване на флага за състоянието на избрания запис." #, fuzzy #~ msgid "R_emove" #~ msgstr "/Пре_махване на запис" #~ msgid "Removes the selected item." #~ msgstr "Премахване на избрания запис." #, fuzzy #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Отваряне на адреса на записа в настроения за това браузър." #, fuzzy #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Отваряне на адреса на записа в настроения за това браузър." #, fuzzy #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Отваряне на адреса на записа в настроения за това браузър." #~ msgid "_Work Offline" #~ msgstr "Режим: „_изключен“" #, fuzzy #~ msgid "_Update All" #~ msgstr "/_Актуализиране на всички" #, fuzzy #~ msgid "_Show Liferea" #~ msgstr "Събирач на RSS емисии (Liferea)" #, fuzzy #~ msgid "InoReader" #~ msgstr "Временни файлове на емисията" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Бележка: Потребителското име и паролата ще бъдат запазени в списъка с " #~ "емисии без да се използва криптиране." #, fuzzy #~ msgid "Plugins" #~ msgstr "Нова _приставка" #, fuzzy #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Събирач на RSS емисии (Liferea)" #, fuzzy #~ msgid "_Open Link In Browser" #~ msgstr "/_Зареждане на връзката в браузър" #, fuzzy #~ msgid "_Open Link In External Browser" #~ msgstr "/_Зареждане на връзката в браузър" #~ msgid " " #~ msgstr " " #~ msgid "enter any search string you want" #~ msgstr "въведете дума за търсене" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "Максимален брой резултати:" #, fuzzy #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Бележка: Liferea ще генерира емисия, която ще бъде използвана в заявката " #~ "за търсене във Feedster. Можете да запазите тази емисия за постоянно и да " #~ "я осъвременявате като всяка друга обикновена емисия." #~ msgid "Liferea is now online" #~ msgstr "Liferea е в режим „включен“" #, fuzzy #~ msgid "Work Offline" #~ msgstr "Режим: „_изключен“" #~ msgid "Liferea is now offline" #~ msgstr "Liferea е в режим „изключен“" #, fuzzy #~ msgid "Work Online" #~ msgstr "Режим: „_изключен“" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Тази настройка ще Ви позволи да спрете актуализирането на емисията." #~ msgid "Browser default" #~ msgstr "Стандартен браузър" #~ msgid "Existing window" #~ msgstr "Съществуващ прозорец" #~ msgid "New window" #~ msgstr "Нов прозорец" #~ msgid "New tab" #~ msgstr "Нов подпрозорец" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Временни файлове на емисията" #~ msgid "_Open link in:" #~ msgstr "_Отваряне на връзката в:" #, fuzzy #~ msgid "No comments yet." #~ msgstr "коментари" #, fuzzy #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Събирач на RSS емисии (Liferea)" #, fuzzy #~ msgid "" #~ "

Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

You can add new subscriptions

  • From main menu " #~ "'Subscription' -> 'New Subscription'
  • By dropping feed links " #~ "into the subscription list
  • By right clicking links and choosing " #~ "'Subscribe' within Liferea

" #~ msgstr "" #~ "liferea.png\\\" />

Liferea - програма за емисии по RSS

Добре дошли в Liferea, програма " #~ "за събиране на RSS емисии и новини.

Отляво се намера списък с " #~ "Вашите емисии. За да добавите емисия изберете Емисии -> Нова емисия. " #~ "За да разгледате заглавията на дадена емисия, изберете емисията и " #~ "заглавията ще се покажат в дясната част на програмата.

" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d нов запис" #~ msgstr[1] "%d нови записа" #~ msgid "No new items" #~ msgstr "Няма нови записи" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d непрочетен запис" #~ msgstr[1] "" #~ "%s\n" #~ "%d непрочетени записа" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Няма непрочетени записи" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Невалидна Atom емисия: неизвестен автор" #, fuzzy #~ msgid "This feed does not exist anymore!" #~ msgstr "Този запис не съдържа връзка!" #, fuzzy #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "%d записа \n" #~ msgstr[1] "%d записа \n" #, fuzzy #~ msgid "Feed Update" #~ msgstr "Временни файлове на емисията" #, fuzzy #~ msgid "Show details" #~ msgstr "Подробности" #, fuzzy #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "Отваряне на прозореца за предпочитанията за избраната емисия." #, fuzzy #~ msgid "Notification Settings" #~ msgstr "Уведомяване" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Показване на _изскачащ прозорец с новите заглавия." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Показване на _икона в зоната за уведомяване." #, fuzzy #~ msgid "Launch Item In _Tab" #~ msgstr "/Стартиране на записа в _таб" #, fuzzy #~ msgid "_Launch Item In Browser" #~ msgstr "/Стартиране на записа в браузър" #, fuzzy #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "/Копиране на _адреса на записа в буфера за обмен" #~ msgid "comments" #~ msgstr "коментари" #, fuzzy #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Свалянето на прикачения файл приключи: „%s“" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Свалянето на прикачения файл приключи: „%s“" #, fuzzy #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Свалянето на прикачения файл приключи: „%s“" #, fuzzy #~ msgid "Download finished." #~ msgstr "_Чрез програмата" #~ msgid "Choose download directory" #~ msgstr "Избор на папка за запазване на изтеглянията" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "Ръчно зададено:\n" #~ "(%s за URL)" #~ msgid "_Save downloads in" #~ msgstr "_Запазване на изтеглянията в" #~ msgid "Downloading Enclosure" #~ msgstr "Изтегля се приложения" #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Прескачане до следващия непрочетен запис. Ако е необходимо избира " #~ "следващата емисия с непрочетени записи." #, fuzzy #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "" #~ " --debug-cache Отпечатване на съобщенията за откриване на грешки при " #~ "обработката на кеша" #~ msgid "Update status" #~ msgstr "Състояние на обновяването" #~ msgid "was updated" #~ msgstr "е обновена" #~ msgid "was not updated" #~ msgstr "не е обновена" #~ msgid "The orientation of the tray." #~ msgstr "Ориентацията на тавата." #~ msgid "%s" #~ msgstr "%s" #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #, fuzzy #~ msgid "Search With ..." #~ msgstr "Търсене с _Feedster..." #, fuzzy #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "Търсене за „%s“" #~ msgstr[1] "Търсене за „%s“" #, fuzzy #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "%s

%d намерени резултата за „%s“

Списъкът в момента съдържа " #~ "всички съвпадения с указания шаблон за търсене. Ако искате да запазите за " #~ "постоянно този резултат, можете да натиснете бутона за виртуална папка в " #~ "прозореца за търсене и Liferea ще добави виртуална папка с резултатите в " #~ "списъка с емисии." #, fuzzy #~ msgid "Count" #~ msgstr "Относно програмата" #~ msgid "You have to select a feed entry" #~ msgstr "Трябва да изберете запис от някоя емисия" #~ msgid "(empty)" #~ msgstr "(празен)" #~ msgid "_Properties..." #~ msgstr "_Настройки..." #, fuzzy #~ msgid "Update out-dated feeds" #~ msgstr "Актуализиране на всички емисии" #, fuzzy #~ msgid "Force update of all feeds" #~ msgstr "Актуализиране на всички емисии" #, fuzzy #~ msgid "startup" #~ msgstr "При _стартиране:" #, fuzzy #~ msgid "feed updated" #~ msgstr "е обновена" #, fuzzy #~ msgid "feed added" #~ msgstr "Временни файлове на емисията" #, fuzzy #~ msgid "item selected" #~ msgstr "Премахване на _избраните" #, fuzzy #~ msgid "feed selected" #~ msgstr "Премахване на _избраните" #, fuzzy #~ msgid "item unselected" #~ msgstr "Няма избран запис" #, fuzzy #~ msgid "feed unselected" #~ msgstr "Премахване на _избраните" #, fuzzy #~ msgid "No script selected!" #~ msgstr "Няма избран запис" #, fuzzy #~ msgid "Create a new search feed." #~ msgstr "Създаване на поле за търсене от типа Feedster." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea не може да покаже съдържанието на този запис." #~ msgid "

View this item's content.

" #~ msgstr "

Преглед на съдържанието на този запис.

" #~ msgid "feedlist.opml" #~ msgstr "feedlist_bg.opml" #~ msgid " " #~ msgstr " " #, fuzzy #~ msgid " " #~ msgstr " " #, fuzzy #~ msgid " " #~ msgstr " " #~ msgid "Feed Source" #~ msgstr "Източник на данни" #, fuzzy #~ msgid "Hook" #~ msgstr "%s" #, fuzzy #~ msgid "Registered Scripts" #~ msgstr "Източник на данни" #~ msgid "text/plain" #~ msgstr "text/plain" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Това може да причини сериозни забавяния при зареждане на папки, " #~ "съдържащи много емисии." #~ msgid "Downloading Enclosures" #~ msgstr "Изтегляния" #~ msgid "Feed Cache Handling" #~ msgstr "Временни файлове" #~ msgid "Feed Name" #~ msgstr "Име на емисията" #~ msgid "Feed Update Settings" #~ msgstr "Актуализиране на емисиите" #~ msgid "HTTP Proxy Server" #~ msgstr "HTTP сървър-посредник" #~ msgid "Opening Enclosures" #~ msgstr "Отваряне" #~ msgid "Reading Headlines" #~ msgstr "Четене" #, fuzzy #~ msgid "Toolbar Settings" #~ msgstr "Изглед на менюто" #~ msgid "Update Interval" #~ msgstr "Интервал на актуализиране" #, fuzzy #~ msgid "Web Integration" #~ msgstr "Интервал на актуализиране" #~ msgid "At _startup:" #~ msgstr "При _стартиране:" #, fuzzy #~ msgid "Attention Profile" #~ msgstr "Идентифицирането е неуспешно" #, fuzzy #~ msgid "Create new script" #~ msgstr "Добавяне на нова емисия." #, fuzzy #~ msgid "Exec Command" #~ msgstr "_Команда" #~ msgid "http://lzone.de/liferea/" #~ msgstr "http://lzone.de/liferea/" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "" #~ "Неочакван край на последователността на знаците или повредено UTF-8 " #~ "кодиране! Някои знаци са пропуснати!" #~ msgid "" #~ "Error while reading cache file \"%s\" ! Cache file could not be loaded!" #~ msgstr "" #~ "Грешка при четенето на временния файл „%s“! Временният файл не може да " #~ "бъде зареден!" #~ msgid "" #~ "

XML error while parsing cache file! Feed cache file \"%s\" could not " #~ "be loaded!

" #~ msgstr "" #~ "

Грешка в XML по време на четенето на временния файл „%s“! Временният " #~ "файл не може да бъде зареден!

" #~ msgid "

\"%s\" is no valid cache file! Cannot read cache file!

" #~ msgstr "" #~ "

„%s“ не е валиден временен файл. Временният файл не може да бъде " #~ "прочетен!

" #~ msgid "There were errors while parsing cache file \"%s\"" #~ msgstr "Получиха се грешки при прегледа на временния файл „%s“" #~ msgid "Access Forbidden" #~ msgstr "Достъпът е забранен" #~ msgid "URL is invalid" #~ msgstr "URL-то е невалидно" #~ msgid "Unsupported network protocol" #~ msgstr "Неподдържан мрежови протокол" #~ msgid "Hostname could not be found" #~ msgstr "Хостът не може да бъде намерен" #~ msgid "Network connection was refused by the remote host" #~ msgstr "Връзката беше отказана от отдалечения хост" #~ msgid "Remote host did not finish sending data" #~ msgstr "Отдалеченият хост не приключи с изпращането на данните" #~ msgid "Too many HTTP redirects were encountered" #~ msgstr "Твърде много HTTP пренасочвания" #~ msgid "Remote host sent an invalid response" #~ msgstr "Отдалеченият хост изпрати невалиден отговор" #~ msgid "Webserver's authentication method incompatible with Liferea" #~ msgstr "Методът за идентификация пред уеб сървъра не е съвместим с Liferea" #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "Неуспех при автоматичното откриване - не са открити емисии!" #~ msgid "single item view" #~ msgstr "режим за преглеждане на един запис" #~ msgid "label133" #~ msgstr "етикет133" #~ msgid "_Limit cache to" #~ msgstr "_Ограничаване на временните файлове до" #~ msgid "items." #~ msgstr "записа." #~ msgid "Feed Loading Settings" #~ msgstr "" #~ "Оптимизиране на зареждането на емисиите" #~ msgid "Optimize for reduced _memory usage." #~ msgstr "По-малка употреба на пам_ет." #~ msgid "Optimize for _speed." #~ msgstr "По-висока _скорост." #~ msgid "Date Column Settings" #~ msgstr "Изглед на колоната с датата" #~ msgid "Display only _time" #~ msgstr "_Час" #~ msgid "Display _date and time" #~ msgstr "Час и _дата" #~ msgid "_User defined format:" #~ msgstr "Формат, избран от _Вас:" #~ msgid "" #~ "for expert users: specify a time format string, consult the strftime() " #~ "manpage for the format codes" #~ msgstr "" #~ "за напреднали потребители: указване на низ за форматиране на датата. За " #~ "подробности - погледнете страницата от ръководството за функцията " #~ "strftime()" #~ msgid "Please restart Liferea for changes to take effect." #~ msgstr "Рестартирайте Liferea, за да влязат в сила промените." #~ msgid " " #~ msgstr " " #~ msgid "Lower Right" #~ msgstr "Отдолу, вдясно" #~ msgid "Upper Right" #~ msgstr "Отгоре, вдясно" #~ msgid "Upper Left" #~ msgstr "Отгоре, вляво" #~ msgid "Lower Left" #~ msgstr "Отгоре, вляво" #~ msgid "Popup Placement" #~ msgstr "Разположение на изскачащите прозорци" #~ msgid "Show Menu _And Toolbar" #~ msgstr "Менюто и _лентата с инструментите" #~ msgid "Show _Menu Only" #~ msgstr "Само _менюто" #~ msgid "Show _Toolbar Only" #~ msgstr "Само _лентата с инструментите" #~ msgid "" #~ "Liferea reuses the GNOME proxy settings. If you use GNOME you can " #~ "change these settings in the GNOME Control Center." #~ msgstr "" #~ "Liferea използва настройките за сървъра-посредник към GNOME. Ако " #~ "използвате GNOME можете да промените тези настройки в Контролния център " #~ "на GNOME." #~ msgid "_Enable Proxy" #~ msgstr "_Включване на сървър-посредник" #~ msgid "Liferea Homepage" #~ msgstr "" #~ "Страница на Liferea" #~ msgid "" #~ "Copyright (c) 2003-2006\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgstr "" #~ "Авторски права (c) 2003-2006\n" #~ "Lars Lindner и \n" #~ "Nathan J. Conrad \n" #, fuzzy #~ msgid "" #~ "Code, Patches, Debugging\n" #~ "\n" #~ "James Doherty\n" #~ "Jeremy Messenger\n" #~ "John McKnight\n" #~ "Tomasz Maka\n" #~ "Karl Soderstrom\n" #~ "Christophe Barbe\n" #~ "Juho Snellman\n" #~ "Roshan Revankar\n" #~ "Oliver Feiler\n" #~ "Niklas Morberg\n" #~ "Johannes Schlueter\n" #~ "Pierre Phaneuf\n" #~ "ahmed el-helw\n" #~ "James Bowes\n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary\n" #~ "Christoph Hohmann\n" #~ "Raphael Slinckx\n" #~ "Bjorn Monnens\n" #~ "Aristotle Pagaltzis\n" #~ "Norman Jonas\n" #~ "and many more...\n" #~ "\n" #~ "Code from other projects\n" #~ "\n" #~ "Anders Carlsson (tray icon support)\n" #~ "Philippe Martin, Brion Vibber (favicon support)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Included Software\n" #~ "\n" #~ "Liferea uses the XSPF Web Music Player to \n" #~ "allow direct podcast playback. This player was \n" #~ "written by Fabricio Zuardi and can be found \n" #~ "at http://musicplayer.sourceforge.net" #~ msgstr "" #~ "Код, поправки, изчистване на грешки\n" #~ "\n" #~ "James Doherty <...>\n" #~ "Jeremy Messenger \n" #~ "John McKnight <...>\n" #~ "Tomasz Maka \n" #~ "Karl Soderstrom \t\n" #~ "Christophe Barbe \n" #~ "Juho Snellman \n" #~ "Roshan Revankar \n" #~ "Oliver Feiler \n" #~ "Niklas Morberg \n" #~ "Johannes Schlueter \n" #~ "Pierre Phaneuf \n" #~ "ahmed el-helw \n" #~ "James Bowes \n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary \n" #~ "Christoph Hohmann \n" #~ "Raphael Slinckx \n" #~ "and many more...\n" #~ "\n" #~ "Код от други проекти\n" #~ "\n" #~ "Anders Carlsson (tray icon support)\n" #~ "Philippe Martin, Brion Vibber (favicon support)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)" #~ msgid "Contributors" #~ msgstr "Сътрудници" #~ msgid "Translation" #~ msgstr "Превод" #~ msgid "Rule" #~ msgstr "Правило" #, fuzzy #~ msgid "" #~ "Note: Items are added to the search folder if at least one additive rule\n" #~ "matches. They are removed if at least one removing rule matches." #~ msgstr "" #~ "Бележка: Записи се добавят във виртуалната папка, ако съвпадат поне с " #~ "едно правило за добавяне. Ако поне един правило за премахване съвпада, те " #~ "се извеждат от нея." #~ msgid "Saves this search as a VFolder, which will appear in the feed list." #~ msgstr "" #~ "Запазване на резултатите от това търсене като виртуална папка, която ще " #~ "се появи в списъка с емисии." #~ msgid "VFolder" #~ msgstr "Виртуална папка" #~ msgid " --help Print this help and exit" #~ msgstr " --help Показване на това съобщение и напускане" #~ msgid " --mainwindow-state=STATE" #~ msgstr " --mainwindow-state=СЪСТОЯНИЕ" #~ msgid " Start Liferea with its main window in STATE." #~ msgstr "" #~ " Стартиране на Liferea с основен прозорец в СЪСТОЯНИЕ-" #~ "то." #~ msgid " --debug-plugins Print debugging messages when loading plugins" #~ msgstr "" #~ " --debug-plugins Отпечатване на съобщенията за откриване на грешки при " #~ "зареждане на приставките" #~ msgid "The --mainwindow-state argument must be given a parameter.\n" #~ msgstr "Опцията --mainwindow-state изисква аргумент.\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "Опцията --session изисква аргумент.\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "Liferea се сблъска с непознат аргумент %s\n" #~ msgid "" #~ "Another copy of Liferea was found to be running. Please use it instead. " #~ "If there is no other copy of Liferea running, please delete the \"~/." #~ "liferea/lock\" lock file." #~ msgstr "" #~ "Засечено е друго работещо копие на Liferea. Използвайте него вместо това. " #~ "Ако нямате друго копие на Liferea, изтрийте файла „~/.liferea/lock“." #~ msgid "Modules not supported! (%s)" #~ msgstr "Модулите не се поддържат! (%s)" #~ msgid "Scanning for plugins (%s):" #~ msgstr "Търсене на приставки (%s):" #~ msgid "does match" #~ msgstr "съвпада" #~ msgid "does not match" #~ msgstr "не съвпада" #~ msgid "Could not download \"%s\". Will retry in %d seconds." #~ msgstr "„%s“ не може да бъде свален. След %d секунди ще се опита наново." #~ msgid "Note: Using the subscriptions filter disables drag & drop" #~ msgstr "" #~ "Бележка: Употребата на филтър на емисиите спира поддръжката на изтегляне " #~ "и пускане" #, fuzzy #~ msgid "" #~ "Sorry, I was not able to load any installed browser plugin! Try the --" #~ "debug-plugins option to get debug information!" #~ msgstr "" #~ "За съжаление никакви модули за инсталирани браузъри не можаха да бъдат " #~ "заредени! Използвайте опцията --debug-all, за да получите информация за " #~ "изчистване на грешки!" #, fuzzy #~ msgid "" #~ "
This is an unstable version of Liferea 1.1. It " #~ "should not be used for production yet! If you want to use Liferea " #~ "regularily please download the last stable version from SourceForge!" #~ msgstr "" #~ "
Това е много нестабилна версия на Liferea 1.1. " #~ "Кодът може да е в неизползваемо състояние. Да се използва от " #~ "разработчици! Ако искате да ползвате Liferea за ежедневна работа - " #~ "изтеглете последната стабилна версия от сайта на SourceForge!
" #~ msgid "_Program" #~ msgstr "_Програма" #~ msgid "Updates all subscriptions. This does not update OCS directories." #~ msgstr "" #~ "Актуализиране на всички емисии. OCS директориите не се осъвременяват." #~ msgid "_Search" #~ msgstr "_Търсене" #~ msgid "Update _Selected" #~ msgstr "Актуализиране на _избраната" #~ msgid "_Delete Selected" #~ msgstr "_Изтриване на избраната емисия" #~ msgid "Toggles the item list mode between condensed and normal mode." #~ msgstr "Превключване между общ и нормален изглед за показване на записи." #~ msgid "/Toggle _Read Status" #~ msgstr "/Превключване на състояние: \"прочетено/непрочетено\"" #~ msgid "/Toggle Item _Flag" #~ msgstr "/Прикрепяне на _флаг към записа" #~ msgid "/_Next Unread Item" #~ msgstr "/Следващ непрочетен запис" #~ msgid "/_Increase Text Size" #~ msgstr "/_Увеличаване размера на текста" #~ msgid "/_Decrease Text Size" #~ msgstr "/_Намаляване размера на текста" #~ msgid "/Toggle _Online|Offline" #~ msgstr "/_Режим „изключен/включен“" #~ msgid "/_Preferences..." #~ msgstr "/_Настройки..." #~ msgid "/_Show Window" #~ msgstr "/_Показване на прозорец" #~ msgid "/_Quit" #~ msgstr "/_Спиране на програмата" #~ msgid "/_New/New _Subscription..." #~ msgstr "/_Нов/Нова _емисия..." #, fuzzy #~ msgid "/_New/New _Folder..." #~ msgstr "/_Нов/Нова _виртуална папка..." #, fuzzy #~ msgid "/_New/New S_earch Folder..." #~ msgstr "/_Нов/Нова _виртуална папка..." #, fuzzy #~ msgid "/_New/New S_ource..." #~ msgstr "/_Нов/_Нова папка..." #~ msgid "/_Rename Folder..." #~ msgstr "/П_реименуване на папка..." #~ msgid "/_Delete Folder" #~ msgstr "/_Изтриване на папка" #~ msgid "/_Properties..." #~ msgstr "/_Настройки..." #~ msgid "Update only feeds scheduled for updates" #~ msgstr "Осъвременяване само на емисии, разграфени за осъвременяване" #~ msgid "Reset feed update timers (Update no feeds)" #~ msgstr "Изчистване на хронометрите за осъвременяване на емисиите" #~ msgid "This item's content is invalid." #~ msgstr "Съдържанието на този запис не е валидно." #~ msgid "Cookie for %s has expired!" #~ msgstr "Бисквитката за %s е изтекла!" #~ msgid "Liferea notification" #~ msgstr "Уведомяване" #, fuzzy #~ msgid "" #~ "
You may want to validate the feed using Може да валидирате емисията чрез FeedValidator." #~ msgstr "\">валидатора на емисии." #~ msgid "user defined command" #~ msgstr "потребителска команда" #~ msgid "Item:" #~ msgstr "Запис:" #~ msgid "date" #~ msgstr "дата" #~ msgid "feed generator" #~ msgstr "генератор" #~ msgid "contributors" #~ msgstr "сътрудници" #~ msgid "language" #~ msgstr "език" #~ msgid "feed published on" #~ msgstr "емисия публикувана на" #~ msgid "content last updated" #~ msgstr "съдържанието е осъвременено за последно" #~ msgid "managing editor" #~ msgstr "отговорен редактор" #~ msgid "webmaster" #~ msgstr "отговорник за уеб сървъра" #~ msgid "report errors to" #~ msgstr "докладва за грешка на" #~ msgid "original source" #~ msgstr "оригинален източник" #~ msgid "original time" #~ msgstr "оригинално време" #~ msgid "license" #~ msgstr "лиценз" #~ msgid "type" #~ msgstr "тип" #~ msgid "format" #~ msgstr "формат" #~ msgid "identifier" #~ msgstr "идентификатор" #~ msgid "source" #~ msgstr "изходен код" #~ msgid "coverage" #~ msgstr "покритие" #~ msgid "vfolder" #~ msgstr "виртуална папка" #~ msgid "VFolder:" #~ msgstr "Виртуална папка:" #~ msgid "%d items \n" #~ msgstr "%d записа \n" #, fuzzy #~ msgid "" #~ "" #~ msgstr "" #~ "" #~ msgid "New _VFolder..." #~ msgstr "Нова _виртуална папка..." #~ msgid "Adds a new plugin instance to the feed list." #~ msgstr "Добавяне на нова приставка към списъка с емисии." #, fuzzy #~ msgid "%s - %d unread item" #~ msgid_plural "%s - %d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d непрочетен запис" #~ msgstr[1] "" #~ "%s\n" #~ "%d непрочетени записа" #~ msgid "/_New/New F_older..." #~ msgstr "/_Нов/_Нова папка..." #~ msgid "New VFolder" #~ msgstr "Нова виртуална папка" #~ msgid "

Could not find Atom 1.0 header!

" #~ msgstr "

Не може да намери началото на Atom·1.0!

" #~ msgid "internal OCS namespace parsing error!" #~ msgstr "вътрешна грешка в анализатора на пространството от имена OCS!" #~ msgid "no namespace handler for <%s:%s>!\n" #~ msgstr "" #~ "липсва програма за обработка на пространството от имена за <%s:%s>!\n" #~ msgid "

Could not find RDF header!

" #~ msgstr "

Не може да намери началото на RDF!

" #~ msgid "

Could not find OPML header!

" #~ msgstr "Не може да бъде намерена началото на OPML!" #~ msgid "

Could not find Atom/Echo/PIE header!

" #~ msgstr "

Не може да бъде намерено началото на OPML!

" #~ msgid "

Could not find RDF/RSS header!

" #~ msgstr "

Не може да бъде намерена заглавната част на RDF/RSS!

" #~ msgid "" #~ "The included HTML tag is not supported with GtkHTML2.\n" #~ "Included Plugins might not be displayed." #~ msgstr "" #~ "Етикетът за елемент в HTML - не се поддържа от GtkHTML2.\n" #~ "Включените обекти няма да бъдат показани." #~ msgid "" #~ "\n" #~ "Trying to load the Mozilla browser module... Note that this\n" #~ "might not work with every Mozilla version. If you have problems\n" #~ "and Liferea does not start, try to set MOZILLA_FIVE_HOME to\n" #~ "another Mozilla installation or delete the gconf configuration\n" #~ "key /apps/liferea/browser-module!\n" #~ "\n" #~ msgstr "" #~ "\n" #~ "Програмата опитва да зареди приставката за браузъра Mozilla... Възможно " #~ "е\n" #~ "това да не работи с всяка версия на Mozilla. Ако имате проблеми\n" #~ "и Liferea не се стартира, опитайте да зададете MOZILLA_FIVE_HOME към\n" #~ "друга инсталация на Mozilla или изтрийте ключа за настройки в gconf\n" #~ "key·/apps/liferea/browser-module!\n" #~ "\n" #~ msgid "" #~ "Failed to open HTML widget module (%s) specified in configuration!\n" #~ "%s\n" #~ msgstr "" #~ "Неуспех при отварянето на модула за графичен обект за HTML (%s), който е " #~ "указан в настройките!\n" #~ "%s\n" #~ msgid "Htmlview API mismatch!" #~ msgstr "Несъвпадение на Htmlview API!" #~ msgid "Detected module is not a valid htmlview module!" #~ msgstr "Засеченият модул е невалиден модул за htmlview!" #~ msgid "Available browser modules (%s):\n" #~ msgstr "Налични модули за браузъра %s:\n" #~ msgid "Loading configured browser module (%s)!\n" #~ msgstr "Зареждане на настроен модул за браузъра %s!\n" #~ msgid "No browser module configured!\n" #~ msgstr "Няма настроен модул за браузъра!\n" #~ msgid "trying to load browser module %s (%s)\n" #~ msgstr "опит за зареждане на модула за браузъра %s (%s)\n" #~ msgid "internal error! time conversion error! mktime failed!\n" #~ msgstr "" #~ "вътрешна грешка! грешка при преобразуването на датата! mktime е " #~ "неуспешна!\n" #~ msgid "Invalid ISO8601 date format! Ignoring information!\n" #~ msgstr "" #~ "Датата не е във формат ISO8601! Игнориране на информацията !\n" #~ msgid "" #~ "

Could not determine the feed type. Please check that it is a valid type and listed in the supported formats." #~ "

" #~ msgstr "" #~ "

Типът на емисията не може да бъде определен. Проверете дали той е валиден и поддържан формат.

" #~ msgid "Please do a search first!" #~ msgstr "Първо направете търсене!" #~ msgid "You must select a feed entry" #~ msgstr "Трябва да изберете запис" #~ msgid "You must select a feed entry." #~ msgstr "Трябва да изберете запис." #~ msgid "A folder must be selected." #~ msgstr "Трябва да изберете папка." #~ msgid "" #~ "internal error! unknown entry type! cannot display appropriate icon!\n" #~ msgstr "" #~ "вътрешна грешка! непознат тип запис! не може да бъде изобразена подходяща " #~ "икона!\n" #~ msgid "Cannot load HTML widget module (%s)!" #~ msgstr "Неуспех при зареждането на модула за графичния обект за HTML (%s)!" #~ msgid "New Feed" #~ msgstr "Нова емисия" #~ msgid "Next Unread" #~ msgstr "Следващ непрочетен" #~ msgid "Update All" #~ msgstr "Осъвременяване на всички" #~ msgid "Viewing Mode" #~ msgstr "Режим на изгледа" #~ msgid "Switches between 2 and 3 pane mode." #~ msgstr "Превключване между 2 и 3 панела." #~ msgid "URL" #~ msgstr "URL" #~ msgid "" #~ "%s\n" #~ "%d unread item%s\n" #~ "%d unread items" #~ msgstr "" #~ "%s\n" #~ "%d непрочетен запис%s\n" #~ "%d непрочетени записа" liferea-1.12.7/po/ca.po000066400000000000000000002244621352135647700146010ustar00rootroot00000000000000# Catalan translation of Liferea. # Copyright © 2005, 2006 Free Software Foundation, Inc. # This file is distributed under the same license as the liferea package. # Jordi Mallach , 2005. # Gil Forcada , 2007, 2009, 2012, 2013. # msgid "" msgstr "" "Project-Id-Version: liferea 1.10-rc1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2013-05-21 12:31+0200\n" "Last-Translator: Gil Forcada \n" "Language-Team: Catalan \n" "Language: ca\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" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Lector de canals de notícies" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "El Liferea és fora de línia" #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "Sincronització amb els equips propers" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "Sincronització amb els equips propers" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "Sincronització amb els equips propers" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "Sincronització amb els equips propers" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 #, fuzzy msgid "Play Podcasts" msgstr "Podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Lector de canals de notícies" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Lector de canals de notícies Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Llegiu canals de notícies i blocs" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Aquest canal ja no es manté i no està disponible. El Liferea ja no " "l'actualitzarà més, però encara podeu accedir als titulars que hi ha a la " "memòria cau." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
HTTP error code : " msgstr "" "Ha fallat l'última actualització d'aquesta subscripció
Codi d'error " "HTTP : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "S'han produït errors en analitzar aquest canal" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Detalls de l'error de l'analitzador" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Detalls" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" "Us podeu posar en contacte amb l'autor/administrador del canal per explicar-" "li això." #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "S'han produït errors en filtrar aquest canal" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Detalls de l'error del filtre" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Canal:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Font:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Editor" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Copyright" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "fill amb" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "titulars sense llegir" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Carpeta:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Font" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Canal" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Arxivat a" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Autor" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Compartit per" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "A través de" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Relacionats" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Publicat també a" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Creador" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Comentaris" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "S'està actualitzant..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Secció" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Departament" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Contenidor de notícies:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Podeu afegir elements a aquest contenidor de notícies si seleccioneu «Copia " "al contenidor de notícies» del menú contextual de la llista d'elements." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Carpeta de cerca:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Ha fallat l'ordre del navegador: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "S'està iniciant: «%s»" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Error d'autenticació" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "No s'ha pogut crear el directori de memòria cau «%s»" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Avui a les %H:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Ahir a les %H:%M" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %H:%M" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%b %d %H:%M" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "«%s» no és un un fitxer de configuració de tipus d'adjunció vàlid" #: ../src/enclosure.c:292 #, fuzzy msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Encara no heu configurat cap eina de baixada. Ho podeu fer des de la " "pestanya «Baixada» del diàleg que trobareu a Eines/Preferències." #: ../src/enclosure.c:311 #, fuzzy, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Ha fallat l'ordre:\n" "\n" "%s\n" "\n" "Comproveu que l'eina de baixada està instal·lada i funciona correctament. La " "podeu canviar des de la pestanya «Baixada» del diàleg que trobareu a Eines/" "Preferències." #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "S'ha produït un error en canviar el nom de %s a %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "S'ha detectat un error en la sintaxi XML en llegir el fitxer OPML. No s'ha " "pogut importar «%s»" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "El document és buit. El document OPML «%s» no hauria d'ésser buit en " "importar-lo." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "«%s» no és un document OPML vàlid. El Liferea no el pot importar." #: ../src/export.c:469 msgid "Imported feed list" msgstr "Llista de canals importats" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importa la llista de canals" #: ../src/export.c:481 msgid "Import" msgstr "Importa" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "Fitxers OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "S'ha produït un error en exportar la llista de canals" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "S'ha exportat la llista de canals" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Exporta la llista de canals" #: ../src/export.c:498 msgid "Export" msgstr "Exporta" #: ../src/feed.c:317 msgid "" "

Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

" msgstr "" "

No s'ha pogut detectar el tipus d'aquest canal. Verifiqueu que la font " "apunti realment a un recurs proporcionat per un dels formats de sindicació " "coneguts.

Sortida de l'analitzador XML:
" #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "s'ha actualitzat «%s»..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "no està disponible «%s»" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "L'URL de subscripció que heu proporcionat al Liferea apunta a una pàgina web " "i el descobridor automàtic no hi ha trobat cap canal. Potser aquesta pàgina " "web no permet el descobriment automàtic del canal." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "" "S'ha detectat un error en la sintaxi XML en llegir el canal. No s'ha pogut " "carregar el canal «%s»." #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "El document és buit" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "L'XML no és vàlid" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "La font apunta a un document HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "No s'ha pogut determinar el tipus de canal." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "No hi ha elements sense llegir " #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Inicia el Liferea amb la finestra principal en l'«ESTAT» determinat. " "L'«ESTAT» pot ser «shown» (visible), «iconified» (iconificada), o " "«hidden» (amagada)" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "ESTAT" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Mostra la informació sobre la versió i surt" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Afegeix una subscripció nova" #: ../src/liferea_application.c:284 msgid "uri" msgstr "URI" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Mostra tot tipus de missatges de depuració" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Mostra missatges de depuració de la gestió de la memòria cau" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Mostra missatges de depuració de la gestió de la configuració" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Mostra missatges de depuració de la gestió de la base de dades" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "" "Mostra missatges de depuració de totes les funcions de l'interfície gràfica" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Habilita la depuració del renderitzat de l'HTML. Cada vegada que el Liferea " "renderitzi HTML també crearà una còpia de l'HTML generat a ~/.cache/liferea/" "output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Mostra missatges de depuració de tota l'activitat de xarxa" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Mostra missatges de depuració de totes les funcions d'anàlisi" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Mostra missatges de depuració quan alguna funció tardi massa a processar" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Mostra missatges de depuració en entrar/sortir de les funcions" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Mostra missatges de depuració del procés d'actualització dels canals" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "" "Mostra missatges de depuració de les coincidències de les carpetes de cerca" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Mostra missatges de depuració detallats" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Mostra missatges de depuració del tema seleccionat" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "S'ha cancel·lat la petició d'actualització" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "No s'ha pogut resoldre el nom de l'ordinador remot" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "No s'ha pogut resoldre el nom del servidor intermediari" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "No s'ha pogut connectar a l'ordinador remot" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "No s'ha pogut connectar al servidor intermediari" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "S'ha produït un error de xarxa o l'altre extrem ha tancat la connexió " "inesperadament" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "El recurs s'ha migrat de forma permanent a una ubicació nova" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "No esteu autoritzat a baixar-vos aquest canal. Actualitzeu el vostre nom " "d'usuari i la contrasenya en el quadre de diàleg de les propietats del canal" #: ../src/net.c:476 msgid "Payment required" msgstr "Es requereix pagament" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "No podeu accedir en aquest recurs" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "No s'ha trobat el recurs" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "No es permet utilitzar aquest mètode" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "No acceptable" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Es requereix autenticació a través de servidor intermediari" #: ../src/net.c:482 msgid "Request timed out" msgstr "S'ha esgotat el temps de la sol·licitud" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "El recurs ja no existeix, cancel·leu la subscripció." #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "S'ha produït un error intern en el procés d'actualització" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "El canal no és disponible: el servidor ha sol·licitat una redirecció no " "implementada" #: ../src/net.c:492 msgid "Client Error" msgstr "Error del client" #: ../src/net.c:494 msgid "Server Error" msgstr "Error del servidor" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "S'ha produït un error de xarxa desconegut" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Element" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "conté" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "no conté" #: ../src/rule.c:175 msgid "Item title" msgstr "Títol de l'element" #: ../src/rule.c:176 msgid "Item body" msgstr "Cos de l'element" #: ../src/rule.c:177 msgid "Read status" msgstr "Estat de lectura" #: ../src/rule.c:177 msgid "is unread" msgstr "no està llegit" #: ../src/rule.c:177 msgid "is read" msgstr "està llegit" #: ../src/rule.c:178 msgid "Flag status" msgstr "Estat de senyalament" #: ../src/rule.c:178 msgid "is flagged" msgstr "està senyalat" #: ../src/rule.c:178 msgid "is unflagged" msgstr "no està senyalat" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "inclòs" #: ../src/rule.c:179 msgid "not included" msgstr "exclòs" #: ../src/rule.c:180 msgid "Category" msgstr "Categoria" #: ../src/rule.c:180 msgid "is set" msgstr "té" #: ../src/rule.c:180 msgid "is not set" msgstr "no té" #: ../src/rule.c:181 msgid "Feed title" msgstr "Títol del canal" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Ja s'està actualitzant la subscripció «%s»" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "Ja no es manté la subscripció «%s». El Liferea ja no l'actualitzarà més." #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "S'està actualitzant la icona del canal «%s»" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "S'ha produït un error en llegir aquesta subscripció. Verifiqueu-ne l'URL i " "la sortida del terminal." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "L'URL de «%s» ha canviat permanentment i s'ha actualitzat" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "«%s» ja no es manté. El Liferea ja no l'actualitzarà més" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "«%s» no ha canviat des de l'última actualització" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "S'està actualitzant «%s»" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "" "S'ha produït un error en obrir el fitxer temporal %s per utilitzar-lo per al " "filtratge" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s ha sortit amb l'estat %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Error: no s'ha pogut obrir el conducte «%s»" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Error: no s'ha pogut obrir el fitxer «%s»" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Error: no hi ha cap fitxer «%s»" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Carpeta de cerca nova" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Hi ha hagut altres errors. S'ha truncat la sortida]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "Analitzador XML: no s'ha pogut analitzar el document:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Adjuncions" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " Bytes" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d adjunció" msgstr[1] "%d adjuncions" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Escolliu un fitxer" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Extensió de fitxer .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "No s'ha pogut trobar el fitxer de mapa de píxels: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d nova)" msgstr[1] " (%d noves)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d sense llegir%s" msgstr[1] "%d sense llegir%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Temes d'ajuda (en anglès)" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Referència ràpida (en anglès)" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "PMF (en anglès)" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Cerca avançada" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Introduïu el nom d'usuari i la contrasenya per a «%s» (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Font desconeguda" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "Cancel·la-ho _tot" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Tots els fitxers" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "" "El Liferea és en mode de fora de línia. No és poden fer actualitzacions." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Cerca a tots els canals" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Marca'ls tots com a llegits" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Segur que voleu suprimir «%s»?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Aquest element no te cap enllaç especificat" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Sense títol ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Titular" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Heu de seleccionar un canal per poder-ne suprimir els seus elements" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "No s'ha seleccionat cap element" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Obre en una _pestanya" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "_Obre'l en el navegador" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Obre'l en un navegador _extern" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Copia'l al contenidor de notícies" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "_Adreça d'interès a %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "_Copia la ubicació de l'element" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Commuta l'estat de _lectura" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Commuta el _senyalador de l'element" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "_Suprimeix l'element" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Obre l'adjunció..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Anomena i desa..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Copia la ubicació de l'enllaç" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Actualitza" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Actualitza la carpeta" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Subscripció _nova..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "_Carpeta nova..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Carpeta de c_erca nova..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "_Font nova..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "C_ontenidor de notícies nou..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Nou" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Ordena els canals" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_Marca'ls tots com a llegits" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "_Reconstrueix" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Suprimeix" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Propietats" #: ../src/ui/popup_menu.c:343 #, fuzzy msgid "Convert To Local Subscriptions..." msgstr "Subscripció _nova..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "Per defecte del GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Text sota les icones" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Text al costat de les icones" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Només icones" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Només text" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minuts" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "hores" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dies" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Tecla espaiadora" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " tecla espaiadora" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " tecla espaiadora" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Visualització normal" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Visualització àmplia" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Visualització combinada" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Navegador predeterminat" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Tipus" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Programa" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(buit)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "S'està reconstruint" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Supressió de l'entrada" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Segur que voleu suprimir «%s» i el seus continguts?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Segur que voleu suprimir «%s»?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Confirmació de la supressió" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Confirmació de la supressió" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "" "El proveïdor d'aquest canal suggereix un interval d'actualització de %d " "minut." msgstr[1] "" "El proveïdor d'aquest canal suggereix un interval d'actualització de %d " "minuts." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Aquest canal no especifica cap interval d'actualització recomanat." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Sense títol" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Lloc web" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Subscripció nova" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planeta, llista de blocs, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Escolliu el fitxer OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Subscripció a un OPML nou" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "No s'ha trobat cap tipus de font de llista de canals" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Tipus de font" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Ha fallat l'entrada al Google Reader" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 #, fuzzy msgid "Could not parse JSON returned by Reedah API!" msgstr "No s'ha pogut analitzar el JSON que ha retornat l'API del tt-rss." #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 #, fuzzy msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "No s'ha pogut analitzar el JSON que ha retornat l'API del tt-rss." #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Lector de canals de notícies" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Obre l'enllaç en una _pestanya" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "_Obre l'enllaç en el navegador" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "Obre l'enllaç en el navegador _extern" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_Publica l'enllaç a %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Copia la ubicació de l'enllaç" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "Anomena i desa la _imatge" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "_Copia la ubicació de la imatge" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "Anomena i desa l'enllaç" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "Anomena i desa la _imatge" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Subscriu..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "_Augmenta la mida del text" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Redueix la mida del text" #: ../glade/about.ui.h:1 msgid "About" msgstr "Quant a" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "El Liferea és un agregador de notícies per a GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Pàgina inicial del Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autenticació" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Nom d'usuari:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Contrasenya:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Obre l'adjunció" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Obre l'adjunció de tipus:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Què voleu que faci el Liferea amb aquesta adjunció? Escriviu aquí sota " "l'ordre que voleu que s'executi. L'URL de l'adjunt s'utilitzarà com a " "argument d'aquesta ordre:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Navega" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Fes el mateix per als tipus de fitxer semblants a partir d'ara." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Afegeix un compte de Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Introduïu les vostres dades del compte de Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Contrasenya" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "Nom d'_usuari (correu electrònic)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Visualitza els titulars" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Titulars" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Marca'ls tots com a llegits" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Marca'ls tots com a llegits" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Carpeta nova" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "Nom de la _carpeta:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Crea un contenidor de notícies" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Nom del contenidor de notícies:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Font del canal" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Tipus de font:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Ordre" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "Fitxer _local" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Seleccioneu un fitxer..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Font:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Baixada / Post processament" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "_No utilitzis el servidor intermediari per les baixades" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "_Utilitza un filtre de conversió" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "El Liferea pot utilitzar connectors de filtres externs per poder accedir a " "canals i carpetes que utilitzin formats no implementats pel propi Liferea. " "Vegeu la documentació per a més informació." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Converteix _utilitzant:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Selecció de la font" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Seleccioneu el tipus de font que voleu afegir..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Afegeix un OPML/planeta" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Especifiqueu un fitxer local o un URL que apunti a una llista de canals OPML " "vàlida." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Ubicació" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Seleccioneu un fitxer" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Preferències del Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Gestió de la memòria cau dels canals" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_Nombre per defecte d'elements a desar per canal:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Paràmetres de l'actualització del canal" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Nota: Establiu un temps d'actualització raonable. Normalment no serveix " "de res actualitzar més d'un cop cada hora." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "_Actualitza totes les subscripcions en iniciar." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "_Interval d'actualització per defecte dels canals:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Canals" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Paràmetres de visualització de les carpetes" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "" "_Mostra els elements de tots els canals fills en seleccionar una carpeta." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "_Oculta els elements llegits." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Icones dels canals (Favicons)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Actualitza totes les icones dels canals ara" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Carpetes" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Lectura de titulars" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "_Fulleja els articles amb:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "Mode de visualització per _defecte:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Integració web" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Publica les adreces d'interès a" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Paràmetres del navegador intern" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Obre els enllaços a la _finestra del Liferea." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Inhabilita el Javascript." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_Habilita els connectors del navegador." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Paràmetres del navegador extern" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Navegador:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Manual:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s per l'URL)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Navegador" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Paràmetres de la barra d'eines" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Oculta la barra d'eines." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Etiquetes dels _botons de la barra d'eines:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Interfície gràfica" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "Servidor intermediari HTTP" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "Detecta _automàticament (del GNOME o de l'entorn)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Sense servidor intermediari" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "Paràmetres _manuals:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Ordinador del servidor intermediari:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Port del servidor intermediari:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Utilitza l'autenticació del _servidor intermediari" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "_Usuari del servidor intermediari:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "_Contrasenya del servidor intermediari:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Servidor intermediari" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Paràmetres de visualització de les carpetes" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "S'estan baixant les adjuncions" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Baixa-les utilitzant" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Obre les adjuncions" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Adjuncions" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Propietats de la subscripció" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Nom del canal" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Nom del canal:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Interval d'actualització" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Utilitza l'interval d'actualització global per defecte." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "Interval d'actualització específic del _canal" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_No actualitzis aquest canal automàticament." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "El proveïdor d'aquest canal suggereix un interval d'actualització de %d " "minuts." #: ../glade/properties.ui.h:11 msgid "General" msgstr "General" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "El Liferea pot utilitzar connectors de filtres externs per poder accedir a " "canals i carpetes que utilitzin formats no implementats pel propi Liferea. " "Vegeu la documentació per a més informació." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Els paràmetres de la memòria cau controlen si els continguts dels canals es " "desen quan es surt del Liferea. Els elements marcats es desen sempre a la " "memòria cau." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "Paràmetres _per defecte de la memòria cau" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Inhabilita la memòria cau" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Memòria cau il·limitada" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "_Nombre d'elements a desar:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Arxiu" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Utilitza _autenticació HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Baixades" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_Baixa automàticament totes les adjuncions d'aquest canal." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Carrega automàticament _l'enllaç de l'element en el navegador configurat " "quan es seleccionin els articles." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Ignora els _comentaris dels canals per aquesta subscripció." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Marca els elements baixats com a llegits." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Avançat" #: ../glade/reedah_source.ui.h:1 #, fuzzy msgid "Add Reedah Account" msgstr "Afegeix un compte de Google Reader" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Introduïu les vostres dades del compte de Google Reader." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Canvia el nom" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "Nom _nou:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Propietats de la carpeta de cerca" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "_Nom de la cerca:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Cerca elements que coincideixen amb els criteris següents" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Coincidència de _qualsevol regla" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "Han de coincidir _totes les regles" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Cerca avançada" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "Carpeta de _cerca..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Cerca a tots els canals" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Avançat..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Inicia la cerca del text especificat a tots els canals. Els resultats de la " "cerca apareixeran a la llista d'elements." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Cerca:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Introduïu una cadena de cerca que el Liferea hauria de trobar en els títols " "d'elements o en el seu contingut." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Avançat..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Introduïu la ubicació d'un lloc web per a utilitzar la descoberta automàtica " "del canal, o en cas que la conegueu, la ubicació exacta del canal." #: ../glade/theoldreader_source.ui.h:1 #, fuzzy msgid "Add TheOldReader Account" msgstr "Afegeix un compte de Google Reader" #: ../glade/theoldreader_source.ui.h:2 #, fuzzy msgid "Please enter your TheOldReader account settings." msgstr "Introduïu les vostres dades del compte de Google Reader." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Afegeix un compte de Tiny Tiny RSS" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "Introduïu les dades del compte del tt-rss." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "URL del _servidor" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "Nom d'_usuari" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Monitor d'actualitzacions" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "Cancel·la-ho _tot" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Sol·licituds pendents" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "S'està baixant" #~ msgid "_Subscriptions" #~ msgstr "_Subscripcions" #~ msgid "Update _All" #~ msgstr "_Actualitza'ls tots" #~ msgid "Updates all subscriptions." #~ msgstr "Actualitza totes les subscripcions." #~ msgid "Mark All As _Read" #~ msgstr "Marca'ls tots com a _llegits" #~ msgid "Marks read every item of every subscription." #~ msgstr "Marca cada element de cada subscripció com a llegit." #~ msgid "_Import Feed List..." #~ msgstr "_Importa una llista de canals..." #~ msgid "Imports an OPML feed list." #~ msgstr "Importa una llista de canals OPML." #~ msgid "_Export Feed List..." #~ msgstr "_Exporta la llista de canals..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Exporta la llista de canals com a OPML." #~ msgid "_Quit" #~ msgstr "_Surt" #~ msgid "_Feed" #~ msgstr "_Canal" #~ msgid "Remove _All Items" #~ msgstr "Suprimeix tots els _elements" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Suprimeix tots els elements del canal seleccionat." #~ msgid "_Item" #~ msgstr "_Element" #~ msgid "Previous Item" #~ msgstr "Element anterior" #~ msgid "Next Item" #~ msgstr "Element següent" #~ msgid "_Next Unread Item" #~ msgstr "Element sense llegir _següent" #~ msgid "_View" #~ msgstr "_Visualitza" #~ msgid "Increases the text size of the item view." #~ msgstr "Augmenta la mida del text de l'element visualitzat." #~ msgid "Decreases the text size of the item view." #~ msgstr "Redueix la mida del text de l'element visualitzat." #~ msgid "_Tools" #~ msgstr "E_ines" #~ msgid "_Update Monitor" #~ msgstr "_Monitor d'actualització" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "" #~ "Mostra una llista de tots els canals que hi ha a la cua d'actualització" #~ msgid "_Preferences" #~ msgstr "_Preferències" #~ msgid "Edit Preferences." #~ msgstr "Edita les preferències." #~ msgid "S_earch" #~ msgstr "_Cerca" #~ msgid "Search All Feeds..." #~ msgstr "Cerca a tots els canals..." #~ msgid "Show the search dialog." #~ msgstr "Mostra el diàleg de cerca." #~ msgid "_Help" #~ msgstr "A_juda" #~ msgid "_Contents" #~ msgstr "_Continguts" #~ msgid "View help for this application." #~ msgstr "Visualitza l'ajuda d'aquesta aplicació." #~ msgid "_Quick Reference" #~ msgstr "_Referència ràpida" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Visualitza una llista de totes les dreceres del Liferea." #~ msgid "_FAQ" #~ msgstr "_PMF" #~ msgid "View the FAQ for this application." #~ msgstr "Visualitza les PMF d'aquesta aplicació." #~ msgid "_About" #~ msgstr "_Quant a" #~ msgid "Shows an about dialog." #~ msgstr "Mostra el diàleg de quant a." #~ msgid "_Normal View" #~ msgstr "Visualització _normal" #~ msgid "Set view mode to mail client mode." #~ msgstr "" #~ "Estableix el mode de visualització semblant al mode del client de correu." #~ msgid "_Wide View" #~ msgstr "Visualització àmpli_a" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Estableix el mode de visualització a tres quadres verticals." #~ msgid "_Combined View" #~ msgstr "Visualització _combinada" #~ msgid "Set view mode to two pane mode." #~ msgstr "Estableix el mode de visualització a dos quadres." #~ msgid "_Reduced Feed List" #~ msgstr "Llista de canals _reduïda" #~ msgid "Hide feeds with no unread items." #~ msgstr "Oculta els canals sense cap element no llegit." #~ msgid "_New Subscription..." #~ msgstr "Subscripció _nova..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Afegeix una subscripció a la llista de canals." #~ msgid "Adds a folder to the feed list." #~ msgstr "Afegeix una carpeta a la llista de canals." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Afegeix una carpeta de cerca nova a la llista de canals." #~ msgid "New _Source..." #~ msgstr "_Font nova..." #~ msgid "Adds a new feed list source." #~ msgstr "Afegeix una font de llista de canals nova." #~ msgid "Adds a new news bin." #~ msgstr "Afegeix un contenidor de notícies nou." #~ msgid "_Mark Items Read" #~ msgstr "_Marca'ls tots com a llegits" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Marca com a llegits tots els elements de la llista de canal o de la " #~ "llista d'elements seleccionada." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Actualitza la subscripció seleccionada o totes les subscripcions de la " #~ "carpeta seleccionada." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Obre el diàleg de propietats de la subscripció seleccionada." #~ msgid "_Remove" #~ msgstr "_Suprimeix" #~ msgid "Removes the selected subscription." #~ msgstr "Suprimeix la subscripció seleccionada." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Commuta l'estat de lectura de l'element seleccionat." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Commuta l'estat del senyalador de l'element seleccionat." #~ msgid "R_emove" #~ msgstr "_Suprimeix" #~ msgid "Removes the selected item." #~ msgstr "Suprimeix l'element seleccionat." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "" #~ "Obre l'enllaç de l'element en una pestanya nova del navegador del Liferea." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Obre l'enllaç de l'element en el quadre d'elements del Lifera." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Obre l'enllaç de l'element en el navegador extern preconfigurat." #~ msgid "_Fullscreen" #~ msgstr "_Pantalla completa" #~ msgid "Browse at full screen" #~ msgstr "Navega a pantalla completa" #~ msgid "_Work Offline" #~ msgstr "_Treballa fora de línia" #~ msgid "_Update All" #~ msgstr "_Actualitza-ho tot" #~ msgid "_Show Liferea" #~ msgstr "_Mostra el Liferea" #, fuzzy #~ msgid "InoReader" #~ msgstr "Google Reader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Nota: es desarà, sense xifrar, el nom d'usuari i la contrasenya al " #~ "fitxer de la llista de canals del Liferea." #, fuzzy #~ msgid "Add InoReader Account" #~ msgstr "Afegeix un compte de Google Reader" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "Introduïu les vostres dades del compte de Google Reader." #~ msgid "Plugins" #~ msgstr "Connectors" #~ msgid "normal view" #~ msgstr "visualització normal" #~ msgid "wide view" #~ msgstr "visualització àmplia" #~ msgid "combined view" #~ msgstr "visualització combinada" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, el lector de canals per a Linux" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "Per a més informació, visiteu https://lzone.de/liferea/" #~ msgid "_Open Link In Browser" #~ msgstr "_Obre l'enllaç en el navegador" #~ msgid "_Open Link In External Browser" #~ msgstr "Obre l'enllaç en el navegador _extern" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Crea un canal de motor de cerca" #~ msgid "enter any search string you want" #~ msgstr "introduïu la cadena que voleu cercar" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "_Nombre màxim de resultats:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Nota: el Liferea generarà un canal de subscripció que es farà servir per " #~ "consultar els resultats del motor de cerca generats a partir de la cadena " #~ "de cerca especificada. Podeu mantenir aquest canal permanentment i " #~ "actualitzar-lo de la mateixa manera que qualsevol altra subscripció." #~ msgid "Liferea is now online" #~ msgstr "El Liferea és en línia" #~ msgid "Work Offline" #~ msgstr "Treballa fora de línia" #~ msgid "Liferea is now offline" #~ msgstr "El Liferea és fora de línia" #~ msgid "Work Online" #~ msgstr "Treballa en línia" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "" #~ "Aquesta opció us permet inhabilitar l'actualització de les subscripcions." #~ msgid "Browser default" #~ msgstr "Per defecte del navegador" #~ msgid "Existing window" #~ msgstr "Finestra existent" #~ msgid "New window" #~ msgstr "Finestra nova" #~ msgid "New tab" #~ msgstr "Pestanya nova" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Lector de canals de notícies" #~ msgid "Online/Offline Button" #~ msgstr "Botó de en línia/fora de línia" #~ msgid "_Open link in:" #~ msgstr "_Obre l'enllaç a:" #~ msgid "No comments yet." #~ msgstr "Encara no hi ha cap comentari." #~ msgid "Refresh" #~ msgstr "Actualitza" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - Lector de canals per a Linux" #~ msgid "" #~ "

Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

You can add new subscriptions

  • From main menu " #~ "'Subscription' -> 'New Subscription'
  • By dropping feed links " #~ "into the subscription list
  • By right clicking links and choosing " #~ "'Subscribe' within Liferea

" #~ msgstr "" #~ "

Us donem la benvinguda al Liferea, un agregador de canals de " #~ "notícies en línia per a l'escriptori.

Podeu afegir subscripcions " #~ "noves

  • des del menú principal «Subscripcions» -> «Subscripció " #~ "nova...»
  • arrossegant i deixant anar enllaços de canals de " #~ "notícies a la llista de subscripcions
  • fent clic amb el botó " #~ "secundari a enllaços i seleccionant «Subscriu...» dins del Liferea
  • " #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "Integra't amb el menú de missatgeria (indicació)" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Finalitza en comptes de minimitzar al menú de missatgeria" #~ msgid "Start minimized to the messaging menu" #~ msgstr "Inicia minimitzat al menú de missatgeria" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d element nou" #~ msgstr[1] "%d elements nous" #~ msgid "No new items" #~ msgstr "No hi ha elements nous" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d element no llegit" #~ msgstr[1] "" #~ "%s\n" #~ "%d elements no llegits" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "No hi ha elements per llegir" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "El canal de tipus Atom no és vàlid: autor desconegut" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Integra la llista de canals del compte de Google Reader. El Liferea us " #~ "mostrarà les subscripcions del Google Reader i us sincronitzarà les " #~ "llistes de canals i de lectura." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Integra llistes de blocs o planetes a la llista de canals. El Liferea " #~ "afegirà o suprimirà canals d'acord amb els canvis del document OPML font" #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Integra la llista de canals del compte de Tiny Tiny RSS 1.5+. El Liferea " #~ "us mostrarà les subscripcions del tt-rss i us sincronitzarà les llistes " #~ "de canals i de lectura." #~ msgid "This feed does not exist anymore!" #~ msgstr "Aquest canal ja no existeix" #~ msgid "This news entry has no headline" #~ msgstr "L'entrada de notícies no té titular" #~ msgid "Visit" #~ msgstr "Visiteu" #~ msgid "Open feed" #~ msgstr "Obre el canal" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "%s%d actualització" #~ msgstr[1] "%s%d actualitzacions" #~ msgid "Feed Update" #~ msgstr "Actualització de canal" #~ msgid "Show details" #~ msgstr "Mostra els detalls" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "_Força les notificacions emergents per aquesta subscripció." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "No mostris _mai notificacions emergents per aquesta subscripció." #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Copyright (c) 2003-2012\n" #~ "L'equip del Liferea\n" #~ msgid "Notification Settings" #~ msgstr "Paràmetres de notificació" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Mostra una finestra _emergent amb els titulars nous." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "" #~ "Mostra una _icona d'estat en l'àrea de notificació (safata del sistema)." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Mostra el _nombre d'elements nous a la icona de la safata." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "_Finalitza en comptes de minimitzar a la icona de la safata." #~ msgid "_Start in tray icon." #~ msgstr "_Inicia a la icona de la safata." #~ msgid "Download and view feeds" #~ msgstr "Baixeu i visualitzeu canals de notícies" #~ msgid "You may want to validate the feed using" #~ msgstr "Podeu validar el canal amb" #~ msgid "Launch Item In _Tab" #~ msgstr "Obre l'element en una _pestanya" #~ msgid "_Launch Item In Browser" #~ msgstr "_Obre l'element en el navegador" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Copia l'_URL de l'element al porta-retalls" #~ msgid "bookmark" #~ msgstr "adreça d'interès" #~ msgid "comments" #~ msgstr "comentaris" #~ msgid "flag" #~ msgstr "senyalador" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Ha fallat la baixada de l'adjunció: «%s»" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "S'ha acabat de baixar l'adjunció: «%s»" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Aquesta versió del Liferea utilitza un format de memòria cau nova a la " #~ "qual s'ha migrat la memòria cau dels canals existent. No s'ha suprimit " #~ "automàticament el contingut de %s. Un cop estigueu segur que la migració " #~ "ha estat satisfactòria podeu suprimir el directori manualment." #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Salta a l'element següent sense llegir. Si és necessari selecciona el " #~ "canal següent amb elements sense llegir." #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Ha fallat la baixada: «%s»" #~ msgid "Download finished." #~ msgstr "Ha finalitzat la baixada." #~ msgid "Choose download directory" #~ msgstr "Escolliu el directori de baixada" #~ msgid "Downloading Enclosure" #~ msgstr "S'estan baixant l'adjunció" #~ msgid "Sync" #~ msgstr "Sincronitza" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "_Habilita la sincronitza en la xarxa local" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Manual:\n" #~ "(per l'URL utilitzeu %s)" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "_Passa l'URL i no baixis l'adjunció." #~ msgid "_Save downloads in" #~ msgstr "_Desa les baixades a" #~ msgid "_Service Name" #~ msgstr "Nom del _servei" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d resultat de cerca" #~ msgstr[1] "%d resultats de cerca" #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d resultat de cerca per a «%s»" #~ msgstr[1] "%d resultats de cerca per a «%s»" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s té %d titular nou/actualitzat\n" #~ msgstr[1] "%s té %d titulars nous/actualitzats\n" #~ msgid "Hook" #~ msgstr "Lligam" #~ msgid "Registered Scripts" #~ msgstr "Scripts registrats" #~ msgid "Script Code" #~ msgstr "Codi de l'script" #~ msgid "text/plain" #~ msgstr "text/pla" #~ msgid "(empty)" #~ msgstr "(buit)" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Aquesta opció pot provocar retards significatius quan es carreguin " #~ "carpetes amb molts canals." #~ msgid "

    View this item's content.

    " #~ msgstr "

    Visualitza el contingut de l'element.

    " #~ msgid "Downloading Enclosures" #~ msgstr "Baixada de les adjuncions" #~ msgid "Feed Cache Handling" #~ msgstr "Gestió de la memòria cau del canal" #~ msgid "Feed Name" #~ msgstr "Nom del canal" #~ msgid "Feed Update Settings" #~ msgstr "Paràmetres d'actualització dels canals" #~ msgid "HTTP Proxy Server" #~ msgstr "Servidor intermediari HTTP" #~ msgid "Opening Enclosures" #~ msgstr "Obertura de les adjuncions" #~ msgid "Reading Headlines" #~ msgstr "Lectura dels titulars" #~ msgid "Toolbar Settings" #~ msgstr "Paràmetres de la barra d'eines" #~ msgid "Update Interval" #~ msgstr "Interval d'actualització" #~ msgid "Web Integration" #~ msgstr "Integració web" #~ msgid "Add Script" #~ msgstr "Afegeix un script" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Us permet configurar i editar els scripts de lligam LUA" #~ msgid "At _startup:" #~ msgstr "A l'_inici:" #~ msgid "Attention Profile" #~ msgstr "Perfil d'atenció" #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "Count" #~ msgstr "Comptatge" #~ msgid "Create a new search feed." #~ msgstr "Crea un canal de cerca nou." #~ msgid "Create new script" #~ msgstr "Crea un script nou" #~ msgid "Exec Command" #~ msgstr "Executa una ordre" #~ msgid "Force update of all feeds" #~ msgstr "Força l'actualització de tots els canals" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "Integra la llista de canals del vostre compte de Bloglines. El Liferea us " #~ "mostrarà les vostres subscripcions del Bloglines com a subarbre de només " #~ "lectura en la llista de canals." #~ msgid "Liferea Sync %s@%s" #~ msgstr "Sincronització del Liferea %s@%s" #~ msgid "Liferea is unable to display this item's content." #~ msgstr "El Liferea no pot mostrar el contingut d'aquest element." #~ msgid "No feed update at all" #~ msgstr "No s'ha actualitzat cap canal" #~ msgid "No script selected!" #~ msgstr "No heu seleccionat cap script" #~ msgid "Presents statistics on your most read categories" #~ msgstr "Mostra estadístiques de les categories més llegides" #~ msgid "Reuse existing script" #~ msgstr "Reutilitza un script existent" #~ msgid "Script Manager" #~ msgstr "Gestor d'scripts" #~ msgid "Script Name" #~ msgstr "Nom de l'script" #~ msgid "Search With ..." #~ msgstr "Cerca amb ..." #~ msgid "Search _Link Cosmos with" #~ msgstr "Cerca al núvol d'_enllaços amb" #~ msgid "" #~ "Sorry, no scripting support available. Please recompile Liferea with LUA " #~ "support." #~ msgstr "" #~ "El suport per a scripts no està implementat. Torneu a compilar el Liferea " #~ "amb compatibilitat de LUA." #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "La llista d'elements ara conté tots els elements que coincideixen amb el " #~ "patró de cerca especificat. Si voleu desar aquests resultats de cerca " #~ "permanentment podeu fer clic al botó «Carpeta de cerca» en el diàleg de " #~ "cerca i el Liferea afegirà una carpeta de cerca a la vostra llista de " #~ "canals." #~ msgid "Update out-dated feeds" #~ msgstr "Actualitza els canals desactualitzats" #~ msgid "Update status" #~ msgstr "Estat d'actualització" #~ msgid "_Properties..." #~ msgstr "_Propietats..." #~ msgid "_Script Manager" #~ msgstr "_Gestor d'scripts" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "feed added" #~ msgstr "s'ha afegit el canal" #~ msgid "feed selected" #~ msgstr "s'ha seleccionat un canal" #~ msgid "feed unselected" #~ msgstr "s'ha desseleccionat el canal" #~ msgid "feed updated" #~ msgstr "s'ha actualitzat el canal" #~ msgid "feedlist.opml" #~ msgstr "feedlist_ca.opml" #~ msgid "item selected" #~ msgstr "s'ha seleccionat un element" #~ msgid "item unselected" #~ msgstr "s'ha desseleccionat l'element" #~ msgid "link cosmos" #~ msgstr "núvol d'enllaços" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "shutdown" #~ msgstr "apaga" #~ msgid "startup" #~ msgstr "a l'inici" #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "was not updated" #~ msgstr "no s'ha actualitzat" #~ msgid "was updated" #~ msgstr "s'ha actualitzat" liferea-1.12.7/po/cs.po000066400000000000000000002314421352135647700146170ustar00rootroot00000000000000# Czech translation of Liferea 1.5.x. # Copyright (C) 2008 Martin Picek . msgid "" msgstr "" "Project-Id-Version: Liferea 1.5.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2018-11-21 15:54+0100\n" "Last-Translator: Martin Picek \n" "Language-Team: Martin Picek \n" "Language: cs_CZ\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Poedit-SourceCharset: utf-8\n" "X-Generator: Poedit 2.1.1\n" #: ../liferea.appdata.xml.in.h:1 msgid "RSS feed reader" msgstr "Čtečka RSS kanálů" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "Charakteristické vlastnosti:" #: ../liferea.appdata.xml.in.h:4 msgid "Read articles when offline" msgstr "Číst články při stavu offline" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Čtečka kanálů" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Čtečka kanálů Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Čtění zpravodajských kanálů a blogů" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Tento kanál je přerušen a již není dostupný. Liferea ho již nebude " "aktualizovat, ale jeho články jsou stále přístupné v paměti." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
    HTTP error code : " msgstr "" "Poslední aktualizace tohoto odběru selhala!
    Chybový kód HTTP : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Při zpracovávání tohoto kanálu se vyskytly chyby!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Zpracovat podrobnosti chyb" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Podrobnosti" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Při filtrování tohoto kanálu se vyskytly chyby!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Filtrovat podrobnosti chyb" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Kanál:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Zdroj:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Vydavatel" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Autorská práva" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "nepřečtené články" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Složka:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Zdroj" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Kanál" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Zařazeno do" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Autor" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Související" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Také zasláno do" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Tvůrce" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Komentáře" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Aktualizuje se..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Sekce" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Oddělení" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Rubrika:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Přidejte články do této rubriky výběrem „Kopírovat do rubriky“ z kontextové " "nabídky seznamu kanálů." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Složka hledání:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Příkaz pro prohlížeč selhal: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Spouští se: „%s“" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Chyba autorizace" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Nepodařilo se vytvořit adresář „%s“ pro vyrovnávací paměť!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Dnes, %l.%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Včera, %l.%M" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a, %l.%M" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d. %b, %l.%M" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d. %b %Y, %l.%M" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" #: ../src/export.c:188 #, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Chyba při přejmenovávání %s to %s: %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "Chyba XML při čtení OPML souboru! Nelze importovat \"%s\"!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Prázdný dokument! Dokument OPML „%s“ by neměl být při importování prázdný." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "„%s“ není platným dokumentem OPML! Liferea nemohla tento soubor importovat!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Seznam importovaných kanálů" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importovat seznam kanálů" #: ../src/export.c:481 msgid "Import" msgstr "Importovat" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "Soubory OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Chyba při exportování seznamu kanálů!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Seznam kanálů exportován!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Exportovat seznam kanálů" #: ../src/export.c:498 msgid "Export" msgstr "Exportovat" #: ../src/feed.c:317 msgid "" "

    Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

    " msgstr "" "

    Nepodařilo se zjistit typ tohoto kanálu! Prosím, zkontrolujte, jestli " "jeho zdroj opravdu ukazuje na zdroj v jednom z podporovaných formátů " "syndikace.

    Výstup zpracovatele XML:
    " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "Kanál „%s“ aktualizován..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "Kanál „%s“ je nedostupný" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "URL, které chcete odebírat, ukazuje na webovou stránku, která neobsahuje " "žádný kanál. Možná ale tato stránka jen nepodporuje automatické objevování " "kanálů." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "Chyba XML při čtení kanálu! Kanál „%s“ nemohl být načten!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Prázdný dokument!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Neplatné XML!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Zdroj ukazuje na dokument HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Nepodařilo se určit typ kanálu." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Nejsou zde žádné nepřečtené články" #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr " STAV může být „shown“, „iconified“ nebo „hidden“." #: ../src/liferea_application.c:282 msgid "STATE" msgstr "" #: ../src/liferea_application.c:283 #, fuzzy msgid "Show version information and exit" msgstr " --version Vypsat informace o verzi a ukončit." #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Přidat nový odběr" #: ../src/liferea_application.c:284 msgid "uri" msgstr "" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 #, fuzzy msgid "Print debugging messages of all types" msgstr " --debug- Vypsat ladící zprávy pro zadané téma." #: ../src/liferea_application.c:291 #, fuzzy msgid "Print debugging messages for the cache handling" msgstr " --debug- Vypsat ladící zprávy pro zadané téma." #: ../src/liferea_application.c:292 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr " --debug- Vypsat ladící zprávy pro zadané téma." #: ../src/liferea_application.c:293 #, fuzzy msgid "Print debugging messages of the database handling" msgstr " --debug- Vypsat ladící zprávy pro zadané téma." #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "" #: ../src/liferea_application.c:300 #, fuzzy msgid "Print debugging messages of the feed update processing" msgstr " --debug- Vypsat ladící zprávy pro zadané téma." #: ../src/liferea_application.c:301 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr " --debug- Vypsat ladící zprávy pro zadané téma." #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 #, fuzzy msgid "Print debugging messages for the given topic" msgstr " --debug- Vypsat ladící zprávy pro zadané téma." #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "" #. http 4xx client error #: ../src/net.c:474 #, fuzzy msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Nejste oprávněni odebírat tento kanál. Prosím, aktualizujte své uživatelské " "jméno a heslo v dialogu Vlastnosti." #: ../src/net.c:476 #, fuzzy msgid "Payment required" msgstr "Požadována platba" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Zdroj nenalezen" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Metoda není povolena" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Neakceptovatelné" #: ../src/net.c:481 #, fuzzy msgid "Proxy authentication required" msgstr "Požadována autentizace proxy" #: ../src/net.c:482 #, fuzzy msgid "Request timed out" msgstr "Požadovat časový limit" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Zdroj již neexistuje. Přestaňte jej prosím odebírat!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Kanál je nedostupný: server požadoval nepodporované přesměrování." #: ../src/net.c:492 msgid "Client Error" msgstr "Chyba klienta" #: ../src/net.c:494 msgid "Server Error" msgstr "Chyba serveru" #: ../src/net.c:496 #, fuzzy msgid "An unknown networking error happened!" msgstr "(vyskytla se neznámá chyba síťování)" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Článek" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "obsahuje" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "neobsahuje" #: ../src/rule.c:175 msgid "Item title" msgstr "Titulek článku" #: ../src/rule.c:176 msgid "Item body" msgstr "Tělo článku" #: ../src/rule.c:177 msgid "Read status" msgstr "Stav přečtení" #: ../src/rule.c:177 msgid "is unread" msgstr "je nepřečtený" #: ../src/rule.c:177 msgid "is read" msgstr "je přečtený" #: ../src/rule.c:178 msgid "Flag status" msgstr "Stav označení" #: ../src/rule.c:178 msgid "is flagged" msgstr "je označený" #: ../src/rule.c:178 msgid "is unflagged" msgstr "je neoznačený" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "je obsažen" #: ../src/rule.c:179 msgid "not included" msgstr "není obsažen" #: ../src/rule.c:180 msgid "Category" msgstr "Kategorie" #: ../src/rule.c:180 msgid "is set" msgstr "je nastavena" #: ../src/rule.c:180 msgid "is not set" msgstr "není nastavena" #: ../src/rule.c:181 msgid "Feed title" msgstr "Titulek kanálu" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Odběr „%s“ již byl aktualizován!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "Odběr „%s“ byl přerušen. Liferea jej již nebude aktualizovat!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Aktualizuje se ikonka pro „%s“" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Při čtení tohoto odběru se vyskytl problém. Prosím, zkontrolujte URL a " "výstup na konzoli." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "URL „%s“ bylo natrvalo změněno, a proto bylo aktualizováno" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "Kanál „%s“ je přerušen. Liferea jej již nebude aktualizovat!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "Kanál „%s“ se od poslední aktualizace nezměnil" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Aktualizuje se kanál „%s“" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Chyba při otevírání dočasného souboru %s k užití při filtrování!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s zavřeno se stavem %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Chyba: nepodařilo se otevřít rouru „%s“" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Chyba: nepodařilo se otevřít soubor „%s“" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Chyba: Soubor „%s“ neexistuje" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Nová složka hledání" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "(Vyskytlo se více chyb. Výstup byl zkrácen!)" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "Zpracovatel XML: Nepodařilo se zpracovat dokument:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Přílohy" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " bajtů" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d příloha" msgstr[1] "%d přílohy" msgstr[2] "%d příloh" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Vybrat soubor" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Přípona souboru .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Nepodařilo se najít soubor pixmap: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " %d nový" msgstr[1] " %d nové" msgstr[2] " %d nových" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d nepřečtený%s" msgstr[1] "%d nepřečtené%s" msgstr[2] "%d nepřečtených%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Témata nápovědy" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Klávesové zkratky" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "Časté otázky" #: ../src/ui/search_dialog.c:116 msgid "Saved Search" msgstr "Uložené vyhledávání" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Vložte uživatelské jméno a heslo pro „%s“ (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Neznámý zdroj" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 msgid "_Cancel" msgstr "_Zrušit" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Všechny soubory" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea je odpojena od sítě. Nejsou dostupné žádné aktualizace." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Prohledat všechny kanály" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Označit vše jako přečtené" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Jste si jisti, že chcete odstranit „%s“?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Tento článek nemá specifikován žádný odkaz!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Žádný titulek ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Titulek" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Datum" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Musíte vybrat kanál, aby šlo odstranit články!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Žádný článek nebyl vybrán" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Otevřít v _kartě" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "Otevřít v pro_hlížeči" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Otevřít v _externím prohlížeči" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Kopírovat do rubriky" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "_Zazáložkovat odkaz do %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "Kopírovat umístění odkazu" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Přepnout stav _přečtení" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Přepnout stav _označení" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "_Odstranit článek" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Otevřít přílohu..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Uložit jako..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Kopírovat umístění odkazu" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Aktualizovat" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Aktualizovat složku" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Nový _odběr..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Nová _složka..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Nová složka _hledání..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Nový _zdroj..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Nová _rubrika..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Nové" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Setřídit kanály" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "Označit vše jako _přečtené" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Odstranit" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "Vlastnos_ti" #: ../src/ui/popup_menu.c:343 #, fuzzy msgid "Convert To Local Subscriptions..." msgstr "Nový _odběr..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "Výchozí v GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Text pod ikonkami" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Text vedle ikonek" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Pouze ikonky" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Pouze text" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minuty" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "hodiny" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dny" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Mezerník" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr "Ctrl+Mezerník" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr "Alt+Mezerník" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Normální zobrazení" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Široké zobrazení" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Kombinované zobrazení" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Výchozí prohlížeč" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Ručně" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Typ" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Odstraňuje se záznam" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Jste si jisti, že chcete odstranit „%s“ i s obsahem?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Jste si jisti, že chcete odstranit „%s“?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Potvrzení odstranění" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Potvrzení odstranění" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "Poskytovatel kanálu navrhuje interval aktualizace %d minutu." msgstr[1] "Poskytovatel kanálu navrhuje interval aktualizace %d minuty." msgstr[2] "Poskytovatel kanálu navrhuje interval aktualizace %d minut." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Tento kanál nespecifikuje žádný výchozí interval aktualizace." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d. %M., %G.%i" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nový odběr" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Vybrat soubor OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Nový odběr OPML" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Žádný seznam kanálů s typy zdroje nenalezen!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Typ zdroje" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "Přihlášení se nezdařilo!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" #: ../src/fl_sources/theoldreader_source.c:329 msgid "TheOldReader" msgstr "TheOldReader" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "O_tevřít odkaz v kartě" #: ../src/webkit/liferea_web_view.c:176 msgid "Open Link In Browser" msgstr "Otevřít odkaz v prohlížeči" #: ../src/webkit/liferea_web_view.c:177 msgid "Open Link In External Browser" msgstr "Otevřít odkaz v externím prohlížeči" # c-format #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_Zazáložkovat odkaz do %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "Kopírovat umístění odkazu" #: ../src/webkit/liferea_web_view.c:193 msgid "_View Image" msgstr "Zobrazit obrázek" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "_Kopírovat umístění obrázku" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "_Uložit odkaz jako" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "_Uložit obrázek jako" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Odebírat..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "_Kopírovat" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "Z_většit text" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "Z_menšit text" #: ../glade/about.ui.h:1 msgid "About" msgstr "O aplikaci" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea je agregátor novinek pro GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Domovská stránka Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autentizace" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Uživatelské jméno:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Heslo:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Otevřít přílohu" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Otevřít přílohu typu:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Co má Liferea provést s touto přílohou? Níže zadejte příkaz, který chcete " "spustit. URL přílohy bude předáno jako argument tohoto příkazu:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Procházet" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "O_d teď toto provádět se všemi podobnými přílohami automaticky." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Přidat účet Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Zadejte prosím nastavení účtu Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Heslo" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_Uživatelské jméno (E-mail)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Zobrazit články" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Články" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Označit vše jako přečtené" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Označit vše jako přečtené" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Nová složka" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "_Název složky:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Vytvořit rubriku" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Nová rubrika:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Zdroj kanálu" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Typ zdroje:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Příkaz" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Místní soubor" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Vybrat soubor..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Zdroj:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Stažení a následné zpracování" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "_Nepoužívat proxy pro stahování" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Použít konverzní _filtr" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea může využívat externí filtrovací moduly pro přístup ke kanálům a " "složkám v nepodporovaných formátech. Nahlédněte do dokumentace pro více " "informací." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Konverze po_užije:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Výběr zdroje" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Vyberte typ zdroje, který chcete přidat..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Přidat OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Prosím, specifikujte místní soubor nebo URL ukazující na platný seznam " "kanálů OPML." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Umístění" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "Vybrat _soubor" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Předvolby Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Zacházení s mezipamětí kanálu" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "Výchozí _počet uložených článků v jednom kanálu:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Nastavení aktualizace kanálu" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Poznámka: Nastavte prosím rozumný čas aktualizace. Obvykle je " "plýtváním aktualizovat kanály častěji než jednou za hodinu." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "_Aktualizovat všechny odběry při spuštění." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Výchozí _interval aktualizace kanálů:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Kanály" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Nastavení zobrazení složky" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "Zobrazovat články ze všech vnořených kanálů, je-li vybrána _složka." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "Skrývat _přečtené články." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Ikonky kanálu (favicony)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Aktualizovat všechny ikonky" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Složky" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Čtení titulků" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "_Otevírat články klávesou:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "_Výchozí režim zobrazení:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Webová integrace" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Posílat záložky do" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Nastavení interního prohlížeče" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Otevírat odkazy v okně _Liferea." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "Zakázat _JavaScript." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_Povolit zásuvné moduly prohlížeče." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Nastavení externího prohlížeče" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Prohlížeč:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Ručně:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Prohlížeč" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Nastavení lišty nástrojů" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Skrýt lištu nástrojů." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "_Popisky tlačítek na liště nástrojů:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Uživatelské rozhraní" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "Určit _automaticky (dle GNOME)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "Žád_ná proxy" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Ruční nastavení:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Hostitel proxy:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Port proxy:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Použít au_tentizaci proxy" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "_Uživatelské jméno pro proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Heslo pro pro_xy:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:51 msgid "Privacy Settings" msgstr "Nastavení soukromí" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "Informovat stránky, že nechci být sledován(a)" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "Soukromí" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Stahování příloh" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "Stahovat _pomocí" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Otevírání příloh" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Přílohy" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Vlastnosti odběru" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Název kanálu" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Název kanálu:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Interval aktualizace" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "Použít _výchozí interval aktualizace." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_Specifický interval aktualizace kanálu" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "Neaktualizovat tento kanál _automaticky." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Poskytovatel tohoto kanálu navrhuje interval aktualizace %d minut." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Obecné" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea může využívat externí filtrovací moduly pro přístup ke kanálům a " "složkám v nepodporovaných formátech. Nahlédněte do dokumentace pro více " "informací." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Nastavení vyrovnávací paměti určuje, jestli se při ukončení aplikace ukládá " "obsah kanálů. Označené články jsou do vyrovnávací paměti ukládány vždy." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "_Výchozí nastavení vyrovnávací paměti" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Zakázat vyrovnávací paměť" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Neomezená vyrovnávací paměť" #: ../glade/properties.ui.h:27 #, fuzzy msgid "_Number of items to save:" msgstr "Výchozí _počet uložených článků v jednom kanálu:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Archiv" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Použít _autentizaci HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Stahování" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_Automaticky stahovat všechny přílohy tohoto kanálu." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "Automaticky načíst č_lánek v nastaveném prohlížeči při jeho _označení." #: ../glade/properties.ui.h:37 #, fuzzy msgid "Ignore _comment feeds for this subscription." msgstr "Otevřít dialog s vlastnostmi vybraného odběru." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "" #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Pokročilé" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "Přidat účet Reedah" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "Zadejte prosím nastavení účtu Reedah." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Přejmenovat" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Nový název:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Vlastnosti složky hledání" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "_Název hledání:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Najít články, které vyhovují následujícím kritériím" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "_Jakékoliv pravidlo se shoduje" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "Všechn_a pravidla musí souhlasit" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Pokročilé hledání" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "_Složka hledání..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Prohledat všechny kanály" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Pokročilé..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Spustit vyhledávání zadaného textu ve všech kanálech. Výsledky hledání se " "objeví v seznamu článků." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Vyhledat:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Vložte text, který má Liferea vyhledat buď v titulku článku, nebo jeho " "obsahu." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Pokročilé..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Vložte umístění webové stránky, kde se má automaticky najít kanál, nebo " "přesnou adresu kanálu." #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "Přidat účet TheOldReader" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "Zadejte prosím nastavení účtu TheOldReader." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Přidat účet Tiny Tiny RSS" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "Zadejte prosím nastavení účtu TinyTinyRSS." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "URL adresa _serveru" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Uživatelské jméno" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Sledování aktualizací" #: ../glade/update_monitor.ui.h:2 msgid "Cancel All" msgstr "Zrušit vše" #: ../glade/update_monitor.ui.h:3 #, fuzzy msgid "Pending Requests" msgstr "Nevyřešené požadavky" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Právě stahované" #~ msgid "_Subscriptions" #~ msgstr "_Odběry" #~ msgid "Update _All" #~ msgstr "_Aktualizovat vše" #~ msgid "Updates all subscriptions." #~ msgstr "Aktualizovat všechny odběry." #~ msgid "Mark All As _Read" #~ msgstr "Označit vše jako _přečtené" #~ msgid "Marks read every item of every subscription." #~ msgstr "Označit všechny články všech kanálů jako přečtené." #~ msgid "_Import Feed List..." #~ msgstr "_Importovat seznam kanálů..." #~ msgid "Imports an OPML feed list." #~ msgstr "Importovat seznam kanálů OPML." #~ msgid "_Export Feed List..." #~ msgstr "_Exportovat seznam kanálů..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Exportovat seznam kanálů jako OPML." #~ msgid "_Quit" #~ msgstr "_Ukončit" #~ msgid "_Feed" #~ msgstr "_Kanál" #~ msgid "Remove _All Items" #~ msgstr "Odstranit _všechny články" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Odstranit všechny články právě vybraného kanálu." #~ msgid "_Item" #~ msgstr "Č_lánek" #~ msgid "Previous Item" #~ msgstr "Předchozí článek" #~ msgid "Next Item" #~ msgstr "Další článek" #~ msgid "_Next Unread Item" #~ msgstr "_Další nepřečtený článek" #~ msgid "_View" #~ msgstr "_Zobrazit" #~ msgid "Increases the text size of the item view." #~ msgstr "Zvětšit velikost textu článku." #~ msgid "Decreases the text size of the item view." #~ msgstr "Změnšit velikost textu článku." #~ msgid "_Tools" #~ msgstr "_Nástroje" #~ msgid "_Update Monitor" #~ msgstr "Sledování _aktualizací" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Zobrazit seznam všech kanálů ve frontě na aktualizaci" #~ msgid "_Preferences" #~ msgstr "_Předvolby" #~ msgid "Edit Preferences." #~ msgstr "Upravit předvolby." #~ msgid "S_earch" #~ msgstr "_Hledání" #~ msgid "Search All Feeds..." #~ msgstr "Prohledat všechny kanály..." #~ msgid "Show the search dialog." #~ msgstr "Zobrazit dialog hledání." #~ msgid "_Help" #~ msgstr "Nápo_věda" #~ msgid "_Contents" #~ msgstr "_Témata nápovědy" #~ msgid "View help for this application." #~ msgstr "Zobrazit nápovědu této aplikace." #~ msgid "_Quick Reference" #~ msgstr "_Klávesové zkratky" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Zobrazit seznam klávesových zkratek Liferea." #~ msgid "_FAQ" #~ msgstr "Časté _otázky" #~ msgid "View the FAQ for this application." #~ msgstr "Zobrazit časté otázky ohledně této aplikace." #~ msgid "_About" #~ msgstr "O _aplikaci" #~ msgid "Shows an about dialog." #~ msgstr "Zobrazit dialog s informacemi o aplikaci." #~ msgid "_Normal View" #~ msgstr "_Normální zobrazení" #~ msgid "Set view mode to mail client mode." #~ msgstr "Nastavit zobrazení na mód poštovního klienta." #~ msgid "_Wide View" #~ msgstr "Ši_roké zobrazení" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Nastavit zobrazení na tři vertikální oblasti." #~ msgid "_Combined View" #~ msgstr "_Kombinované zobrazení" #~ msgid "Set view mode to two pane mode." #~ msgstr "Nastavit zobrazení na mód dvou oblastí." #~ msgid "_Reduced Feed List" #~ msgstr "_Redukovaný seznam kanálů" #~ msgid "Hide feeds with no unread items." #~ msgstr "Skrýt kanály bez nepřečtených článků." #~ msgid "_New Subscription..." #~ msgstr "Nový _odběr..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Přidat odběr do seznamu kanálů." #~ msgid "Adds a folder to the feed list." #~ msgstr "Přidat novou složku do seznamu kanálů." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Přidat novou složku hledání do seznamu kanálů." #~ msgid "New _Source..." #~ msgstr "Nový _zdroj..." #~ msgid "Adds a new feed list source." #~ msgstr "Přidat nový zdroj seznamu kanálů." #~ msgid "Adds a new news bin." #~ msgstr "Přidat novou rubriku." #~ msgid "_Mark Items Read" #~ msgstr "Označit články jako _přečtené" #, fuzzy #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Označit všechny články vybraného odběru nebo všech odběrů vybrané složky " #~ "jako přečtené." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "Aktualizovat vybraný odběr nebo všechny odběry vybrané složky." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Otevřít dialog s vlastnostmi vybraného odběru." #~ msgid "_Remove" #~ msgstr "_Odstranit" #~ msgid "Removes the selected subscription." #~ msgstr "Odstranit vybraný odběr." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Přepnout stav přečtení vybraného článku." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Přepnout stav označení vybraného článku." #~ msgid "R_emove" #~ msgstr "Odst_ranit" #~ msgid "Removes the selected item." #~ msgstr "Odstranit vybraný článek." #, fuzzy #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Otevřít odkaz článku v nastaveném prohlížeči." #, fuzzy #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Otevřít odkaz článku v nastaveném prohlížeči." #, fuzzy #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Otevřít odkaz článku v nastaveném prohlížeči." #~ msgid "_Fullscreen" #~ msgstr "_Celá obrazovka" #~ msgid "_Work Offline" #~ msgstr "O_dpojit od sítě" #~ msgid "_Update All" #~ msgstr "_Aktualizovat vše" #~ msgid "_Show Liferea" #~ msgstr "_Zobrazit Liferea" #~ msgid "InoReader" #~ msgstr "InoReader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Poznámka: Uživatelské jméno a heslo budou uloženy v seznamu kanálů " #~ "bez použití šifrování." #~ msgid "Add InoReader Account" #~ msgstr "Přidat účet InoReader" #~ msgid "Please enter your InoReader account settings." #~ msgstr "Zadejte prosím nastavení účtu InoReader." #~ msgid "Plugins" #~ msgstr "Zásuvné moduly" #~ msgid "normal view" #~ msgstr "normální zobrazení" #~ msgid "wide view" #~ msgstr "široké zobrazení" #~ msgid "combined view" #~ msgstr "kombinované zobrazení" #, fuzzy #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea – Linux Feed Reader" #, fuzzy #~ msgid "_Open Link In Browser" #~ msgstr "/Otevřít odkaz v proh_lížeči" #, fuzzy #~ msgid "_Open Link In External Browser" #~ msgstr "/Otevřít odkaz v proh_lížeči" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Vytvořit vyhledávač kanálů" #~ msgid "enter any search string you want" #~ msgstr "vložte řetězec, který chcete najít" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "Maximál_ní počet článků ve výsledku:" #~ msgid "Liferea is now online" #~ msgstr "Liferea je nyní připojena k síti" #~ msgid "Work Offline" #~ msgstr "Odpojit od sítě" #~ msgid "Liferea is now offline" #~ msgstr "Liferea je nyní odpojena od sítě" #~ msgid "Work Online" #~ msgstr "Připojit k síti" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Zakázat aktualizaci odběrů." #~ msgid "Browser default" #~ msgstr "Výchozí dle prohlížeče" #~ msgid "Existing window" #~ msgstr "Existující okno" #~ msgid "New window" #~ msgstr "Nové okno" #~ msgid "New tab" #~ msgstr "Nová karta" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Čtečka kanálů" #~ msgid "Online/Offline Button" #~ msgstr "Tlačítka Připojit a Odpojit" #~ msgid "_Open link in:" #~ msgstr "Otevírat _odkazy v:" #~ msgid "No comments yet." #~ msgstr "Zatím žádné komentáře." #~ msgid "Refresh" #~ msgstr "Aktualizovat" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea – Linux Feed Reader" #, fuzzy #~ msgid "" #~ "

    Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

    You can add new subscriptions

    • From main menu " #~ "'Subscription' -> 'New Subscription'
    • By dropping feed links " #~ "into the subscription list
    • By right clicking links and choosing " #~ "'Subscribe' within Liferea

    " #~ msgstr "" #~ "

    Vítejte v Liferea, agregátoru novinkových kanálů.

    Levá " #~ "oblast okna obsahuje seznam vašich odběrů; nový odběr lze přidat vybráním " #~ "položky Nový odběr v nabídce Kanály. Články lze prohlížet vybráním kanálu " #~ "z jejich seznamu, načtou se do pravé oblasti okna.

    " #, fuzzy #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "_Ukončovat namísto minimalizování do stavové ikonky." #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d nový článek" #~ msgstr[1] "%d nové články" #~ msgstr[2] "%d nových článků" #~ msgid "No new items" #~ msgstr "Žádný nový článek" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d nepřečtený článek" #~ msgstr[1] "" #~ "%s\n" #~ "%d nepřečtené články" #~ msgstr[2] "" #~ "%s\n" #~ "%d nepřečtených článků" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Žádné nepřečtené články" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Neplatný kanál Atom: neznámý autor" #, fuzzy #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Integrovat seznam vašich kanálů z Google Reader. Liferea bude brát vaše " #~ "odběry na Google Reader jako podstrom ve vašem seznamu kanálů určený " #~ "pouze ke čtení." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Integrovat BlogRoll nebo Planet do vašeho seznamu kanálů. Liferea bude " #~ "automaticky přidávat a odstraňovat kanály podle změn ve zdrojovém " #~ "dokumentu OPML." #, fuzzy #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Integrovat seznam vašich kanálů z Google Reader. Liferea bude brát vaše " #~ "odběry na Google Reader jako podstrom ve vašem seznamu kanálů určený " #~ "pouze ke čtení." #~ msgid "This feed does not exist anymore!" #~ msgstr "Tento kanál již neexistuje!" #~ msgid "This news entry has no headline" #~ msgstr "Tento kanál neobsahuje žádný článek" #~ msgid "Visit" #~ msgstr "Zobrazit" #~ msgid "Open feed" #~ msgstr "Otevřít kanál" #~ msgid "Feed Update" #~ msgstr "Aktualizovaný kanál" #~ msgid "Show details" #~ msgstr "Zobrazit podrobnosti" #, fuzzy #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "Otevřít dialog s vlastnostmi vybraného odběru." #, fuzzy #~ msgid "Notification Settings" #~ msgstr "Nastavení notifikací" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Zobrazovat _vyskakovací okno s novými články." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Zobrazovat stavovou _ikonku v oznamovací oblasti." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Zobrazovat počet _nových článků ve stavové ikonce." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "_Ukončovat namísto minimalizování do stavové ikonky." #~ msgid "_Start in tray icon." #~ msgstr "_Spouštět do stavové ikonky." #~ msgid "Download and view feeds" #~ msgstr "Stahovat a prohlížet novinkové kanály" #, fuzzy #~ msgid "Launch Item In _Tab" #~ msgstr "/Otevřít článek v _kartě" #, fuzzy #~ msgid "_Launch Item In Browser" #~ msgstr "/Otevřít článek v _prohlížeči" #, fuzzy #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "/Kopírovat _URL článku do schránky" #~ msgid "flag" #~ msgstr "označení" #~ msgid "bookmark" #~ msgstr "záložka" #~ msgid "comments" #~ msgstr "komentáře" #, fuzzy #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Stahování přílohy dokončeno: „%s“" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Stahování přílohy dokončeno: „%s“" #, fuzzy #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Tato verze Liferea používá nový formát vyrovnávací paměti; vaše " #~ "vyrovnávací paměť byla migrována do nového formátu. Obsah staré " #~ "vyrovnávací paměti v adresáři ~/.liferea_1.2 ale nebyl smazán. Smažte jej " #~ "ručně, jste-li si jisti, že migrace proběhla úspěšně." #, fuzzy #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Stahování přílohy dokončeno: „%s“" #, fuzzy #~ msgid "Download finished." #~ msgstr "Stahovat _pomocí" #~ msgid "Choose download directory" #~ msgstr "Vybrat adresář pro stahování" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Ručně:\n" #~ "(%s je URL)" #~ msgid "_Save downloads in" #~ msgstr "Stahovat _do" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "Povol_it místní synchronizaci LAN" #~ msgid "_Service Name" #~ msgstr "Název _služby" #~ msgid "Sync" #~ msgstr "Synchronizace" #~ msgid "Downloading Enclosure" #~ msgstr "Stahování příloh" #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Skočit na další nepřečtený článek. Je-li to nezbytné, vybrat další kanál " #~ "s nepřečtenými články." #~ msgid "Liferea Sync %s@%s" #~ msgstr "Synchronizace Liferea %s@%s" #, fuzzy #~ msgid "Print debugging messages for the plugin loading" #~ msgstr " --debug- Vypsat ladící zprávy pro zadané téma." #~ msgid "Liferea seems to be running already!" #~ msgstr "Zdá se, že Liferea již běží!" #~ msgid "Update status" #~ msgstr "Stav aktualizace" #~ msgid "was updated" #~ msgstr "bylo aktualizováno" #~ msgid "was not updated" #~ msgstr "nebylo aktualizováno" #~ msgid "%s" #~ msgstr "%s" #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "_Script Manager" #~ msgstr "Správa _skriptů" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Povolit konfigurovat a upravovat skripty LUA" #~ msgid "Search With ..." #~ msgstr "Hledat pomocí..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d výsledek hledání výrazu „%s“" #~ msgstr[1] "%d výsledky hledání výrazu „%s“" #~ msgstr[2] "%d výsledků hledání výrazu „%s“" #, fuzzy #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d výsledek hledání výrazu „%s“" #~ msgstr[1] "%d výsledky hledání výrazu „%s“" #~ msgstr[2] "%d výsledků hledání výrazu „%s“" #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "Seznam článků nyní obsahuje všechny články odpovídající hledanému vzoru. " #~ "Chcete-li uložit toto hledání natrvalo, můžete kliknout na tlačítko " #~ "„Složka hledání“ v dialogu hledání a Liferea přidá tuto složku hledání do " #~ "vašeho seznamu kanálů." #~ msgid "Count" #~ msgstr "Počet" #~ msgid "You have to select a feed entry" #~ msgstr "Musíte vybrat kanál" #~ msgid "(empty)" #~ msgstr "(prázdné)" #, fuzzy #~ msgid "_Properties..." #~ msgstr "/Vlastnos_ti..." #~ msgid "Update out-dated feeds" #~ msgstr "Aktualizovat neaktuální kanály" #~ msgid "Force update of all feeds" #~ msgstr "Vynutit aktualizaci všech kanálů" #~ msgid "No feed update at all" #~ msgstr "Nic neaktualizovat" #~ msgid "startup" #~ msgstr "při spuštění aplikace" #~ msgid "feed updated" #~ msgstr "při aktualizování kanálu" #~ msgid "feed added" #~ msgstr "při přidání kanálu" #~ msgid "item selected" #~ msgstr "při vybrání článku" #~ msgid "feed selected" #~ msgstr "při vybrání kanálu" #~ msgid "item unselected" #~ msgstr "při zrušení označení článku" #~ msgid "feed unselected" #~ msgstr "při zrušení označení kanálu" #~ msgid "shutdown" #~ msgstr "při ukončení aplikace" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Bohužel není dostupná žádná podpora skriptování!" #~ msgid "Script Name" #~ msgstr "Název skriptu" #~ msgid "No script selected!" #~ msgstr "Není vybrán žádný skript!" #~ msgid "Create a new search feed." #~ msgstr "Vytvořit nový kanál hledání." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea se nepodařilo zobrazit obsah tohoto článku." #~ msgid "

    View this item's content.

    " #~ msgstr "

    Zobrazit obsah článku.

    " #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "Integrovat seznam vašich kanálů z Bloglines. Liferea bude brát vaše " #~ "odběry na Bloglines jako podstrom ve vašem seznamu kanálů určený pouze ke " #~ "čtení." #~ msgid "feedlist.opml" #~ msgstr "feedlist_cs.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s má %d nový nebo aktualizovaný článek\n" #~ msgstr[1] "%s má %d nové nebo aktualizované články\n" #~ msgstr[2] "%s má %d nových nebo aktualizovaných článků\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Hook" #~ msgstr "Zachycení" #~ msgid "Registered Scripts" #~ msgstr "Registrované skripty" #~ msgid "Script Code" #~ msgstr "Kód skriptu" #~ msgid "text/plain" #~ msgstr "text/plain" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Tato volba může způsobit významné zpoždění při načítání složek " #~ "obsahujících mnoho kanálů." #~ msgid "Downloading Enclosures" #~ msgstr "Stahování příloh" #~ msgid "Feed Cache Handling" #~ msgstr "Zacházení s vyrovnávací pamětí kanálu" #~ msgid "Feed Name" #~ msgstr "Název kanálu" #~ msgid "Feed Update Settings" #~ msgstr "Nastavení aktualizace kanálu" #~ msgid "HTTP Proxy Server" #~ msgstr "HTTP proxy server" #~ msgid "Opening Enclosures" #~ msgstr "Otevírání příloh" #~ msgid "Reading Headlines" #~ msgstr "Čtení článků" #, fuzzy #~ msgid "Toolbar Settings" #~ msgstr "Nastavení nabídky a nástrojové lišty" #~ msgid "Update Interval" #~ msgstr "Interval aktualizace" #~ msgid "Web Integration" #~ msgstr "Integrace s webem" #~ msgid "Add Script" #~ msgstr "Přidat skript" #~ msgid "At _startup:" #~ msgstr "Při _spuštění:" #~ msgid "Create new script" #~ msgstr "Vytvořit nový skript" #~ msgid "Exec Command" #~ msgstr "Spustit příkaz" #~ msgid "Reuse existing script" #~ msgstr "Použít existující skript" #~ msgid "Script Manager" #~ msgstr "Správa skriptů" #, fuzzy #~ msgid "FAILED to download enclosure: \"%s\"" #~ msgstr "Stahování přílohy dokončeno: „%s“" #~ msgid "Presents statistics on your most read categories" #~ msgstr "Zobrazit statistiky vašich nejčtenějších kategorií" #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2009\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgstr "" #~ "Copyright (c) 2003–2007\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgid "/_Bookmark Link at %s" #~ msgstr "/_Zazáložkovat odkaz do %s" #~ msgid "/Toggle _Read Status" #~ msgstr "/Přepnout stav přečt_ení" #~ msgid "/Toggle Item _Flag" #~ msgstr "/Přepnout stav ozn_ačení" #~ msgid "/_Preferences" #~ msgstr "/_Nastavení" #~ msgid "/_Quit" #~ msgstr "/_Ukončit" #~ msgid "/Copy Link Location" #~ msgstr "/Kopírovat umístění odkazu" #~ msgid "/_Update" #~ msgstr "/_Aktualizovat" #~ msgid "/_New/New _Subscription..." #~ msgstr "/_Vytvořit/_Odběr..." #~ msgid "/_New/New _Folder..." #~ msgstr "/_Vytvořit/_Složku..." #~ msgid "/_New/New S_earch Folder..." #~ msgstr "/_Vytvořit/Složku _hledání..." #~ msgid "/_New/New S_ource..." #~ msgstr "/_Vytvořit/_Zdroj..." #~ msgid "/_New/New _News Bin..." #~ msgstr "/_Vytvořit/_Rubriku..." #~ msgid "" #~ "This program is free software; you can redistribute it and/or modify\n" #~ "it under the terms of the GNU General Public License as\n" #~ "published by the Free Software Foundation; either version 2 of the\n" #~ "License, or (at your option) any later version.\n" #~ "\n" #~ "This program is distributed in the hope that it will be useful,\n" #~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" #~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" #~ "GNU General Public License for more details.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License\n" #~ "along with this program; if not, write to the Free Software\n" #~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, " #~ "USA." #~ msgstr "" #~ "This program is free software; you can redistribute it and/or modify\n" #~ "it under the terms of the GNU General Public License as\n" #~ "published by the Free Software Foundation; either version 2 of the\n" #~ "License, or (at your option) any later version.\n" #~ "\n" #~ "This program is distributed in the hope that it will be useful,\n" #~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" #~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" #~ "GNU General Public License for more details.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License\n" #~ "along with this program; if not, write to the Free Software\n" #~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, " #~ "USA." #~ msgid "Access Forbidden" #~ msgstr "Přístup odepřen" #~ msgid " --help Print this help and exit" #~ msgstr " --help Vypsat nápovědu a ukončit." #~ msgid " --mainwindow-state=STATE" #~ msgstr " --mainwindow-state=STAV" #~ msgid " Start Liferea with its main window in STATE." #~ msgstr " Spustit Liferea s hlavním oknem, které má STAV." #~ msgid " Possible topics are: all,cache,conf,db,gui,html" #~ msgstr "" #~ " Možná témata jsou: „all“, „cache“, „conf“, „db“, „gui“, " #~ "„html“," #~ msgid " net,parsing,plugins,trace,update,verbose" #~ msgstr "" #~ " „net“, „parsing“, „plugins“, „trace“, „update“, " #~ "„verbose“." #~ msgid "The --mainwindow-state argument must be given a parameter.\n" #~ msgstr "Argumentu --mainwindow-state musí být předán parametr.\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "Argumentu --session musí být předán parametr.\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "Liferea obdržela neznámý argument: %s\n" #~ msgid "Cookie for %s has expired!" #~ msgstr "Koláček pro %s expiroval!" #~ msgid "Network error" #~ msgstr "Chyba sítě" #~ msgid "_Limit cache to" #~ msgstr "_Limit vyrovnávací paměti" #~ msgid "items." #~ msgstr "článků." #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "" #~ "Automatické objevování kanálů selhalo! Žádné odkazy na kanály nebyly " #~ "nalezeny!" #~ msgid "Could not download \"%s\". Will retry in %d seconds." #~ msgstr "Nepodařilo se stáhnout „%s“. Další pokus bude za %d sekund." #~ msgid "http://lzone.de/liferea/" #~ msgstr "http://lzone.de/liferea/" #~ msgid "" #~ "Bart Kreska \n" #~ "Dario Conigliaro \n" #~ "Fernando Ike de Oliveira \n" #~ "Khaled Hosny \n" #~ "Sargate Kanogan \n" #~ "Takeshi AIHANA \n" #~ "Vincent Lefèvre \n" #~ "Oleg Maloglovets \n" #~ "Og Maciel \n" #~ msgstr "" #~ "Bart Kreska \n" #~ "Dario Conigliaro \n" #~ "Fernando Ike de Oliveira \n" #~ "Khaled Hosny \n" #~ "Sargate Kanogan \n" #~ "Takeshi AIHANA \n" #~ "Vincent Lefèvre \n" #~ "Oleg Maloglovets \n" #~ "Og Maciel \n" #~ "Martin Picek \n" #~ msgid "" #~ "Saves this search as a search folder, which will appear in the feed list." #~ msgstr "" #~ "Uložit toto hledání jako složku hledání, která se zobrazí v seznamu " #~ "kanálů." #~ msgid "Show Menu _And Toolbar" #~ msgstr "Zobrazovat nabídku _a lištu nástrojů" #~ msgid "Show _Menu Only" #~ msgstr "Zobrazovat pouze _nabídku" #~ msgid "Show _Toolbar Only" #~ msgstr "Zobrazovat pouze _lištu nástrojů" #~ msgid "expander" #~ msgstr "expander" #~ msgid "gtk-close" #~ msgstr "gtk-close" #~ msgid "gtk-save-as" #~ msgstr "gtk-save-as" #~ msgid "search" #~ msgstr "search" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "" #~ "Neočekávaný konec sekvence znaků nebo porušené kódování UTF-8! Některé " #~ "znaky byly vynechány!" #~ msgid "does match" #~ msgstr "odpovídá" #~ msgid "does not match" #~ msgstr "neodpovídá" #~ msgid "NAME" #~ msgstr "NÁZEV" #~ msgid "" #~ "Sorry, I was not able to load any installed browser plugin! Try the --" #~ "debug-plugins option to get debug information!" #~ msgstr "" #~ "Bohužel nebylo možné načíst žádný instalovaný modul prohlížeče! Zkuste " #~ "volbu --debug-plugins k získání ladících informací." #~ msgid "This item does not have a link assigned!" #~ msgstr "Článek nemá přiřazený odkaz!" #~ msgid "No link selected!" #~ msgstr "Žádný odkaz nebyl vybrán!" #~ msgid "Updates all subscriptions. This does not update OCS directories." #~ msgstr "Aktualizovat všechny odběry mimo adresářů OCS." #~ msgid "/_Increase Text Size" #~ msgstr "/Z_většit text" #~ msgid "/_Decrease Text Size" #~ msgstr "/Zmenšit te_xt" #~ msgid "/Toggle _Online|Offline" #~ msgstr "/_Přepnout připojení k síti" #~ msgid "/_Show|Hide Window" #~ msgstr "/_Zobrazit nebo skrýt okno" liferea-1.12.7/po/da.po000066400000000000000000002025051352135647700145740ustar00rootroot00000000000000# Danish translation liferea. # Copyright (C) 2013 liferea & nedenstående oversættere. # This file is distributed under the same license as the liferea package. # Joe Hansen , 2010, 2011, 2012, 2013. # korrekturlæst Ask, 2010. # korrekturlæst Torben, 2013. # # konventioner: # attachment -> bilag # comment -> bemærkning (kommentar) # enclosure -> pakke # "vedhæftning"? Det virker lidt på den måde. "Pakke" kan også # bruges, og brugeren vender sig nok hurtig til terminologien. # entry -> post # favicon -> http://da.wikipedia.org/wiki/Favicon # feed -> nyhedskilde # feedlist/feed list -> kildeliste # feed reader -> nyhedslæser # feed source -> nyhedskilde # hook -> tilbagekaldsfunktion # item -> punkt # link -> adresse (rettet fra henvisning i 2013) # Link Cosmos -> Link Cosmos # news bin -> nyhedsbakke # pipe -> datakanal (pipe) # script -> skript (flertal: skripter) # msgid "" msgstr "" "Project-Id-Version: liferea 1.10-rc4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2013-06-15 20:36+0200\n" "Last-Translator: Joe Hansen \n" "Language-Team: Danish \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Nyhedslæser" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Liferea er nu frakoblet" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 #, fuzzy msgid "Play Podcasts" msgstr "Podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Nyhedslæser" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea - Nyhedslæser" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Læs nyheds- og blogkilder" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Denne nyhedskilde er afbrudt. Den er ikke længere tilgængelig. Liferea vil " "ikke længere opdatere den, men du kan stadig tilgå de gemte overskrifter." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
    HTTP error code : " msgstr "" "Den sidste opdatering af dette abonnement mislykkedes!
    HTTP-fejlkode " ": " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Der opstod en fejl under fortolkning af denne nyhedskilde!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Fejldetaljer for fortolker" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Detaljer" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" "Du bør måske kontakte forfatteren/webmasteren for nyhedskilden om dette!" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Der opstod en fejl under filtrering af denne nyhedskilde!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Filtrer fejldetaljer" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Nyhedskilde:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Kilde:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Udgiver" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Ophavsret" # er det ikke 'underkilder'? # underbeskeder #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "underkilder med" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "ulæste overskrifter" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Mappe:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Kilde" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Nyhedskilde" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Arkiveret under" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Forfatter" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Delt af" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Via" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Forbundne" # tror 'sendt til' eller 'poste(re)t i' #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Også sendt til" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Forfatter" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Bemærkninger" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Opdaterer ..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Afsnit" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Afdeling" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Nyhedsbakke:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Tilføj punkter til denne nyhedsbakke ved at vælge »Kopier til nyhedsbakke« " "fra kontekstmenuen til punktlisten." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Søgemappe:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Browserkommando mislykkedes: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Starter: »%s«" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Godkendelsesfejl" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Kan ikke oprette mellemlagermappe »%s«!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" # ikke helt sikker, men går ud fra at det er okay at ændre til 24-timer dansk. # (ja, det er helt sikkert o.k.) #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "I dag %H:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "I går %H:%M" # Wed 11:25 AM #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %H:%M" # Aug 04 11:25 AM #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d. %b %H:%M" # Aug 04 2010 #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d. %b %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "»%s« er ikke en gyldig konfigurationsfil for pakketype!" # evt. det under fanebladet #: ../src/enclosure.c:292 #, fuzzy msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Du har ikke konfigureret et overførselsværktøj endnu! Du kan gøre det i " "fanebladet »Hent« i Værktøjer/indstillinger." # # evt. det under fanebladet #: ../src/enclosure.c:311 #, fuzzy, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Kommando mislykkedes: \n" "\n" "%s\n" "\n" " Kontroller venligst hvorvidt det konfigurerede overførselsværktøj er " "installeret og virker korrekt! Du kan ændre det i fanebladet »Hent« i " "Værktøjer/indstillinger." #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Fejl under omdøbelse af %s til %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "XML-fejl under læsning af OPML-fil! Kunne ikke importere »%s«!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "Tomt dokument! OPML-dokument »%s« må ikke være tomt under import." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "»%s« er ikke et gyldigt OPML-dokument! Liferea kan ikke importere denne fil!" # kunne være 'Importerede' #: ../src/export.c:469 msgid "Imported feed list" msgstr "Importeret nyhedskildeliste" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importer nyhedskildeliste" #: ../src/export.c:481 msgid "Import" msgstr "Importer" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "OPML-filer" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Fejl under eksport af nyhedskildeliste!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Nyhedskildeliste eksporteret!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Eksporter nyhedskildeliste" #: ../src/export.c:498 msgid "Export" msgstr "Eksporter" #: ../src/feed.c:317 msgid "" "

    Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

    " msgstr "" "

    Kunne ikke detektere denne type nyhedskilde! Tjek venligst om kilden " "virkelig peger på en kilde tilbudt i en af de understøttede " "syndikationformater!

    XML-fortolkeruddata:
    " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "»%s« opdateret ..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "»%s« er ikke tilgængelig" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "URL'en du ønsker, at Liferea skal abonnere på peger på en internetside, og " "den automatiske registrering fandt ingen nyhedskilder på denne side. Måske " "understøtter denne internetside ikke automatisk registrering af nyhedskilder." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "" "XML-fejl under læsning af nyhedskilde! Nyhedskilde »%s« kunne ikke indlæses!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Tomt dokument!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Ugyldig XML!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Kildepunkter til HTML-dokument." # nyhedskildetype (for langt!) #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Kunne ikke afgøre nyhedstypen." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Der er ingen ulæste punkter" #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Start Liferea med sit hovedvindue i TILSTAND. TILSTAND kan være " "»shown« (vist), »iconified« (som ikon) eller »hidden« (skjult)" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "TILSTAND" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Vis versionsinformation og afslut" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Tilføj et nyt abonnement" #: ../src/liferea_application.c:284 msgid "uri" msgstr "uri" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Udskriv fejlsøgningsbeskeder af alle typer" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Udskriv fejlsøgningsbeskeder for håndtering af mellemlager" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Udskriv fejlsøgningsbeskeder for konfigurationshåndteringen" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Udskriv fejlsøgningsbeskeder på databasehåndteringen" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Udskriv fejlsøgningsbeskeder på alle GUI-funktioner" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Aktiverer HTML-optegningsfejlsøgning. Hver gang Liferea optegner HTML-uddata " "vil Liferea også skrive den oprettede HTML i ~/.cache/liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Vis fejlsøgningsbeskeder for al netværksaktivitet" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Vis fejlsøgningsbeskeder for alle fortolkningsfunktioner" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "Vis fejlsøgningsbeskeder når en funktion tager for lang tid" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Vis fejlsøgningsbeskeder når funktioner startes/forlades" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Vis fejlsøgningsbeskeder for opdateringsprocessen til nyhedskilden" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "Udskriv fejlsøgningsbeskeder for håndtering af mellemlager" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Vis uddybende fejlsøgningsbeskeder" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Vis fejlsøgningsbeskeder for det angivne emne" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Opdateringsforespørgslen blev afbrudt" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Kunne ikke afgøre destinationens værtsnavn" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Kunne ikke afgøre værtsnavn for proxy" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Kunne ikke forbinde til ekstern vært" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Kunne ikke forbinde til proxy" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "Der opstod en netværksfejl, eller den anden ende lukkede uventet forbindelsen" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Ressourcen flyttede permanent til en ny placering" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Du har ikke tilladelse til at hente denne nyhedskilde. Opdater venligst dit " "brugernavn og adgangskode i dialogboksen for nyhedskildeegenskaber" #: ../src/net.c:476 msgid "Payment required" msgstr "Betaling krævet" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Du har ikke adgang til denne ressource" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Ressource blev ikke fundet" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Metode ikke tilladt" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Ikke acceptabel" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Proxygodkendelse krævet" # Forespørgsel fik tidsudløb #: ../src/net.c:482 msgid "Request timed out" msgstr "Forespørgselstiden udløb" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Forsvundet. Ressource findes ikke. Fjern venligst abonnement!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Der opstod en intern fejl under opdateringsprocessen" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Nyhedskilde er ikke tilgængelig: Server anmodede om videresendelse, hvilket " "ikke er understøttet!" #: ../src/net.c:492 msgid "Client Error" msgstr "Klientfejl" #: ../src/net.c:494 msgid "Server Error" msgstr "Serverfejl" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Der opstod en ukendt netværksfejl!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Punkt" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "indeholder" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "indeholder ikke" #: ../src/rule.c:175 msgid "Item title" msgstr "Punkttitel" # måske 'tekst for punktet', 'punktets tekst' # punkttekst lyder lidt som en slags skrifttype #: ../src/rule.c:176 msgid "Item body" msgstr "Punktets tekst" # evt. Læsestatus #: ../src/rule.c:177 msgid "Read status" msgstr "Status for læst" #: ../src/rule.c:177 msgid "is unread" msgstr "er ulæst" #: ../src/rule.c:177 msgid "is read" msgstr "er læst" #: ../src/rule.c:178 msgid "Flag status" msgstr "Flagstatus" #: ../src/rule.c:178 msgid "is flagged" msgstr "er sat" #: ../src/rule.c:178 msgid "is unflagged" msgstr "er ikke sat" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "inkluderet" #: ../src/rule.c:179 msgid "not included" msgstr "ikke inkluderet" #: ../src/rule.c:180 msgid "Category" msgstr "Kategori" #: ../src/rule.c:180 msgid "is set" msgstr "er angivet" #: ../src/rule.c:180 msgid "is not set" msgstr "er ikke angivet" #: ../src/rule.c:181 msgid "Feed title" msgstr "Titel for nyhedskilde" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Abonnement »%s« bliver allerede opdateret!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "Abonnementet »%s« blev afbrudt. Liferea vil ikke længere opdatere " "abonnementet!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Opdaterer favicon til »%s«" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Der opstod et problem under læsning af dette abonnement. Tjek venligst " "URL'en og konsoluddata." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "URL'en for »%s« har ændret sig permanent og blev opdateret" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "»%s« er afbrudt. Liferea vil ikke længere opdatere den!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "»%s« har ikke ændret sig siden sidste opdatering" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Opdaterer »%s«" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Fejl ved åbning af midlertidig fil %s til brug for filtrering!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s afsluttede med status %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Fejl: Kunne ikke åbne datakanal »%s«" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Fejl: Kunne ikke åbne fil »%s«" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Fejl: Der er ingen fil »%s«" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Ny søgemappe" # evt. Udskriften blev #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Der var flere fejl. Udskrift blev afkortet!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "XML-fortolker: Kunne ikke fortolke dokument:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Bilag" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " byte" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d bilag" msgstr[1] "%d bilag" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Vælg fil" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Filendelse .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Kunne ikke finde pixmap-fil: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d ny)" msgstr[1] " (%d nye)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d ulæst%s" msgstr[1] "%d ulæste%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Hjælpeemner" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Hurtig hjælp" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "OSS" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Avanceret søgning" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Indtast brugernavnet og adgangskoden for »%s« (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Ukendt kilde" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "Afbryd _alle" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Alle filer" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea er i frakoblet tilstand. Ingen opdatering mulig." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Søg i alle nyhedskilder" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Marker alle som læst" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Er du sikker på, at du ønsker at slette »%s«?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Dette punkt har ingen adresse angivet!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Ingen titel ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Overskrift" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Dato" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Du skal vælge en nyhedskilde for at slette dens punkter!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Intet punkt er blevet valgt" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Åbn i _faneblad" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "_Åbn i browser" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Åbn i _ekstern browser" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Kopier til nyhedsbakke" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "_Bogmærk på %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "Kopier _punktplacering" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Skift _læsningsstatus" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Skift punkt_flag" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "_Fjern punkt" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Åbn pakke ..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Gem som ..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Kopier adresseplacering" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Opdater" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Opdater mappe" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Nyt _abonnement ..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Ny _mappe ..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Ny _søgemappe ..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Ny _kilde ..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Ny _nyhedsbakke ..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Ny" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Sorter nyhedskilder" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_Marker alle som læst" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "_Genbyg" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Egenskaber" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Konverter til lokale abonnementer ..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "GNOME-standard" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Tekst under ikoner" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Tekst ved siden af ikoner" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Kun ikoner" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Kun tekst" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minutter" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "timer" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dage" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Mellemrum" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " mellemrum" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " mellemrum" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Normal visning" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Bred visning" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Kombineret visning" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Standardbrowser" # måske 'Manuel' (som i manuel browser) afhænger måske af type #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Manuel" # tast? #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Type" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Tom)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Genbygger" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Sletter post" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Er du sikker på, at du ønsker at slette »%s« og dens indhold?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Er du sikker på, at du ønsker at slette »%s«?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Sletningsbekræftelse" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Sletningsbekræftelse" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "" "Leverandøren af denne nyhedskilde foreslår et opdateringsinterval på %d " "minut." msgstr[1] "" "Leverandøren af denne nyhedskilde foreslår et opdateringsinterval på %d " "minutter." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Denne nyhedskilde angiver ingen standard for opdateringsinterval." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Uden titel" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Internetside" # Aug 04 12:03 #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d. %b %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nyt abonnement" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Vælg OPML-fil" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Nyt OPML-abonnement" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Ingen kildetyper fundet for nyhedskildeliste!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Kildetype" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "Abonnementet »%s« blev med succes konverteret til lokale nyhedskilder!" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Kunne ikke logge ind på Google Reader!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 #, fuzzy msgid "Could not parse JSON returned by Reedah API!" msgstr "Kunne ikke fortolke JSON returneret af tt-rss API!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 #, fuzzy msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "Kunne ikke fortolke JSON returneret af tt-rss API!" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Nyhedslæser" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Åbn adresse i _faneblad" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "_Åbn adresse i browser" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "_Åbn adresse i ekstern browser" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_Bogmærk adresse på %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Kopier adresseplacering" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "_Gem billede som" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "_Kopier billedplacering" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "_Gem adresse som" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "_Gem billede som" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Abonner ..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "_Øg tekststørrelse" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Formindsk tekststørrelse" #: ../glade/about.ui.h:1 msgid "About" msgstr "Om" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea er en nyhedsindsamler til GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Lifereas hjemmeside" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Godkendelse" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "Bruger_navn:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Adgangskode:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Åbn pakke" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Åbn pakketypen:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Hvad skal Liferea gøre med denne pakke? Indtast venligst kommandoen du " "ønsker at køre nedenfor. Hentede pakkers adresse vil blive angivet som et " "argument for denne kommando:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Gennemse" # i fremtiden #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Gør dette automatisk for pakker som dette fremadrettet." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Tilføj Google Reader-konto" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Indtast venligst din kontoopsætning for Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Adgangskode" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_Brugernavn (e-post)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Vis overskrifter" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Overskrifter" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Marker alle som læst" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Marker alle som læst" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Ny mappe" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "_Mappenavn:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Opret nyhedsbakke" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Nyhedsbakkenavn:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Nyhedskilde" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Kildetype:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Kommando" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Lokal fil" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Vælg fil ..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Kilde:" # Det er nok implicit at det er "indstillinger for", eller noget lignende # ville sige: Hentning / efterbehandling #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Hentning / efterbehandling" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "_Brug ikke proxy til hentning" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Brug konversions_filter" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea kan bruge eksterne filterudvidelsesmoduler for at tilgå nyhedskilder " "og mappe i ikkeunderstøttede formater. Se dokumentationen for yderligere " "information." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Konverter med _brug af:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Kildeudvælgelse" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Vælg kildetypen du ønsker at tilføje ..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Tilføj OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Angiv venligst en lokal fil eller en URL der peger på en gyldig OPML-" "nyhedskildeliste." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Placering" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Vælg fil" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Indstillinger for Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Håndtering af mellemlager for nyhedskilder" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_Antal punkter per nyhedskilde der som standard gemmes:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Indstillinger for nyhedskildeopdatering" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Bemærk: Husk venligst at angive en fornuftig opdateringsfrekvens. Normalt " "er det spild af båndbredde at opdatere nyhedskilder oftere end hver time." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "_Opdater alle abonnementer ved opstart." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Standardinterval for _nyhedskildeopdatering:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Nyhedskilder" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Opsætning af mappevisning" # kunne også være 'når en mappe vælges' # måske erstatte med 'for valgt mappe', hvilket er lidt mindre pænt men # fungerer uanset hvad #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "_Vis punkterne på alle undernyhedskilder når en mappe vælges." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "_Skjul læste punkter." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Ikoner for nyhedskilde (faviconer)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Opdater alle faviconer nu" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Mapper" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Læser overskrifter" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "_Skim igennem artikler med:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "_Normal visningstilstand:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Internetintegrering" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Send bogmærker til" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Intern browseropsætning" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Åbn adresser i Lifereas _vindue." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Deaktiver Javascript." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_Aktiver browserudvidelsesmoduler." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Ekstern browseropsætning" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Browser:" # måske 'Manuel' (som i manuel browser) afhænger måske af type #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Manuel:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s for adresse)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Browser" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Værktøjsbjælkeopsætning" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Skjul værktøjsbjælke." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Etiketter for _værktøjsbjælkeknap:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Grafisk brugergrænseflade" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "Server for HTTP-proxy" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Autodetekter (GNOME eller miljø)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Ingen proxy" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Manuel indstilling:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "Proxy_vært:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "Proxy_port:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Brug proxy_godkendelse" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Proxy_brugernavn:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Proxy_adgangskode:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Opsætning af mappevisning" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Henter pakker" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Hent med brug af" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Åbner pakker" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Pakker" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Abonnementegenskaber" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Navn på nyhedskilde" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Navn på nyhedskilde:" # Opdater interval eller opdateringsinterval # Nu er det jo lidt svært at læse ud fra to ord, men hvis det interval man # ændrer fx er, hvor tit et element på skrivebordet bliver opdateret, burde # det så ikke være 'Opdaterings interval'? #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Opdater interval" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Brug globalt standardopdateringsinterval." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "Specifikt opdateringsinterval på _nyhedskilde" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Opdater ikke denne nyhedskilde automatisk." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "Denne nyhedskildeleverandør foreslår et opdateringsinterval på %d minutter." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Generelt" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea kan bruge eksterne filterudvidelsesmoduler for at tilgå nyhedskilder " "og mappe i ikkeunderstøttede formater. Se dokumentationen for yderligere " "information." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Mellemlagerindstillingen kontrollerer om indholdet af nyhedskilder gemmes, " "når Liferea afsluttes. Markerede punkter gemmes altid til mellemlageret." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "_Standardopsætning af mellemlager" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Deaktiver mellemlager" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Ubegrænset mellemlager" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "_Antal punkter at gemme:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Arkiv" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Brug HTTP-_godkendelse" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Hent" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_Hent automatisk alle pakker fra denne nyhedskilde." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "_Indlæs automatisk punktadresse i konfigureret browser når der vælges " "artikler." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorer _bemærkningsnyhedskilder for dette abonnement." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Marker hentede punkter som læst." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Avanceret" #: ../glade/reedah_source.ui.h:1 #, fuzzy msgid "Add Reedah Account" msgstr "Tilføj Google Reader-konto" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Indtast venligst din kontoopsætning for Google Reader." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Omdøb" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Nyt navn:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Egenskaber for søgemappe" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "Søge_navn:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Find punkter som opfylder de følgende kriterier" # hvad er dette? # Hvis det er ligesom i postprogrammet alpine: her angiver man regler # for hvordan forskellige typer beskeder (el. nyheder i dette tilfælde) # kategoriseres, f.eks. om den kommer fra dansk@dansk-gruppen.dk. Så # kan man gøre ting med disse regler, f.eks. få alle beskeder der # opfylder en given regel farvet blå. Man kan også bruge dem som # søgefiltre - så her er det nok noget med en søgning, hvor man søger på # flere regler ad gangen, og enhver af disse regler skal så matche # (eller være 'opfyldt'). Det er i modsætning til at de allesammen skal # være opfyldt for at en post bliver fundet. # Så jeg foreslår: _Mindst én regel opfyldt #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "_Mindst én regel opfyldt" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "_Alle regler skal være opfyldt" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Avanceret søgning" # tror det skal forstås som 'søg i mappe' #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "_Søg i mappe ..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Søg i alle nyhedskilder" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Avanceret ..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Begynder søgning efter den angivne tekst i alle nyhedskilder. Søgeresultatet " "vil fremkomme i punktlisten." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Søg efter:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Indtast en søgestreng som Liferea skal finde enten i en punkttitel eller i " "dennes indhold." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Avanceret ..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Indtast en internetsideplacering til brug for automatisk opdagelse af " "nyhedskilde, eller hvis du kender den, den præcise placering af nyhedskilden." #: ../glade/theoldreader_source.ui.h:1 #, fuzzy msgid "Add TheOldReader Account" msgstr "Tilføj Google Reader-konto" #: ../glade/theoldreader_source.ui.h:2 #, fuzzy msgid "Please enter your TheOldReader account settings." msgstr "Indtast venligst din kontoopsætning for Google Reader." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Tilføj Tiny Tiny RSS-konto" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "Indtast venligst din tt-rss-kontoopsætning." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "_Serveradresse" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Brugernavn" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Opdater skærm" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "Afbryd _alle" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Afventende anmodninger" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Henter nu" #~ msgid "_Subscriptions" #~ msgstr "_Abonnementer" #~ msgid "Update _All" #~ msgstr "Opdater _alle" #~ msgid "Updates all subscriptions." #~ msgstr "Opdaterer alle abonnementer." #~ msgid "Mark All As _Read" #~ msgstr "Marker alle som _læst" #~ msgid "Marks read every item of every subscription." #~ msgstr "Markerer alle poster på alle abonnementer som læst." #~ msgid "_Import Feed List..." #~ msgstr "_Importer nyhedskildeliste ..." #~ msgid "Imports an OPML feed list." #~ msgstr "Importerer en OPML-nyhedskildeliste." #~ msgid "_Export Feed List..." #~ msgstr "_Eksporter nyhedskildeliste ..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Eksporterer nyhedskildelisten som OPML." #~ msgid "_Quit" #~ msgstr "_Afslut" #~ msgid "_Feed" #~ msgstr "_Nyhedskilde" #~ msgid "Remove _All Items" #~ msgstr "Fjern _Alle punkter" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Fjern alle punkter på den aktuelt valgte nyhedskilde." #~ msgid "_Item" #~ msgstr "_Punkt" #~ msgid "Previous Item" #~ msgstr "Forrige punkt" #~ msgid "Next Item" #~ msgstr "Næste punkt" #~ msgid "_Next Unread Item" #~ msgstr "_Næste ulæste punkt" #~ msgid "_View" #~ msgstr "_Vis" #~ msgid "Increases the text size of the item view." #~ msgstr "Øger tekststørrelsen af punktvisningen." #~ msgid "Decreases the text size of the item view." #~ msgstr "Formindsker tekststørrelsen på punktvisningen." #~ msgid "_Tools" #~ msgstr "_Værktøjer" #~ msgid "_Update Monitor" #~ msgstr "_Opdater skærm" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Vis en liste over alle nyhedskilder, der nu er i opdateringskøen" #~ msgid "_Preferences" #~ msgstr "_Indstillinger" #~ msgid "Edit Preferences." #~ msgstr "Rediger indstillinger." #~ msgid "S_earch" #~ msgstr "S_øg" #~ msgid "Search All Feeds..." #~ msgstr "Søg i alle nyhedskilder ..." #~ msgid "Show the search dialog." #~ msgstr "Vis søgedialogen." #~ msgid "_Help" #~ msgstr "_Hjælp" #~ msgid "_Contents" #~ msgstr "_Indhold" #~ msgid "View help for this application." #~ msgstr "Vis hjælp for dette program." #~ msgid "_Quick Reference" #~ msgstr "_Hurtig hjælp" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Vis en liste over alle genveje i Liferea." #~ msgid "_FAQ" #~ msgstr "_OSS" #~ msgid "View the FAQ for this application." #~ msgstr "Vis OSS'en for dette program." #~ msgid "_About" #~ msgstr "_Om" #~ msgid "Shows an about dialog." #~ msgstr "Viser en om-dialog." #~ msgid "_Normal View" #~ msgstr "_Normal visning" #~ msgid "Set view mode to mail client mode." #~ msgstr "Sæt visningstilstand til postklienttilstand." #~ msgid "_Wide View" #~ msgstr "_Bred visning" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Sæt visningstilstand til at bruge tre lodrette paneler." #~ msgid "_Combined View" #~ msgstr "_Kombineret visning" #~ msgid "Set view mode to two pane mode." #~ msgstr "Sæt visningstilstand til topaneltilstand." #~ msgid "_Reduced Feed List" #~ msgstr "_Reduceret nyhedskildeliste" #~ msgid "Hide feeds with no unread items." #~ msgstr "Skjul nyhedskilder uden ulæste punkter." #~ msgid "_New Subscription..." #~ msgstr "_Nyt abonnement ..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Tilføjer et abonnement til nyhedskildelisten." #~ msgid "Adds a folder to the feed list." #~ msgstr "Tilføjer en mappe til kildelisten." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Tilføjer en ny søgemappe til nyhedskildelisten." #~ msgid "New _Source..." #~ msgstr "Ny _kilde ..." #~ msgid "Adds a new feed list source." #~ msgstr "Tilføjer en ny kilde for nyhedskildeliste." #~ msgid "Adds a new news bin." #~ msgstr "Tilføjer en ny nyhedsbakke." #~ msgid "_Mark Items Read" #~ msgstr "_Marker punkter som læst" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Marker alle punkter på den valgte kildelisteknude / i punktlisten som " #~ "læste." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Opdaterer det valgte abonnement eller alle abonnementer på den valgte " #~ "mappe." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Åbner egenskabsdialogen for det valgte abonnement." #~ msgid "_Remove" #~ msgstr "_Fjern" #~ msgid "Removes the selected subscription." #~ msgstr "Fjerner det valgte abonnement." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Skifter læsningsstatus på det valgte punkt." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Skifter flagstatus på det valgte punkt." #~ msgid "R_emove" #~ msgstr "_Fjern" #~ msgid "Removes the selected item." #~ msgstr "Fjerner det valgte punkt." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Åbner punktets adresse i et nyt browserfaneblad for Liferea." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Åbner punktets adresse i punktets panel for Liferea." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Åbner punktets adresse i den konfigurerede eksterne browser." #~ msgid "_Fullscreen" #~ msgstr "_Fuldskærm" # fuldskærmsvisning #~ msgid "Browse at full screen" #~ msgstr "Gennemse i fuld skærm" #~ msgid "_Work Offline" #~ msgstr "_Arbejd frakoblet" #~ msgid "_Update All" #~ msgstr "_Opdater alle" #~ msgid "_Show Liferea" #~ msgstr "_Vis Liferea" #, fuzzy #~ msgid "InoReader" #~ msgstr "Google Reader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Bemærk: Brugernavn og adgangskode vil blive gemt i din kildelistefil " #~ "til Liferea uden brug af kryptering." #, fuzzy #~ msgid "Add InoReader Account" #~ msgstr "Tilføj Google Reader-konto" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "Indtast venligst din kontoopsætning for Google Reader." #~ msgid "Plugins" #~ msgstr "Udvidelsesmodul" #~ msgid "normal view" #~ msgstr "normal visning" #~ msgid "wide view" #~ msgstr "bred visning" #~ msgid "combined view" #~ msgstr "kombineret visning" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea - nyhedslæseren til Linux" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "Besøg venligst https://lzone.de/liferea/ for yderligere information" #~ msgid "_Open Link In Browser" #~ msgstr "_Åbn adresse i browser" #~ msgid "_Open Link In External Browser" #~ msgstr "_Åbn adresse i ekstern browser" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Opret søgemotornyhedskilde" #~ msgid "enter any search string you want" #~ msgstr "indtast en ønsket søgestreng" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "Maksimalt _antal resultatpunkter:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Bemærk: Liferea vil oprette et nyhedskildeabonnement, som bruges til at " #~ "forespørge søgemotorens resultater for den angivne søgestreng. Du kan " #~ "beholde denne nyhedskilde permanent og opdatere den som ethvert andet " #~ "abonnement." #~ msgid "Liferea is now online" #~ msgstr "Liferea er nu på nettet" #~ msgid "Work Offline" #~ msgstr "Arbejd frakoblet" #~ msgid "Liferea is now offline" #~ msgstr "Liferea er nu frakoblet" #~ msgid "Work Online" #~ msgstr "Arbejd på nettet" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "" #~ "Denne indstilling giver dig mulighed for at deaktivere " #~ "abonnementopdatering." #~ msgid "Browser default" #~ msgstr "Browserstandard" #~ msgid "Existing window" #~ msgstr "Eksisterende vindue" #~ msgid "New window" #~ msgstr "Nyt vindue" #~ msgid "New tab" #~ msgstr "Nyt faneblad" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Nyhedslæser" #~ msgid "Online/Offline Button" #~ msgstr "Knap for tilkoblet/frakoblet" #~ msgid "_Open link in:" #~ msgstr "_Åbn adresse i:" #~ msgid "No comments yet." #~ msgstr "Endnu ingen bemærkninger." #~ msgid "Refresh" #~ msgstr "Opdater" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - Nyhedslæser til Linux" #~ msgid "" #~ "

    Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

    You can add new subscriptions

    • From main menu " #~ "'Subscription' -> 'New Subscription'
    • By dropping feed links " #~ "into the subscription list
    • By right clicking links and choosing " #~ "'Subscribe' within Liferea

    " #~ msgstr "" #~ "

    Velkommen til Liferea, en skrivebordsnyhedsindsamler for " #~ "nyhedskilder på nettet.

    Du kan tilføje nye abonnementer

    • fra " #~ "hovedmenuen »Abonnement« -> »Nyt abonnement«
    • Ved at føre " #~ "nyhedsadresser ind i abonnementslisten
    • Ved at højreklikke på " #~ "adresser og vælge »Abonner« i Liferea

    " #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "Integrer med beskedmenuen (indikator)" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Afslut i stedet for at minimere til beskedmenuen" #~ msgid "Start minimized to the messaging menu" #~ msgstr "Start minimeret til beskedmenuen" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d nyt punkt" #~ msgstr[1] "%d nye punkter" #~ msgid "No new items" #~ msgstr "Ingen nye punkter" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d ulæst punkt" #~ msgstr[1] "" #~ "%s\n" #~ "%d ulæste punkter" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Ingen ulæste punkter" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Ugyldig Atomnyhedskilde: Ukendt forfatter" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Integrer nyhedskildelisten på din konto i Google Reader. Liferea vil " #~ "præsentere dine abonnementer i Google Reader, og vil synkronisere din " #~ "nyhedskildeliste og læsningslister." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Integrer blogrolls eller Planets i din nyhedskildeliste. Liferea vil " #~ "automatisk tilføje og fjerne nyhedskilder i overensstemmelse med " #~ "ændringerne i OPML-kildedokumentet" #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Integrer nyhedskildelisten for din RSS 1.5+-konto hos Tiny Tiny. Liferea " #~ "vil præsentere dine tt-rss abonnementer og vil synkronisere din " #~ "nyhedskildeliste og læsningslister." #~ msgid "This feed does not exist anymore!" #~ msgstr "Denne nyhedskilde findes ikke mere!" #~ msgid "This news entry has no headline" #~ msgstr "Dette nyhedspunkt har ingen overskrift" #~ msgid "Visit" #~ msgstr "Besøg" #~ msgid "Open feed" #~ msgstr "Åbn nyhedskilde" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "%s har %d opdatering" #~ msgstr[1] "%s har %d opdateringer" #~ msgid "Feed Update" #~ msgstr "Nyhedskildeopdatering" #~ msgid "Show details" #~ msgstr "Vis detaljer" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "_Gennemtving pop op-påmindelse for dette abonnement." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_Udfør aldrig pop op-påmindelse for dette abonnement." #~ msgid "Notification Settings" #~ msgstr "Påmindelsesopsætning" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Vis et _pop op-vindue med nye overskrifter." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Vis et status_ikon i statusfeltet." # statusfeltikon? #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Vis _antallet af nye punkter i statusikonet." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "_Afslut i steden for at minimere til statusikonet." #~ msgid "_Start in tray icon." #~ msgstr "_Start i statusikon." #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Ophavsret 2003-2012\n" #~ "Holdet bag Liferea\n" liferea-1.12.7/po/de.po000066400000000000000000002020141352135647700145730ustar00rootroot00000000000000# German translation for Liferea. # Copyright (C) 2003 # This file is distributed under the same license as the Liferea package. # Lars Windolf , 2003-2016. # Robin Stocker , 2008-2009. # Christian Dywan , 2008-2009. # Paul Seyfert , 2015. # msgid "" msgstr "" "Project-Id-Version: Liferea 1.12.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2017-12-18 00:36+0100\n" "Last-Translator: Paul Seyfert \n" "Language-Team: German\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: Poedit 2.0.4\n" #: ../liferea.appdata.xml.in.h:1 msgid "RSS feed reader" msgstr "RSS Feedreader" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" "Liferea ist eine Abkürzung für »Linux Feed Reader«. Es ist ein Aggregator " "für Online-News-Feeds. Es unterstützt eine Reihe von verschiedenen Feed-" "Formaten, wie RSS/RDF, CDF und Atom. Es gibt viele andere Aggregatoren, doch " "diese sind nicht für Linux verfügbar oder setzen voraus dass viele externe " "Bibliotheken installiert sind. Liferea versucht diese Lücke zu schließen " "indem ein schneller, leicht zu benutzender, und leicht zu installierender " "Nachrichten-Aggregator für GTK/Gnome erstellt wird." #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "Interessante Fähigkeiten:" #: ../liferea.appdata.xml.in.h:4 msgid "Read articles when offline" msgstr "Artikel offline lesen" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "Synchronisiert mit TheOldReader" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "Synchronisiert mit TinyTinyRSS" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "Synchronisiert mit InoReader" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "Synchronisiert mit Reedah" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "Speichert Schlagzeilen dauerhauft in 'News Bins'" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "Filtern von Schlagzeilen mit Suchordnern" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "Podcasts abspielen" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Feedreader" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea Feedreader" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "News-Feeds und Blogs lesen" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "news;feed;aggregator;blog;podcast;syndication;rss;atom" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Dieses Abonnement wurde eingestellt. Es ist nicht länger verfügbar. Liferea " "wird es nicht mehr aktualisieren. Die alten Schlagzeilen sind jedoch weiter " "verfügbar." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
    HTTP error code : " msgstr "" "Das letzte Aktualisieren dieses Abonnements schlug fehl!
    HTTP-" "Fehlercode : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Es traten Fehler beim Parsen des Feeds auf!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Detaillierte Parser-Fehler" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Details" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "Kontaktieren Sie den Autor/Webmaster dieses Feeds zu diesem Problem!" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Es traten Fehler beim Filtern des Feeds auf!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Detaillierte Filter-Fehler" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Feed:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Quelle:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Herausgeber" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Copyright" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "Unterknoten mit" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "ungelesene Schlagzeilen" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Ordner:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Quelle" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Abonnement" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Unter" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Autor" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Empfohlen von" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Via" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Verwandt" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Auch in" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Ersteller" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "Koordinaten" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "Karte" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Kommentare" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Aktualisiere..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Sektion" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Department" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Sammelordner:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Mit der \"Kopieren nach\" Menüoption in der Schlagzeilenliste können " "Schlagzeilen diesem Sammelordner hinzugefügt werden." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Suchordner:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Aufruf des Browsers fehlgeschlagen: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Starte: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Authorisierungsfehler" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Kann Cache-Verzeichnis \"%s\" nicht anlegen!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" "Die von Ihnen verwendete Version von WebKitGTK+ unterstützt das Ändern des " "Proxies durch Liferea noch nicht. Es können nur die System Proxy " "Einstellungen verwendet werden." #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Heute %H:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Gestern %H:%M" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %H:%M" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%b %d %H:%M" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" ist keine gültige Datei mit Anhangstypen!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Es ist noch kein Download-Programm konfiguriert! Bitte tun Sie dies im " "Reiter 'Anhänge' unter Tools/Einstellungen." #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Kommando fehlgeschlagen: \n" "\n" "%s\n" "\n" "Bitte überprüfen Sie, ob das konfigurierte Download-Programm installiert ist " "und korrekt funktioniert! Im Reiter »Download« im Menü Tools/Einstellungen " "kann dies kontrolliert werden." #: ../src/export.c:188 #, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Fehler beim Umbenennen von %s nach %s: %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "XML-Fehler beim Lesen der OPML-Datei \"%s\"! Import fehlgeschlagen!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "Leeres Dokument! Das OPML-Dokument \"%s\" sollte nicht leer sein." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" ist keine gültige OPML-Datei! Liferea kann diese Datei nicht " "importieren!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Importierte Abonnements" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Abonnements importieren" #: ../src/export.c:481 msgid "Import" msgstr "Import" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "OPML-Dateien" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Fehler beim Exportieren der Abonnements!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Abonnements exportiert!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Abonnements exportieren" #: ../src/export.c:498 msgid "Export" msgstr "Export" #: ../src/feed.c:317 msgid "" "

    Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

    " msgstr "" "

    Konnte Feedtyp nicht bestimmen! Bitte überprüfen Sie, ob die Adresse " "wirklich auf eine Dokument in einem der unterstützten Formate zeigt!

    XML " "Parser Ausgabe:
    " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" aktualisiert..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" ist nicht verfügbar!" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "Die Adresse die Liferea abonnieren soll zeigt auf eine Webseite und die " "automatische Feed-Erkennung hat keine Feeds gefunden. Möglicherweise " "unterstützt die Webseite die automatische Feed-Erkennung nicht." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "" "XML-Fehler beim Lesen des Feeds! Feed \"%s\" konnte nicht geladen werden!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Leeres Dokument!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Ungültiges XML!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Quelle zeigt auf ein HTML-Dokument." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Konnte Feed-Typ nicht bestimmen." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Es gibt keine ungelesenen Schlagzeilen" #: ../src/liferea_application.c:282 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Starte Liferea mit dem Hauptfensterstatus STATE. STATE kann `shown', oder " "`hidden' sein" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "STATE" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Programmversion anzeigen und beenden" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Neues Abonnement hinzufügen" #: ../src/liferea_application.c:284 msgid "uri" msgstr "uri" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Gibt alle Debug-Meldungen aus" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Gibt Debug-Meldungen für die Cacheverwaltung aus" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Gibt Debug-Meldungen für die Konfigurationsverwaltung aus" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Gibt Debug-Meldungen für die Datenbanknutzung aus" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Gibt Debug-Meldungen aller GUI-Funktionen aus." #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Aktiviert HTML-Rendering-Debugging. Bei jedem Rendern wird das HTML nach ~/." "cache/liferea/output.xhtml geschrieben" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Gibt Debug-Meldungen der Netzwerkfunktionen aus" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Gibt Debug-Meldungen aller Parserfunktionen aus" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "Ausgabe von Meldungen über langlaufende Funktionen" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Gibt Debug-Meldungen aus, wenn Funktionen gestartet und beendet werden" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Gibt Debug-Meldungen für die Feedaktualisierung aus" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "Gibt Debug-Meldungen für die Suchordner-Handling aus" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Gibt ausführliche Debug-Meldungen aus" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Gibt Debug-Meldungen für die jeweiligen Topic aus" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Aktualisierung wurde abgebrochen" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Ziel-Hostname kann nicht aufgelöst werden " #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Proxy-Name kann nicht aufgelöst werden" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Fehler beim Kontaktieren des Servers" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Proxy ist nicht erreichbar" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "Es gab einen Netzwerkfehler, oder die Gegenseite hat die Verbindung " "unerwartet geschlossen" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Das Dokument wurde permanent verschoben" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Sie sind nicht autorisiert, dieses Abonnement herunterzuladen. Bitte " "aktualisieren Sie Passwort und Benutzernamen in den Eigenschaften des " "Abonnements." #: ../src/net.c:476 msgid "Payment required" msgstr "Bezahlung erforderlich" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Sie haben keinen Zugriff auf diese Resource" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Ressource nicht gefunden." #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Methode nicht erlaubt" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Ungültig" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Proxy-Authentifizierung nötig" #: ../src/net.c:482 msgid "Request timed out" msgstr "Antwortzeit überschritten" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "" "Dieser Feed existiert nicht (mehr). Bitte entfernen Sie das Abonnement!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Interner Fehler beim Updaten" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Auf den Feed kann nicht zugegriffen werden: der Server gab eine nicht " "unterstützte Weiterleitung zurück!" #: ../src/net.c:492 msgid "Client Error" msgstr "Client-Fehler" #: ../src/net.c:494 msgid "Server Error" msgstr "Server-Fehler" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Unbekannte Netzwerkfehler aufgetreten!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Schlagzeile" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "enthält" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "enthält nicht" #: ../src/rule.c:175 msgid "Item title" msgstr "Titel der Schlagzeile" #: ../src/rule.c:176 msgid "Item body" msgstr "Text der Schlagzeile" #: ../src/rule.c:177 msgid "Read status" msgstr "Lesestatus" #: ../src/rule.c:177 msgid "is unread" msgstr "ist ungelesen" #: ../src/rule.c:177 msgid "is read" msgstr "ist gelesen" #: ../src/rule.c:178 msgid "Flag status" msgstr "Flagge" #: ../src/rule.c:178 msgid "is flagged" msgstr "ist gesetzt" #: ../src/rule.c:178 msgid "is unflagged" msgstr "ist nicht gesetzt" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "mit" #: ../src/rule.c:179 msgid "not included" msgstr "ohne" #: ../src/rule.c:180 msgid "Category" msgstr "Kategorie" #: ../src/rule.c:180 msgid "is set" msgstr "ist gesetzt" #: ../src/rule.c:180 msgid "is not set" msgstr "ist nicht gesetzt" #: ../src/rule.c:181 msgid "Feed title" msgstr "Titel des Abonnements" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Das Abonnement \"%s\" wird bereits aktualisiert!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "Das Abonnement \"%s\" wurde eingestellt. Liferea wird es nicht mehr " "aktualisieren!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Aktualisiere Symbol für Abonnement \"%s\"" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Es trat ein Fehler beim Einlesen des Abonnements auf. Bitte überprüfen Sie " "die Adresse und die Ausgabe auf der Konsole." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "" "Die Adresse von \"%s\" hat sich dauerhaft verändert und wurde aktualisiert. " #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" ist eingestellt. Liferea wird es nicht mehr aktualisieren." #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" hat sich seit dem letzten Update nicht verändert" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Aktualisiere \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Fehler beim Öffnen der temporären Datei %s während des Filterns!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s endete mit Status %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Konnte Pipe \"%s\" nicht öffnen." #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Konnte Datei \"%s\" nicht öffnen." #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Es gibt keine Datei \"%s\"." #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Neuer Suchordner" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Es gab weitere Fehler. Fehlerausgabe abgeschnitten!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "XML-Parser: Konnte Dokument nicht parsen:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Anhänge" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " Bytes" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d Anhang" msgstr[1] "%d Anhänge" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Datei wählen" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Dateiendung .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Konnte Pixmap-Datei nicht finden: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d neu)" msgstr[1] " (%d neu)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d ungelesen%s" msgstr[1] "%d ungelesen%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Hilfe-Themen" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Kurzreferenz" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "FAQ" #: ../src/ui/search_dialog.c:116 msgid "Saved Search" msgstr "Suche Speichern" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Bitte Benutzername und Passwort für \"%s\" (%s) eingeben:" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Unbekannte Quelle" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 msgid "_Cancel" msgstr "_Abbrechen" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Alle Dateien" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea ist offline. Keine Aktualisierungen möglich." #: ../src/ui/feed_list_view.c:422 msgid "all feeds" msgstr "alle Abonnements" #: ../src/ui/feed_list_view.c:423 #, c-format msgid "Mark %s as read ?" msgstr "%s als gelesen markieren?" #: ../src/ui/feed_list_view.c:427 #, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Sind Sie sicher, dass Sie \"%s\" als gelesen markieren wollen?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Diese Schlagzeile hat keinen Link!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Kein Titel ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr " wichtig " #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Schlagzeile" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Datum" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Zum Löschen von Schlagzeilen muss ein Abonnement ausgewählt werden!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Es wurde keine Schlagzeile ausgewählt." #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "In _Tab öffnen" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "Im _Browser öffnen" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Im _externen Browser öffnen" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "In Sammelordner kopieren" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "_Lesezeichen mit %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "_Link der Schlagzeile kopieren" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Lesestatus ändern" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "_Flagge setzen" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "_Lösche Schlagzeile" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Öffne Anhang..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Speichern unter..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Link kopieren" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Aktualisieren" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Ordner _aktualisieren" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "_Neues Abonnement..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Neuer _Ordner..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Neuer S_uchordner..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Neue _Quelle..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Neuer Sa_mmelordner..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Neu" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Abonnements sortieren" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "Alle als gelesen _markieren" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "_Neu Erzeugen" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Löschen" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Eigenschaften" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "In lokales Abonnement umwandeln" #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "GNOME-Standard" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Text unter Elementen" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Text neben Elementen" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Nur Symbole" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Nur Text" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "Minuten" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "Stunden" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "Tage" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Leertaste" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Leertaste" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Leertaste" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Normale Ansicht" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Breite Ansicht" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Kombinierte Ansicht" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Standard-Browser" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Manuell" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Typ" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Programm" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Leer)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Erneuern" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Lösche Abonnement" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Sind Sie sicher, dass sie \"%s\" und alle Inhalte löschen möchten?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Sind Sie sicher, dass Sie \"%s\" löschen wollen?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Lösch-Bestätigung" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" "Sind Sie sich sicher, dass sie ein weiteres Abonnement mit der URL " "\"%s\" anlegen möchten? Das Abonnement \"%s\" hat dieselbe Quelle." #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "Hinzufügen" #: ../src/ui/feed_list_node.c:473 msgid "Adding Duplicate Subscription Confirmation" msgstr "Bestätigung Doppeltes Abonnement" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "_Öffnen" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "" "Der Anbieter dieses Abonnements schlägt ein Aktualisierungsintervall von %d " "Minute vor." msgstr[1] "" "Der Anbieter dieses Abonnements schlägt ein Aktualisierungsintervall von %d " "Minuten vor." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Dieses Abonnement schlägt kein Aktualisierungsintervall vor." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Ohne Titel" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Webseite" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Neues Abonnement" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "OPML-Datei wählen" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Neues OPML-Abonnement" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Keine speziellen Quellen für Abonnements verfügbar!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Art der Quelle" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" "Login für »%s« ist noch nicht abgeschlossen! Bitte warten Sie bis der Login " "abgeschlossen ist." #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" "Das »%s« Abonement wurde erfolgreich in ein lokales Abonnement umgewandelt!" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "Login fehlgeschlagen!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "Reedah" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "Could not parse JSON returned by Reedah API!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "Die TinyTinyRSS HTTP API ist nicht erreichbar!" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" "Das Abonnieren eines Abonnements mit TinyTinyRSS ist fehlgeschlagen! Bitte " "prüfen Sie den Feed-Link!" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "Das Entfernen eines Abonnements aus TinyTinyRSS ist fehlgeschlagen!" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" "Die von Ihnen verwendete Version von TinyTinyRSS erlaubt das Entfernen von " "Abonnements noch nicht. Bitte aktualisieren Sie auf Version %s oder neuer!" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "Die JSON -Antwort der TinyTinyRSS-API ist fehlerhaft!" #: ../src/fl_sources/theoldreader_source.c:329 msgid "TheOldReader" msgstr "TheOldReader" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Link in _Tab öffnen" #: ../src/webkit/liferea_web_view.c:176 msgid "Open Link In Browser" msgstr "Im _Browser öffnen" #: ../src/webkit/liferea_web_view.c:177 msgid "Open Link In External Browser" msgstr "Im _externen Browser öffnen" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_Lesezeichen mit %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Link kopieren" #: ../src/webkit/liferea_web_view.c:193 msgid "_View Image" msgstr "B_ild Anzeigen" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "Bild _Link kopieren" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "Link Speichern _unter..." #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "B_ild Speichern Als" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Abonnieren..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "_Kopieren" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "Schriftgrad ver_größern" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "Schriftgrad ver_kleinern" #: ../glade/about.ui.h:1 msgid "About" msgstr "Info" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea ist ein News-Aggregator für GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Liferea-Webseite" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Authentifizierung" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Benutzername:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Passwort:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Öffne Anhang" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Herunterladen eines Anhangs vom Typ:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Was soll Liferea mit diesem Anhangstyp tun? Bitte geben Sie den Befehl zur " "Ausführung an. Die Adresse des Anhangs wird als Argument mitgegeben:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Durchsuchen" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Tue dies von nun an automatisch für Dateien dieses Typs." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Neues Google-Reader-Konto" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Bitte geben Sie Ihre Google-Reader-Kontodaten ein." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Passwort" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_Benutzername (Email)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Schlagzeilen anzeigen" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Schlagzeilen" #: ../glade/mark_read_dialog.ui.h:1 msgid "Mark all as read ?" msgstr "Alle als gelesen markieren?" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Alle als gelesen markieren" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Neuer Ordner" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "_Ordnername:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Neuer Sammelordner" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Name des Sammelordners" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Abonnement-Quelle" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Art der Quelle:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_Adresse" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Befehl" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "Lokale _Datei" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Datei auswählen..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Quelle:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Download / Nachbearbeitung" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "_Proxy beim Herunterladen nicht nutzen" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "_Benutze einen Filter zum Konvertieren" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea kann externe Filter-Plugins benutzen, um Abonnements in nicht " "unterstützten Formaten zu lesen. Die Dokumentation enthält weitere " "Informationen." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Konvertiere _mit:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Auswahl der Quelle" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Bitte den gewünschten Quellentyp auswählen..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Neue OPML/Planet-Quelle" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Bitte geben Sie eine lokale Datei oder URL an unter der Liferea eine valide " "OPML-Feed-Liste findet." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Ort" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "Datei au_swählen" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Liferea-Einstellungen" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Abonnement-Cache" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "Vorgegebene _Anzahl zu sichernder Schlagzeilen:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Aktualisieren von Abonnements" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Hinweis: Es ist wichtig, ein sinnvolles Intervall anzugeben. Eine " "Aktualisierung öfter als einmal in der Stunde ist meist nur " "Bandbreitenverschwendung." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "Aktualisieren aller Abonnements beim Start." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Vorgegebenes Aktualisierungsintervall:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Abonnements" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Anzeigen von Ordnern" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "Beim _Auswählen Schlagzeilen aller enthaltenen Abonnements zeigen." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "_Gelesene Schlagzeilen verbergen" #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Abonnementsymbole (Favicons)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "Alle Symbole _aktualisieren" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Ordner" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Lesen von Schlagzeilen" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Durch Artikel _blättern mit:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "_Standardansicht" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Web-Integration" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Lesezeichen mit:" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Einstellungen für internen Browser" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Öffne Links im Liferea-_Fenster." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "Javascript _deaktivieren." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_Browser-Plugins aktivieren" #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Einstellungen für externen Browser" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Browser:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Manuell:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s für URL)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Browser" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Aussehen der Werkzeugleiste" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Werkzeugleiste verbergen." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "_Knopfbeschriftungen in Werkzeugleiste:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "Sonstiges" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "Bestätigen bevor alle Schlagzeilen als gelesen markiert werden" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Oberfläche" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "HTTP-Proxy-Server" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Automatisch (GNOME oder Umgebung)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "Kei_n Proxy" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Manuelle Einstellung" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "Proxy-_Host:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "Proxy-_Port:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Proxy-Au_thentifikation benutzen" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Proxy-_Benutzer:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Proxy-_Passwort:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" "Die von Ihnen verwendete Version von WebKitGTK+ ist älter als 2.15.3 und " "unterstützt das Ändern des Proxies durch Liferea noch nicht. Es wird die " "System Proxy Einstellungen verwendet." #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:51 msgid "Privacy Settings" msgstr "Privatsphäre" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "Webseiten eine \"Do Not Track\" Information _senden" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "Privatsphäre" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Herunterladen von Anhängen" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Herunterladen mit" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "custom-command %s" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Öffnen von Anhängen" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Anhänge" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Eigenschaften des Abonnements" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Abonnement-Name" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "Abonnement-_Name:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Aktualisierungsintervall" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Standardeinstellungen verwenden." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_Benutzerdefinierte Aktualisierung alle" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Keine automatische Aktualisierung." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "Der Anbieter dieses Abonnements schlägt ein Aktualisierungsintervall von %d " "Minuten vor." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Allgemein" #: ../glade/properties.ui.h:20 msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea kann externe Filter-Plugins benutzen, um Abonnements in nicht " "unterstützten Formaten zu lesen." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Diese Einstellung kontrolliert, ob und wieviele Schlagzeilen dieses " "Abonnements dauerhaft gespeichert werden." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "_Standardeinstellungen verwenden" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "Cache d_eaktivieren" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "Schlagzeilen _unbegrenzt speichern" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "Default-_Anzahl zu speichernder Schlagzeilen:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Archiv" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "HTTP-_Authentifikation benutzen" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Download" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_Alle Anhänge dieses Abonnements automatisch herunterladen." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "_Link beim Auswählen der Schlagzeile automatisch öffnen." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Ignoriere _Kommentarfeeds dieses Abonnements." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Markiere heruntergeladene Schlagzeilen als gelesen." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "Vollen Artikel aus HTML5 und Google AMP Seiten extrahieren" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Erweitert" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "Neues Reedah-Konto" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "Bitte geben Sie Ihre Reedah-Kontodaten ein." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Umbenennen" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Neuer Name:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Suchordner-Eigenschaften" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "_Name der Suche:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Suche Abonnements die den folgenden Kriterien entsprechen" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Ei_ne Regel trifft zu" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "_Alle Regeln treffen zu" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Erweiterte Suche" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "_Suchordner..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Alle Abonnements durchsuchen" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Erweitert..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Startet die Suche nach dem angegebenen Text in allen Abonnements. Alle " "Treffer werden in der Liste der Schlagzeilen angezeigt." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Suche nach:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Geben Sie einen Suchbegriff ein, nach dem in Titel und Text aller " "Schlagzeilen gesucht werden soll." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Erweitert..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Bitte die Adresse einer Webseite oder wenn bekannt die exakte Adresse eines " "Feeds angeben." #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "Neues TheOldReader-Konto" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "Bitte geben Sie Ihre TheOldReader-Kontodaten ein." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Neuer Tiny Tiny RSS-Konto" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "Bitte geben Sie Ihre TinyTinyRSS-Kontodaten ein." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "Server-URL" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Benutzername" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Aktualisierungsstatus" #: ../glade/update_monitor.ui.h:2 msgid "Cancel All" msgstr "_Alle abbrechen" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Warteschlange" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "In Bearbeitung" #~ msgid "_Subscriptions" #~ msgstr "_Abonnements" #~ msgid "Update _All" #~ msgstr "_Alle aktualisieren" #~ msgid "Updates all subscriptions." #~ msgstr "Aktualisieren aller Abonnements." #~ msgid "Mark All As _Read" #~ msgstr "Alle als gelesen markieren" #~ msgid "Marks read every item of every subscription." #~ msgstr "Markiert alle Schlagzeilen des Abonnements als gelesen." #~ msgid "_Import Feed List..." #~ msgstr "Abonnements _importieren..." #~ msgid "Imports an OPML feed list." #~ msgstr "Importiert Abonnements aus einer OPML Datei." #~ msgid "_Export Feed List..." #~ msgstr "Abonnements _exportieren..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Exportiert alle Abonnements als OPML Datei." #~ msgid "_Quit" #~ msgstr "_Beenden" #~ msgid "_Feed" #~ msgstr "_Abonnement" #~ msgid "Remove _All Items" #~ msgstr "Lösche _alle Schlagzeilen" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Löscht alle Schlagzeilen des ausgewählten Abonnements." #~ msgid "_Item" #~ msgstr "_Schlagzeile" #~ msgid "Previous Item" #~ msgstr "Vorherige Schlagzeile" #~ msgid "Next Item" #~ msgstr "Nächste Schlagzeile" #~ msgid "_Next Unread Item" #~ msgstr "Nächste _Ungelesene" #~ msgid "_View" #~ msgstr "_Ansicht" #~ msgid "Increases the text size of the item view." #~ msgstr "Vergrößern des Schriftgrades der Schlagzeilenansicht." #~ msgid "Decreases the text size of the item view." #~ msgstr "Verkleinern des Schriftgrades der Schlagzeilenansicht." #~ msgid "_Tools" #~ msgstr "_Tools" #~ msgid "_Update Monitor" #~ msgstr "_Aktualisierungsstatus" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Eine Liste aller zur Zeit laufenden Aktualisierungen anzeigen." #~ msgid "_Preferences" #~ msgstr "_Einstellungen" #~ msgid "Edit Preferences." #~ msgstr "Einstellungen ändern." #~ msgid "S_earch" #~ msgstr "_Suche" #~ msgid "Search All Feeds..." #~ msgstr "Alle Feeds durchsuchen..." #~ msgid "Show the search dialog." #~ msgstr "Öffnen des Suchdialogs." #~ msgid "_Help" #~ msgstr "_Hilfe" #~ msgid "_Contents" #~ msgstr "_Inhalt" #~ msgid "View help for this application." #~ msgstr "Die Hilfe für diese Anwendung anzeigen." #~ msgid "_Quick Reference" #~ msgstr "_Kurzreferenz" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Eine Liste aller Tastenkürzel zeigen." #~ msgid "_FAQ" #~ msgstr "_FAQ" #~ msgid "View the FAQ for this application." #~ msgstr "Häufig gestellte Fragen für diese Anwendung anzeigen." #~ msgid "_About" #~ msgstr "_Info" #~ msgid "Shows an about dialog." #~ msgstr "Anzeigen \"Über\"-Dialogs." #~ msgid "_Normal View" #~ msgstr "_Normale Ansicht" #~ msgid "Set view mode to mail client mode." #~ msgstr "Ansicht wie eine Email-Anwendung verwenden." #~ msgid "_Wide View" #~ msgstr "_Breite Ansicht" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Ansicht mit drei vertikalen Spalten verwenden." #~ msgid "_Combined View" #~ msgstr "_Kombinierte Ansicht" #~ msgid "Set view mode to two pane mode." #~ msgstr "" #~ "Ansicht mit zwei Spalten und einer kombinierten Schlagzeilenansicht " #~ "verwenden." #~ msgid "_Reduced Feed List" #~ msgstr "_Reduzierte Abonnements" #~ msgid "Hide feeds with no unread items." #~ msgstr "Verberge Abonnements ohne ungelesene Schlagzeilen." #~ msgid "_New Subscription..." #~ msgstr "_Neues Abonnement..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Neues Abonnement hinzufügen." #~ msgid "Adds a folder to the feed list." #~ msgstr "Einen Ordner der Liste der Abonnements hinzufügen." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Einen neuen Suchordner zu den Abonnements hinzufügen." #~ msgid "New _Source..." #~ msgstr "Neue _Quelle..." #~ msgid "Adds a new feed list source." #~ msgstr "Eine neue Quelle zu den Abonnements hinzufügen." #~ msgid "Adds a new news bin." #~ msgstr "Einen neuen Sammelordner zu den Abonnements hinzufügen." #~ msgid "_Mark Items Read" #~ msgstr "Als gelesen _markieren" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Markiert alle Schlagzeilen des ausgewählten Abonnement oder aller " #~ "Abonnements des ausgewählten Ordners als gelesen." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Aktualisiert das ausgewählte Abonnement oder alle Abonnements des " #~ "ausgewählten Ordners." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Öffnet den Eigenschaften-Dialog für das ausgewählte Abonnement." #~ msgid "_Remove" #~ msgstr "_Löschen" #~ msgid "Removes the selected subscription." #~ msgstr "Entfernt das ausgewählte Abonnement." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Ändert den Lesestatus der gewählten Schlagzeile." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Ändert den Markierungsstatus der gewählten Schlagzeile." #~ msgid "R_emove" #~ msgstr "_Löschen" #~ msgid "Removes the selected item." #~ msgstr "Entfernt die ausgewählte Schlagzeile." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Öffnet die ausgewählten Schlagzeile in einem neuen Tab in Liferea." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Öffnet die ausgewählte Schlagzeile in Liferea." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "" #~ "Öffnet die ausgewählten Schlagzeile im konfigurierten externen Browser." #~ msgid "_Fullscreen" #~ msgstr "Vollbild" #~ msgid "Browse at full screen" #~ msgstr "Im Vollbildmodus lesen" #~ msgid "_Work Offline" #~ msgstr "_Offline arbeiten" #~ msgid "_Update All" #~ msgstr "_Alle aktualisieren" #~ msgid "_Show Liferea" #~ msgstr "Liferea anzeigen" #~ msgid "InoReader" #~ msgstr "InoReader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Hinweis: Benutzername und Passwort werden durch Liferea " #~ "unverschlüsselt mit der Liste der Abonnements gespeichert." #~ msgid "Add InoReader Account" #~ msgstr "Neues InoReader-Konto" #~ msgid "Please enter your InoReader account settings." #~ msgstr "Bitte geben Sie Ihre InoReader-Kontodaten ein." #~ msgid "Plugins" #~ msgstr "Plugins" #~ msgid "normal view" #~ msgstr "Normale Ansicht" #~ msgid "wide view" #~ msgstr "Breite Ansicht" #~ msgid "combined view" #~ msgstr "Kombinierte Ansicht" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, der Linux Feed Reader" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "Weitere Informationen auf https://lzone.de/liferea/" #~ msgid "_Open Link In Browser" #~ msgstr "Im _Browser öffnen" #~ msgid "_Open Link In External Browser" #~ msgstr "Im _externen Browser öffnen" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Suchmaschinen-Abonnement..." #~ msgid "enter any search string you want" #~ msgstr "beliebigen Suchbegriff eingeben" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "Maximale _Anzahl von Ergebnissen:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Hinweis: Liferea generiert ein Abonnement, das benutzt werden kann, um " #~ "die Suchmaschine für den angegebenen Suchbegriff abzufragen. Sie können " #~ "dieses Abonnement dauerhaft behalten und wie jedes andere akualisieren. " #~ msgid "Liferea is now online" #~ msgstr "Liferea ist jetzt online" #~ msgid "Work Offline" #~ msgstr "Offline arbeiten" #~ msgid "Liferea is now offline" #~ msgstr "Liferea ist jetzt offline." #~ msgid "Work Online" #~ msgstr "Online arbeiten" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Diese Option deaktiviert das Aktualisieren von Abonnements." #~ msgid "Browser default" #~ msgstr "Browser-Vorgabe" #~ msgid "Existing window" #~ msgstr "Existierendes Fenster" #~ msgid "New window" #~ msgstr "Neues Fenster" #~ msgid "New tab" #~ msgstr "Neuer Tab" #~ msgid "AOL Reader Login" #~ msgstr "AOL-Reader-Login" #~ msgid "AOL Reader" #~ msgstr "AOL-Reader" #~ msgid "Online/Offline Button" #~ msgstr "Online/Offline Button" #~ msgid "_Open link in:" #~ msgstr "_Öffne Link in:" #~ msgid "No comments yet." #~ msgstr "Keine Kommentare bisher." #~ msgid "Refresh" #~ msgstr "Aktualisieren" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - Linux Feed Reader" #~ msgid "" #~ "

    Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

    You can add new subscriptions

    • From main menu " #~ "'Subscription' -> 'New Subscription'
    • By dropping feed links " #~ "into the subscription list
    • By right clicking links and choosing " #~ "'Subscribe' within Liferea

    " #~ msgstr "" #~ "

    Willkomen in Liferea, einem Desktop News Aggregator für Online-" #~ "Newsfeeds.

    Der linke Fensterbereich enthält eine Liste von " #~ "Abonnements. Mit Abonnements -> Neues Abonnement können weitere Feeds " #~ "hinzugefügt werden. Zum Lesen der Schlagzeilen einfach das gewünschte " #~ "Abonnement links auswählen. Die Schlagzeilen werden dann in der rechten " #~ "Fensterhälfte geladen.

    " #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "In Messaging Menü (Indicator) integrieren" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Beenden anstatt ins Messaging Menü zu minimieren." #~ msgid "Start minimized to the messaging menu" #~ msgstr "Minimiert im Messaging Menü starten" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d neue Schlagzeile!" #~ msgstr[1] "%d neue Schlagzeilen!" #~ msgid "No new items" #~ msgstr "Keine neuen Schlagzeilen" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d ungelesene Schlagzeile" #~ msgstr[1] "" #~ "%s\n" #~ "%d ungelesene Schlagzeilen" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Keine ungelesenen Schlagzeilen" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Ungültiges Atom-Feed: Unbekannter Autor" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Integrieren eines Google Reader-Kontos. Liferea wird die Abonnements des " #~ "Google Reader-Kontos als Teilbaum der Abonnements einbinden." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Integrieren von BlogRolls oder Planets in die Liste der Abonnements. " #~ "Liferea fügt neue Feeds automatisch hinzu und entfernte alte Feeds " #~ "automatisch entsprechend der Aktualisierungen der OPML-Quelle." #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Integrieren eines Tiny Tiny RSS 1.5+ -Kontos. Liferea wird die " #~ "Abonnements des Tiny Tiny RSS-Kontos als Teilbaum der Abonnements " #~ "einbinden." #~ msgid "This feed does not exist anymore!" #~ msgstr "Das gewählte Abonnement existiert nicht mehr!" #~ msgid "This news entry has no headline" #~ msgstr "Diese Schlagzeile hat keinen Inhalt." #~ msgid "Visit" #~ msgstr "Öffnen" #~ msgid "Open feed" #~ msgstr "Öffnen" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "%s mit %d Aktualisierungen" #~ msgstr[1] "%s mit %d Aktualisierungen" #~ msgid "Feed Update" #~ msgstr "Abonnement aktualisieren" #~ msgid "Show details" #~ msgstr "Details anzeigen" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "_Erzwinge Popups für dieses Abonnement." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_Keine Popups für dieses Abonnement" #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Copyright (c) 2003-2012\n" #~ "Das Liferea Team\n" #~ msgid "Notification Settings" #~ msgstr "Benachrichtungen" #~ msgid "Show a _popup window with new headlines." #~ msgstr "_Popup-Fenster mit neuen Schlagzeilen anzeigen." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Ein _Statussymbol im Benachrichtigungsfeld anzeigen." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "A_nzahl neuer Schlagzeilen im Statussymbol anzeigen." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "B_eenden anstatt ins Benachrichtigungsfeld minimieren." #~ msgid "_Start in tray icon." #~ msgstr "_In Benachrichtungsfeld minimiert starten." liferea-1.12.7/po/el.po000066400000000000000000003004441352135647700146110ustar00rootroot00000000000000# translation of liferea.po to # translation of el.po to # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Jennie Petoumenou , 2008. msgid "" msgstr "" "Project-Id-Version: liferea\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2008-12-30 22:50+0200\n" "Last-Translator: Jennie Petoumenou \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: KBabel 1.11.4\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Ανάγνωση ροών" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Το Liferea αποσυνδέθηκε από το δίκτυο" #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "Όνομα ροής" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "Όνομα ροής" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "Όνομα ροής" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "Όνομα ροής" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 #, fuzzy msgid "Play Podcasts" msgstr "Podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Ανάγνωση ροών" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Ανάγνωση ροών Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Αυτή η ροή έχει διακόψει τη λειτουργία της. Δεν είναι πλέον διαθέσιμη. Το " "Liferea θα πάψει να την ενημερώνει, αλλά θα συνεχίσετε να έχετε πρόσβαση " "στους αποθηκευμένους τίτλους." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
    HTTP error code : " msgstr "" "Απέτυχε η τελευταία ενημέρωση αυτής της συνδρομής!
    Κωδικός σφάλματος " "HTTP :" #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Εμφανίστηκαν σφάλματα κατά την ανάλυση της ροής!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Λεπτομέρειες σφάλματος αναλυτή" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Λεπτομέρειες" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Εμφανίστηκαν σφάλματα κατά το φιλτράρισμα της ροής!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Λεπτομέρειες σφάλματος φίλτρου" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Ροή:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Πηγή:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Εκδότης" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Copyright" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "θυγατρικές ροές με" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "μη αναγνωσμένοι τίτλοι" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Φάκελος:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Πηγή" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Ροή" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Αρχειοθετημένο στο" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Συγγραφέας" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "" #: ../xslt/item.xml.in.h:7 #, fuzzy msgid "Related" msgstr "Μετονομασία" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Καταχωρήθηκε και στο" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Δημιουργός" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Σχόλια" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Ενημέρωση..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Τομέας" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Τμήμα" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Φάκελος αποκομμάτων:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Προσθέστε άρθρα στο φάκελο αποκομμάτων, επιλέγοντας \"Αντιγραφή σε φάκελο " "αποκομμάτων\" από το μενού της λίστας τίτλων." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Φάκελος αναζήτησης:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Απέτυχε η εντολή περιηγητή: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Εκκίνηση: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Σφάλμα εξουσιοδότησης" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Αδύνατη η δημιουργία του καταλόγου μνήμης \"%s\"!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Σήμερα %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Χθες %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d %b %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "" "Το \"%s\" δεν είναι έγκυρο αρχείο ρυθμίσεων κάποιου τύπου συνδεδεμένων " "πολυμέσων!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Σφάλμα κατά τη μετονομασία του %s σε %s\n" #: ../src/export.c:417 ../src/export.c:419 #, fuzzy, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "Σφάλμα XML κατά την ανάγνωση του αρχείου της μνήμης! Αδύνατη η εισαγωγή του " "\"%s\"!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Κενό έγγραφο! Το αρχείο OPML \"%s\" δεν θα έπρεπε να είναι κενό για να γίνει " "η εισαγωγή." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "Το \"%s\" δεν είναι έγκυρο αρχείο OPML! Το Liferea δεν μπορεί να εισάγει " "αυτό το αρχείο!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Λίστα εισαχθέντων ροών" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Εισαγωγή λίστας ροών" #: ../src/export.c:481 msgid "Import" msgstr "Εισαγωγή" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 #, fuzzy msgid "OPML Files" msgstr "Επιλογή αρχείου OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Σφάλμα κατά την εξαγωγή της λίστας ροών!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Εξήχθη η λίστα ροών!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Εξαγωγή λίστας ροών" #: ../src/export.c:498 msgid "Export" msgstr "Εξαγωγή" #: ../src/feed.c:317 msgid "" "

    Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

    " msgstr "" "

    Αδύνατος ο καθορισμός του τύπου αυτής της ροής! Παρακαλώ, ελέγξτε αν η " "πηγή αφορά όντως υποστηριζόμενη μορφή!

    Αποτέλεσμα ανάλυσης XML:
    " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "Ενημερώθηκε η ροή \"%s\"..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "Η ροή \"%s\" δεν είναι διαθέσιμη" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "Η τοποθεσία στην οποία επιθυμείτε να αποκτήσετε συνδρομή ανήκει σε " "ιστοσελίδα. Η λειτουργία αυτόματου εντοπισμού δε βρήκε ροές στη σελίδα αυτή. " "Ίσως η ιστοσελίδα να μην υποστηρίζει τον αυτόματο εντοπισμό ροών." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "" "Σφάλμα XML κατά την ανάγνωση της ροής! Αδύνατη η φόρτωση της ροής \"%s\"!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Κενό αρχείο!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Μη έγκυρο XML!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Η πηγή ανήκει σε αρχείο HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Αδύνατος ο καθορισμός του τύπου της ροής." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 #, fuzzy msgid "There are no unread items" msgstr "Δεν υπάρχουν μη αναγνωσμένα άρθρα" #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" " Η ΚΑΤΑΣΤΑΣΗ μπορεί να είναι `shown' (εμφάνιση), " "`iconified' (εικονίδιο) ή `hidden' (απόκρυψη)" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "" #: ../src/liferea_application.c:283 #, fuzzy msgid "Show version information and exit" msgstr " --version Εμφάνιση πληροφοριών έκδοσης και έξοδος." #: ../src/liferea_application.c:284 #, fuzzy msgid "Add a new subscription" msgstr "Νέα συνδρομή" #: ../src/liferea_application.c:284 msgid "uri" msgstr "" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 #, fuzzy msgid "Print debugging messages of all types" msgstr "" " --debug- Εμφάνιση των μηνυμάτων της αποσφαλμάτωσης για συγκεκριμένο " "θέμα" #: ../src/liferea_application.c:291 #, fuzzy msgid "Print debugging messages for the cache handling" msgstr "" " --debug- Εμφάνιση των μηνυμάτων της αποσφαλμάτωσης για συγκεκριμένο " "θέμα" #: ../src/liferea_application.c:292 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "" " --debug- Εμφάνιση των μηνυμάτων της αποσφαλμάτωσης για συγκεκριμένο " "θέμα" #: ../src/liferea_application.c:293 #, fuzzy msgid "Print debugging messages of the database handling" msgstr "" " --debug- Εμφάνιση των μηνυμάτων της αποσφαλμάτωσης για συγκεκριμένο " "θέμα" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "" #: ../src/liferea_application.c:300 #, fuzzy msgid "Print debugging messages of the feed update processing" msgstr "" " --debug- Εμφάνιση των μηνυμάτων της αποσφαλμάτωσης για συγκεκριμένο " "θέμα" #: ../src/liferea_application.c:301 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "" " --debug- Εμφάνιση των μηνυμάτων της αποσφαλμάτωσης για συγκεκριμένο " "θέμα" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 #, fuzzy msgid "Print debugging messages for the given topic" msgstr "" " --debug- Εμφάνιση των μηνυμάτων της αποσφαλμάτωσης για συγκεκριμένο " "θέμα" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "" #: ../src/net.c:466 #, fuzzy msgid "Unable to connect to remote host" msgstr "Σφάλμα κατά τη σύνδεση στον απομακρυσμένο υπολογιστή" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "" #. http 4xx client error #: ../src/net.c:474 #, fuzzy msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Δεν είστε εξουσιοδοτημένοι για να λάβετε αυτήν τη ροή. Παρακαλώ, ελέγξτε το " "όνομα χρήστη και το συνθηματικό σας στο διάλογο προτιμήσεων της ροής." #: ../src/net.c:476 #, fuzzy msgid "Payment required" msgstr "Απαιτείται πληρωμή" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Δε βρέθηκαν οι πόροι" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Μη επιτρεπτή μέθοδος" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Μη αποδεκτό" #: ../src/net.c:481 #, fuzzy msgid "Proxy authentication required" msgstr "Απαιτείται πιστοποίηση διαμεσολαβητή" #: ../src/net.c:482 #, fuzzy msgid "Request timed out" msgstr "Λήξη χρονικού ορίου αίτησης" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Δεν υπάρχει πλέον. Παρακαλώ, διακόψτε τη συνδρομή σας!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Μη διαθέσιμη συνδρομή: Ο εξυπηρετητής ζήτησε μη υποστηριζόμενη ανακατεύθυνση!" #: ../src/net.c:492 msgid "Client Error" msgstr "Σφάλμα πελάτη" #: ../src/net.c:494 msgid "Server Error" msgstr "Σφάλμα εξυπηρετητή" #: ../src/net.c:496 #, fuzzy msgid "An unknown networking error happened!" msgstr "(άγνωστο σφάλμα σύνδεσης)" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Άρθρο" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "περιέχει" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "δεν περιέχει" #: ../src/rule.c:175 msgid "Item title" msgstr "Τίτλος άρθρου" #: ../src/rule.c:176 msgid "Item body" msgstr "Σώμα άρθρου" #: ../src/rule.c:177 msgid "Read status" msgstr "Αναγνωσμένο" #: ../src/rule.c:177 msgid "is unread" msgstr "όχι" #: ../src/rule.c:177 msgid "is read" msgstr "ναι" #: ../src/rule.c:178 msgid "Flag status" msgstr "Σημαία" #: ../src/rule.c:178 msgid "is flagged" msgstr "ναι" #: ../src/rule.c:178 msgid "is unflagged" msgstr "όχι" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "περιλαμβάνεται" #: ../src/rule.c:179 msgid "not included" msgstr "δεν περιλαμβάνεται" #: ../src/rule.c:180 #, fuzzy msgid "Category" msgstr "Δημιουργός" #: ../src/rule.c:180 #, fuzzy msgid "is set" msgstr "ναι" #: ../src/rule.c:180 msgid "is not set" msgstr "" #: ../src/rule.c:181 msgid "Feed title" msgstr "Τίτλος ροής" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Ήδη ενημερώνεται η συνδρομή \"%s\"!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "Η συνδρομή \"%s\" δε λειτουργεί πλέον. Το Liferea θα πάψει να την ενημερώνει!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Ενημέρωση του εικονιδίου της ροής \"%s\"" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Εμφανίστηκε πρόβλημα κατά την ανάγνωση της συνδρομής. Παρακαλώ ελέγξτε την " "τοποθεσία και τις λεπτομέρειες στην κονσόλα." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "" "Η τοποθεσία της ροής \"%s\" άλλαξε οριστικά. Η συνδρομή σας ενημερώθηκε " "καταλλήλως. " #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "" "Η συνδρομή \"%s\" δε λειτουργεί πλέον. Το Liferea θα πάψει να την ενημερώνει!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "Η ροή \"%s\" δεν έχει αλλάξει από την προηγούμενη ενημέρωση" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Ενημέρωση της ροής \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "" "Σφάλμα κατά το άνοιγμα του προσωρινού αρχείου %s που προοριζόταν για το " "φιλτράρισμα!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s: τερματίστηκε με κατάσταση %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Σφάλμα: Αδύνατο το άνοιγμα του pipe \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Σφάλμα: Αδύνατο το άνοιγμα του αρχείου \"%s\"" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Σφάλμα: Δεν υπάρχει το αρχείο \"%s\"" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Νέος φάκελος αναζήτησης" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Εμφανίστηκαν και άλλα σφάλματα, τα οποία παραλείπονται!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "Ανάλυση XML: Αδύνατη η ανάλυση του αρχείου:\n" #: ../src/ui/enclosure_list_view.c:175 #, fuzzy msgid "Attachments" msgstr "σχόλια" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr "" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "" msgstr[1] "" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Επιλογή αρχείου" #: ../src/ui/enclosure_list_view.c:444 #, fuzzy, c-format msgid "File Extension .%s" msgstr "Επέκταση αρχείου .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Δε βρέθηκε το αρχείο pixmap: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d νέο)" msgstr[1] " (%d νέα)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d μη αναγνωσμένο%s" msgstr[1] "%d μη αναγνωσμένα%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Θέματα Βοήθειας" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Σύντομος οδηγός" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "Συχνές ερωτήσεις" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Για προχωρημένους" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Εισάγετε το όνομα χρήστη και το συνθηματικό για τη ροή \"%s\" (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Άγνωστη πηγή" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "Ακύρωση ό_λων" #: ../src/ui/ui_common.c:211 #, fuzzy msgid "All Files" msgstr "_Τοπικό αρχείο" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Το Liferea λειτουργεί χωρίς σύνδεση. Δεν είναι δυνατή η ενημέρωση." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Αναζήτηση στις ροές" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Σημείωση όλων ως αναγνωσμένων" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Σίγουρα θέλετε να διαγράψετε το %s?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Αυτό το άρθρο δεν παραπέμπει σε σύνδεσμο!" #: ../src/ui/item_list_view.c:484 #, fuzzy msgid "*** No title ***" msgstr "*** Χωρίς τίτλο ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Τίτλος" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Ημερομηνία" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Πρέπει πρώτα να επιλέξετε ροή για να διαγράψετε τα άρθρα της!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Δεν επιλέχθηκε άρθρο" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "" #: ../src/ui/popup_menu.c:111 #, fuzzy msgid "_Open In Browser" msgstr "Άνοιγμα στον _περιηγητή" #: ../src/ui/popup_menu.c:115 #, fuzzy msgid "Open In _External Browser" msgstr "Ρυθμίσεις εξωτερικού περιηγητή" #: ../src/ui/popup_menu.c:139 #, fuzzy msgid "Copy to News Bin" msgstr "/Αντιγραφή στο φάκελο αποκομμάτων/%s" #: ../src/ui/popup_menu.c:147 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "/_Δημιουργία σελιδοδείκτη στο %s" #: ../src/ui/popup_menu.c:153 #, fuzzy msgid "Copy Item _Location" msgstr "/_Αντιγραφή τοποθεσίας συνδέσμου" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Ε_ναλλαγή μεταξύ αναγνωσμένου και μη" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Εναλλαγή _σημαίας άρθρου" #: ../src/ui/popup_menu.c:170 #, fuzzy msgid "R_emove Item" msgstr "/Α_φαίρεση άρθρου" #: ../src/ui/popup_menu.c:200 #, fuzzy msgid "Open Enclosure..." msgstr "/Άνοιγμα συνδεδεμένου πολυμέσου..." #: ../src/ui/popup_menu.c:201 #, fuzzy msgid "Save As..." msgstr "/_Αποθήκευση ως..." #: ../src/ui/popup_menu.c:202 #, fuzzy msgid "Copy Link Location" msgstr "/_Αντιγραφή τοποθεσίας συνδέσμου" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Ενημέρωση" #: ../src/ui/popup_menu.c:282 #, fuzzy msgid "_Update Folder" msgstr "/_Ενημέρωση φακέλου" #: ../src/ui/popup_menu.c:292 #, fuzzy msgid "New _Subscription..." msgstr "_Νέα συνδρομή" #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Νέος _φάκελος..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Νέος φάκελος ανα_ζήτησης..." #: ../src/ui/popup_menu.c:299 #, fuzzy msgid "New S_ource..." msgstr "Νέα _πηγή..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Νέος φάκελος _αποκομμάτων..." #: ../src/ui/popup_menu.c:303 #, fuzzy msgid "_New" msgstr "/_Νέο" #: ../src/ui/popup_menu.c:312 #, fuzzy msgid "Sort Feeds" msgstr "Εισαγωγή λίστας ροών" #: ../src/ui/popup_menu.c:320 #, fuzzy msgid "_Mark All As Read" msgstr "/Ση_μείωση όλων ως αναγνωσμένων" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 #, fuzzy msgid "_Delete" msgstr "/_Διαγραφή" #: ../src/ui/popup_menu.c:336 #, fuzzy msgid "_Properties" msgstr "_Ιδιότητες..." #: ../src/ui/popup_menu.c:343 #, fuzzy msgid "Convert To Local Subscriptions..." msgstr "_Νέα συνδρομή" #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "Προεπιλογή GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Κείμενο κάτω από τα εικονίδια" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Κείμενο δίπλα στα εικονίδια" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Μόνο εικονίδια" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Μόνο κείμενο" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "λεπτά" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "ώρες" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "ημέρες" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Διάστημα" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " + διάστημα" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " + διάστημα" #: ../src/ui/preferences_dialog.c:112 #, fuzzy msgid "Normal View" msgstr "_Κανονική προβολή" #: ../src/ui/preferences_dialog.c:113 #, fuzzy msgid "Wide View" msgstr "_Διευρυμένη προβολή" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Combined View" msgstr "_Συνδυασμένη προβολή" #: ../src/ui/preferences_dialog.c:476 #, fuzzy msgid "Default Browser" msgstr "Προεπιλεγμένος περιηγητής GNOME" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Προσαρμοσμένος" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Τύπος" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Πρόγραμμα" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Διαγραφή..." #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Σίγουρα θέλετε να διαγράψετε το \"%s\" και τα περιεχόμενά του;" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Σίγουρα θέλετε να διαγράψετε το %s?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Επιβεβαίωση της διαγραφής" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Επιβεβαίωση της διαγραφής" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "Ο πάροχος αυτής της ροής προτείνει συχνότητα ενημέρωσης %d λεπτού." msgstr[1] "Ο πάροχος αυτής της ροής προτείνει συχνότητα ενημέρωσης %d λεπτών." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Αυτή η ροή δεν προτείνει συγκεκριμένη συχνότητα ενημέρωσης." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Νέα συνδρομή" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Επιλογή αρχείου OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Νέα συνδρομή OPML" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Δε βρέθηκαν πηγές με λίστες ροών!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Τύπος πηγής" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Απέτυχε η είσοδος στο Google Reader!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Ανάγνωση ροών" #: ../src/webkit/liferea_web_view.c:175 #, fuzzy msgid "Open Link In _Tab" msgstr "/Άνοιγμα συνδεσμού σε νέα _καρτέλα" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "/Ανοιγμα συνδέσμου στον _περιηγητή" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "/Ανοιγμα συνδέσμου στον _περιηγητή" #: ../src/webkit/liferea_web_view.c:183 #, fuzzy, c-format msgid "_Bookmark Link at %s" msgstr "/_Δημιουργία σελιδοδείκτη στο %s" #: ../src/webkit/liferea_web_view.c:190 #, fuzzy msgid "_Copy Link Location" msgstr "/_Αντιγραφή τοποθεσίας συνδέσμου" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "_Προβολή" #: ../src/webkit/liferea_web_view.c:194 #, fuzzy msgid "_Copy Image Location" msgstr "/_Αντιγραφή τοποθεσίας συνδέσμου" #: ../src/webkit/liferea_web_view.c:197 #, fuzzy msgid "S_ave Link As" msgstr "/_Αποθήκευση ως..." #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "" #: ../src/webkit/liferea_web_view.c:207 #, fuzzy msgid "_Subscribe..." msgstr "/_Συνδρομή..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "_Αύξηση μεγέθους γραμματοσειράς" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Μείωση μεγέθους γραμματοσειράς" #: ../glade/about.ui.h:1 msgid "About" msgstr "Περί" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Το Liferea είναι μία εφαρμογή συγκέντρωσης ροών για GTK+" #: ../glade/about.ui.h:3 #, fuzzy msgid "Liferea Homepage" msgstr "Ανάγνωση ροών Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Πιστοποίηση" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "Όνομα _χρήστη:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Συνθηματικό:" #: ../glade/enclosure_handler.ui.h:1 #, fuzzy msgid "Open Enclosure" msgstr "/Άνοιγμα συνδεδεμένου πολυμέσου..." #: ../glade/enclosure_handler.ui.h:2 #, fuzzy msgid "Open an enclosure of type:" msgstr "Λήψη συνδεδεμένου πολυμέσου τύπου:" #: ../glade/enclosure_handler.ui.h:3 #, fuzzy msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Πώς θα χειριστεί το Liferea αυτό το συνδεδεμένο πολυμέσο; Παρακαλώ, εισάγετε " "την εντολή που επιθυμείτε να εκτελεστεί. Το ληφθέν αρχείο θα προστεθεί ως " "παράμετρος στην εντολή:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Περιήγηση" #: ../glade/enclosure_handler.ui.h:5 #, fuzzy msgid "_Do this automatically for enclosures like this from now on." msgstr "" "Από εδώ και στο εξής να εφαρμόζεται αυτομάτως για αρχεία του ίδιου τύπου." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Προσθήκη λογαριασμού Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Παρακαλώ εισάγετε τις ρυθμίσεις του λογαριασμού σας στο Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Συνθηματικό" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "Όνομα _χρήστη (email)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Προβολή τίτλων" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Τίτλοι" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Σημείωση όλων ως αναγνωσμένων" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Σημείωση όλων ως αναγνωσμένων" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Νέος φάκελος" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "Όνομα _φακέλου:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Δημιουργία φακέλου αποκομμάτων" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "Όνομα _φακέλου αποκομμάτων:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Πηγή ροής" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Τύπος πηγής" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_Ιστοσελίδα" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "Ε_ντολή" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Τοπικό αρχείο" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Επιλογή αρχείου..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Πηγή:" #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Λήψη/Επεξεργασία" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "Να _μη χρησιμοποιείται διαμεσολαβητής για τη λήψη" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Χρήση _φίλτρου μετατροπής" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Το Liferea μπορεί να χρησιμοποιήσει εξωτερικά φίλτρα για να αποκτήσει " "πρόσβαση σε ροές και καταλόγους μη υποστηριζόμενης μορφής. Δείτε την " "τεκμηρίωση για περισσότερες πληροφορίες." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Μετατροπή με _χρήση:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Επιλογή πηγής" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Επιλέξτε τον τύπο πηγής που θέλετε να προσθέσετε..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Προσθήκη OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Παρακαλώ εισάγετε όνομα αρχείου ή τοποθεσία που να αντιστοιχεί σε έγκυρη " "λίστα ροών OPML." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Τοποθεσία" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Επιλογή αρχείου" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Προτιμήσεις Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "Προεπιλεγμένος αρι_θμός άρθρων προς αποθήκευση ανά ροή:" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "Feed Update Settings" msgstr "Ενημέρωση ροής" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Σημείωση: Παρακαλώ, ορίστε μια λογική τιμή για τη συχνότητα ενημέρωσης. Η " "ενημέρωση των ροών συχνότερα από μια φορά την ώρα είναι μάλλον άσκοπη " "σπατάλη των δυνατοτήτων της σύνδεσής σας." #: ../glade/prefs.ui.h:8 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Νέα συνδρομή" #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Προεπιλεγμένη _συχνότητα ενημέρωσης ροών" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Ροές" #: ../glade/prefs.ui.h:12 #, fuzzy msgid "Folder Display Settings" msgstr "Ρυθμίσεις εμφάνισης φακέλων" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "" "Εμ_φάνιση των άρθρων όλων των ροών ενός φακέλου, όποτε επιλέγεται ο φάκελος." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "Από_κρυψη αναγνωσμένων." #: ../glade/prefs.ui.h:15 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Εικονίδια ροών (Favicons)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Ενημέρωση όλων των εικονιδίων τώρα" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Φάκελοι" #: ../glade/prefs.ui.h:18 #, fuzzy msgid "Reading Headlines" msgstr "μη αναγνωσμένοι τίτλοι" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Μετά_βαση από άρθρο σε άρθρο πατώντας:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:21 #, fuzzy msgid "Web Integration" msgstr "Προσανατολισμός" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Δημοσίευση σελιδοδεικτών στο" #: ../glade/prefs.ui.h:24 #, fuzzy msgid "Internal Browser Settings" msgstr "Ρυθμίσεις εσωτερικού περιηγητή" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Ά_νοιγμα συνδέσμων στο παράθυρο του Liferea." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Απενεργοποίηση Javascript." #: ../glade/prefs.ui.h:27 #, fuzzy msgid "_Enable browser plugins." msgstr "Ρυθμίσεις εξωτερικού περιηγητή" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "External Browser Settings" msgstr "Ρυθμίσεις εξωτερικού περιηγητή" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Περιηγητής:" #: ../glade/prefs.ui.h:30 #, fuzzy msgid "_Manual:" msgstr "Προσαρμοσμένος" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Περιηγητής" #: ../glade/prefs.ui.h:34 #, fuzzy msgid "Toolbar Settings" msgstr "Ε_τικέτες κουμπιών εργαλειοθήκης: " #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "" #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Ε_τικέτες κουμπιών εργαλειοθήκης: " #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Γραφικό περιβάλλον" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "Αυτόματος _εντοπισμός (GNOME ή περιβάλλον)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Χωρίς διαμεσολαβητή" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Χειροκίνητη ρύθμιση:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Διεύθυνση διαμεσολαβητή:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Θύρα διαμεσολαβητή:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Χρήση πιστοποίησης _διαμεσολαβητή" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Όνομα _χρήστη:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "_Συνθηματικό διαμεσολαβητή:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Διαμεσολαβητής" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Ρυθμίσεις εμφάνισης φακέλων" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 #, fuzzy msgid "Downloading Enclosures" msgstr "Λήψη συνδεδεμένων πολυμέσων..." #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Λήψη μέσω" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 #, fuzzy msgid "Opening Enclosures" msgstr "/Άνοιγμα συνδεδεμένου πολυμέσου..." #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Συνδεδεμένα πολυμέσα" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Ιδιότητες συνδρομής" #: ../glade/properties.ui.h:2 #, fuzzy msgid "Feed Name" msgstr "Όν_ομα ροής:" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "Όν_ομα ροής:" #: ../glade/properties.ui.h:4 #, fuzzy msgid "Update Interval" msgstr "Παρακολούθηση ενημερώσεων" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "Χρήση _γενικής προεπιλεγμένης συχνότητας ενημέρωσης." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_Συχνότητα ενημέρωσης μόνο για αυτή τη ροή:" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Μη αυτόματη ενημέρωση της ροής." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Ο πάροχος της ροής προτείνει συχνότητα ενημέρωσης %d λεπτών." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Γενικά" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Το Liferea μπορεί να χρησιμοποιήσει εξωτερικά φίλτρα για να αποκτήσει " "πρόσβαση σε ροές και καταλόγους μη υποστηριζόμενης μορφής. Δείτε την " "τεκμηρίωση για περισσότερες πληροφορίες." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Οι ρυθμίσεις της μνήμης καθορίζουν το αν τα περιεχόμενα των ροών θα " "αποθηκεύονται κατά την έξοδο. Τα σημειωμένα άρθρα αποθηκεύονται πάντα στη " "μνήμη." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "Προεπιλεγμένες ρυθμίσεις _μνήμης" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "Α_πενεργοποίηση μνήμης" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "Απε_ριόριστη μνήμη" #: ../glade/properties.ui.h:27 #, fuzzy msgid "_Number of items to save:" msgstr "Προεπιλεγμένος αρι_θμός άρθρων προς αποθήκευση ανά ροή:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Αρχείο" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Χρήση _πιστοποίησης HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Λήψη" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "Αυτόματη _λήψη όλων των συνδεδεμένων πολυμέσων για αυτή τη ροή." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Αυτόματη _φόρτωση του συνδέσμου στον επιλεγμένο περιηγητή, όποτε επιλέγεται " "ένα άρθρο." #: ../glade/properties.ui.h:37 #, fuzzy msgid "Ignore _comment feeds for this subscription." msgstr "Εμφάνιση του διαλόγου ιδιοτήτων της επιλεγμένης συνδρομής." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "" #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Για προχωρημένους" #: ../glade/reedah_source.ui.h:1 #, fuzzy msgid "Add Reedah Account" msgstr "Προσθήκη λογαριασμού Google Reader" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Παρακαλώ εισάγετε τις ρυθμίσεις του λογαριασμού σας στο Google Reader." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Μετονομασία" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Νέο όνομα:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Αναζήτηση στις ιδιότητες του φακέλου" #: ../glade/search_folder.ui.h:2 #, fuzzy msgid "Search _Name:" msgstr "Όν_ομα ροής:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "" #: ../glade/search.ui.h:1 #, fuzzy msgid "Advanced Search" msgstr "Για προχωρημένους" #: ../glade/search.ui.h:2 #, fuzzy msgid "_Search Folder..." msgstr "Αναζήτηση στο φάκελο" #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Αναζήτηση στις ροές" #: ../glade/simple_search.ui.h:2 #, fuzzy msgid "_Advanced..." msgstr "Για προχωρημένους..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Αναζήτηση της ζητούμενης φράσης σε όλες τις ροές. Τα αποτελέσματα της " "αναζήτησης εμφανίζονται στο πλαίσιο της λίστας τίτλων." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Αναζήτηση για:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Εισάγετε φράση προς αναζήτηση. Το Liferea θα την αναζητήσει τόσο στους " "τίτλους όσο και στο σώμα των άρθρων." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Για προχωρημένους..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Εισάγετε τοποθεσία στο διαδίκτυο αν γνωρίζετε την ακριβή τοποθεσία της ροής, " "ή αν επιθυμείτε να εντοπιστεί αυτόματα η ροή." #: ../glade/theoldreader_source.ui.h:1 #, fuzzy msgid "Add TheOldReader Account" msgstr "Προσθήκη λογαριασμού Google Reader" #: ../glade/theoldreader_source.ui.h:2 #, fuzzy msgid "Please enter your TheOldReader account settings." msgstr "Παρακαλώ εισάγετε τις ρυθμίσεις του λογαριασμού σας στο Google Reader." #: ../glade/ttrss_source.ui.h:1 #, fuzzy msgid "Add Tiny Tiny RSS Account" msgstr "Προσθήκη λογαριασμού Bloglines" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "Παρακαλώ, εισάγετε τις ρυθμίσεις του λογαριασμού σας στο Bloglines." #: ../glade/ttrss_source.ui.h:3 #, fuzzy msgid "_Server URL" msgstr "Σφάλμα εξυπηρετητή" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "Όνομα _χρήστη:" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Παρακολούθηση ενημερώσεων" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "Ακύρωση ό_λων" #: ../glade/update_monitor.ui.h:3 #, fuzzy msgid "Pending Requests" msgstr "Εκκρεμούν" #: ../glade/update_monitor.ui.h:4 #, fuzzy msgid "Downloading Now" msgstr "Λαμβάνονται τώρα" #~ msgid "_Subscriptions" #~ msgstr "_Συνδρομές" #~ msgid "Update _All" #~ msgstr "_Ενημέρωση όλων" #, fuzzy #~ msgid "Updates all subscriptions." #~ msgstr "Νέα συνδρομή" #~ msgid "Mark All As _Read" #~ msgstr "Ση_μείωση όλων ως αναγνωσμένων" #~ msgid "Marks read every item of every subscription." #~ msgstr "Σημείωση ως αναγνωσμένων όλων των άρθρων σε όλες τις συνδρομές." #~ msgid "_Import Feed List..." #~ msgstr "Ε_ισαγωγή λίστας ροών..." #~ msgid "Imports an OPML feed list." #~ msgstr "Εισαγωγή λίστας ροών σε μορφή OPML." #~ msgid "_Export Feed List..." #~ msgstr "Εξα_γωγή λίστας ροών..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Εξαγωγή της λίστας ροών σε μορφή OPML." #~ msgid "_Quit" #~ msgstr "Έ_ξοδος" #~ msgid "_Feed" #~ msgstr "_Ροή" #~ msgid "Remove _All Items" #~ msgstr "Αφαίρεση ό_λων των άρθρων" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Αφαίρεση όλων των άρθρων της επιλεγμένης ροής." #~ msgid "_Item" #~ msgstr "Άρ_θρο" #, fuzzy #~ msgid "Next Item" #~ msgstr "_Επόμενο μη αναγνωσμένο" #~ msgid "_Next Unread Item" #~ msgstr "_Επόμενο μη αναγνωσμένο" #~ msgid "_View" #~ msgstr "_Προβολή" #~ msgid "Increases the text size of the item view." #~ msgstr "Αυξάνει το μέγεθος της γραμματοσειράς των άρθρων." #~ msgid "Decreases the text size of the item view." #~ msgstr "Μειώνει το μέγεθος της γραμματοσειράς των άρθρων." #~ msgid "_Tools" #~ msgstr "_Εργαλεία" #~ msgid "_Update Monitor" #~ msgstr "Παρακολούθηση _ενημερώσεων" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Εμφανίζει λίστα με τις ροές των οποίων εκκρεμεί η ενημέρωση" #~ msgid "_Preferences" #~ msgstr "_Προτιμήσεις" #~ msgid "Edit Preferences." #~ msgstr "Επεξεργασία προτιμήσεων." #, fuzzy #~ msgid "S_earch" #~ msgstr "_Αναζήτηση" #~ msgid "Search All Feeds..." #~ msgstr "Αναζήτηση στις ροές" #~ msgid "Show the search dialog." #~ msgstr "Εμφάνιση του διαλόγου αναζήτησης." #~ msgid "_Help" #~ msgstr "_Βοήθεια" #~ msgid "_Contents" #~ msgstr "_Περιεχόμενα" #~ msgid "View help for this application." #~ msgstr "Προβολή της βοήθειας της εφαρμογής." #~ msgid "_Quick Reference" #~ msgstr "_Σύντομος οδηγός" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Προβολή λίστας με όλες τις συντομεύσεις του Liferea." #~ msgid "_FAQ" #~ msgstr "Συ_χνές ερωτήσεις" #~ msgid "View the FAQ for this application." #~ msgstr "Προβολή των συχνών ερωτήσεων της εφαρμογής." #~ msgid "_About" #~ msgstr "Πε_ρί" #~ msgid "Shows an about dialog." #~ msgstr "Προβολή του διαλόγου πληροφοριών της εφαρμογής." #~ msgid "_Normal View" #~ msgstr "_Κανονική προβολή" #~ msgid "Set view mode to mail client mode." #~ msgstr "" #~ "Προβολή στη μορφή που χρησιμοποιούν συνήθως οι εφαρμογές αλληλογραφίας." #~ msgid "_Wide View" #~ msgstr "_Διευρυμένη προβολή" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Προβολή σε τρία κάθετα πλαίσια." #~ msgid "_Combined View" #~ msgstr "_Συνδυασμένη προβολή" #~ msgid "Set view mode to two pane mode." #~ msgstr "Προβολή σε δύο πλαίσια." #, fuzzy #~ msgid "Hide feeds with no unread items." #~ msgstr "Δεν υπάρχουν μη αναγνωσμένα άρθρα" #~ msgid "_New Subscription..." #~ msgstr "_Νέα συνδρομή" #~ msgid "Adds a subscription to the feed list." #~ msgstr "Προσθήκη συνδρομής στη λίστα ροών." #~ msgid "Adds a folder to the feed list." #~ msgstr "Προσθήκη φακέλου στη λίστα ροών." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Προσθήκη νέου φακέλου αναζήτησης στη λίστα ροών." #~ msgid "New _Source..." #~ msgstr "Νέα _πηγή..." #~ msgid "Adds a new feed list source." #~ msgstr "Προσθήκη νέας πηγής λίστας ροής." #~ msgid "Adds a new news bin." #~ msgstr "Προσθήκη νέου φακέλου αποκομμάτων." #, fuzzy #~ msgid "_Mark Items Read" #~ msgstr "_Σημείωση ως αναγνωσμένου" #, fuzzy #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Σημειώνονται ως αναγνωσμένα όλα τα άρθρα είτε της επιλεγμένης συνδρομής " #~ "είτε του συνόλου των συνδρομών στον επιλεγμένο φάκελο." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Ενημέρωση είτε της επιλεγμένης συνδρομής είτε όλων των συνδρομών στον " #~ "επιλεγμένο φάκελο." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Εμφάνιση του διαλόγου ιδιοτήτων της επιλεγμένης συνδρομής." #~ msgid "_Remove" #~ msgstr "Α_φαίρεση" #~ msgid "Removes the selected subscription." #~ msgstr "Αφαίρεση της επιλεγμένης συνδρομής." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Αν το επιλεγμένο άρθρο θεωρείται αναγνωσμένο ή όχι." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Αν υπάρχει ή όχι σημαία στο επιλεγμένο άρθρο." #~ msgid "R_emove" #~ msgstr "Α_φαίρεση" #~ msgid "Removes the selected item." #~ msgstr "Αφαιρεί το επιλεγμένο άρθρο." #, fuzzy #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Ανοίγει το σύνδεσμο στον επιλεγμένο περιηγητή." #, fuzzy #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Ανοίγει το σύνδεσμο στον επιλεγμένο περιηγητή." #, fuzzy #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Ανοίγει το σύνδεσμο στον επιλεγμένο περιηγητή." #~ msgid "_Work Offline" #~ msgstr "Ε_ργασία χωρίς σύνδεση" #, fuzzy #~ msgid "_Update All" #~ msgstr "/_Ενημέρωση όλων" #, fuzzy #~ msgid "_Show Liferea" #~ msgstr "Liferea" #, fuzzy #~ msgid "InoReader" #~ msgstr "Google Reader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Σημείωση: Το όνομα χρήστη και το συνθηματικό θα αποθηκευτούν στο " #~ "αρχείο με τη λίστα ροών του Liferea χωρίς κρυπτογράφηση." #, fuzzy #~ msgid "Add InoReader Account" #~ msgstr "Προσθήκη λογαριασμού Google Reader" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "" #~ "Παρακαλώ εισάγετε τις ρυθμίσεις του λογαριασμού σας στο Google Reader." #~ msgid "normal view" #~ msgstr "κανονική προβολή" #~ msgid "wide view" #~ msgstr "διευρυμένη προβολή" #~ msgid "combined view" #~ msgstr "συνδυασμένη προβολή" #, fuzzy #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea - Ανάγνωση ροών για Linux" #, fuzzy #~ msgid "_Open Link In Browser" #~ msgstr "/Ανοιγμα συνδέσμου στον _περιηγητή" #, fuzzy #~ msgid "_Open Link In External Browser" #~ msgstr "/Ανοιγμα συνδέσμου στον _περιηγητή" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Δημιουργία ροής από μηχανή αναζήτησης" #~ msgid "enter any search string you want" #~ msgstr "εισάγετε μία οποιαδήποτε φράση προς αναζήτηση" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "Μέγιστος αρι_θμός αποτελεσμάτων:" #, fuzzy #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Σημείωση: Το Liferea θα δημιουργήσει μια συνδρομή που θα συγκεντρώνει " #~ "αποτελέσματα για τις ζητούμενες λέξεις από την επιλεγμένη μηχανή " #~ "αναζήτησης. Η ροή αυτή μπορεί να παραμείνει μόνιμα και να ενημερώνεται " #~ "όπως και κάθε άλλη συνδρομή." #~ msgid "Liferea is now online" #~ msgstr "Το Liferea συνδέθηκε στο δίκτυο" #~ msgid "Work Offline" #~ msgstr "Εργασία χωρίς σύνδεση" #~ msgid "Liferea is now offline" #~ msgstr "Το Liferea αποσυνδέθηκε από το δίκτυο" #~ msgid "Work Online" #~ msgstr "Εργασία με σύνδεση" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Αυτή η επιλογή απενεργοποιεί την ενημέρωση των συνδρομών." #~ msgid "Browser default" #~ msgstr "Προεπιλογή περιηγητή" #~ msgid "Existing window" #~ msgstr "Υπάρχον παράθυρο" #~ msgid "New window" #~ msgstr "Νέο παράθυρο" #~ msgid "New tab" #~ msgstr "Νέα καρτέλα" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Ανάγνωση ροών" #~ msgid "Online/Offline Button" #~ msgstr "Κουμπί εργασίας με σύνδεση/χωρίς σύνδεση" #~ msgid "_Open link in:" #~ msgstr "Άνοι_γμα συνδέσμου στο:" #~ msgid "No comments yet." #~ msgstr "Δεν υπάρχουν σχόλια." #~ msgid "Refresh" #~ msgstr "Ανανέωση" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - Ανάγνωση ροών για Linux" #, fuzzy #~ msgid "" #~ "

    Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

    You can add new subscriptions

    • From main menu " #~ "'Subscription' -> 'New Subscription'
    • By dropping feed links " #~ "into the subscription list
    • By right clicking links and choosing " #~ "'Subscribe' within Liferea

    " #~ msgstr "" #~ "

    Καλωσήλθατε στο Liferea, ένα εργαλείο συγκέντρωσης ειδήσεων από " #~ "ηλεκτρονικές ροές.

    Στο αριστερό πλαίσιο εμφανίζεται η λίστα με τις " #~ "συνδρομές σας. Για να προσθέσετε μία συνδρομή επιλέξτε Ροές -> Νέα " #~ "συνδρομή. Για να περιηγηθείτε στους τίτλους μιας ροής επιλέξτε τη ροή από " #~ "τη λίστα. Οι τίτλοι θα εμφανιστούν στο δεξί πλαίσιο.

    " #, fuzzy #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Έ_ξοδος αντί για ελαχιστοποίηση στην περιοχή ειδοποιήσεων." #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d νέο άρθρο" #~ msgstr[1] "%d νέα άρθρα" #~ msgid "No new items" #~ msgstr "Κανένα νέο άρθρο" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d μη αναγνωσμένο άρθρο" #~ msgstr[1] "" #~ "%s\n" #~ "%d μη αναγνωσμένα άρθρα" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Κανένα μη αναγνωσμένο άρθρο" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Μη έγκυρη ροή Atom: άγνωστος δημιουργός" #, fuzzy #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Ενσωμάτωση της λίστας ροών του λογαριασμού σας στο Google Reader. Το " #~ "Liferea θα εμφανίζει στη λίστα ροών ένα υποδέντρο με τις συνδρομές του " #~ "Google Reader (μόνο για ανάγνωση)." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Ενσωμάτωση στη λίστα ροών συνδρομών blogroll ή Planet. Το Liferea θα " #~ "προσθέτει και θα αφαιρεί αυτόματα ροές, όποτε αλλάζει το αρχείο OPML της " #~ "πηγής." #, fuzzy #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Ενσωμάτωση της λίστας ροών του λογαριασμού σας στο Google Reader. Το " #~ "Liferea θα εμφανίζει στη λίστα ροών ένα υποδέντρο με τις συνδρομές του " #~ "Google Reader (μόνο για ανάγνωση)." #~ msgid "This feed does not exist anymore!" #~ msgstr "Η ροή δεν υπάρχει πλέον!" #~ msgid "This news entry has no headline" #~ msgstr "Το άρθρο δεν έχει τίτλο" #~ msgid "Visit" #~ msgstr "Επίσκεψη" #~ msgid "Open feed" #~ msgstr "Άνοιγμα ροής" #~ msgid "Feed Update" #~ msgstr "Ενημέρωση ροής" #~ msgid "Show details" #~ msgstr "Εμφάνιση λεπτομερειών" #, fuzzy #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "Εμφάνιση του διαλόγου ιδιοτήτων της επιλεγμένης συνδρομής." #, fuzzy #~ msgid "Notification Settings" #~ msgstr "Ρυθμίσεις ειδοποιήσεων" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Εμφάνιση α_ναδυόμενου παραθύρου με τους νέους τίτλους." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Εμφάνιση ε_ικονιδίου στην περιοχή ειδοποιήσεων." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "" #~ "Εμφάνιση του _αριθμού των νέων άρθρων πάνω στο εικονίδιο της περιοχής " #~ "ειδοποιήσεων" #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "Έ_ξοδος αντί για ελαχιστοποίηση στην περιοχή ειδοποιήσεων." #~ msgid "Download and view feeds" #~ msgstr "Λήψη και προβολή ροών" #~ msgid "You may want to validate the feed using" #~ msgstr "Μπορείτε να επαληθεύσετε την εγκυρότητα της ροής μέσω" #, fuzzy #~ msgid "Launch Item In _Tab" #~ msgstr "/Άνοιγμα συνδεσμού σε νέα _καρτέλα" #, fuzzy #~ msgid "_Launch Item In Browser" #~ msgstr "/Άνοιγμα συνδέσμου στον _περιηγητή" #, fuzzy #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "/_Αντιγραφή της τοποθεσίας του άρθρου στο πρόχειρο" #~ msgid "flag" #~ msgstr "σημαία" #~ msgid "bookmark" #~ msgstr "σελιδοδείκτης" #~ msgid "comments" #~ msgstr "σχόλια" #, fuzzy #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Ολοκληρώθηκε η λήψη του συνδεδεμένου πολυμέσου: \"%s\"" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Ολοκληρώθηκε η λήψη του συνδεδεμένου πολυμέσου: \"%s\"" #, fuzzy #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Αυτή η έκδοση του Liferea χρησιμοποιεί μια νέα μορφή μνήμης και μετέφερε " #~ "τα δεδομένα της παλαιάς μνήμης ροών. Τα περιεχόμενα της μνήμης της v1.2 " #~ "στον κατάλογο ~/.liferea_1.2 δε διαγράφηκαν αυτόματα. Παρακαλώ, διαγράψτε " #~ "τον κατάλογο με το χέρι, εφόσον βεβαιωθείτε ότι η μεταφορά ήταν επιτυχής!" #, fuzzy #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Ολοκληρώθηκε η λήψη του συνδεδεμένου πολυμέσου: \"%s\"" #, fuzzy #~ msgid "Download finished." #~ msgstr "_Λήψη μέσω" #~ msgid "Choose download directory" #~ msgstr "Επιλογή καταλόγου λήψης αρχείων" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "Π_ροσαρμοσμένος:\n" #~ "(%s για την ιστοσελίδα)" #~ msgid "_Save downloads in" #~ msgstr "Απο_θήκευση ληφθέντων αρχείων στο" #, fuzzy #~ msgid "_Service Name" #~ msgstr "Όνομα σεναρίου" #~ msgid "Downloading Enclosure" #~ msgstr "Λήψη συνδεδεμένων πολυμέσων..." #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Μετάβαση στο επόμενο μη αναγνωσμένο άρθρο. Αν χρειαστεί, θα επιλεγεί η " #~ "επόμενη ροή με μη αναγνωσμένα άρθρα." #, fuzzy #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "" #~ " --debug- Εμφάνιση των μηνυμάτων της αποσφαλμάτωσης για " #~ "συγκεκριμένο θέμα" #~ msgid "Liferea seems to be running already!" #~ msgstr "Το Liferea μάλλον εκτελείται ήδη!" #~ msgid "Update status" #~ msgstr "Ενημερωμένο" #~ msgid "was updated" #~ msgstr "ναι" #~ msgid "was not updated" #~ msgstr "όχι" #~ msgid "The orientation of the tray." #~ msgstr "Προσανατολισμός του εικονιδίου στην περιοχή ειδοποιήσεων." #~ msgid "%s" #~ msgstr "%s" #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "_Script Manager" #~ msgstr "_Διαχείριση σεναρίων" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Ρύθμιση και επεξεργασία σεναρίων LUA hook" #~ msgid "Search With ..." #~ msgstr "Αναζήτηση μέσω..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d αποτέλεσμα της αναζήτησης για \"%s\"" #~ msgstr[1] "%d αποτελέσματα της αναζήτησης για \"%s\"" #, fuzzy #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d αποτέλεσμα της αναζήτησης για \"%s\"" #~ msgstr[1] "%d αποτελέσματα της αναζήτησης για \"%s\"" #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "Η λίστα τίτλων περιλαμβάνει πλέον όλους τους τίτλους άρθρων που " #~ "αντιστοιχούν στην αναζήτηση σας. Αν επιθυμείτε να αποθηκεύσετε μόνιμα τα " #~ "αποτελέσματα της αναζήτησης μπορείτε να κάνετε κλικ στο κουμπί \"Φάκελος " #~ "αναζήτησης\" στο διάλογο αναζήτησης. Το Liferea θα προσθέσει έναν φάκελο " #~ "αναζήτησης στη λίστα των ροών." #, fuzzy #~ msgid "Count" #~ msgstr "Σχόλια" #~ msgid "You have to select a feed entry" #~ msgstr "Πρέπει να επιλέξετε ροή" #~ msgid "(empty)" #~ msgstr "(κενό)" #, fuzzy #~ msgid "_Properties..." #~ msgstr "/_Ιδιότητες..." #~ msgid "Update out-dated feeds" #~ msgstr "Ενημέρωση των ροών που δεν έχουν ενημερωθεί" #~ msgid "Force update of all feeds" #~ msgstr "Αναγκαστική ενημέρωση όλων των ροών" #~ msgid "No feed update at all" #~ msgstr "Καμία ενημέρωση ροών" #~ msgid "startup" #~ msgstr "εκκίνηση" #~ msgid "feed updated" #~ msgstr "ενημέρωση ροής" #~ msgid "feed added" #~ msgstr "προσθήκη ροής" #~ msgid "item selected" #~ msgstr "επιλογή άρθρου" #~ msgid "feed selected" #~ msgstr "επιλογή ροής" #~ msgid "item unselected" #~ msgstr "αποεπιλογή άρθρου" #~ msgid "feed unselected" #~ msgstr "αποεπιλογή ροής" #~ msgid "shutdown" #~ msgstr "τερματισμό" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Συγνώμη, δεν υποστηρίζονται τα σενάρια!" #~ msgid "Script Name" #~ msgstr "Όνομα σεναρίου" #~ msgid "No script selected!" #~ msgstr "Δεν επελέγη κανένα σενάριο!" #~ msgid "Create a new search feed." #~ msgstr "Δημιουργία νέας ροής αναζήτησης." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Το Liferea αδυνατεί να εμφανίσει το σώμα αυτού του άρθρου." #~ msgid "

    View this item's content.

    " #~ msgstr "

    Προβολή του σώματος αυτού του άρθρου.

    " #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "Ενσωμάτωση της λίστας ροών του λογαριασμού σας στο Bloglines. Το Liferea " #~ "θα εμφανίζει στη λίστα ροών ένα υποδέντρο με τις συνδρομές του Bloglines " #~ "(μόνο για ανάγνωση)." #~ msgid "feedlist.opml" #~ msgstr "feedlist.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s: %d νέος/ενημερωμένος τίτλος\n" #~ msgstr[1] "%s: %d νέοι/ενημερωμένοι τίτλοι\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Hook" #~ msgstr "Πότε" #~ msgid "Registered Scripts" #~ msgstr "Σενάριο" #~ msgid "Script Code" #~ msgstr "Κώδικας" #~ msgid "text/plain" #~ msgstr "text/plain" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Αυτή η επιλογή μπορεί να οδηγήσει σε σημαντικές καθυστερήσεις κατά τη " #~ "φόρτωση φακέλων που περιέχουν μεγάλο αριθμό ροών." #~ msgid "Downloading Enclosures" #~ msgstr "Λήψη συνδεδεμένων πολυμέσων" #~ msgid "Feed Cache Handling" #~ msgstr "Μνήμη ροών" #~ msgid "Feed Name" #~ msgstr "Όνομα ροής" #~ msgid "Feed Update Settings" #~ msgstr "Ρυθμίσεις ενημέρωσης ροών" #~ msgid "HTTP Proxy Server" #~ msgstr "Διαμεσολαβητής HTTP" #~ msgid "Opening Enclosures" #~ msgstr "Άνοιγμα συνδεδεμένων πολυμέσων" #~ msgid "Reading Headlines" #~ msgstr "Ανάγνωση τίτλων" #, fuzzy #~ msgid "Toolbar Settings" #~ msgstr "Ρυθμίσεις μενού και εργαλειοθήκης" #~ msgid "Update Interval" #~ msgstr "Συχνότητα ενημέρωσης" #~ msgid "Web Integration" #~ msgstr "Συνεργασία με διαδικτυακές εφαρμογές" #~ msgid "Add Script" #~ msgstr "Προσθήκη σεναρίου" #~ msgid "At _startup:" #~ msgstr "Κατά την ε_κκίνηση:" #, fuzzy #~ msgid "Attention Profile" #~ msgstr "Απέτυχε η πιστοποίηση" #~ msgid "Create new script" #~ msgstr "Δημιουργία νέου σεναρίου" #~ msgid "Exec Command" #~ msgstr "Εντολή εκκίνησης (Exec)" #~ msgid "Reuse existing script" #~ msgstr "Επαναχρησιμοποίηση υπάρχοντος σεναρίου" #~ msgid "Script Manager" #~ msgstr "Διαχείριση σεναρίων" #, fuzzy #~ msgid "Search _Link Cosmos with" #~ msgstr "Αναζήτηση στο σύν_δεσμο για" #, fuzzy #~ msgid "FAILED to download enclosure: \"%s\"" #~ msgstr "Ολοκληρώθηκε η λήψη του συνδεδεμένου πολυμέσου: \"%s\"" #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2009\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgstr "" #~ "Copyright (c) 2003-2007\n" #~ "Lars Lindner και \n" #~ "Nathan J. Conrad \n" #~ msgid "/_Bookmark Link at %s" #~ msgstr "/_Δημιουργία σελιδοδείκτη στο %s" #~ msgid "/Toggle _Read Status" #~ msgstr "/_Εναλλαγή μεταξύ αναγνωσμένου και μη" #~ msgid "/Toggle Item _Flag" #~ msgstr "/Εναλλαγή _σημαίας άρθρου" #, fuzzy #~ msgid "/_Preferences" #~ msgstr "_Προτιμήσεις" #~ msgid "/_Quit" #~ msgstr "/Έ_ξοδος" #, fuzzy #~ msgid "/Copy Link Location" #~ msgstr "/_Αντιγραφή τοποθεσίας συνδέσμου" #~ msgid "/_Update" #~ msgstr "/_Ενημέρωση" #~ msgid "/_New/New _Subscription..." #~ msgstr "/_Νέο/Νέα _συνδρομή..." #~ msgid "/_New/New _Folder..." #~ msgstr "/_Νέο/Νέος _φάκελος..." #~ msgid "/_New/New S_earch Folder..." #~ msgstr "/_Νέο/Νέος φάκελος ανα_ζήτησης..." #~ msgid "/_New/New S_ource..." #~ msgstr "/_Νέο/Νέα πη_γή..." #~ msgid "/_New/New _News Bin..." #~ msgstr "/_Νέο/Νέος φάκελος _αποκομμάτων ..." #~ msgid "Rule" #~ msgstr "Κανόνας" #~ msgid "Liferea Homepage" #~ msgstr "Ιστοσελίδα Liferea" #~ msgid "" #~ "Code, Patches, Debugging\n" #~ "\n" #~ "James Doherty\n" #~ "Jeremy Messenger\n" #~ "John McKnight\n" #~ "Tomasz Maka\n" #~ "Karl Soderstrom\n" #~ "Christophe Barbe\n" #~ "Juho Snellman\n" #~ "Roshan Revankar\n" #~ "Oliver Feiler\n" #~ "Niklas Morberg\n" #~ "Johannes Schlueter\n" #~ "Pierre Phaneuf\n" #~ "ahmed el-helw\n" #~ "James Bowes\n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary\n" #~ "Christoph Hohmann\n" #~ "Raphael Slinckx\n" #~ "Bjorn Monnens\n" #~ "Thomas de Grenier de Latour\n" #~ "Aristotle Pagaltzis\n" #~ "Norman Jonas\n" #~ "Sebastian Droege\n" #~ "Daniel Gryniewicz\n" #~ "Remi Cardona\n" #~ "Frederic Peters\n" #~ "Don Malcolm\n" #~ "Ed Catmur\n" #~ "Chris Pirillo\n" #~ "Eric Anderson\n" #~ "and many more...\n" #~ "\n" #~ "Code from other projects\n" #~ "\n" #~ "Anders Carlsson (tray icon support)\n" #~ "Philippe Martin, Brion Vibber (favicon support)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Included Software\n" #~ "\n" #~ "Liferea uses the XSPF Web Music Player to \n" #~ "allow direct podcast playback. This player was \n" #~ "written by Fabricio Zuardi and can be found \n" #~ "at http://musicplayer.sourceforge.net" #~ msgstr "" #~ "Κώδικας, διορθώσεις, αποσφαλμάτωση\n" #~ "\n" #~ "James Doherty\n" #~ "Jeremy Messenger\n" #~ "John McKnight\n" #~ "Tomasz Maka\n" #~ "Karl Soderstrom\n" #~ "Christophe Barbe\n" #~ "Juho Snellman\n" #~ "Roshan Revankar\n" #~ "Oliver Feiler\n" #~ "Niklas Morberg\n" #~ "Johannes Schlueter\n" #~ "Pierre Phaneuf\n" #~ "ahmed el-helw\n" #~ "James Bowes\n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary\n" #~ "Christoph Hohmann\n" #~ "Raphael Slinckx\n" #~ "Bjorn Monnens\n" #~ "Thomas de Grenier de Latour\n" #~ "Aristotle Pagaltzis\n" #~ "Norman Jonas\n" #~ "Sebastian Droege\n" #~ "Daniel Gryniewicz\n" #~ "Remi Cardona\n" #~ "Frederic Peters\n" #~ "Don Malcolm\n" #~ "Ed Catmur\n" #~ "Chris Pirillo\n" #~ "Eric Anderson\n" #~ "και πολλοί άλλοι...\n" #~ "\n" #~ "Κώδικας από άλλα έργα\n" #~ "\n" #~ "Anders Carlsson (εικονίδιο περιοχής ειδοποιήσεων)\n" #~ "Philippe Martin, Brion Vibber (υποστήριξη favicon)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Συμπεριλαμβανόμενο λογισμικό\n" #~ "\n" #~ "Το Liferea χρησιμοποιεί το XSPF Web Music Player για \n" #~ "την άμεση αναπαραγωγή podcast. Το XSPF γράφτηκε \n" #~ "από τον Fabricio Zuardi και βρίσκεται στη σελίδα \n" #~ "http://musicplayer.sourceforge.net" #~ msgid "Contributors" #~ msgstr "Συντελεστές" #~ msgid "" #~ "Note: Items are added to the search folder if at least one additive rule\n" #~ "matches. They are removed if at least one removing rule matches." #~ msgstr "" #~ "Σημείωση: Στον φάκελο αναζήτησης προστίθενται άρθρα μόνο αν " #~ "αντιστοιχούν \n" #~ "σε έναν τουλάχιστον θετικό κανόνα. Αφαιρούνται αν αντιστοιχούν σε έναν \n" #~ "τουλάχιστον αρνητικό κανόνα." #~ msgid "" #~ "Saves this search as a search folder, which will appear in the feed list." #~ msgstr "" #~ "Αποθήκευση αυτής της αναζήτησης ως φακέλου αναζήτησης, ο οποίος θα " #~ "εμφανίζεται στη λίστα ροών." #~ msgid "Show Menu _And Toolbar" #~ msgstr "Εμφάνιση μενού _και εργαλειοθήκης" #~ msgid "Show _Menu Only" #~ msgstr "Εμφάνιση μόνο των _μενού" #~ msgid "Show _Toolbar Only" #~ msgstr "Εμφάνιση μόνο της ε_ργαλειοθήκης" #~ msgid "Translation" #~ msgstr "Μετάφραση" #~ msgid "_Limit cache to" #~ msgstr "Περ_ιορισμός της μνήμης σε" #~ msgid "_Name:" #~ msgstr "Όν_ομα:" #~ msgid "items." #~ msgstr "άρθρα." #~ msgid "" #~ "minutes\n" #~ "hours\n" #~ "days" #~ msgstr "" #~ "λεπτά\n" #~ "ώρες\n" #~ "ημέρες" #~ msgid "search" #~ msgstr "αναζήτηση" #~ msgid "Access Forbidden" #~ msgstr "Απαγορεύεται η πρόσβαση" #~ msgid "URL is invalid" #~ msgstr "Μη έγκυρη τοποθεσία" #~ msgid "Unsupported network protocol" #~ msgstr "Μη υποστηριζόμενο πρωτόκολλο δικτύου" #~ msgid "Hostname could not be found" #~ msgstr "Δε βρέθηκε το όνομα του απομακρυσμένου υπολογιστή" #~ msgid "Network connection was refused by the remote host" #~ msgstr "Η σύνδεση απορρίφθηκε από τον απομακρυσμένο υπολογιστή" #~ msgid "Remote host did not finish sending data" #~ msgstr "" #~ "Δεν ολοκληρώθηκε η αποστολή δεδομένων από τον απομακρυσμένο υπολογιστή" #~ msgid "Too many HTTP redirects were encountered" #~ msgstr "Ζητήθηκε υπερβολικός αριθμός ανακατευθύνσεων" #~ msgid "Remote host sent an invalid response" #~ msgstr "Μη έγκυρη απόκριση του απομακρυσμένου υπολογιστή" #~ msgid "Webserver's authentication method incompatible with Liferea" #~ msgstr "" #~ "Η μέθοδος πιστοποίησης του εξυπηρετητή δεν είναι συμβατή με το Liferea" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "" #~ "Μη αναμενόμενη ακολουθία χαρακτήρων ή σφάλμα στην κωδικοποίηση UTF-8! " #~ "Παραλείφθηκαν ορισμένοι χαρακτήρες!" #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "Απέτυχε ο αυτόματος εντοπισμός ροών! Δε βρέθηκε καμία ροή!" #~ msgid " --help Print this help and exit" #~ msgstr " --help Εμφάνιση αυτής της βοήθειας και έξοδος" #~ msgid " --mainwindow-state=STATE" #~ msgstr " --mainwindow-state=ΚΑΤΑΣΤΑΣΗ" #~ msgid " Start Liferea with its main window in STATE." #~ msgstr "" #~ " Εκκίνηση του Liferea με το κύριο παράθυρο σε αυτή την " #~ "ΚΑΤΑΣΤΑΣΗ." #~ msgid " Possible topics are: all,cache,conf,db,gui,html" #~ msgstr "" #~ " Τα πιθανά θέματα είναι: all , cache, conf, db, gui, " #~ "html" #~ msgid " net,parsing,plugins,trace,update,verbose" #~ msgstr " net,parsing,plugins,trace,update,verbose" #~ msgid "The --mainwindow-state argument must be given a parameter.\n" #~ msgstr "Το όρισμα --mainwindow-state χρειάζεται παράμετρο.\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "Το όρισμα --session argument χρειάζεται παράμετρο.\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "Άγνωστο όρισμα: %s\n" #~ msgid "does match" #~ msgstr "περιέχει" #~ msgid "does not match" #~ msgstr "δεν περιέχει" #~ msgid "Could not download \"%s\". Will retry in %d seconds." #~ msgstr "Αδύνατη η λήψη του \"%s\". Νέα προσπάθεια σε %d δευτερόλεπτα." #~ msgid "" #~ "Sorry, I was not able to load any installed browser plugin! Try the --" #~ "debug-plugins option to get debug information!" #~ msgstr "" #~ "Συγγνώμη, δεν ήταν δυνατή η φόρτωση κανενός εγκατεστημένου προσθέτου " #~ "περιηγητή! Δοκιμάστε --debug-plugins για να δείτε τις λεπτομέρειες της " #~ "αποσφαλμάτωσης!" #~ msgid "This item does not have a link assigned!" #~ msgstr "Αυτό το άρθρο δεν παραπέμπει σε σύνδεσμο!" #~ msgid "No link selected!" #~ msgstr "Δεν επιλέχθηκε σύνδεσμος!" #~ msgid "http://lzone.de/liferea/" #~ msgstr "http://lzone.de/liferea/" #~ msgid "Updates all subscriptions. This does not update OCS directories." #~ msgstr "Ενημέρωση όλων των συνδρομών. Δεν ενημερώνονται οι κατάλογοι OCS." #~ msgid "/_Increase Text Size" #~ msgstr "/_Αύξηση μεγέθους γραμματοσειράς" #~ msgid "/_Decrease Text Size" #~ msgstr "/_Μείωση μεγέθους γραμματοσειράς" #~ msgid "/Toggle _Online|Offline" #~ msgstr "/Εναλλαγή μεταξύ ε_ργασίας με ή χωρίς σύνδεση" #~ msgid "/_Preferences..." #~ msgstr "/_Προτιμήσεις" #~ msgid "/_Show|Hide Window" #~ msgstr "/_Εμφάνιση|Απόκρυψη παραθύρου" #~ msgid "Cookie for %s has expired!" #~ msgstr "Το cookie για το %s έχει λήξει!" liferea-1.12.7/po/es.po000066400000000000000000001723731352135647700146300ustar00rootroot00000000000000# translation of es.po to Spanish # translation of es_099.po to Spanish # translation of es_094.po to Spanish # Traducción por Carlos Fenollosa # José María Mateos 2004-2005 # Jorge Acosta 2006 # Rodrigo Gallardo 2007 # Juan Campos 2015 # Adolfo Jayme Barrientos 2015 # # Algunos comentarios de estilo: # # - feed -> canal. # - source -> fuente. # Me peleé bastante con estos dos, pero creo que source no acepta # otra traducción, lo cual me obliga a no usar 'fuente' para 'feed'. # Tomo como guía de estilo para usarla el que varios periódicos de # la ciudad de México la usan en sus páginas. # # - news bin -> bandeja de noticias. # - cache -> almacén (caché, en español, es 'elegancia'). # - item -> artículo (como de periódico). # # Tratamos al usuario de usted. # Las órdenes al programa se escriben en infinitivo: 'Guardar', 'Buscar', # 'Importar de OPML' y no en imperativo: 'Guarda', 'Busca', etc. # msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2016-04-01 18:25-0600\n" "Last-Translator: Adolfo Jayme Barrientos \n" "Language-Team: Spanish \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: Poedit 1.8.7.1\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Lector de noticias" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" "Liferea es una abreviatura de «Linux Feed Reader». Es un agregador de " "canales de noticias en línea. Es compatible con varios formatos de canales, " "como RSS/RDF, CDF y Atom. Existen otros lectores de noticias, pero o no " "están disponibles en Linux o necesitan de muchas bibliotecas adicionales " "para funcionar. Liferea trata de llenar ese vacío con un agregador rápido y " "fácil de usar y de instalar para GTK/GNOME." #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "Funcionalidades distintivas:" #: ../liferea.appdata.xml.in.h:4 msgid "Read articles when offline" msgstr "Lectura de artículos sin conexión" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "Sincronización con TheOldReader" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "Sincronización con TinyTinyRSS" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "Sincronización con InoReader" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "Sincronización con Reedah" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "Guardado permanente de titulares en bandejas de noticias" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "Correspondencia de artículos mediante carpetas virtuales" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "Reproducción de podcasts" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Lector de noticias" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Lector de noticias Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Lector de canales de noticias y blogs" #: ../net.sourceforge.liferea.desktop.in.h:5 #, fuzzy msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "noticias;canal;agregador;blog;podcast;" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Este canal fue abandonado y ya no está disponible. Liferea no la actualizará " "pero puede seguir accediendo a los titulares almacenados." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
    HTTP error code : " msgstr "" "Falló la última actualización de esta fuente

    Error HTTP : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Se encontraron errores al procesar este canal." #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Detalles del error de procesado" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Detalles" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" "Si lo desea, póngase en contacto con el autor del canal para informarle de " "este problema." #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Se encontraron errores al filtrar este canal." #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Detalles del error de filtrado" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Canal:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Fuente:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Editorial" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Derechos de autor" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "hijos con" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "titulares no leídos" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Carpeta:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Fuente" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Canal" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Archivado en" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Autor" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Compartido por" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Vía" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Relacionado" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Publicada también en" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Creador" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Comentarios" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Actualizando…" #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Sección" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Departamento" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Bandeja de noticias:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Añada artículos a esta bandeja de noticias eligiendo «Copiar a bandeja» del " "menú contextual de la lista de artículos." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Carpeta virtual:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Fallo al iniciar el navegador: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Iniciando: «%s»" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Error de autorización" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "No se puede crear la carpeta de almacenamiento temporal «%s»." #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Hoy, %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Ayer, %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a., %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d de %b., %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d/%b/%Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "«%s» no es un archivo válido de configuración de adjuntos" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "No se configuró aún ningún gestor de descargas. Hágalo en la pestaña " "«Adjuntos» en Herramientas > Preferencias." #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "La orden falló:\n" "\n" "%s\n" "\n" "Asegúrese de que el gestor de descargas esté instalado y funcione " "adecuadamente. Puede cambiarlo en la pestaña «Descarga» en Herramientas > " "Preferencias." #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Error al renombrar %s a %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "Error de XML en el documento OPML. No se pudo importar «%s»." #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "El documento OPML «%s», que se quería importar, está vacío." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "«%s» no es un documento OPML válido. Liferea no pudo importar el archivo." #: ../src/export.c:469 msgid "Imported feed list" msgstr "Lista de canales importados" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importar lista de canales" #: ../src/export.c:481 msgid "Import" msgstr "Importar" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "Archivos OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Ocurrió un error mientras se exportaba la lista de canales." #: ../src/export.c:491 msgid "Feed List exported!" msgstr "La lista de canales se ha exportado con éxito." #: ../src/export.c:498 msgid "Export Feed List" msgstr "Exportar lista de canales" #: ../src/export.c:498 msgid "Export" msgstr "Exportar" #: ../src/feed.c:317 msgid "" "

    Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

    " msgstr "" "

    No se pudo detectar el tipo de canal. Asegúrese de que el URL apunta a un " "documento con alguno de los formatos compatibles.

    Salida del procesador " "de XML:
    " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "«%s» actualizada…" #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "«%s» no está disponible" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "El URL proporcionado a Liferea apunta a una página web en la que el " "mecanismo de autodescubrimiento de canales no encontró nada. Es posible que " "esta página no admita esta funcionalidad." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "Error XML mientras se leía el canal «%s». No se ha podido cargar." #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "El documento está vacío." #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "XML no válido" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "La dirección apunta a un documento HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "No se pudo determinar el tipo de canal." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "No hay artículos sin leer" #: ../src/liferea_application.c:282 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Iniciar Liferea con la ventana principal en un ESTADO, que puede ser «shown» " "para mostrarla o «hidden» para ocultarla" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "ESTADO" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Mostrar la versión de Liferea y salir" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Añadir una suscripción nueva" #: ../src/liferea_application.c:284 msgid "uri" msgstr "uri" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Mostrar todos los mensajes de depuración" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "" "Mostrar mensajes de depuración sobre el manejo del almacenamiento temporal" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Mostrar mensajes de depuración sobre el manejo de configuración" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Mostrar mensajes de depuración sobre el manejo de la base de datos" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "" "Mostrar mensajes de depuración sobre todas las funciones de la interfaz " "gráfica" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Activa la depuración de la generación de HTML. Cada que Liferea genere HTML " "lo guardará a ~/.cache/liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Mostrar mensajes de depuración sobre la actividad de red" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "" "Mostrar mensajes de depuración sobre todas las funciones de procesamiento" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Mostrar mensajes de depuración cuando una función toma demasiado tiempo" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Mostrar mensajes de depuración al entrar y salir de funciones" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "" "Mostrar mensajes de depuración sobre el procesamiento de actualización de " "canales" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "" "Mostrar mensajes de depuración sobre el cotejo mediante carpetas virtuales" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Mostrar información extra en los mensajes de depuración" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Mostrar mensajes de depuración sobre el tema especificado" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "La actualización fue cancelada" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "No fue posible resolver el nombre del servidor remoto" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "No fue posible resolver el nombre del servidor proxy" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "No fue posible conectar con el servidor" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "No fue posible conectar con el proxy" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "Ocurrió un error de red, o el servidor remoto cerró la conexión" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "El recurso cambió permanentemente de ubicación" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "No tiene autorización para ver este canal. Especifique el nombre de usuario " "y la contraseña en el cuadro de propiedades del canal" #: ../src/net.c:476 msgid "Payment required" msgstr "Es necesario pagar" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "No tiene permiso para acceder a este recurso" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Recurso no encontrado" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Método no permitido" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "No aceptable" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Necesita identificarse ante el proxy" #: ../src/net.c:482 msgid "Request timed out" msgstr "Expiró el tiempo de respuesta" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Este recurso ya no existe. Elimine su suscripción." #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Ocurrió un error interno durante la actualización" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Canal no disponible: El servidor solicitó una forma de redirección " "desconocida." #: ../src/net.c:492 msgid "Client Error" msgstr "Error en el cliente" #: ../src/net.c:494 msgid "Server Error" msgstr "Error del servidor" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Ocurrió un error de red desconocido" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "El artículo" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "contiene" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "no contiene" #: ../src/rule.c:175 msgid "Item title" msgstr "El título" #: ../src/rule.c:176 msgid "Item body" msgstr "El cuerpo del artículo" #: ../src/rule.c:177 msgid "Read status" msgstr "El estado de lectura" #: ../src/rule.c:177 msgid "is unread" msgstr "es «nuevo»" #: ../src/rule.c:177 msgid "is read" msgstr "es «leído»" #: ../src/rule.c:178 msgid "Flag status" msgstr "La marca" #: ../src/rule.c:178 msgid "is flagged" msgstr "está activada" #: ../src/rule.c:178 msgid "is unflagged" msgstr "está desactivada" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "incluido" #: ../src/rule.c:179 msgid "not included" msgstr "no incluido" #: ../src/rule.c:180 msgid "Category" msgstr "Categoría" #: ../src/rule.c:180 msgid "is set" msgstr "es" #: ../src/rule.c:180 msgid "is not set" msgstr "no es" #: ../src/rule.c:181 msgid "Feed title" msgstr "El título del canal" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "El canal «%s» ya se está actualizando" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "El canal «%s» ya no existe. Liferea no volverá a actualizarlo." #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Actualizando el icono de «%s»" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Se produjo un problema al leer el canal. Compruebe el URL y la salida en la " "consola." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "El URL de «%s» cambió permanentemente y se actualizó" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "«%s» fue abandonado. Liferea ya no la actualizará." #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "El contenido de «%s» no ha cambiado desde la última actualización" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Actualizando: «%s»" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Se produjo un error al abrir el archivo temporal %s para filtrar" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s terminó con estado %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "No se pudo abrir la tubería «%s»" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Error: No se pudo abrir el archivo «%s»" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Error: No existe el archivo «%s»" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Nueva carpeta virtual" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Hay más errores. La salida se ha truncado]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "XML Parser: No se pudo procesar el documento:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Adjuntos" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr "bytes" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d %s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d adjunto" msgstr[1] "%d adjuntos" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Elija un archivo" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Archivo de extensión .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "No se pudo encontrar la imagen: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d nuevo)" msgstr[1] " (%d nuevos)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d sin leer%s" msgstr[1] "%d sin leer%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Temas de ayuda" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Manual de referencia" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "Preguntas frecuentes" #: ../src/ui/search_dialog.c:116 msgid "Saved Search" msgstr "Búsqueda guardada" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Escriba el nombre de usuario y la contraseña para «%s» (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Fuente desconocida" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 msgid "_Cancel" msgstr "_Cancelar" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Todos los archivos" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "" "Liferea está trabajando sin conexión. No se puede realizar una actualización." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Buscar en todos los canales" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Marcar _todo como leído" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "¿Realmente desea eliminar «%s»?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Este artículo no tiene un enlace asignado" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Sin título ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Titular" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Fecha" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Debe elegir un canal para eliminar sus artículos" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "No se ha seleccionado ningún artículo" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Abrir en una _pestaña" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "_Abrir en el navegador" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Abrir en un navegador _externo" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Copiar a una bandeja" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "Crear un marcador en %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "Copiar la _dirección del artículo" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "_Cambiar entre leído y no leído" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Colocar o quitar _marca" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "_Eliminar artículo" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Abrir adjunto…" #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Guardar como…" #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "_Copiar la dirección del enlace" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Actualizar" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Actualizar carpeta" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "_Suscripción nueva…" #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "_Carpeta nueva…" #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Carpeta _virtual nueva…" #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "_Fuente nueva…" #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Ba_ndeja nueva…" #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Nueva" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Ordenar canales" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_Marcar todos como leídos" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "_Reconstruir" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Eliminar" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Propiedades" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Convertir a suscripciones locales…" #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "Navegador de GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Texto bajo los íconos" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Texto junto a los íconos" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Solo los íconos" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Sólo el texto" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minutos" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "horas" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "días" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Espacio" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Espacio" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Espacio" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Vista normal" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Vista amplia" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Vista combinada" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Navegador predeterminado" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Tipo" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Programa" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Vacío)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Reconstruyendo" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Eliminando la entrada" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "¿Realmente desea eliminar «%s» y todo su contenido?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "¿Realmente desea eliminar «%s»?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Confirmar eliminación" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Confirmar eliminación" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "_Abrir" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "Este canal sugiere un intervalo de actualización de %d minuto." msgstr[1] "Este canal sugiere un intervalo de actualización de %d minutos." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Este canal no especifica un intervalo de actualización recomendado." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Sin título" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Sitio web" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Suscripción nueva" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Elija el archivo OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Suscripción OPML nueva" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "No se han encontrado tipos de fuentes de listas de canales." #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Tipo de fuente" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" "Todavía no ha finalizado el acceso a «%s». Espere a que el proceso termine." #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "La suscripción «%s» se convirtió correctamente en canales locales." #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "Falló el acceso." #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "Reedah" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "No se pudo procesar el JSON devuelto por la API de Reedah." #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "No se puede acceder a la API HTTP de TinyTinyRSS." #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" "Falló la suscripción al canal de TinyTinyRSS. Compruebe que el URL " "proporcionado pertenece a un canal." #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "Falló la cancelación de suscripción de TinyTinyRSS." #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" "Esta versión de TinyTinyRSS no admite la eliminación de canales. Actualice, " "como mínimo, a la versión %s." #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "No se pudo procesar el JSON devuelto por la API de TinyTinyRSS." #: ../src/fl_sources/theoldreader_source.c:329 msgid "TheOldReader" msgstr "TheOldReader" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Abrir el enlace en una _pestaña" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "_Abrir el enlace en el navegador" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "_Abrir el enlace en un navegador externo" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "Crear un marcador del enlace en %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Copiar la dirección del enlace" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "_Guardar la imagen como" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "_Copiar la dirección de la imagen" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "_Guardar el enlace como" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "_Guardar la imagen como" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Suscribirse…" #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "_Copiar" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "_Aumentar el tamaño del texto" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Reducir el tamaño del texto" #: ../glade/about.ui.h:1 msgid "About" msgstr "Acerca de" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea es un lector de noticias para GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Sitio web de Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autenticación" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Nombre de usuario:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "Contraseña:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Abrir adjunto…" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Abrir un adjunto de tipo:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "¿Qué debe hacer Liferea con este adjunto? Escriba debajo la orden que quiera " "ejecutar. El nombre del archivo descargado se usará como parámetro para la " "orden:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "Navegar" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "Hacer lo mismo _de forma automática para este tipo de archivos." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Añadir cuenta de Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Proporcione los datos de su cuenta de Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "Contraseña" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "Nombre de _usuario (email)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Ver titulares" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Titulares" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Marcar _todo como leído" #: ../glade/mark_read_dialog.ui.h:2 #, fuzzy msgid "Mark all as read" msgstr "Marcar _todo como leído" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Carpeta nueva" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "Nombre de la carpeta:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Crear una bandeja de noticias" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Nombre de la bandeja" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Fuente del canal" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Tipo de fuente:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Programa" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "Archivo _local" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Seleccionar archivo…" #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Fuente:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Descarga/posprocesamiento" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "No usar «proxy» para _descargas" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Usar _filtro de conversión" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea puede usar filtros externos para acceder a canales y carpetas en " "formatos no compatibles. Consulte la documentación para mayor información." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Convertir _usando:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Selección de fuente" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Seleccione el tipo de fuente que quiera añadir…" #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Añadir OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Indique un archivo local o un URL que apunte a una lista de canales en " "formato OPML." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "Ubicación" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "Elegir archivo" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Preferencias" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Manejo de almacenamiento temporal de canales" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_Número de artículos que almacenar por canal:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Opciones de actualización de canales" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Nota: Establezca un tiempo razonable. Buscar actualizaciones más de una " "vez por hora es, casi siempre, un desperdicio de ancho de banda." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "Act_ualizar todas las suscripciones al iniciar." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "_Intervalo de actualización predeterminado" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Canales" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Opciones de presentación de carpetas" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "" "Mo_strar los artículos de los canales contenidos al seleccionar una carpeta." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "Ocultar artículos leídos." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Iconos de canales («favicons»)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "Act_ualizar todos los iconos ahora" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Carpetas" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Lectura de titulares" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Avanzar por los artículos con:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "Modo de vista pre_determinado:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Integración web" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Enviar los marcadores a" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Opciones del navegador interno" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Abrir los enlaces en la _ventana de Liferea." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Desactivar JavaScript." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "Activar los _complementos del navegador." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Opciones del navegador externo" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Navegador:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Manual:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s para URL)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Navegador" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Opciones de la barra de herramientas" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "Ocultar la barra de herramientas." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Etiquetas de la _barra de herramientas" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Interfaz gráfica" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "Servidor «proxy» HTTP" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "Detectar automáticamente (de GNOME o las variables de entorno)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "Sin «proxy»" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "Configuración _manual:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "Servidor «proxy»:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Puerto del «proxy»:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "_Identificarse ante el «proxy»" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Nombre de _usuario en el «proxy»:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Contraseña del «proxy»:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:51 msgid "Privacy Settings" msgstr "Opciones de privacidad" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "Indicar a los sitios que _no quiero que me rastreen" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "Privacidad" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Descargando adjuntos" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Descargar mediante" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Abriendo los archivos adjuntos" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Adjuntos" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Propiedades de la suscripción" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Nombre del canal:" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Nombre del canal:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Intervalo de actualización" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Usar el intervalo establecido globalmente." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "Establecer un intervalo especí_fico de" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "No actualizar automáticamente este canal" #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "El proveedor de este canal sugiere un intervalo de actualización de %d " "minutos." #: ../glade/properties.ui.h:11 msgid "General" msgstr "General" #: ../glade/properties.ui.h:20 msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea puede usar filtros externos para acceder a canales y directorios en " "formatos no compatibles." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "La opción de almacenaje controla si los artículos del canal se guardan en " "disco cuando Liferea termina. Sin importar las opciones, los artículos con " "marca siempre se almacenan." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "Usar la configuración _general" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Desactivar almacenamiento" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "Almacenamiento _ilimitado" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "_Número de artículos a almacenar:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Almacenar" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Usar _autenticación HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Descargar" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "Descargar _automáticamente todos los adjuntos de este canal." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Cargar automáticamente en el navegador el en_lace de los artículos que se " "seleccionen." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorar los canales de comentarios de esta suscripción." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Marcar artículos descargados como leídos" #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Avanzado" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "Añadir cuenta de Reedah" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "Proporcione los datos de su cuenta de Reedah." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Renombrar" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Nuevo nombre:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Propiedades de la carpeta virtual" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "_Nombre de la búsqueda:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Encontrar artículos con los criterios siguientes" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Se cumple _cualquier regla" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "Se cumplen _todas las reglas" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Búsqueda avanzada" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "Carpeta _virtual…" #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Buscar en todos los canales" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Avanzado…" #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Busca el texto especificado en todos los canales. El resultado aparecerá en " "la lista de artículos." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "Bu_scar:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Escriba un texto. Liferea lo buscará tanto en los títulos de los artículos " "como en los contenidos." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Avanzado…" #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Escriba la dirección de un sitio web para usar el autodescubrimiento o, si " "la conoce, la dirección exacta del canal." #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "Añadir cuenta de TheOldReader" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "Proporcione los datos de su cuenta de TheOldReader." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Añadir cuenta de Tiny Tiny RSS" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "Proporcione los datos de su cuenta de TinyTinyRSS." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "URL del _servidor" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "Nombre de _usuario" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Monitor de actualizaciones" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "C_ancelar todo" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Transacciones pendientes" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "En descarga" #~ msgid "_Subscriptions" #~ msgstr "_Suscripciones" #~ msgid "Update _All" #~ msgstr "_Actualizar todas" #~ msgid "Updates all subscriptions." #~ msgstr "Actualiza todas las suscripciones" #~ msgid "Marks read every item of every subscription." #~ msgstr "Marca como leídos todos los artículos de todas las suscripciones." #~ msgid "_Import Feed List..." #~ msgstr "_Importar lista de canales…" #~ msgid "Imports an OPML feed list." #~ msgstr "Importa una lista de canales en formato OPML." #~ msgid "_Export Feed List..." #~ msgstr "E_xportar lista de canales…" #~ msgid "Exports the feed list as OPML." #~ msgstr "Exporta la lista de canales en formato OPML." #~ msgid "_Quit" #~ msgstr "_Salir" #~ msgid "_Feed" #~ msgstr "_Canal" #~ msgid "Remove _All Items" #~ msgstr "E_liminar los artículos" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Elimina todos los artículos del canal seleccionado." #~ msgid "_Item" #~ msgstr "_Artículo" #~ msgid "Previous Item" #~ msgstr "Artículo anterior" #~ msgid "Next Item" #~ msgstr "Siguiente artículo" #~ msgid "_Next Unread Item" #~ msgstr "Siguiente artículo _nuevo" #~ msgid "_View" #~ msgstr "_Ver" #~ msgid "Increases the text size of the item view." #~ msgstr "Aumenta el tamaño del texto en la vista del artículo." #~ msgid "Decreases the text size of the item view." #~ msgstr "Reduce el tamaño del texto en la vista del artículo." #~ msgid "_Tools" #~ msgstr "_Herramientas" #~ msgid "_Update Monitor" #~ msgstr "_Monitor de actualizaciones" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "" #~ "Muestra la lista de todos los canales con actualizaciones pendientes" #~ msgid "_Preferences" #~ msgstr "_Preferencias" #~ msgid "Edit Preferences." #~ msgstr "Cambiar preferencias." #~ msgid "S_earch" #~ msgstr "_Buscar" #~ msgid "Search All Feeds..." #~ msgstr "Buscar en todos los canales…" #~ msgid "Show the search dialog." #~ msgstr "Muestra la ventana de búsqueda." #~ msgid "_Help" #~ msgstr "A_yuda" #~ msgid "_Contents" #~ msgstr "_Contenidos" #~ msgid "View help for this application." #~ msgstr "Muestra la ayuda del programa." #~ msgid "_Quick Reference" #~ msgstr "_Referencia rápida" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Muestra todas las combinaciones de teclas de Liferea." #~ msgid "_FAQ" #~ msgstr "_Preguntas frecuentes" #~ msgid "View the FAQ for this application." #~ msgstr "Preguntas frecuentes sobre el programa." #~ msgid "_About" #~ msgstr "_Acerca de" #~ msgid "Shows an about dialog." #~ msgstr "Muestra información acerca del programa." #~ msgid "_Normal View" #~ msgstr "Vista _normal" #~ msgid "Set view mode to mail client mode." #~ msgstr "Visualiza en modo «cliente de correo»." #~ msgid "_Wide View" #~ msgstr "Vista a_mplia" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Visualiza usando tres paneles verticales." #~ msgid "_Combined View" #~ msgstr "Vista _combinada" #~ msgid "Set view mode to two pane mode." #~ msgstr "Visualiza usando dos paneles." #~ msgid "_Reduced Feed List" #~ msgstr "Lista de canales _reducida" #~ msgid "Hide feeds with no unread items." #~ msgstr "Oculta los canales sin articulos nuevos" #~ msgid "_New Subscription..." #~ msgstr "Suscripción _nueva…" #~ msgid "Adds a subscription to the feed list." #~ msgstr "Añade una suscripción a la lista de canales." #~ msgid "Adds a folder to the feed list." #~ msgstr "Añade una carpeta a la lista de canales." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Añade una carpeta virtual a la lista de canales." #~ msgid "New _Source..." #~ msgstr "_Fuente nueva…" #~ msgid "Adds a new feed list source." #~ msgstr "Agrega una nueva fuente de listas de canales." #~ msgid "Adds a new news bin." #~ msgstr "Agrega una nueva bandeja de noticias." #~ msgid "_Mark Items Read" #~ msgstr "_Marcar como leído" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Marca como leídos todos los artículos del canal seleccionado o, en el " #~ "caso de una carpeta, de todos sus canales." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Actualiza el canal seleccionado o, en el caso de una carpeta, todos los " #~ "canales que contenga." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Abre el cuadro de propiedades del canal seleccionado." #~ msgid "_Remove" #~ msgstr "_Eliminar" #~ msgid "Removes the selected subscription." #~ msgstr "Elimina el canal seleccionado." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Pasa el artículo actual de leído a no leído o viceversa." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Crea o elimina una marca en el artículo seleccionado." #~ msgid "R_emove" #~ msgstr "_Eliminar" #~ msgid "Removes the selected item." #~ msgstr "Elimina el artículo seleccionado." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "" #~ "Abre el enlace del artículo en una pestaña nueva del navegador de Liferea." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Abre el enlace del artículo en el panel de artículos de Liferea." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Abre el enlace del artículo en el navegador externo configurado." #~ msgid "_Fullscreen" #~ msgstr "_Pantalla completa" #~ msgid "Browse at full screen" #~ msgstr "Ver en pantalla completa" #~ msgid "_Work Offline" #~ msgstr "Trabajar sin cone_xión" #~ msgid "_Update All" #~ msgstr "_Actualizar todo" #~ msgid "_Show Liferea" #~ msgstr "_Mostrar Liferea" #~ msgid "InoReader" #~ msgstr "InoReader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Nota: El nombre de usuario y la contraseña se guardarán en disco, sin " #~ "cifrar." #~ msgid "Add InoReader Account" #~ msgstr "Añadir cuenta de InoReader" #~ msgid "Please enter your InoReader account settings." #~ msgstr "Proporcione los datos de su cuenta de InoReader." #~ msgid "Plugins" #~ msgstr "Complementos" #~ msgid "normal view" #~ msgstr "vista normal" #~ msgid "wide view" #~ msgstr "vista amplia" #~ msgid "combined view" #~ msgstr "vista combinada" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, lector de noticias para Linux" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "Para más información, visite https://lzone.de/liferea/" #~ msgid "_Open Link In Browser" #~ msgstr "_Abrir el enlace en el navegador" #~ msgid "_Open Link In External Browser" #~ msgstr "_Abrir el enlace en un navegador externo" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Crear un canal de resultados de búsqueda" #~ msgid "enter any search string you want" #~ msgstr "escriba una cadena de búsqueda" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "_Número máximo de resultados:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Nota: Liferea generará un canal que se podrá usar para consultar los " #~ "resultados de buscar el término especificado. Puede mantener este canal " #~ "de forma permanente y actualizarlo como cualquier otro." #~ msgid "Liferea is now online" #~ msgstr "Liferea está conectado" #~ msgid "Work Offline" #~ msgstr "Trabajar sin conexión" #~ msgid "Liferea is now offline" #~ msgstr "Liferea está sin conexión" #~ msgid "Work Online" #~ msgstr "Trabajar con conexión" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Esta opción permite desactivar la actualización de suscripciones." #~ msgid "Browser default" #~ msgstr "Navegador predeterminado" #~ msgid "Existing window" #~ msgstr "Ventana existente" #~ msgid "New window" #~ msgstr "Nueva ventana" #~ msgid "New tab" #~ msgstr "Pestaña nueva" #~ msgid "AOL Reader Login" #~ msgstr "Acceso a AOL Reader" #~ msgid "AOL Reader" #~ msgstr "AOL Reader" #~ msgid "Online/Offline Button" #~ msgstr "Botón de conectar/desconectar" #~ msgid "_Open link in:" #~ msgstr "Abrir enlace en:" liferea-1.12.7/po/eu.po000066400000000000000000002464701352135647700146320ustar00rootroot00000000000000# translation of eu.po to Basque # Copyright (C) 2013 Free Software Foundation, Inc. # This file is distributed under the same license as the liferea package. # # Iñaki Larrañaga Murgoitio , 2007. # Mikel Olasagasti Uranga , 2011, 2013. # msgid "" msgstr "" "Project-Id-Version: liferea-1.10-rc4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2013-06-13 22:57+0100\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Basque \n" "Language: eu\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: Poedit 1.5.5\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Iturri irakurlea" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Liferea lineaz kanpo dago" #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "Inguruko makinekin sinkronizatuta" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "Inguruko makinekin sinkronizatuta" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "Inguruko makinekin sinkronizatuta" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "Inguruko makinekin sinkronizatuta" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 #, fuzzy msgid "Play Podcasts" msgstr "Podcast-a" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Iturri irakurlea" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea iturri irakurlea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Irakurri berri jarioak eta blogak" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Iturri hau etenda dago. Ez da gehiago erabilgarri egongo. Liferea-k ezingo " "du eguneratu gehiago, hala ere cachean dauden goiburuak irakur ditzakezu." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
    HTTP error code : " msgstr "" "Harpidetza honen azken eguneraketak huts egin du!
    HTTP errorearen " "kodea : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Erroreak gertatu dira iturri hau aztertzean." #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Aztertu erroreen xehetasunak" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Xehetasunak" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" "Agian egile edo web arduradunarekin kontaktuan jarri nahi duzu honegatik!" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Erroreak gertatu dira iturri hau iragaztean." #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Iragazi erroreen xehetasunak" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Iturria:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Iturburua:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Argitaratzailea" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Copyright-a" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "umea honekin" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "irakurri gabeko goiburuak" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Karpeta:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Iturburua" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Iturria" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Hemen artxibatua" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Egilea" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Honek elkarbanatua" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Honen bitartez" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Erlazionatua" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Hemen argitaratua ere" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Sortzailea" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Iruzkinak" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Eguneratzen..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Sekzioa" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Saila" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Albisteen erretilua:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Gehitu elementuak albiste honen erretiluan \"Kopiatu berrien erretiluan\" " "hautatuz (testuinguruko menuko elementu-zerrendan)" #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Bilaketaren karpeta:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Arakatzailearen komandoak huts egin du: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Exekuzioa: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Autentifikazio errorea" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Ezin izan da \"%s\" cache direktorioa sortu." #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Gaur %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Atzo %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%b %d %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%Y %b %d" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" ez da baliozko konfigurazio-fitxategien eranskina" #: ../src/enclosure.c:292 #, fuzzy msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Oraindik ez du deskarga herramienta bat konfiguratu! Egizu hobespenetan, " "'Eranskinak' fitxan." #: ../src/enclosure.c:311 #, fuzzy, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Komandoak huts egin du: \n" "\n" "%s\n" "\n" " Egiaztatu deskarga tresna behar bezala instalatuta eta ongi dabilela! " "Hobespenetako 'Deskargak' fitxan aldatu dezakezu." #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Errorea %s %s gisa izenez aldatzean\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "XML errorea OPML fitxategia irakurtzean. Ezin izan da \"%s\" inportatu!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Dokumentu hutsa! OPML \"%s\" dokumentua ez luke hutsik egon behar " "inprotatzean." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" ez da baliozko OPML dokumentua! Lifereak ezin du fitxategi hau " "inportatu." #: ../src/export.c:469 msgid "Imported feed list" msgstr "Inportatutako iturrien zerrenda" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Inportatu iturrien zerrenda" #: ../src/export.c:481 msgid "Import" msgstr "Inportatu" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "OPML fitxategiak" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Errorea iturrien zerrenda esportatzean." #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Iturrien zerrenda esportatuta." #: ../src/export.c:498 msgid "Export Feed List" msgstr "Esportatu iturrien zerrenda" #: ../src/export.c:498 msgid "Export" msgstr "Esportatu" #: ../src/feed.c:317 msgid "" "

    Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

    " msgstr "" "

    Ezin izan da iturriaren mota zehaztu. Egiaztatu iturburuak onartutako " "harpidetzeko formatuetako batera zuzentzen duela.

    XML analizatzailearen " "irteera:
    " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" eguneratua..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" ez dago erabilgarri" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "Lifereak ez du aurkitu albisteen iturririk emandako URLan. Agian web gunea " "honek ez du iturrien aurkikuntza automatikoak onartzen." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "XML errorea iturria irakurtzean! \"%s\" iturria ezin izan da kargatu!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Dokumentu hutsa!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "XML baliogabea!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Iturriak HTML dokumentu batera darama" #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Ezin izan da iturri mota zehaztu" #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Ez dago irakurri gabeko elementurik" #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Abiarazi Liferea bere leiho nagusia EGOERA egoeran dagoela. EGOERA `shown', " "`iconified', edo `hidden' izan daiteke" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "EGOERA" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Bistaratu bertsioaren informazioa eta irten" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Gehitu harpidetza berria" #: ../src/liferea_application.c:284 msgid "uri" msgstr "uri" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Bistaratu mota guztitako arazketa mezuak" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Bistaratu cache kudeatzailearen arazketa mezuak" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Bistaratu konfigurazio-kudeaketaren arazketa mezuak" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Bistaratu datubase kudeatzailearen arazketa mezuak" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Bistaratu GUI funtzio guztien arazketa mezuak" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Gaitu HTML bistaratze arazketa. Lifereak HTML bat prozesatzen duen " "bakoitzean irteera ~/.cache/liferea/output.xhtml fitxategian ere idatzi." #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Bistaratu sareko sarbide guztien arazketa mezuak" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Bistaratu funtzio analizatzaile guztien arazketa mezuak" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "Bistaratu arazketa mezuak funtzio batek denbora gehiegi behar duenean" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Bistaratu arazketa mezuak funtzioak sartzean/kentzean" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Bistaratu iturriaren eguneraketa prozesuaren arazketa mezuak" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "Bistaratu bilaketa direktorioaren bilatze arazketa mezuak" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Bistaratu arazketa mezuak hitzez hitz" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Bistaratu esandako gaiaren arazketa mezuak" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Eguneraketa eskaera ezeztatu da" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Ezin izan da helmugako ostalari izena ebatzi" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Ezin izan da proxy-aren ostalari izena ebatzi" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Ezin izan da urruneko ostalariarekin konektatu" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Ezin izan da proxy-ra konektatu" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "Konexioan errore bat gertatu da edo urruneko konexioa ezustean itxi da" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Baliabidea beste kokapen berri batera mugitu da betirako" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Ez zaude baimenduta iturri hau deskargatzeko. Eguneratu zure erabiltzaile-" "izena eta pasahitza iturriaren propietateen elkarrizketa-koadroan" #: ../src/net.c:476 msgid "Payment required" msgstr "Ordainketa beharrezkoa da" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Ez duzu baimenik baliabide hau ikusteko" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Baliabidea ez da aurkitu" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Metodoa ez dago baimendua" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Ezin da onartu" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Proxy autentifikazioa beharrezkoa da" #: ../src/net.c:482 msgid "Request timed out" msgstr "Eskaeraren denbora-muga iraungituta" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Joan egin da. Baliabidea ez da existitzen. Kendu harpidetza." #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Barne errore bat egon da eguneratze prozesuan" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Iturria ez dago erabilgarri. Zerbitzariak onartu gabeko berbideraketa eskatu " "du." #: ../src/net.c:492 msgid "Client Error" msgstr "Bezeroaren errorea" #: ../src/net.c:494 msgid "Server Error" msgstr "Zerbitzariaren errorea" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Sareko errore ezezaguna gertatu da!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Elementua" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "hau dauka" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "hau ez dauka" #: ../src/rule.c:175 msgid "Item title" msgstr "Elementuaren titulua" #: ../src/rule.c:176 msgid "Item body" msgstr "Elementuaren gorputza" #: ../src/rule.c:177 msgid "Read status" msgstr "Irakurketaren egoera" #: ../src/rule.c:177 msgid "is unread" msgstr "irakurri gabea" #: ../src/rule.c:177 msgid "is read" msgstr "irakurrita" #: ../src/rule.c:178 msgid "Flag status" msgstr "Banderaren egoera" #: ../src/rule.c:178 msgid "is flagged" msgstr "aktibo dago" #: ../src/rule.c:178 msgid "is unflagged" msgstr "ez dago aktibo" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast-a" #: ../src/rule.c:179 msgid "included" msgstr "barne" #: ../src/rule.c:179 msgid "not included" msgstr "ez dago barnean" #: ../src/rule.c:180 msgid "Category" msgstr "Kategoria" #: ../src/rule.c:180 msgid "is set" msgstr "ezarria" #: ../src/rule.c:180 msgid "is not set" msgstr "ez dago ezarria" #: ../src/rule.c:181 msgid "Feed title" msgstr "Iturriaren titulua" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "\"%s\" iturria jadanik eguneratzen ari da!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "\"%s\" iturria etenda dago. Liferea-k ezingo du eguneratu gehiago!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "\"%s\" iturriaren ikonoa eguneratzen" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Arazoak daude harpidetza hau irakurtzean. Egiaztatu URLa eta kontsolako " "irteera." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "\"%s\"ren URLa betirako aldatu da eta eguneratu egin da" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" etenda dago. Lifereak ez du gehiago eguneratuko." #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" ez da aldatu azken eguneraketatik" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "\"%s\" eguneratzen" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "" "Errorea aldi baterako %s fitxategia irakurtzean iragazteko erabiltzeko." #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s %d egoerarekin irten da" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Errorea: ezin izan da \"%s\" kanalizazioa ireki" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Errorea: ezin izan da \"%s\" fitxategia ireki" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Errorea: ez dago \"%s\" fitxategia" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Bilaketaren karpeta berria" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Errore batzuk gertatu dira. Irteera moztu egin da]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "XML analizatzailea: ezin izan da dokumentua analizatu:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Atxikiak" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr "Byte" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "atxiki %d" msgstr[1] "%d atxiki" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Aukeratu fitxategia" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Fitxategiaren luzapena. %s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Ezin izan da pixmap fitxategia aurkitu: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (berri %d)" msgstr[1] " (%d berri)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "irakurri gabe %d - %s" msgstr[1] "%d irakurri gabe - %s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Laguntzaren gaiak" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Erreferentzia azkarra" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "MEG" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Bilaketa aurreratua" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Sartu \"%s\"(e)n erabiltzaile-izena eta pasahitza (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Iturburu ezeaguna" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "_Utzi dena" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Fitxategi guztiak" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea lineaz kanpoko moduan dago. Ezin da eguneraketarik burutua." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Bilatu iturri denak" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Markatu denak irakurritako gisa" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Ziur zaude \"%s\" ezabatzea nahi duzula?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Elementu honek ez du zehaztutako estekarik." #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Titulurik ez ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Goiburua" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Iturri bat hautatu behar duzu bere edukia ezabatzeko." #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Ez da elementurik hautatu" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Ireki fitxan" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "_Abiarazi arakatzailean" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Ireki _kanpoko arakatzailearen" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Kopiatu albisteen erretiluan" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "Egin estekaren _laster-marka %s-(e)n" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "_Kopiatu elementuaren helbidea" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Txandakatu irakurketaren egoera" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Txandakatu elementuaren bandera" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "_Kendu elementua" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Ireki eranskina..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Gorde honela..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Kopiatu estekaren helbidea" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Eguneratu" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Eguneratu karpeta" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "_Harpidetza berria..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "_Karpeta berria..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "_Bilaketa karpeta berria..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "_Iturburu berria..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "_Albisteen erretilu berria..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Berria" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Ordenatu jarioak" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_Markatu denak irakurritako gisa" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "_Berregin" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 #, fuzzy msgid "_Delete" msgstr "/_Ezabatu" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Propietateak" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Bihurtu harpidetza lokaletara..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "GNOMEko lehenetsia" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Testua ikonoen azpian" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Testua ikonoen alboan" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Ikonoak soilik" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Testua soilik" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minutu" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "ordu" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "egun" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Espazioa" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Espazioa" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Espazioa" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Ikuspegi normala" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Ikuspegi zabala" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Ikuspegi konbinatua" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Lehenetsitako arakatzailea" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Eskuz" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Mota" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Programa" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Hutsik)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Berreraikitzen" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Sarrera ezabatzen" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Ziur zaude \"%s\" eta bere edukia ezabatzea nahi duzula?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Ziur zaude \"%s\" ezabatzea nahi duzula?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Berretsi ezabatzea" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Berretsi ezabatzea" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "" "Iturriaren hornitzaileak minutu %d-eko bitartea gomendatzen du eguneratzeko." msgstr[1] "" "Iturriaren hornitzaileak %d minututako bitartea gomendatzen du eguneratzeko." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Iturri honek ez du egunerstzeko bitarte lehenetsirik zehazten." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Izengabea" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Webgunea" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Harpidetza berria" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Aukeratu OPML fitxategia" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "OPML harpidetza berria" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Ez da iturrien zerrendaren iturburu motarik aurkitu." #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Iturburu mota" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "'%s' harpidetza ongi bihurtu da jario lokalera!" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Google Reader-en saioa hasteak huts egin du!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 #, fuzzy msgid "Could not parse JSON returned by Reedah API!" msgstr "Ezin izan da tt-rss-ren APIak itzulitako JSON mezua ulertu" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 #, fuzzy msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "Ezin izan da tt-rss-ren APIak itzulitako JSON mezua ulertu" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Iturri irakurlea" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Ireki esteka _fitxa batean" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "_Ireki esteka arakatzailean" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "_Ireki esteka kanpoko arakatzailean" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "Egin estekaren _laster-marka %s gisa" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Kopiatu estekaren helbidea" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "Gorde irudia honela" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "_Kopiatu irudiaren helbidea" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "_Gorde esteka honela" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "Gorde irudia honela" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Harpidetu..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "_Handitu testuaren tamaina" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Gutxiagotu testu-tamaina" #: ../glade/about.ui.h:1 msgid "About" msgstr "Honi buruz" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea albisteen biltzailea da 'GTK+'entzako" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Liferea-ren orria" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autentifikazioa" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Erabiltzaile-izena:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Pasahitza:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Ireki eranskina" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Mota honetako eranskina ireki:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Zer egin beharko luke Lifereak eranskin honekin? Sartu behean exekutatatzea " "nahi duzun komandoa. Eranskinen URLa argumentu gisa pasatuko zaio komando " "honi:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Arakatu" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Egin hau honelako eranskin guztientzat hemendik aurrera." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Gehitu Google Reader kontua" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Sartu zure Google Reader kontuaren ezarpenak." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Pasahitza" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_Erabiltzaile-izena (email)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Ikusi goiburuak" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Goiburuak" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Markatu denak irakurritako gisa" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Markatu denak irakurritako gisa" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Karpeta berria" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "_Karpeta-izena:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Sortu 'Albisteen erretilua'" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Albisteen erretiluaren izena:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Iturriaren iturburua" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Iturburu mota:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URLa" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Komandoa" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Fitxategi lokala" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Hautatu fitxategia..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Iturburua:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Deskarga / Ondorengo prozesatzea" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "_Ez erabili proxy-rik deskargatzean" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Erabili bihurtzeko _iragazkia" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Lifereak kanpoko iragazki-osagaia erabil dezake onartu gabe dauden formatuko " "iturri eta direktorioak atzitzeko. Ikusi dokumentazioa xehetasun gehiagorako." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Bihurtu _honekin:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Iturburuaren hautapena" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Hautatu iturburu mota gehitzeko..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Gehitu OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Baliozko OPML iturrien zerrendara zuzentzen duen fitxategi lokala edo URLa " "eman." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Kokalekua" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Hautatu fitxategia" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Liferea hobespenak" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Jarioen katxe kudeatzailea" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "Iturrien elementu _kopuru lehenetsia gordetzeko:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Jarioen eguneraketa ezarpenak" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Oharra: gogoratu zentzuzko bitartea ezartzea freskatzeko. Normalean " "jarioak orduro baino maizago freskatzea banda-zabalareren alferrikako " "kontsumoa izaten da." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "_Eguneratu harpidetza guztiak abiaraztean." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Iturria freskatzeko _bitarte lehenetsia:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Iturriak" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Karpeten bistaratzearen ezarpenak" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "_Erakutsi iturri ume guztien elementuak karpeta bat hautatzean." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "_Ezkutatu irakurritako elementuak." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Iturrien ikonoak (Favicon)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Eguneratu ikono guztiak orain" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Karpetak" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Goiburuak irakurtzen" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "_Aurreratu artikuluetan honekin:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "Lehenetsitako ikuspegia: " #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Web integrazioa" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Bidali laster-markak honi" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Barneko arakatzailearen ezarpenak" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Ireki estekak Liferea-ren _leihoan." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Desgaitu Javascript." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_Gaitu arakatzailearen plugin-ak." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Kanpoko arakatzailearen ezarpenak" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Arakatzailea:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Eskuz:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s helbiderako)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Arakatzailea" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Tresna-barraren ezarpenak" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Ezkutatu tresna-barra." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Tresna-barraren botoien etiketak:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "HTTP Proxy Zerbitzaria" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Automatikoki atzeman (GNOME edo ingurunea)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "P_roxy gabe" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Eskuzko ezarpena:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "Proxy-_ostalaria:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "Proxy-_ataka:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Erabili proxy au_tentifikazioa" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Proxy _erabiltzaile-izena:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Proxy _pasahitza:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy-a" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Karpeten bistaratzearen ezarpenak" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Eranskina deskargatzeko" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Deskargatu honekin" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Eranskinak irekitzeko" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Eranskinak" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Harpidetzaren propietateak" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Iturriaren izena" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "Iturriaren _izena:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Eguneraketen arteko tartea" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Erabili eguneratzeko bitarte orokor lehenetsia." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "Iturria eguneratzeko bitartea: " #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Ez eguneratu iturri hau automatikoki." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Iturri honen hornitzaileak %d minututako bitartea gomendatzen du." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Orokorra" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Lifereak kanpoko iragazki-osagaia erabil dezake onartu gabe dauden formatuko " "iturri eta direktorioak atzitzeko. Ikusi dokumentazioa xehetasun gehiagorako." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Iturrien edukia gordeko diren Liferea amaitzean kontrolatzen du cachearen " "ezarpenak. Markatutako elementuak beti gordetzen dira cachean." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "Cachearen ezarpen _lehenetsia" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Desgaitu cachea" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "Cache _mugagabea" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "Iturrien elementu _kopurua gordetzeko:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Artxiboa" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Erabili HTTP _autentifikazioa" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Deskargatu" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "Deskargatu automatikoki iturriaren eranskin guztiak." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "_Kargatu automatikoki esteka konfiguratutako web arakatzailean artikuluak " "hautatzean." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Harpidentza honen _iruzkin jarioak ez jarraitu" #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Markatu deskargatutako elementuak irakurritako gisa" #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Aurreratua" #: ../glade/reedah_source.ui.h:1 #, fuzzy msgid "Add Reedah Account" msgstr "Gehitu Google Reader kontua" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Sartu zure Google Reader kontuaren ezarpenak." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Izena aldatu" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "Izen berria:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Bilaketa karpetaren propietateak" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "Bilatu _izena:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Filatu ondorengo irizpideak betetzen dituzten elementuak" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Edozei_n arau betetzean" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "_Arau guztiak bete behar dira" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Bilaketa aurreratua" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "_Bilatu karpeta..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Bilatu iturri denak" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Aurreratua..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Hasi emandako testuaren bilaketa iturri guztietan. Emaitza elementuen " "zerrendan agertuko da." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Bilatu:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Sartu bilaketako testua Lifereak elementuen tituluen artean edo beraien " "edukien artean bilatzeko." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Aurreratua..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Sartu web gunearen helbidea iturrien aurkikuntza automatikoa erabiltzeko, " "edo jakinez gero iturriaren helbide zuzena erabiltzeko." #: ../glade/theoldreader_source.ui.h:1 #, fuzzy msgid "Add TheOldReader Account" msgstr "Gehitu Google Reader kontua" #: ../glade/theoldreader_source.ui.h:2 #, fuzzy msgid "Please enter your TheOldReader account settings." msgstr "Sartu zure Google Reader kontuaren ezarpenak." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Gehitu Tiny Tiny RSS kontua" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "Sartu zure tt-rss kontuaren ezarpenak." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "_Zerbitzariaren URLa" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Erabiltzaile-izena" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Eguneraketaren monitorea" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "_Utzi dena" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Falta diren eskaerak" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Deskargatzen" #~ msgid "_Subscriptions" #~ msgstr "_Harpidetzak" #~ msgid "Update _All" #~ msgstr "Eguneratu _denak" #~ msgid "Updates all subscriptions." #~ msgstr "Eguneratu harpidetza guztiak." #~ msgid "Mark All As _Read" #~ msgstr "_Markatu denak irakurritako gisa" #~ msgid "Marks read every item of every subscription." #~ msgstr "Markatu irakurrita gisa harpidetza bakoitzeko elementu bakoitza" #~ msgid "_Import Feed List..." #~ msgstr "_Inportatu iturrien zerrenda..." #~ msgid "Imports an OPML feed list." #~ msgstr "Iturrien OPML zerrenda inportatzen du" #~ msgid "_Export Feed List..." #~ msgstr "_Esportatu iturrien zerrenda" #~ msgid "Exports the feed list as OPML." #~ msgstr "Esportatu iturrien zerrenda OPML gisa." #~ msgid "_Quit" #~ msgstr "I_rten" #~ msgid "_Feed" #~ msgstr "_Iturria" #~ msgid "Remove _All Items" #~ msgstr "Kendu elementu _denak" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Unean hautatutako iturritik elemen tu guztiak kentzen ditu." #~ msgid "_Item" #~ msgstr "_Elementua" #~ msgid "Previous Item" #~ msgstr "Aurreko elementua" #~ msgid "Next Item" #~ msgstr "Hurrengo elementua" #~ msgid "_Next Unread Item" #~ msgstr "_Hurrengo irakurri gabeko elementua" #~ msgid "_View" #~ msgstr "_Ikusi" #~ msgid "Increases the text size of the item view." #~ msgstr "Testuaren tamaina handitzen du elementuaren ikuspegian." #~ msgid "Decreases the text size of the item view." #~ msgstr "Testuaren tamaina gutxiagotzen du elementuaren ikuspegian." #~ msgid "_Tools" #~ msgstr "_Tresnak" #~ msgid "_Update Monitor" #~ msgstr "_Eguneraketaren monitorea" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Erakutsi eguneratzeko ilaran unean dauden iturri guztien zerrenda" #~ msgid "_Preferences" #~ msgstr "_Hobespenak" #~ msgid "Edit Preferences." #~ msgstr "Editatu hobespenak." #~ msgid "S_earch" #~ msgstr "_Bilatu" #~ msgid "Search All Feeds..." #~ msgstr "Bilatu iturri guztiak..." #~ msgid "Show the search dialog." #~ msgstr "Erakutsi bilaketaren elkarrizketa-koadroa." #~ msgid "_Help" #~ msgstr "_Laguntza" #~ msgid "_Contents" #~ msgstr "_Edukia" #~ msgid "View help for this application." #~ msgstr "Ikusi aplikazio honen laguntza." #~ msgid "_Quick Reference" #~ msgstr "_Erreferentzia azkarra" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Ikusi Liferearen laster-tekla guztien zerrenda." #~ msgid "_FAQ" #~ msgstr "_MEG" #~ msgid "View the FAQ for this application." #~ msgstr "Ikusi aplikazio honen Maiz Egindako Galderak (MEG)." #~ msgid "_About" #~ msgstr "Honi _buruz" #~ msgid "Shows an about dialog." #~ msgstr "Erakutsi 'honi buruz' elkarrizketa-koadroa." #~ msgid "_Normal View" #~ msgstr "_Ikuspegi normala" #~ msgid "Set view mode to mail client mode." #~ msgstr "Ezarri ikuspegi modua posta bezero moduan." #~ msgid "_Wide View" #~ msgstr "_Ikuspegi zabala" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Ezarri ikuspegi modua hiru panel bertikal erabiltzeko." #~ msgid "_Combined View" #~ msgstr "Ikuspegi _konbinatua" #~ msgid "Set view mode to two pane mode." #~ msgstr "Ezarri ikuspegi modua bi panelekin." #~ msgid "_Reduced Feed List" #~ msgstr "_Murriztu iturri zerrenda" #~ msgid "Hide feeds with no unread items." #~ msgstr "Ezkutatu irakurri gabeko elementurik ez duten jarioak." #~ msgid "_New Subscription..." #~ msgstr "_Harpidetza berria..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Harpidetza bat gehitzen du iturrien zerrendara." #~ msgid "Adds a folder to the feed list." #~ msgstr "Karpeta bat gehitzen du iturrien zerrendara." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Bilaketako karpeta berri bat gehitzen du iturrien zerrendan." #~ msgid "New _Source..." #~ msgstr "_Iturburu berria..." #~ msgid "Adds a new feed list source." #~ msgstr "Iturrien zerrenda berria gehitzen du." #~ msgid "Adds a new news bin." #~ msgstr "Albisteen erretilu berria gehitzen du." #~ msgid "_Mark Items Read" #~ msgstr "_Markatu denak irakurritako gisa" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Hautatutako harpidetzaren edo karpetaren harpidetza guztien elementu " #~ "guztiak markatzen ditu irakurritako gisa." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Hautatutako harpidetzak edo karpetan harpidetza guztiak eguneratzen ditu." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "" #~ "Hautatutako harpidetzaren propietateen elkarrizketa-koadroa irekitzen du." #~ msgid "_Remove" #~ msgstr "_Kendu" #~ msgid "Removes the selected subscription." #~ msgstr "Hautatutako harpidetza ezabatzen du." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Hautatutako elementuaren irakurketaren egoera aldatzen du." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Hautatutako elementuaren banderaren egoera aldatzen du." #~ msgid "R_emove" #~ msgstr "_Kendu" #~ msgid "Removes the selected item." #~ msgstr "Kandu hautatutako elementua." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "" #~ "Bistaratu elementuaren esteka Liferea-ren arakatzailearen fitxa berri " #~ "batean." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Bistaratu elementuaren esteka Liferea-ren arakatzailean." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "" #~ "Bistaratu elementuaren esteka konfiguratutako kanpoko arakatzailean." #~ msgid "_Fullscreen" #~ msgstr "_Pantaila osoa" #~ msgid "Browse at full screen" #~ msgstr "Arakatu pantaila osoan" #~ msgid "_Work Offline" #~ msgstr "_Lan egin lineaz kanpo" #~ msgid "_Update All" #~ msgstr "_Eguneratu denak" #~ msgid "_Show Liferea" #~ msgstr "_Erakutsi Liferea" #, fuzzy #~ msgid "InoReader" #~ msgstr "Google Reader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Oharra: erabiltzaile-izena eta pasahitza diskoan gordeko dira zifratu " #~ "gabe." #, fuzzy #~ msgid "Add InoReader Account" #~ msgstr "Gehitu Google Reader kontua" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "Sartu zure Google Reader kontuaren ezarpenak." #~ msgid "Plugins" #~ msgstr "Pluginak" #~ msgid "normal view" #~ msgstr "ikuspegi normala" #~ msgid "wide view" #~ msgstr "ikuspegi zabala" #~ msgid "combined view" #~ msgstr "ikuspegi konbinatua" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, Linux iturri irakurgailua" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "Informazio gehiagorako, bisitatu https://lzone.de/liferea/" #~ msgid "_Open Link In Browser" #~ msgstr "_Ireki esteka arakatzailean" #~ msgid "_Open Link In External Browser" #~ msgstr "_Ireki esteka kanpoko arakatzailean" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Sortu bilaketaren iturri-motorra" #~ msgid "enter any search string you want" #~ msgstr "sartu edozein kate bilatzeko" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "Emaitzen kopuru _maximoa:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Oharra: Lifereak iturri bat sortuko du, bilaketako emaitzak " #~ "konstultatzeko erabil daitekeena adierazitako bilaketa mezuarekin " #~ "kontsultatua. Iturri hau betirako gorde eta beste edozein iturri bezala " #~ "egunera dezakezu." #~ msgid "Liferea is now online" #~ msgstr "Liferea orain linean dago" #~ msgid "Work Offline" #~ msgstr "Lan egin lineaz kanpo" #~ msgid "Liferea is now offline" #~ msgstr "Liferea lineaz kanpo dago" #~ msgid "Work Online" #~ msgstr "Lan egin linean" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Aukera honek harpidetzen eguneraketa desgaitzea baimentzen du." #~ msgid "Browser default" #~ msgstr "Arakatzaile lehenetsia" #~ msgid "Existing window" #~ msgstr "Lehendik dagoen leihoan" #~ msgid "New window" #~ msgstr "Leiho berrian" #~ msgid "New tab" #~ msgstr "Fitxa berrian" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Iturri irakurlea" #~ msgid "Online/Offline Button" #~ msgstr "Linean/'Lineaz kanpo' botoia" #~ msgid "_Open link in:" #~ msgstr "_Ireki esteka:" #~ msgid "No comments yet." #~ msgstr "Ez du iruzkinik oraingoz." #~ msgid "Refresh" #~ msgstr "Freskatu" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - Linux iturri irakurgailua" #~ msgid "" #~ "

    Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

    You can add new subscriptions

    • From main menu " #~ "'Subscription' -> 'New Subscription'
    • By dropping feed links " #~ "into the subscription list
    • By right clicking links and choosing " #~ "'Subscribe' within Liferea

    " #~ msgstr "" #~ "

    Ongi etorri Lifereara, lineako albisteen iturrien mahaigaineko " #~ "irakurgailua.

    Harpidetza berriak gehitu ditzazkezu

    • Menu " #~ "nagusitik 'Harpidetzak' -> 'Harpidetza berria'
    • Jario baten " #~ "harpidetza esteka harpidetza zerrendara bidaltzen
    • Xaguaren " #~ "eskubiko botoia sakatuz eta 'Harpidetu' sakatuz Liferea barruan
    • " #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "Integratu mezu menuarekin (indicator)" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Amaitu erretiluko ikonora minimizatu ordez" #~ msgid "Start minimized to the messaging menu" #~ msgstr "Abiarazi erretilu ikono gisa" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "Elementu berri %d" #~ msgstr[1] "%d elementu berri" #~ msgid "No new items" #~ msgstr "Ez dago elementu berririk" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "irakurri gabeko elementu %d" #~ msgstr[1] "" #~ "%s\n" #~ "irakurri gabeko %d elementu" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Ez dago irakurri gabeko elementurik" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Atom iturri baliogabea: egile ezezaguna" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Integratu zure Google Reader kontuko iturrien zerrenda. Liferea-k zure " #~ "Google Reader harpidetzak bistaratuko ditu irakur soileko azpizuhaitz " #~ "gisa iturrien zerrendan." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Integratu 'blogroll' edo 'planet' iturrien zerrendara. Liferea-k " #~ "automatikoki iturriak gehituko eta kenduko ditu OPML dokumentuaren " #~ "jatorria aldatzen den heinean." #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Integratu zure Tiny Tiny RSS 1.5+ kontuko iturrien zerrenda. Liferea-k " #~ "zure tt-rss harpidetzak bistaratuko ditu irakur soileko azpizuhaitz gisa " #~ "iturrien zerrendan." #~ msgid "This feed does not exist anymore!" #~ msgstr "Iturri hau ez da gehiago existitzen." #~ msgid "This news entry has no headline" #~ msgstr "Albiste sarrera honek ez du goibururik." #~ msgid "Visit" #~ msgstr "Bisitatu" #~ msgid "Open feed" #~ msgstr "Ireki iturria" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "%s jarioak eguneraketa %d du" #~ msgstr[1] "%s jarioak %d eguneraketa ditu" #~ msgid "Feed Update" #~ msgstr "Eguneraketa" #~ msgid "Show details" #~ msgstr "Erakutsi xehetasunak" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "_Erakutsi notifikazio elkarrizketa-koadroa harpidetza honentzat." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "" #~ "_Ez erakutsi inoiz notifikazio elkarrizketa-koadrorik harpidetza " #~ "honentzat." #~ msgid "Notification Settings" #~ msgstr "Jakinarazpenen ezarpenak" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Erakutsi _laster-leihoa goiburu berriekin." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Erakutsi egoerako _ikonoa jakinarazpen arean (sistemako erretilua)." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Erakutsi elementu berrien kopurua erretiluko ikonoan." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "_Amaitu, erretiluko ikonora minimizatu ordez." #~ msgid "_Start in tray icon." #~ msgstr "_Abiarazi erretiluko ikono bezala" #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Copyright (c) 2003-2013\n" #~ "Liferea taldea\n" #~ msgid "Download and view feeds" #~ msgstr "Deskargatu eta ikusi iturriak" #~ msgid "You may want to validate the feed using" #~ msgstr "Iturria balioztatu nahi baduzu erabili" #~ msgid "bookmark" #~ msgstr "laster-marka" #~ msgid "comments" #~ msgstr "iruzkinak" #~ msgid "flag" #~ msgstr "bandera" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Eranskina deskargatzeak huts egin du: \"%s\"" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Amaitu da eranskina deskargatzea: \"%s\"" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Liferea-ren bertsio honek cache formatu berria darabil eta zure cache " #~ "bertsio berrira migratu du. %s-(e)-n aurkitzen den cache edukia ez da " #~ "automatikoki ezabatu. Ezabatu direktorio hau eskuz migrazioa ongi burutu " #~ "dela ziurtatzean." #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Joan hurrengo irakurri gabeko elementua. Beharrezkoa izanez gero, " #~ "irakurri gabeko elementuak dituen hurrengo iturria hautatuko du." #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Deskargak huts egin du: \"%s\"" #~ msgid "Download finished." #~ msgstr "Deskarga burututa." #~ msgid "Launch Item In _Tab" #~ msgstr "Ireki elementua _fitxa batean" #~ msgid "_Launch Item In Browser" #~ msgstr "_Ireki elementua arakatzaile batean" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Kopiatu elementuaren _URLa arbelean" #~ msgid "Choose download directory" #~ msgstr "Aukeratu deskargatzeko direktorioa" #~ msgid "Liferea Sync %s@%s" #~ msgstr "Liferea Sync %s@%s" #~ msgid "Downloading Enclosure" #~ msgstr "Eranskina deskargatzen" #~ msgid "Sync" #~ msgstr "Sinkronizatu" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "_Gaitu sare lokaleko sinkronizazioa" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Eskuz:\n" #~ "(%s - URL)" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "_Pasa URLa eta ez deskargatu eranskina." #~ msgid "_Save downloads in" #~ msgstr "_Gorde deskargak hemen:" #~ msgid "_Service Name" #~ msgstr "_Zerbitzu izena" #, fuzzy #~ msgid "Print debugging messages for the plugin loading" #~ msgstr " --debug-cache Bistaratu cache kudeatzailearen arazketa mezuaki" #~ msgid "Liferea seems to be running already!" #~ msgstr "Badirudi Liferea jadanik exekutatzen ari dela!" #~ msgid "Update status" #~ msgstr "Eguneraketaren egoera" #~ msgid "was updated" #~ msgstr "eguneratu da" #~ msgid "was not updated" #~ msgstr "ez da eguneratu" #~ msgid "The orientation of the tray." #~ msgstr "Erretiluaren orientazioa." #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #, fuzzy #~ msgid "_Script Manager" #~ msgstr "Script-kudeatzailea" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "LUA script-ak konfiguratzea eta editatzea baimentzen du" #~ msgid "Search With ..." #~ msgstr "Bilatu honekin..." #, fuzzy #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "\"%2$s\" bilaketaren emaitzak: %1$d" #~ msgstr[1] "\"%2$s\" bilaketaren emaitzak: %1$d" #, fuzzy #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "\"%2$s\" bilaketaren emaitzak: %1$d" #~ msgstr[1] "\"%2$s\" bilaketaren emaitzak: %1$d" #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "Elementuen zerrendak bilaketako ereduarekin bat datozen elementu guztiak " #~ "ditu. Bilaketaren emaitza gordetzea nahi izanez gero egin klik " #~ "bilaketaren elkarrizketa-koadroko \"Bilaketaren karpeta\" botoian eta " #~ "Liferea-k bilaketaren karpeta bat gehituko dio iturrien zerrendari." #, fuzzy #~ msgid "Count" #~ msgstr "iruzkinak" #~ msgid "You have to select a feed entry" #~ msgstr "Iturri sarrera bat hautatu behar duzu" #~ msgid "(empty)" #~ msgstr "(hutsik)" #, fuzzy #~ msgid "_Properties..." #~ msgstr "_Propietateak..." #, fuzzy #~ msgid "Update out-dated feeds" #~ msgstr "Eguneratu iturri guztiak" #, fuzzy #~ msgid "Force update of all feeds" #~ msgstr "Eguneratu iturri guztiak" #, fuzzy #~ msgid "No feed update at all" #~ msgstr "Eguneraketa" #, fuzzy #~ msgid "startup" #~ msgstr "_Abioan:" #, fuzzy #~ msgid "feed updated" #~ msgstr "Eguneraketa" #, fuzzy #~ msgid "feed added" #~ msgstr "Iturri irakurlea" #, fuzzy #~ msgid "item selected" #~ msgstr "Kendu _hautatutakoa" #, fuzzy #~ msgid "feed selected" #~ msgstr "Kendu _hautatutakoa" #, fuzzy #~ msgid "item unselected" #~ msgstr "Ez da elementurik hautatu" #, fuzzy #~ msgid "feed unselected" #~ msgstr "Kendu _hautatutakoa" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Script-en euskarria ez dago erabilgarri." #, fuzzy #~ msgid "Script Name" #~ msgstr "Script-kudeatzailea" #~ msgid "No script selected!" #~ msgstr "Ez da script-ik hautatu." #~ msgid "Create a new search feed." #~ msgstr "Sortu bilaketaren iturri berria." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea-k ezin du elementu honen edukia bistaratu." #~ msgid "

      View this item's content.

      " #~ msgstr "

      Ikusi elementuaren edukia.

      " #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "Integratu zure Bloglines kontuko iturrien zerrenda. Liferea-k zure " #~ "Bloglines harpidetzak bistaratuko ditu irakur soileko azpizuhaitz gisa " #~ "iturrien zerrendan." #~ msgid "feedlist.opml" #~ msgstr "feedlist_eu.opml" #, fuzzy #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s(e)k %d goiburu berri/eguneratuta ditu\n" #~ msgstr[1] "%s(e)k %d goiburu berri/eguneratuta ditu\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #, fuzzy #~ msgid " " #~ msgstr " " #~ msgid "Hook" #~ msgstr "Gakoa" #~ msgid "Registered Scripts" #~ msgstr " Erregistratutako script-ak" #~ msgid "Script Code" #~ msgstr "Script kodea" #~ msgid "text/plain" #~ msgstr "testua/laua" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Aukera honek atzerapena sor dezake hainbat iturri dituzten karpetak " #~ "kargatzean." #~ msgid "Downloading Enclosures" #~ msgstr "Eranskinen deskarga" #~ msgid "Feed Cache Handling" #~ msgstr "Iturrien cache kudeaketa" #~ msgid "Feed Name" #~ msgstr "Iturriaren izena" #~ msgid "Feed Update Settings" #~ msgstr "Iturri-eguneraketen ezarpenak" #~ msgid "HTTP Proxy Server" #~ msgstr "HTTP proxy zerbitzaria" #~ msgid "Opening Enclosures" #~ msgstr "Eranskinak irekitzea" #~ msgid "Reading Headlines" #~ msgstr "Goiburuak irakurketa" #, fuzzy #~ msgid "Toolbar Settings" #~ msgstr "Menuaren ezarpenak" #~ msgid "Update Interval" #~ msgstr "Eguneratzeko bitartea" #~ msgid "Web Integration" #~ msgstr " Web integrazioa" #~ msgid "Add Script" #~ msgstr "Gehitu script-a" #~ msgid "At _startup:" #~ msgstr "_Abioan:" #, fuzzy #~ msgid "Attention Profile" #~ msgstr "Huts egin du autentifikatzean" #~ msgid "Create new script" #~ msgstr "Sortu script berria" #~ msgid "Exec Command" #~ msgstr "Exekutatu komandoa" #~ msgid "Reuse existing script" #~ msgstr "Berrerabili existitzen den script-a" #~ msgid "Script Manager" #~ msgstr "Script-kudeatzailea" #, fuzzy #~ msgid "Search _Link Cosmos with" #~ msgstr "Bilatu honen _esteka: " #~ msgid "%s" #~ msgstr "%s" #, fuzzy #~ msgid "FAILED to download enclosure: \"%s\"" #~ msgstr "Amaitu da eranskina deskargatzea: \"%s\"" #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2009\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgstr "" #~ "Copyright-a (c) 2003-2007\n" #~ "Lars Lindner eta \n" #~ "Nathan J. Conrad \n" #~ msgid "/_Bookmark Link at %s" #~ msgstr "/Egin estekaren _laster-marka %s gisa" #, fuzzy #~ msgid "/Toggle _Read Status" #~ msgstr "Txandakatu irakurketaren egoera" #~ msgid "/Toggle Item _Flag" #~ msgstr "/Aldatu elementuaren _bandera" #~ msgid "/_Preferences" #~ msgstr "/_Hobespenak" #~ msgid "/_Quit" #~ msgstr "/_Irten" #, fuzzy #~ msgid "/Copy Link Location" #~ msgstr "/_Kopiatu estekaren helbidea" #~ msgid "/_Update" #~ msgstr "/_Eguneratu" #~ msgid "/_New/New _Subscription..." #~ msgstr "/_Berria/_Harpidetza berria..." #~ msgid "/_New/New _Folder..." #~ msgstr "/_Berria/_Karpeta berria..." #~ msgid "/_New/New S_earch Folder..." #~ msgstr "/_Berria/_Bilaketako karpeta berria..." #~ msgid "/_New/New S_ource..." #~ msgstr "/_Berria/_Iturburu berria..." #~ msgid "/_New/New _News Bin..." #~ msgstr "/_Berria/_Albisteen erretilu berria..." #~ msgid "Access Forbidden" #~ msgstr "Sarbidea debekatuta" #~ msgid " --help Print this help and exit" #~ msgstr " --help Bistaratu laguntza hau eta irten" #~ msgid " --mainwindow-state=STATE" #~ msgstr " --mainwindow-state=EGOERA" #~ msgid " Start Liferea with its main window in STATE." #~ msgstr "" #~ " Abiatu Liferea bere leiho nagusia EGOERAn dagoela." #~ msgid "The --mainwindow-state argument must be given a parameter.\n" #~ msgstr "--mainwindow-state argumentuak parametro bat eman behar du.\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "--session argumentuak parametro bat eman behar du.\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "Liferea-k argumentu ezezaguna aurkitu du: %s\n" #~ msgid "Cookie for %s has expired!" #~ msgstr "%s cookia iraungitu da." #~ msgid "_Limit cache to" #~ msgstr "Mugatu _cachea: " #~ msgid "items." #~ msgstr "elementu." #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "" #~ "Iturrien esteken aurkikuntza automatikoak huts egin du. Ez da iturrien " #~ "estekarik aurkitu." #~ msgid "Could not download \"%s\". Will retry in %d seconds." #~ msgstr "Ezin izan da \"%s\" deskargatu. Saiatu berriro %d segundo barru." #~ msgid "http://lzone.de/liferea/" #~ msgstr "http://lzone.de/liferea/" #~ msgid "Show Menu _And Toolbar" #~ msgstr "Erakutsi menua _eta tresna-barra" #~ msgid "Show _Menu Only" #~ msgstr "Erakutsi _menua soilik" #~ msgid "Show _Toolbar Only" #~ msgstr "Erakutsi _tresna-barra soilik" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "" #~ "Ustegabeko karaktere sekuentziaren amaiera, edo hondatutako UTF-8 " #~ "kodeketa. Karaktere batzuk jaregin egin dira" #~ msgid "" #~ "Sorry, I was not able to load any installed browser plugin! Try the --" #~ "debug-plugins option to get debug information!" #~ msgstr "" #~ "Ezin izan da instalatutako arakatzaileen plugin-ik kargatu. Saiatu --" #~ "debug-plugins aukerarekin arazketari buruzko informazioa lortzeko." #~ msgid "This item does not have a link assigned!" #~ msgstr "Elementuak ez du estekarik esleituta." #~ msgid "No link selected!" #~ msgstr "Ez da estekarik hautatu." #~ msgid "/_Increase Text Size" #~ msgstr "/_Handitu letra-tamaina" #~ msgid "/_Decrease Text Size" #~ msgstr "/_Gutxiagotu letra-tamaina" #~ msgid "/Toggle _Online|Offline" #~ msgstr "/Txandakatu _Linean|Lineaz kanpo" #~ msgid "/_Show|Hide Window" #~ msgstr "/_Erakutsi|Ezkutatu leihoa" #~ msgid "" #~ "Saves this search as a search folder, which will appear in the feed list." #~ msgstr "" #~ "Gorde bilaketa hau bilaketaren karpetan, iturrien zerrendan agertuko da." #~ msgid "search" #~ msgstr "bilatu" #~ msgid "does match" #~ msgstr "bat dator" #~ msgid "does not match" #~ msgstr "ez dator bat" #~ msgid "Updates all subscriptions. This does not update OCS directories." #~ msgstr "" #~ "Harpidetza guztiak eguneratzen ditu. Honek ez ditu OCS direktorioak " #~ "eguneratzen." #~ msgid "Rule" #~ msgstr "Araua" #~ msgid "Liferea Homepage" #~ msgstr "" #~ " Liferea-ren gune nagusia" #~ msgid "" #~ "Code, Patches, Debugging\n" #~ "\n" #~ "James Doherty\n" #~ "Jeremy Messenger\n" #~ "John McKnight\n" #~ "Tomasz Maka\n" #~ "Karl Soderstrom\n" #~ "Christophe Barbe\n" #~ "Juho Snellman\n" #~ "Roshan Revankar\n" #~ "Oliver Feiler\n" #~ "Niklas Morberg\n" #~ "Johannes Schlueter\n" #~ "Pierre Phaneuf\n" #~ "ahmed el-helw\n" #~ "James Bowes\n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary\n" #~ "Christoph Hohmann\n" #~ "Raphael Slinckx\n" #~ "Bjorn Monnens\n" #~ "Thomas de Grenier de Latour\n" #~ "Aristotle Pagaltzis\n" #~ "Norman Jonas\n" #~ "Sebastian Droege\n" #~ "Daniel Gryniewicz\n" #~ "Remi Cardona\n" #~ "Frederic Peters\n" #~ "Don Malcolm\n" #~ "Ed Catmur\n" #~ "Chris Pirillo\n" #~ "Eric Anderson\n" #~ "and many more...\n" #~ "\n" #~ "Code from other projects\n" #~ "\n" #~ "Anders Carlsson (tray icon support)\n" #~ "Philippe Martin, Brion Vibber (favicon support)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Included Software\n" #~ "\n" #~ "Liferea uses the XSPF Web Music Player to \n" #~ "allow direct podcast playback. This player was \n" #~ "written by Fabricio Zuardi and can be found \n" #~ "at http://musicplayer.sourceforge.net" #~ msgstr "" #~ "Kodea, adabakia, arazketa\n" #~ "\n" #~ "James Doherty\n" #~ "Jeremy Messenger\n" #~ "John McKnight\n" #~ "Tomasz Maka\n" #~ "Karl Soderstrom\n" #~ "Christophe Barbe\n" #~ "Juho Snellman\n" #~ "Roshan Revankar\n" #~ "Oliver Feiler\n" #~ "Niklas Morberg\n" #~ "Johannes Schlueter\n" #~ "Pierre Phaneuf\n" #~ "ahmed el-helw\n" #~ "James Bowes\n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary\n" #~ "Christoph Hohmann\n" #~ "Raphael Slinckx\n" #~ "Bjorn Monnens\n" #~ "Thomas de Grenier de Latour\n" #~ "Aristotle Pagaltzis\n" #~ "Norman Jonas\n" #~ "Sebastian Droege\n" #~ "Daniel Gryniewicz\n" #~ "Remi Cardona\n" #~ "Frederic Peters\n" #~ "Don Malcolm\n" #~ "Ed Catmur\n" #~ "Chris Pirillo\n" #~ "Eric Anderson\n" #~ "eta gehiago...\n" #~ "\n" #~ "Beste proiektuetako kodea\n" #~ "\n" #~ "Anders Carlsson (erretiluko ikonoaren euskarria)\n" #~ "Philippe Martin, Brion Vibber (favicon euskarria)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Erabiltzen dituen bestelako softwareak\n" #~ "\n" #~ "Liferea-k XSPF web musika erreproduzitzailea erabiltzen du \n" #~ "zuzeneko podcast-ak erreproduzitzeko. Erreproduzigailua hau\n" #~ "Fabricio Zuardi-k garatu zuen eta hemen aurki daiteke:\n" #~ "http://musicplayer.sourceforge.net" #~ msgid "Contributors" #~ msgstr "Laguntzaileak" #~ msgid "" #~ "Note: Items are added to the search folder if at least one additive rule\n" #~ "matches. They are removed if at least one removing rule matches." #~ msgstr "" #~ "Oharra: elementuak bilaketako karpetan gehituko dira arau batekin bat " #~ "etorriz gero. Kendu egingo dira bat datorren araua ezabatzean." #~ msgid "Translation" #~ msgstr "Itzultpena" #~ msgid "_Name:" #~ msgstr "_Izena:" #~ msgid "URL is invalid" #~ msgstr "URLa baliogabea da" #~ msgid "Unsupported network protocol" #~ msgstr "Onartu gabeko sareko protokoloa" #~ msgid "Hostname could not be found" #~ msgstr "Ezin izan da ostalari-izena aurkitu" #~ msgid "Network connection was refused by the remote host" #~ msgstr "Urruneko ostalariak sareko konexioa ukatu du" #~ msgid "Remote host did not finish sending data" #~ msgstr "Urruneko ostalariak ez du amaitu datuak bidaltzea" #~ msgid "Too many HTTP redirects were encountered" #~ msgstr "HTTP berbideraketa gehiegi aurkitu dira" #~ msgid "Remote host sent an invalid response" #~ msgstr "Urruneko ostalaria baliogabeko erantzuna bidali du" #~ msgid "Webserver's authentication method incompatible with Liferea" #~ msgstr "" #~ "Web zerbitzariaren autentifikazio metodoa ez dator bat Liferea-rekin" #~ msgid "_Program" #~ msgstr "_Programa" #~ msgid "Remove _Selected" #~ msgstr "Kendu _hautatutakoa" #~ msgid "Update _Selected" #~ msgstr "Eguneratu _hautatutakoa" #~ msgid "_Delete Selected" #~ msgstr "_Ezabatu hautatutakoa" #~ msgid "" #~ "Error while reading cache file \"%s\" ! Cache file could not be loaded!" #~ msgstr "" #~ "Errorea cacheko \"%s\" fitxategia irakurtzean! Cacheko fitxategia ezin " #~ "izan da kargatu." #~ msgid "" #~ "

      XML error while parsing cache file! Feed cache file \"%s\" could not " #~ "be loaded!

      " #~ msgstr "" #~ "

      XML errorea cacheko fitxategia analizatzean! Cacheko \"%s\" iturri-" #~ "fitxategia ezin izan da kargatu.

      " #~ msgid "

      \"%s\" is no valid cache file! Cannot read cache file!

      " #~ msgstr "" #~ "

      \"%s\" ez da baliozko cache fitxategia! Ezin da cacheko fitxategia " #~ "irakurri.

      " #~ msgid "There were errors while parsing cache file \"%s\"" #~ msgstr "Erroreak gertatu dira cacheko \"%s\" fitxategia analizatzean" #~ msgid "Feed Loading Settings" #~ msgstr "Iturriak kargatzeko ezarpenak" #~ msgid "Optimize for reduced _memory usage." #~ msgstr "Optimizatu _memoria gutxi erabiltzeko." #~ msgid "Optimize for _speed." #~ msgstr "Optimizatu _abiadura .azkartzeko." #~ msgid "_View Headlines With" #~ msgstr "_Ikusi goiburuak honekin" #~ msgid "Please restart Liferea for changes to take effect." #~ msgstr "Berrabiarazi Liferea aldaketak eragina izateko. " #~ msgid "" #~ "Liferea reuses the GNOME proxy settings. If you use GNOME you can " #~ "change these settings in the GNOME Control Center." #~ msgstr "" #~ "Lifereak GNOMEren proxy ezarpenak berrerabiltzen ditu. GNOME " #~ "erabiltzen baduzu, ezarpen hauek alda ditzakezu GNOMEren kontrol-zentroan." #~ "" #~ msgid "_Enable Proxy" #~ msgstr "_Gaitu proxy-a" #~ msgid "" #~ " --debug-html Enable HTML debugging (saving to ~/.liferea_1.2/output." #~ "xhtml)" #~ msgstr "" #~ " --debug-html Gaitu HTML arazketa ( ~/.liferea_1.2/output.xhtml " #~ "fitxategian gorde)" #~ msgid " --debug-plugins Print debugging messages when loading plugins" #~ msgstr " --debug-plugins Bistaratu arazketa mezuak plugin-ak kargatzean" #~ msgid "Update only feeds scheduled for updates" #~ msgstr "Eguneratzeko prestatu diren iturriak soilik eguneratu" #~ msgid "Reset feed update timers (Update no feeds)" #~ msgstr "Freskatu eguneraketen tenporizadoreak (iturririk eguneratu gabe)" #~ msgid "Searching for \"%s\"" #~ msgstr "\"%s\"(r)en bilaketa" #~ msgid "There were errors while parsing the feed %s!" #~ msgstr "Erroreak gertatu dira %s iturria analizatzean." #~ msgid "Liferea notification" #~ msgstr "Liferea-ren jakinarazpena" liferea-1.12.7/po/fi.po000066400000000000000000002673211352135647700146150ustar00rootroot00000000000000# Finnish messages for liferea. # Copyright © 2010, 2013 Free Software Foundation, Inc. # This file is distributed under the same license as the liferea package. # # Note: we set # # subscription = feed = syöte # item = headline = otsikko # enclosure = liitetiedosto # # Jiri Grönroos , 2017 # Pauli Virtanen , 2004-2005. # Jorma Karvonen , 2010, 2012-2013. # msgid "" msgstr "" "Project-Id-Version: liferea 1.10-rc4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2017-12-09 21:00+0200\n" "Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.8.7.1\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Syötteenlukija" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" "Liferea on lyhenne sanoista Linux Feed Reader, eli Linux-syötteenlukija. Se " "on uutiskeräin verkossa oleville syötteille. Liferea tukee lukuisia eri " "muotoja, mukaan lukien RSS/RDF, CDF ja Atom. Vaikka olemassa on myös muita " "uutislukijoita, ne eivät ole saatavilla Linuxille tai vaativat useita eri " "lisäkirjastoja asennettavaksi. Liferea pyrkii vastaamaan tarpeeseen " "tarjoamalla nopean ja heppokäyttöisen uutiskeräimen GNOME-työpöydälle." #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "Ominaisuuksia:" #: ../liferea.appdata.xml.in.h:4 msgid "Read articles when offline" msgstr "Lue artikkeleita kun et ole yhteydessä verkkoon" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "Synkronoi TheOldReaderin kanssa" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "Synkronoi TinyTinyRSS:n kanssa" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "Synkronoi InoReaderin kanssa" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "Synkronoi Reedahin kanssa" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "Tallenna uutisotsikot pysyvästi uutiskoreihin" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "Hae tuloksia käyttämällä hakukansioita" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "Toista podcasteja" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Syötteenlukija" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea-syötteenlukija" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Lue uutissyötteitä ja blogeja" #: ../net.sourceforge.liferea.desktop.in.h:5 #, fuzzy msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "news;feed;aggregator;blog;podcast;uutiset;syöte;rss;" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Tämä syöte on lakkautettu, ja ei enää saatavilla. Liferea ei enää päivitä " "sitä, mutta voit yhä lukea välimuistissa olevia otsikoita." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
      HTTP error code : " msgstr "" "Tämän julkaisun viimeinen päivitys epäonnistui!
      HTTP-virhekoodi : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Tämän syötteen jäsentämisessä oli virheitä!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Jäsentimen virheyksityiskohdat" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Yksityiskohdat" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" "Haluat ehkä ottaa yhteyttä uutissyötteen kirjoittajaan/webbiylläpitäjään " "tästä asiasta!" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Tämän syötteen suodattamisessa oli virheitä!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Suodata virheyksityiskohdat" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Syöte:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Lähde:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Julkaisija" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Tekijänoikeus" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "lapsisolmu kohteelle" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "lukemattomat otsakerivit" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Kansio:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Lähde" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Syöte" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Avainsanat" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Tekijä" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Jaettu:" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Kautta" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Suhteessa kohteeseen" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Myös lähetetty kohteessa" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Kirjoittaja" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "Koordinaatit" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "Kartta" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Kommentit" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Päivitetään..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Lohko" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Osasto" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Uusi kori:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Lisää kohteita tähän uutiskoriin valitsemalla ”Kopioi uutiskoriin” " "asiayhteysvalikon luetteloriviltä." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Etsintäkansio:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Selainkomento epäonnistui: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Käynnistetään: ”%s”" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Käyttövaltuutusvirhe" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Ei voida luoda välimuistihakemistoa ”%s”!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Tänään klo %H:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Eilen klo %H:%M" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a klo %H:%M" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d. %b klo %H:%M" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d. %b %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "”%s” ei ole kelvollinen liitetyyppinen asetustiedosto!" #: ../src/enclosure.c:292 #, fuzzy msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Et ole vielä asettanut lataustyökalua! Tee niin Työkalut/Asetukset-valikon " "’Lataus’-välilehdessä." #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Komento epäonnistui: \n" "\n" "%s\n" "\n" " Tarkista, että onko asetuksissa määritelty lataustyökalu asennettu ja " "toimiiko se oikein! Voit vaihtaa sen Työkalut/Asetukset-valikon ’Lataus’-" "välilehdessä." #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Tiedoston ”%s” nimen vaihtaminen tiedostoksi ”%s” ei onnistunut.\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "XML-virhe luetaessa OPML-tiedostoa!. Ei voitu tuoda kohdetta ”%s”!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Tyhjä asiakirja. OPML-asiakirjan ”%s” ei tulisi olla tyhjä, kun se tuodaan." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "”%s” ei ole kelvollinen OPML-asiakirja. Liferea ei voi käsitellä tätä " "tiedostoa." #: ../src/export.c:469 msgid "Imported feed list" msgstr "Tuotu syöteluettelo" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Tuo syöteluettelo" #: ../src/export.c:481 msgid "Import" msgstr "Tuo" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "OPML-tiedostot" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Virhe syöteluettelon viemisessä!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Syöteluettelo viety!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Vie syöteluettelo" #: ../src/export.c:498 msgid "Export" msgstr "Vie" #: ../src/feed.c:317 msgid "" "

      Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

      " msgstr "" "

      Ei voitu tunnistaa tämän syötteen tyyppiä! Tarkista, että lähde todella " "osoittaa resurssiin, joka tarjotaan yhdessä tuetuista syndikaattimuodoissa!XML-jäsennintuloste:

      " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "”%s” päivitetty..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "”%s” ei ole käytettävissä" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "Verkko-osoite, jota haluat Liferea-ohjelman tilaavan, osoittaa webbisivuun " "ja automaattitunnistus ei löytänyt tältä sivulta syötettä. Ehkä tämä sivu ei " "vain tue syötteen automaattista havaitsemista." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "XML-virhe syötteen lukemisessa! Syötettä ”%s” ei voitu ladata!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Tyhjä asiakirja!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Virheellinen XML!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Lähde osoittaa HTML-asiakirjaan." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Ei voitu määritellä syötetyyppiä." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Lukemattomia otsikkoja ei ole" #: ../src/liferea_application.c:282 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Käynnistä Liferea pääikkunassaan TILAssa. TILA voi olla ”shown” tai ”hidden”" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "TILA" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Näytä versiotiedot ja poistu" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Lisää uusi syöte" #: ../src/liferea_application.c:284 msgid "uri" msgstr "internet-resurssin tunnus" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Tulosta kaikentyyppisiä vianjäljitysviestejä" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Tulosta vianjäljitusviestit välimuistikäsittelylle" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Tulosta asetuskäsittelyn vianjäljitysviestit" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Tulosta tietokantakäsittelyn vianjäljitysviestit" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Tulosta graafisten käyttöliittymäfunktioiden vianjäljitusviestit" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Ottaa käyttöön HTML-renderoinnin vianjäljityksen. Joka kerta kun Liferea " "renderoi HTML-tulosteen, se vedostaa myös tuotetun HTML-koodin tiedostoon ~/." "cache/liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Tulosta kaikki verkkotoimintojen vianjäljitysviestit" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Tulosta jäsennysfunktioiden vianjäljitysviestit" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Tulosta vianjäljitysviestit, kun funktion prosessointi kestää liian pitkään" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Tulosta vianjäljitysviestejä funktioiden alussa ja lopussa" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Tulosta vianjäljitysviestejä syötepäivitysten käsittelystä" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "Tulosta hakukansiotäsmäyksen vianjäljitusviestit" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Tulosta laajoja vianjäljitysviestejä" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Tulosta vianjäljitysviestejä tietystä aiheesta" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Päivityspyyntö on peruttu" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Ei kyetä ratkaisemaan kohdeverkkokoneen nimeä" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Ei kyetä ratkaisemaan välimuistikoneen nimeä" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Yhteyden muodostaminen etäkoneeseen ei onnistunut" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Yhteyden muodostaminen välityspalvelimeen epäonnistui" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "Tapahtui verkkovirhe, tai etäpää sulki yhteyden odottamatta" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Resurssi on siirretty pysyvästi uuteen sijaintiin" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Tämän syötteen lukemiseen ei ole lupaa. Kirjoita oikea käyttäjätunnus ja " "salasana syötteen ominaisuusikkunaan." #: ../src/net.c:476 msgid "Payment required" msgstr "Maksullinen" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Sinulla ei ole pääsyä tähän resurssiin" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Resurssia ei löydy" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Metodi ei ole mahdollinen" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Ei kelvollinen" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Välityspalvelin vaatii todennuksen" #: ../src/net.c:482 msgid "Request timed out" msgstr "Kyselyn aikakatkaisu" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Resurssia ei ole olemassa. Poista syöte!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Päivitysprosessissa oli sisäinen virhe" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Syöte ei ole käytettävissä: palvelin vaati ei-tuettua uudelleenohjausta!" #: ../src/net.c:492 msgid "Client Error" msgstr "Asiakasohjelman virhe" #: ../src/net.c:494 msgid "Server Error" msgstr "Palvelimen virhe" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Tuntematon verkkovirhe tapahtui!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Otsikko" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "sisältää" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "ei sisällä" #: ../src/rule.c:175 msgid "Item title" msgstr "Otsikon nimi" #: ../src/rule.c:176 msgid "Item body" msgstr "Otsikon sisältö" #: ../src/rule.c:177 msgid "Read status" msgstr "Lukemistila" #: ../src/rule.c:177 msgid "is unread" msgstr "lukematon" #: ../src/rule.c:177 msgid "is read" msgstr "luettu" #: ../src/rule.c:178 msgid "Flag status" msgstr "Merkintätila" #: ../src/rule.c:178 msgid "is flagged" msgstr "merkitty" #: ../src/rule.c:178 msgid "is unflagged" msgstr "merkitsemätön" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "sisältää" #: ../src/rule.c:179 msgid "not included" msgstr "ei sisällä" #: ../src/rule.c:180 msgid "Category" msgstr "Luokka" #: ../src/rule.c:180 msgid "is set" msgstr "asetettu" #: ../src/rule.c:180 msgid "is not set" msgstr "ei ole asetettu" #: ../src/rule.c:181 msgid "Feed title" msgstr "Syötteen nimi" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Syöte ”%s” on jo päivitetty." #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "Syöte ”%s” on lakkautettu. Liferea ei päivitä sitä enää!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Päivitetään favicon-kuvake kohteelle ”%s”" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Syötteen lukemisessa tapahtui virhe. Tarkista verkko-osoite ja " "pääteikkunassa näkyvä tuloste." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "Syötteen ”%s” verkko-osoite on muuttunut pysyvästi ja päivitetty" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "”%s” on lakkautettu. Liferea ei enää päivitä sitä!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "”%s” ei ole muuttunut viime kerrasta" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "”%s” päivittyy" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Virhe avattaessa tilapäistä tiedostoa %s suodatusta varten!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s sulkeutui, lopetuskoodi oli %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Virhe: putken ”%s” avaaminen ei onnistunut" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Virhe: tiedoston ”%s” avaaminen ei onnistunut" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Virhe: Tiedosto ”%s” ei ole olemassa" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Uusi etsintäkansio" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Virheitä oli lisää. Tuloste typistettiin!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "XML-jäsenin: Asiakirjan jäsentäminen epäonnistui:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Liitteet" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " tavua" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kilotavua" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "megatavua" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "gigatavua" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d liite" msgstr[1] "%d liitettä" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Valitse tiedosto" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Tiedostotarkennin .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Pixmap-kuvatiedostoa ei löytynyt: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d uusi)" msgstr[1] " (%d uutta)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d lukematon%s" msgstr[1] "%d lukematonta%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Opasteaiheet" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Pika-asetukset" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "UKK" #: ../src/ui/search_dialog.c:116 msgid "Saved Search" msgstr "Tallennettu haku" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Kirjoita syötteen ”%s” (%s) käyttäjätunnus ja salasana:" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Tuntematon lähde" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 msgid "_Cancel" msgstr "_Peru" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Kaikki tiedostot" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "" "Liferea ei ole yhteydessä verkkoon, joten päivittäminen ei ole mahdollista." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Etsi kaikista syötteistä." #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Merkitse kaikki luetuiksi" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Haluatko poistaa syötteen ”%s”?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Tällä otsikolla ei ole linkkiä!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Otsikoton ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Otsikko" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Päivämäärä" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Syöte, jonka otsikot poistetaan, täytyy valita!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Otsikkoja ei ole valittu." #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Avaa välileh_dessä" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "_Avaa selaimessa" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Avaa ulkoisessa selaimessa" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Kopioi uutiskoriin" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "Kirja_nmerkintä osoitteessa %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "_Kopioi otsikkosijainti" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Merkitse _luetuksi tai lukemattomaksi" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "_Merkitse otsikko" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "P_oista otsikko" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Avaa liitetiedosto..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Tallenna nimellä..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "_Kopioi linkki" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Päivitä" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Päivitä kansio" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "_Uusi syöte..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Uu_si kansio..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Uusi _etsintäkansio..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Uusi läh_de..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Uusi uutis_kori..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Uusi" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Lajittele syötteet" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_Merkitse kaikki luetuiksi" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "_Rakenna uudelleen" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "Po_ista syöte" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Ominaisuudet" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Muunna Paikallistilauksiin..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "GNOME-oletus" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Teksti kuvakkeiden alla" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Teksti kuvakkeiden rinnalla" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Vain kuvakkeet" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Vain teksti" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minuuttia" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "tuntia" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "päivää" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Välilyönti" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " välilyönti" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " välilyönti" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Normaalinäkymä" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Leveä näkymä" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Näytä yhdistettynä" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Oletusselain" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Käyttöohje" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Tyyppi" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Ohjelma" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Tyhjä)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Rakennetaan uudelleen" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Otsikko poistetaan" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Haluatko poistaa kansion ”%s” sisältöineen?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Haluatko poistaa syötteen ”%s”?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Poiston vahvistus" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Poiston vahvistus" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "_Avaa" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "" "Tämän syötteen tarjoaja suosittelee päivitystaajuudeksi %d minuuttia." msgstr[1] "" "Tämän syötteen tarjoaja suosittelee päivitystaajuudeksi %d minuuttia." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Tällä syötteellä ei ole suositeltua päivitystaajuutta." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Nimetön" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Webbisivusto" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d. %b %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Uusi syöte" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google-lukija" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Valitse OPML-tiedosto" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Uusi OPML-syöte" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Ei löytynyt syöteluettelotyyppejä!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Lähteen tyyppi" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" "\"%s\"-kirjautuminen ei ole vielä valmistunut! Odota kunnes kirjautuminen on " "valmis." #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "Tilaus ’%s’ muunnettiin onnistuneesti paikalliseksi syötteiksi!" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "Kirjautuminen epäonnistui!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "Reedah" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "" "Ei kyetty jäsentämään Reedahin API-rajapinnan palauttamaa JSON-rakennetta!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "TinyTinyRSS:n HTTP API ei ole saavutettavissa!" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" "TinyTinyRSS:n syötteen tilaaminen epäonnistui! Tarkista että annoit oikein " "syötteen osoitteen!" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "TinyTinyRSS:n syötteen poistaminen epäonnistui!" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" "Tämä TinyTinyRSS-versio ei tue syötteiden poistamista. Päivitä versioon %s " "tai uudempaan!" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" "Ei kyetty jäsentämään TinyTinyRSS:n API-rajapinnan palauttamaa JSON-" "rakennetta!" #: ../src/fl_sources/theoldreader_source.c:329 msgid "TheOldReader" msgstr "TheOldReader" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Avaa linkki _välilehdessä" #: ../src/webkit/liferea_web_view.c:176 msgid "Open Link In Browser" msgstr "Avaa linkki selaimessa" #: ../src/webkit/liferea_web_view.c:177 msgid "Open Link In External Browser" msgstr "Avaa linkki ulkoisessa selaimessa" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "Kirja_nmerkintälinkki osoitteessa %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Kopioi linkkisijainti" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "T_allenna kuva nimellä" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "_Kopioi kuvasijainti" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "T_allenna linkki nimellä" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "T_allenna kuva nimellä" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Uusi syöte..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "_Kopioi" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "_Kasvata tekstin kokoa" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Pienennä tekstin kokoa" #: ../glade/about.ui.h:1 msgid "About" msgstr "Lifereasta" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea on GTK+-pohjainen uutissyötteiden lukuohjelma" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Liferea-kotisivu" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Todennus" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "Käyttäjä_tunnus:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Salasana:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Avaa liitetiedosto" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Avaa liitetiedostotyyppi:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Mitä Liferean tulisi tehdä tälle liitetiedostolle? Kirjoita alle " "suoritettava komento. Liitetiedostojen verkko-osoite tarjotaan tämän " "komennon argumenttina:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Selaa" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Tee näin aina jatkossa tämäntyyppisille liitetiedostoille." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Lisää Google-lukijatili" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Kirjoita Google-lukijatiliasetuksesi." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Salasana" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_Käyttäjätunnus (sähköposti)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "0" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Katso otsikoita" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Otsikot" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Merkitse kaikki luetuiksi" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Merkitse kaikki luetuiksi" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Uusi kansio" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "Kan_sion nimi:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Luo uutiskori" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Uutiskorin nimi:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Syötteen lähde" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Lähteen tyyppi:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "Ve_rkko-osoite" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Komento" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Paikallinen tiedosto" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Valitse tiedosto..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "Läh_de:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Ladataan / jälkikäsitellään" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "_Älä käytä välityspalvelinta lataamiseen" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Käytä _muunnossuodatinta" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea voi lukea ei-tuettuja syötteitä ja hakemistoja käyttämällä ulkoisia " "suodatinliitännäisiä. Lisätietoja on Liferean käyttöohjeessa." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "M_uunna käyttäen:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Lähdevalinta" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Lisää lähdetyyppi, jonka haluat lisätä..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Lisää OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Määritä paikallinen tiedosto tai verkko-osoite, joka osoitttaa kelvolliseen " "OPML-syöteluetteloon." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Sijainti" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Valitse tiedosto" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Liferean asetukset" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Syötevälimuistin käsittely" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "Oletusa_rvoisesti tallennettava otsikkojen määrä per syöte:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Syötepäivitysasetukset" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Huomaa: Määrittele taajuus järkevästi. On tavallisesti kaistanleveyden " "tuhlausta kiertokysellä syötteitä useammin kuin kerran tunnissa." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "_Päivitä kaikki syötteet käynnistettäessä." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Oletusarvoinen syötteen _päivitystaajuus:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "1" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Syötteet" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Kansion näyttöasetukset" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "" "_Näytä kaikkien kansion sisältämien syötteiden otsikot, kun kansio valitaan." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "P_iilota luetut otsikot." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Syötekuvakkeet (Favicon-kuvakkeet)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Päivitä kaikki favicon-kuvakkeet nyt" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Kansiot" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Luetaan otsikkorivit" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "_Selaa otsikoita läpi näppäilemällä:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "_Oletusnäkymätila:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Webbi-integraatio" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "Läh_etä kirjanmerkit kohteeseen" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Sisäisen selaimen asetukset" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Avaa linkit Liferean _ikkunassa." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "Poista _Javascript käytöstä." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "Ota käyttöön s_elainliitännäiset." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Ulkoisen selaimen asetukset" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Selain:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Käyttöohje" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s verkko-osoitteelle)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Selain" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Työkalupalkkiasetukset" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "Piil_ota työkalupalkki." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Työk_alupalkkipainikkeen nimiöt:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Käyttöliittymä" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "HTTP-välityspalvelin" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "Tunnista _automaattisesti (GNOME tai ympäristö)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Ei välityspalvelinta" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Manuaaliasetus:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "Välityspalvelimen _konenimi:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "Välityspalvelimen _portti:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Käytä välityspalvelin-_todennusta" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Välityspalvelimen k_äyttäjätunnus:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "_Välityspalvelimen salasana:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Välityspalvelin" #: ../glade/prefs.ui.h:51 msgid "Privacy Settings" msgstr "Yksityisyysasetukset" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "Kerro sivustoille _etten halua minua seurattavan" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "Yksityisyys" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Ladataan liitetiedostoja" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "La_taa käyttäen" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Avaa liitetiedosto" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Liitetiedostot" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Syötteen ominaisuudet" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Syötteen nimi" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "Syötteen _nimi:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Päivitä väliaika" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Käytä oletusarvoista päivitystaajuutta." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_Syötteelle ominainen päivitystaajuus:" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Älä päivitä syötettä automaattisesti." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Tämän syötteen tarjoaja suosittelee päivitystaajuudeksi %d minuuttia." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Yleistä" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea voi lukea ei-tuettuja syötteitä ja hakemistoja käyttämällä ulkoisia " "suodatinliitännäisiä. Lisätietoja on Liferean käyttöohjeessa." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Välimuistin asetukset vaikuttavat siihen miten syötteiden sisältö tallentuu " "kun Liferea suljetaan. Merkityt otsikot tallentuvat aina." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "_Välimuistiasetusten oletusarvot" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Poista välimuisti käytöstä" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Rajoittamaton välimuisti" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "_Tallennettavien otsikoiden määrä:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Arkisto" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Käytä _HTTP-todennusta" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Lataa" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "L_ataa tämän syötteen liitteet automaattisesti." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "_Lataa uutislinkit automaattisesti asetetussa selaimessa kun valitaan " "artikkeleita." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "_Ohita tämän syötteen kommentit." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Merkitse ladatut otsikot luetuiksi." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Edistyneet ominaisuudet" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "Lisää Reedah-tili" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "Kirjoita Reedah-tiliasetuksesi." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Nimeä uudelleen" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "Uusi _nimi:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Etsintäkansion ominaisuudet" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "Haku_nimi:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Löydä kohteita, jotka täyttävät seuraavat kriteerit" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Mikä taha_nsa sääntö täsmää" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "K_aikkien sääntöjen on täsmättävä" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Monimutkaisempi haku" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "E_tsintäkansio..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Etsi kaikista syötteistä" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Lisäsäännöt..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Etsii annettua tekstiä kaikista syötteistä. Etsinnän tulokset näkyvät " "otsikkoluettelossa." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Etsi:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Kirjoita teksti, jota Liferea etsii joko uutisen otsikosta tai sisällöstä." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Lisätoiminnot..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Kirjoita webbisivusijainti käytettäväksi syötteen automaattitunnistuksessa " "tai siinä tapauksessa, että tiedät sen tarkan syötesijainnin." #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "Lisää TheOldReader-tili" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "Kirjoita TheOldReader-tiliasetuksesi." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Lisää Tiny Tiny RSS -tili" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "Kirjoita TinyTinyRSS-tiliasetuksesi." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "_Palvelimen verkko-osoite" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "Käyttäjä_tunnus" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Päivitä valvonta" #: ../glade/update_monitor.ui.h:2 msgid "Cancel All" msgstr "Peru kaikki" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Odottavat pyynnöt" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Ladataan nyt" #~ msgid "_Subscriptions" #~ msgstr "Uu_det syötteet" #~ msgid "Update _All" #~ msgstr "_Päivitä kaikki" #~ msgid "Updates all subscriptions." #~ msgstr "Päivittää kaikki syötteet." #~ msgid "Mark All As _Read" #~ msgstr "_Merkitse kaikki luetuiksi" #~ msgid "Marks read every item of every subscription." #~ msgstr "Merkitsee kaikkien syötteiden kaikki uutiset luetuiksi." #~ msgid "_Import Feed List..." #~ msgstr "_Tuo syöteluettelo..." #~ msgid "Imports an OPML feed list." #~ msgstr "Tuo OPML-muotoisen syöteluettelon." #~ msgid "_Export Feed List..." #~ msgstr "_Vie syöteluettelo..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Vie OPML-muotoisen syöteluettelon." #~ msgid "_Quit" #~ msgstr "_Lopeta" #~ msgid "_Feed" #~ msgstr "_Syöte" #~ msgid "Remove _All Items" #~ msgstr "Poist_a kaikki otsikot" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Poistaa kaikki otsikot valitusta syötteestä." #~ msgid "_Item" #~ msgstr "_Otsikko" #~ msgid "Previous Item" #~ msgstr "Edellinen otsikko" #~ msgid "Next Item" #~ msgstr "Seuraava otsikko" #~ msgid "_Next Unread Item" #~ msgstr "_Seuraava lukematon otsikko" #~ msgid "_View" #~ msgstr "_Näytä" #~ msgid "Increases the text size of the item view." #~ msgstr "Kasvattaa tekstin kokoa otsikkonäkymässä." #~ msgid "Decreases the text size of the item view." #~ msgstr "Pienentää tekstin kokoa otsikkonäkymässä." #~ msgid "_Tools" #~ msgstr "_Työkalut" #~ msgid "_Update Monitor" #~ msgstr "_Päivitä valvonta" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Näytä nykyisen päivitysjonon kaikkien syötteiden luettelo" #~ msgid "_Preferences" #~ msgstr "As_etukset" #~ msgid "Edit Preferences." #~ msgstr "Muokkaa asetuksia." #~ msgid "S_earch" #~ msgstr "_Etsi" #~ msgid "Search All Feeds..." #~ msgstr "Etsi kaikista syötteistä..." #~ msgid "Show the search dialog." #~ msgstr "Näyttää tai piilottaa etsintälaatikon." #~ msgid "_Help" #~ msgstr "_Ohje" #~ msgid "_Contents" #~ msgstr "Sisäl_tö" #~ msgid "View help for this application." #~ msgstr "Katso tämän sovelluksen opastetta." #~ msgid "_Quick Reference" #~ msgstr "_Pikaviite" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Katso Liferea-pikanäppäinten luetteloa." #~ msgid "_FAQ" #~ msgstr "_UKK" #~ msgid "View the FAQ for this application." #~ msgstr "Katso tämän sovelluksen Usein Kysyttyjä Kysymyksiä." #~ msgid "_About" #~ msgstr "Lifereasta" #~ msgid "Shows an about dialog." #~ msgstr "Näyttää tietoja Lifereasta." #~ msgid "_Normal View" #~ msgstr "_Normaalinäkymä" #~ msgid "Set view mode to mail client mode." #~ msgstr "Aseta näkymätilaksi sähköpostiasiakastila." #~ msgid "_Wide View" #~ msgstr "Le_veä näkymä" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Aseta näkymä käyttämään kolmea pystysuoraa paneelia." #~ msgid "_Combined View" #~ msgstr "Näytä yh_distettynä" #~ msgid "Set view mode to two pane mode." #~ msgstr "Aseta näkymätilaksi kahden paneelin tila." #~ msgid "_Reduced Feed List" #~ msgstr "P_iennenetty syöteluettelo" #~ msgid "Hide feeds with no unread items." #~ msgstr "" #~ "Jos valittu, vain lukemattomia otsikoita sisältävät syötteet näkyvät." #~ msgid "_New Subscription..." #~ msgstr "_Uusi syöte..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Lisää uuden syötteen syöteluetteloon." #~ msgid "Adds a folder to the feed list." #~ msgstr "Lisää kansion syöteluetteloon." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Lisää uuden etsintäkansion syöteluetteloon." #~ msgid "New _Source..." #~ msgstr "Uusi _lähde..." #~ msgid "Adds a new feed list source." #~ msgstr "Lisää uuden syöteluettelolähteen." #~ msgid "Adds a new news bin." #~ msgstr "Lisää uuden uutiskorin." #~ msgid "_Mark Items Read" #~ msgstr "_Merkitse luetuksi" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Merkitse valittujen syötteiden tai valitun kansion sisältämien syötteiden " #~ "otsikot luetuiksi." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Päivittää kaikki valitut syötteet, tai valitun kansion kaikki syötteet." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Avaa valitun syötteen ominaisuusikkunan." #~ msgid "_Remove" #~ msgstr "Po_ista" #~ msgid "Removes the selected subscription." #~ msgstr "Poistaa valitut syötteet." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Merkitse otsikko lukemattomaksi tai luetuksi." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Merkitse otsikko lukemattomaksi tai luetuksi." #~ msgid "R_emove" #~ msgstr "Poist_a" #~ msgid "Removes the selected item." #~ msgstr "Poistaa valitun otsikon." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Avaa otsikon linkin uudessa Liferea-selainvälilehdessä." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Avaa otsikon linkin Liferea-otsikkopaneelissa." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Avaa otsikon linkin asetusten mukaisessa ulkoisessa selaimessa." #~ msgid "_Fullscreen" #~ msgstr "K_okoruutunäyttö" #~ msgid "Browse at full screen" #~ msgstr "Selaa kokoruutunäytöllä" #~ msgid "_Work Offline" #~ msgstr "T_oimi yhteydettä" #~ msgid "_Update All" #~ msgstr "_Päivitä kaikki" #~ msgid "_Show Liferea" #~ msgstr "Näy_tä Liferea" #~ msgid "InoReader" #~ msgstr "InoReader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Huomaa: Käyttäjätunnus ja salasana tallentuvat salaamattomina Liferean " #~ "syöteluetteloon." #~ msgid "Add InoReader Account" #~ msgstr "Lisää InoReader-tili" #~ msgid "Please enter your InoReader account settings." #~ msgstr "Kirjoita InoReader-tiliasetuksesi." #~ msgid "Plugins" #~ msgstr "Lisäosat" #~ msgid "normal view" #~ msgstr "normaalinäkymä" #~ msgid "wide view" #~ msgstr "leveä näkymä" #~ msgid "combined view" #~ msgstr "yhdistelmänäkymä" #~ msgid "No comments yet." #~ msgstr "Ei vielä kommentteja." #~ msgid "Refresh" #~ msgstr "Verestä" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, Linux-syötelukija" #~ msgid "For more information, please visit http://lzone.de/liferea/" #~ msgstr "Vieraile lisätietoja varten osoitteessa http://lzone.de/liferea/" #~ msgid "Liferea is now online" #~ msgstr "Liferea on nyt yhteydessä verkkoon." #~ msgid "Work Offline" #~ msgstr "Toimi yhteydettä" #~ msgid "Work Online" #~ msgstr "Toimi verkossa" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "" #~ "Tämä valitsin sallii sinun ottaa syötteen päivityksen pois käytöstä." #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - Linux-uutislukija" #~ msgid "" #~ "

      Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

      You can add new subscriptions

      • From main menu " #~ "'Subscription' -> 'New Subscription'
      • By dropping feed links " #~ "into the subscription list
      • By right clicking links and choosing " #~ "'Subscribe' within Liferea

      " #~ msgstr "" #~ "

      Tervetuloa Lifereaan, työpöytäuutiskerääjään " #~ "verkkouutisyötteitä varten.

      Voit lisätä uuden " #~ "syötteen

      • Päävalikosta 'Uudet syötteet > Uusi syöte...'
      • Pudottamalla syötelinkin syöteluetteloon
      • Napsauttamalla " #~ "hiiren kakkospainikkeella ja valitsemalla 'Uusi > Uusi syöte...' " #~ "Liferea-ohjelman sisällä

      " #~ msgid "Browser default" #~ msgstr "Selaimen oletus" #~ msgid "Existing window" #~ msgstr "Olemassa oleva ikkuna" #~ msgid "New window" #~ msgstr "Uusi ikkuna" #~ msgid "New tab" #~ msgstr "Uusi välilehti" #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "Integroi viestintävalikon kanssa (inidikaattori)" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Sulje sovellus, älä minimoi viestivalikkoon" #~ msgid "Start minimized to the messaging menu" #~ msgstr "Käynnistä minimoituna viestivalikkoon" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d uusi otsikko" #~ msgstr[1] "%d uutta otsikkoa" #~ msgid "No new items" #~ msgstr "Ei uusia otsikkoja" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d uusi otsikko" #~ msgstr[1] "" #~ "%s\n" #~ "%d uutta otsikkoa" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Ei uusia otsikoita" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Virheellinen Atom-syöte: tuntematon tekijä" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Integroi Google-lukijatilisi syöteluettelo. Liferea esittää Google-" #~ "lukijasyötteesi, ja synkronoi syöteluettelosi ja lukijaluettelosi." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Integroi Blogrolls tai Planets syöteluetteloosi. Liferea lisää ja poistaa " #~ "syötteet automaattisesti OPML-lähdeasiakirjan muutosten mukaan." #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Integroi Tiny Tiny RSS 1.5+ -tilisi syöteluettelo. Liferea esittää tt-rss-" #~ "syötteesi, ja synkronoi syöteluettelosi ja lukuluettelosi." #~ msgid "This feed does not exist anymore!" #~ msgstr "Tätä syötettä ei ole enää olemassa!" #~ msgid "This news entry has no headline" #~ msgstr "Uutisella ei ole otsikkoa" #~ msgid "Visit" #~ msgstr "Vieraile" #~ msgid "Open feed" #~ msgstr "Avaa syöte" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "%s on %d päivitys" #~ msgstr[1] "%s on %d päivitystä" #~ msgid "Feed Update" #~ msgstr "Syötepäivitys" #~ msgid "Show details" #~ msgstr "Näytä yksityiskohdat" #~ msgid "Online/Offline Button" #~ msgstr "Verkko/Erillissovellus -painike" #~ msgid " " #~ msgstr " " #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "_Pakota ponnahdusikkunailmoitus tälle syötteelle." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_Älä koskaan tee ponnahdusikkunailmoitusta tälle syötteelle." #~ msgid "Create Search Engine Feed" #~ msgstr "Luo hakukonesyöte" #~ msgid "enter any search string you want" #~ msgstr "Kirjoita sanat joita haluat etsiä" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "Tulosten e_nimmäismäärä:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Huomaa: Liferea tuottaa syötteen, jota käytetään kyselemään tietyn " #~ "hakumerkkijonon hakukone-etsinnän tuloksia. Voit pitää tämän syötteen " #~ "pysyvänä ja päivittää sitä kuten mitä tahansa syötettä." #~ msgid "_Open link in:" #~ msgstr "_Linkkien avaus:" #~ msgid "Notification Settings" #~ msgstr "Ilmoitusasetukset" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Näytä uudet otsikot sisältävä _ponnahdusikkuna." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Näytä t_ilakuvake paneelin ilmoitusalueessa (järjestelmäpalkki)." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "_Näytä kuvakkeiden määrä järjestelmäpalkissa." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "Sulj_e sovellus, älä minimoi järjestelmäkuvakkeeseen." #~ msgid "_Start in tray icon." #~ msgstr "Käynni_stä järjestelmäkuvakkeessa." #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Copyright © 2003-2012\n" #~ "Liferea-ryhmä\n" #~ msgid "Download and view feeds" #~ msgstr "Lataa ja katso syötteitä" #~ msgid "You may want to validate the feed using" #~ msgstr "Saatat ehkä haluta tarkastaa syötteen oikeellisuuden käyttäen" #~ msgid "bookmark" #~ msgstr "kirjanmerkki" #~ msgid "comments" #~ msgstr "kommentit" #~ msgid "flag" #~ msgstr "lippu" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Liitteen lataaminen EPÄONNISTUI: ”%s”" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Liitteen lataaminen päättyi: ”%s”" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Tämä Liferea-versio käyttää uutta välimuistimuotoa ja on tuonut sinun " #~ "syötevälimuistisi. Välimuistisisältö kohteessa %s poistettiin " #~ "automaattisesti. Poista tämä hakemisto manuaalisesti sen jälkeen kun olet " #~ "varma, että tuonti onnistui!" #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Siirtyy seuraavaan lukemattomaan otsikkoon, mahdollisesti seuraavassa " #~ "syötteessä." #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Lataaminen EPÄONNISTUI: ”%s”" #~ msgid "Download finished." #~ msgstr "Lataus valmis." #~ msgid "Launch Item In _Tab" #~ msgstr "Avaa otsikko _välilehdessä" #~ msgid "_Launch Item In Browser" #~ msgstr "_Avaa otsikko selaimessa" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Kopioi otsikkon verkko-osoite leikepöydälle" #~ msgid "Choose download directory" #~ msgstr "Valitse tallennuskansio" #~ msgid "Liferea Sync %s@%s" #~ msgstr "Liferea Sync %s@%s" #~ msgid "Downloading Enclosure" #~ msgstr "Ladataan liitetiedostoja" #~ msgid "Sync" #~ msgstr "Synkronoi" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "Ota käyttöön paikallin_en LAN-synkronointi" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Manuaalinen:\n" #~ "(%s verkko-osoitteelle)" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "_Välitä verkko-osoite ja älä lataa liitettä." #~ msgid "_Save downloads in" #~ msgstr "T_allenna lataukset kansioon" #~ msgid "_Service Name" #~ msgstr "_Palvelunimi" #~ msgid "link cosmos" #~ msgstr "linkki cosmos" #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "Tulosta liitännäisten lataamisen vianjäljitysviestejä" #~ msgid "Liferea seems to be running already!" #~ msgstr "Liferea näyttää jo olevan käynnissä!" #~ msgid "Update status" #~ msgstr "Päivitystila" #~ msgid "was updated" #~ msgstr "päivitetty" #~ msgid "was not updated" #~ msgstr "ei ole päivitetty" #~ msgid "The orientation of the tray." #~ msgstr "Palkin suuntaus." #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "_Script Manager" #~ msgstr "_Skriptihallinta" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Salli asettaa ja muokata LUA-kaapelinirroitusskriptejä" #~ msgid "Search With ..." #~ msgstr "Etsi Feedsteristä..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d etsintätulos kohteelle \"%s\"" #~ msgstr[1] "%d etsintätulosta kohteelle \"%s\"" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d etsintätulos" #~ msgstr[1] "%d etsintätulosta" #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "Otsikkoluettelo sisältää nyt kaikki otsikot, jotka täsmäävät määriteltyyn " #~ "hakumalliin. Jos haluat tallentaa tämän etsintätuloksen pysyvästi, voit " #~ "napsauttaa ”Hakukansio”-painiketta etsintäikkunassa ja Liferea lisää " #~ "etsintäkansion syöteluetteloosi." #~ msgid "You have to select a feed entry" #~ msgstr "Syötteen otsikko on valittava" #~ msgid "(empty)" #~ msgstr "(tyhjä)" #~ msgid "_Properties..." #~ msgstr "_Ominaisuudet..." #~ msgid "Update out-dated feeds" #~ msgstr "Päivitä vanhentuneet syötteet" #~ msgid "Force update of all feeds" #~ msgstr "Pakota kaikkien syötteiden päivitys" #~ msgid "No feed update at all" #~ msgstr "Älä päivitä syötettä ollenkaan" #~ msgid "startup" #~ msgstr "käynnistys" #~ msgid "feed updated" #~ msgstr "syöte päivitetty" #~ msgid "feed added" #~ msgstr "syöte lisätty" #~ msgid "item selected" #~ msgstr "otsikko valittu" #~ msgid "feed selected" #~ msgstr "otsikko valittu" #~ msgid "item unselected" #~ msgstr "otsikko valitsematon" #~ msgid "feed unselected" #~ msgstr "syöte valitsematon" #~ msgid "shutdown" #~ msgstr "sammuttaminen" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Skriptaustuki ei ole käytettävissä!" #~ msgid "Script Name" #~ msgstr "Skriptinimi" #~ msgid "No script selected!" #~ msgstr "Yhtään skriptiä ei ole valittu!" #~ msgid "Create a new search feed." #~ msgstr "Luo uusi etsintäsyöte." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea ei kykene näyttämään tämän otsikon sisältöä." #~ msgid "

      View this item's content.

      " #~ msgstr "

      Katso tämän otsikon sisältöä.

      " #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "Integroi Bloglines-tilisi syöteluettelo. Liferea esittää Bloglines-" #~ "syötteesi syöteluettelossa kirjoitussuojattuna alipuuna." #~ msgid "feedlist.opml" #~ msgstr "feedlist.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s on %d uusi / päivitetty otsikko\n" #~ msgstr[1] "%s on %d uutta / päivitettyä otsikkoa\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Feed Source" #~ msgstr "Syötteen lähde" #~ msgid "Hook" #~ msgstr "Kytke kaapeli" #~ msgid "Registered Scripts" #~ msgstr "Rekisteröidyt skriptit" #~ msgid "Script Code" #~ msgstr "Skriptikoodi" #~ msgid "text/plain" #~ msgstr "text/plain" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Jos kansiossa on paljon syötteitä, sen näyttäminen voi kestää kauan " #~ "kun tämä valitsin on käytössä." #~ msgid "Downloading Enclosures" #~ msgstr "Ladataan liitetiedostoja" #~ msgid "Feed Cache Handling" #~ msgstr "Syötevälimuistin toiminta" #~ msgid "Feed Name" #~ msgstr "Syötteen nimi" #~ msgid "Feed Update Settings" #~ msgstr "Syötteen päivitysasetukset" #~ msgid "HTTP Proxy Server" #~ msgstr "HTTP-välityspalvelin" #~ msgid "Opening Enclosures" #~ msgstr "Avataan liitetiedostoja" #~ msgid "Reading Headlines" #~ msgstr "Luetaan otsikoita" #~ msgid "Toolbar Settings" #~ msgstr "Työkalupalkkiasetukset" #~ msgid "Update Interval" #~ msgstr "Päivitystaajuus" #~ msgid "Web Integration" #~ msgstr "Webbi-integraatio" #~ msgid "Add Script" #~ msgstr "Lisää skripti" #~ msgid "At _startup:" #~ msgstr "_Käynnistyessä:" #~ msgid "Create new script" #~ msgstr "Luo uusi skripti" #~ msgid "Exec Command" #~ msgstr "Exec-komento" #~ msgid "Reuse existing script" #~ msgstr "Käytä olemassa oleva skripti uudelleen" #~ msgid "Script Manager" #~ msgstr "Skriptihallinta" #~ msgid "Search _Link Cosmos with" #~ msgstr "Etsintä_linkki Cosmos:" #~ msgid "Count" #~ msgstr "Lukumäärä" #~ msgid "Attention Profile" #~ msgstr "Huomioprofiili" #~ msgid "http://lzone.de/liferea/" #~ msgstr "http://lzone.de/liferea/" #~ msgid "internal error! time conversion error! mktime failed!\n" #~ msgstr "Sisäinen virhe: aikatietojen muunnosvirhe, mktime() ei toiminut.\n" #~ msgid "Invalid ISO8601 date format! Ignoring information!\n" #~ msgstr "" #~ "Virheellinen ISO8601-aikamuoto: -kentän tiedot jäävät " #~ "huomiotta.\n" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "" #~ "Odottamaton merkkisarjan loppu tai vioittunutta UTF-8 merkkikoodausta. " #~ "Osa merkeistä jää pois." #~ msgid "" #~ "

      Could not determine the feed type. Please check that it is valid and in a supported format.

      " #~ msgstr "" #~ "

      Syötteen tyypin määrittäminen ei onnistunut. Tarkista, että syöte on " #~ "kelvollinen ja tuettua muotoa.

      " #~ msgid "" #~ "Error while reading cache file \"%s\" ! Cache file could not be loaded!" #~ msgstr "" #~ "Virhe välivarastotiedoston \"%s\" lukemisessa. Välivarastotiedoston " #~ "lataaminen ei onnistunut." #~ msgid "" #~ "

      XML error while parsing cache file! Feed cache file \"%s\" could not " #~ "be loaded!

      " #~ msgstr "" #~ "

      XML-virhe välivarastotiedoston lukemisessa! Välivarastoitua " #~ "syötetiedostoa \"%s\" ei voitu ladata.

      " #~ msgid "

      \"%s\" is no valid cache file! Cannot read cache file!

      " #~ msgstr "" #~ "

      \"%s\" ei ole kelvollinen välivarastotiedosto. Sen lukeminen ei " #~ "onnistu.

      " #~ msgid "There were errors while parsing cache file \"%s\"" #~ msgstr "Välivarastotiedoston \"%s\" jäsentämisessä oli ongelmia" #~ msgid "user defined command" #~ msgstr "muu komento" #~ msgid "Access Forbidden" #~ msgstr "Käyttö kielletty" #~ msgid "URL is invalid" #~ msgstr "Verkko-osoite on virheellinen" #~ msgid "Hostname could not be found" #~ msgstr "Konenimeä ei löytynyt" #~ msgid "Network connection was refused by the remote host" #~ msgstr "Etäkone hylkäsi yhteyden muodostamisen" #~ msgid "Remote host did not finish sending data" #~ msgstr "Etäkone ei lähettänyt kaikkia tietoja" #~ msgid "Too many HTTP redirects were encountered" #~ msgstr "Liian monta HTTP-uudelleenohjausta havaittu" #~ msgid "Remote host sent an invalid response" #~ msgstr "Etäkone lähetti virheellisen vastauksen" #~ msgid "Webserver's authentication method incompatible with Liferea" #~ msgstr "WWW-palvelimen todennustapa ei ole yhteensopiva Liferean kanssa" #~ msgid "" #~ "
      You may want to validate the feed using Voit tarkistaa syötteen oikeellisuuden FeedValidator." #~ msgstr "\">FeedValidator-palvelun avulla." #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "" #~ "Syötelinkin automaattinen tunnistaminen ei onnistunut. Syötelinkkejä ei " #~ "löydy." #~ msgid "_Program" #~ msgstr "_Ohjelma" #~ msgid "Updates all subscriptions. This does not update OCS directories." #~ msgstr "Päivittää kaikki syötteet, lukuun ottamatta OCS-kansioita." #~ msgid "" #~ "Marks all items of the current selected subscription or all of " #~ "subscriptions of the selected folder as read." #~ msgstr "" #~ "Merkitse kaikki valitun syötteen tai kaikkien valitun kansion syötteiden " #~ "otsikot luetuiksi." #~ msgid "New _VFolder..." #~ msgstr "Uusi _v-kansio..." #~ msgid "Toggles the item flag." #~ msgstr "Merkitsee otsikon tai poistaa merkinnän." #~ msgid "Remove _Selected" #~ msgstr "Poi_sta valitut" #~ msgid "Toggles the item list mode between condensed and normal mode." #~ msgstr "Näyttää otsikkoluettelon joko tiiviisti tai tavallisesti." #~ msgid "_Search" #~ msgstr "_Etsi" #~ msgid "single item view" #~ msgstr "yhden otsikon katselu" #~ msgid "label133" #~ msgstr "label133" #~ msgid "_Limit cache to" #~ msgstr "R_ajoitettu välivarasto: " #~ msgid "items." #~ msgstr "otsikkoa." #~ msgid "Feed Loading Settings" #~ msgstr "Syötteiden lataus" #~ msgid "Optimize for _memory usage." #~ msgstr "Optimoi _muistin käytön kannalta." #~ msgid "Optimize for _speed." #~ msgstr "Optimoi _nopeuden kannalta." #~ msgid "Date Column Settings" #~ msgstr "Päiväyssarake" #~ msgid "Display only time" #~ msgstr "Näytä vain aika" #~ msgid "Display date and time" #~ msgstr "Näytä päiväys ja aika" #~ msgid "User defined format:" #~ msgstr "Muu muoto:" #~ msgid "" #~ "for expert users: specify a time format string, consult the strftime() " #~ "manpage for the format codes" #~ msgstr "" #~ "Osaavat käyttäjät: ajan muotoilumerkkijono voi sisältää strftime()-" #~ "muotoilukoodeja, katso lisätietoja strftime:n manuaalisivuilta" #~ msgid "Please restart Liferea for changes to take effect." #~ msgstr "" #~ "Muutokset tulevat voimaan, kun Liferea käynnistetään uudelleen." #~ msgid " " #~ msgstr " " #~ msgid "Lower Right" #~ msgstr "Alaoikea" #~ msgid "Upper Right" #~ msgstr "Yläoikea" #~ msgid "Upper Left" #~ msgstr "Ylävasen" #~ msgid "Lower Left" #~ msgstr "Alavasen" #~ msgid "Popup Placement" #~ msgstr "Ponnahdusikkunan sijainti" #~ msgid "Show Menu _And Toolbar" #~ msgstr "Näytä valikko _ja työkalupalkki" #~ msgid "Show _Menu Only" #~ msgstr "Näytä vain _valikko" #~ msgid "Show _Toolbar Only" #~ msgstr "Näytä vain _työkalupalkki" #~ msgid "" #~ "Liferea reuses the GNOME proxy settings. If you use GNOME you can " #~ "change these settings in the GNOME Control Center." #~ msgstr "" #~ "Liferea seuraa Gnomen välityspalvelinasetuksia. Jos käytät Gnomea " #~ "näitä asetuksia voi muuttaa hallintakeskuksesta." #~ msgid "_Enable Proxy" #~ msgstr "Käytä _välityspalvelinta" #~ msgid "Browse" #~ msgstr "Selaa" #~ msgid "Liferea Homepage" #~ msgstr "Liferean kotisivu" #~ msgid "" #~ "Copyright (c) 2003-2005\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgstr "" #~ "Copyright © 2003-2005\n" #~ "Lars Lindner ja\n" #~ "Nathan J. Conrad \n" #~ msgid "" #~ "Code, Patches, Debugging\n" #~ "\n" #~ "James Doherty <...>\n" #~ "Jeremy Messenger \n" #~ "John McKnight <...>\n" #~ "Tomasz Maka \n" #~ "Karl Soderstrom \t\n" #~ "Christophe Barbe \n" #~ "Juho Snellman \n" #~ "Roshan Revankar \n" #~ "Oliver Feiler \n" #~ "Niklas Morberg \n" #~ "Johannes Schlueter \n" #~ "Pierre Phaneuf \n" #~ "ahmed el-helw \n" #~ "James Bowes \n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary \n" #~ "Christoph Hohmann \n" #~ "Raphael Slinckx \n" #~ "and many more...\n" #~ "\n" #~ "Code from other projects\n" #~ "\n" #~ "Anders Carlsson (tray icon support)\n" #~ "Philippe Martin, Brion Vibber (favicon support)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)" #~ msgstr "" #~ "Ohjelmointi, korjaukset ja vianetsintä\n" #~ "\n" #~ "James Doherty <...>\n" #~ "Jeremy Messenger \n" #~ "John McKnight <...>\n" #~ "Tomasz Maka \n" #~ "Karl Soderstrom \t\n" #~ "Christophe Barbe \n" #~ "Juho Snellman \n" #~ "Roshan Revankar \n" #~ "Oliver Feiler \n" #~ "Niklas Morberg \n" #~ "Johannes Schlueter \n" #~ "Pierre Phaneuf \n" #~ "ahmed el-helw \n" #~ "James Bowes \n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary \n" #~ "Christoph Hohmann \n" #~ "Raphael Slinckx \n" #~ "ja monia muita...\n" #~ "\n" #~ "Koodia muista projekteista\n" #~ "\n" #~ "Anders Carlsson (tray icon support)\n" #~ "Philippe Martin, Brion Vibber (favicon support)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)" #~ msgid "Contributors" #~ msgstr "Myötävaikuttajat" #~ msgid "Translation" #~ msgstr "Käännökset" #~ msgid "Name" #~ msgstr "Nimi" #~ msgid "" #~ "Note: Items are added to the vfolder if at least one additive rule\n" #~ "matches. They are removed if at least one removing rule matches." #~ msgstr "" #~ "Huomaa: Otsikot sisältyvät v-kansioon, jos yksikin sisällyttävä sääntö\n" #~ "täsmää. Samoin yksikin estävä sääntö poistaa otsikon v-kansiosta." #~ msgid "Rules" #~ msgstr "Säännöt" #~ msgid "Search for" #~ msgstr "Etsi" #~ msgid "Saves this search as a VFolder, which will appear in the feed list." #~ msgstr "Tallenna haku v-kansiona, joka näkyy syöteluettelossa." #~ msgid "Item:" #~ msgstr "Otsikko:" #~ msgid "date" #~ msgstr "päiväys" #~ msgid " --help Print this help and exit" #~ msgstr " --help Näytä tämä viesti ja lopeta" #~ msgid "The --mainwindow-state argument must be given a parameter.\n" #~ msgstr "Valitsimelle --mainwindow-state täytyy antaa parametri.\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "Valitsimelle --session täytyy antaa parametri.\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "Liferealle annettiin tuntematon parametri: %s\n" #~ msgid "" #~ "Another copy of Liferea was found to be running. Please use it instead. " #~ "If there is no other copy of Liferea running, please delete the \"~/." #~ "liferea/lock\" lock file." #~ msgstr "" #~ "Toinen kopio Lifereasta on jo käynnissä, käytä mieluiten sitä. Jos näin " #~ "kuitenkaan ei ole, poista lukitustiedosto \"~/.liferea/lock\"." #~ msgid "feed generator" #~ msgstr "syötteen tuottaja" #~ msgid "contributors" #~ msgstr "myötävaikuttajat" #~ msgid "language" #~ msgstr "kieli" #~ msgid "feed published on" #~ msgstr "julkaisuaika" #~ msgid "managing editor" #~ msgstr "toimituspäällikkö" #~ msgid "webmaster" #~ msgstr "web-vastaava" #~ msgid "report errors to" #~ msgstr "virhevastaava" #~ msgid "original source" #~ msgstr "alkuperäinen lähde" #~ msgid "original time" #~ msgstr "alkuperäinen aika" #~ msgid "license" #~ msgstr "lisenssi" #~ msgid "type" #~ msgstr "tyyppi" #~ msgid "format" #~ msgstr "muoto" #~ msgid "identifier" #~ msgstr "tunniste" #~ msgid "source" #~ msgstr "lähde" #~ msgid "coverage" #~ msgstr "selostus" #~ msgid "Cookie for %s has expired!" #~ msgstr "Lähteen %s eväste on vanhentunut." #~ msgid "internal OCS namespace parsing error!" #~ msgstr "sisäinen OCS-nimiavaruuden jäsennysvirhe." #~ msgid "no namespace handler for <%s:%s>!\n" #~ msgstr "nimiavaruuden <%s:%s> käsittelijä puuttuu!\n" #~ msgid "

      Could not find RDF header!

      " #~ msgstr "

      RDF-otsikkoa ei löytynyt.

      " #~ msgid "

      Could not find OPML header!

      " #~ msgstr "

      OPML-otsikkoa ei löytynyt.

      " #~ msgid "

      Could not find Atom/Echo/PIE header!

      " #~ msgstr "

      Atom/Echo/PIE-otsikkoa ei löytynyt.

      " #~ msgid "

      Could not find RDF/RSS header!

      " #~ msgstr "

      RDF/RSS-otsikkoa ei löytynyt.

      " #~ msgid "does match" #~ msgstr "täsmää" #~ msgid "does not match" #~ msgstr "ei täsmää" #~ msgid "Note: Using the subscriptions filter disables drag & drop" #~ msgstr "" #~ "Huomaa: syötteiden suodattaminen estää hiirellä vetämisen ja pudottamisen" #~ msgid "You must select a feed entry" #~ msgstr "Jokin syöte täytyy valita" #~ msgid "You must select a feed entry." #~ msgstr "Jokin syöte täytyy valita." #~ msgid "A folder must be selected." #~ msgstr "Jokin kansio täytyy valita." #~ msgid "" #~ "internal error! unknown entry type! cannot display appropriate icon!\n" #~ msgstr "" #~ "Sisäinen virhe: tuntematon otsikon tyyppi, sopivaa kuvaketta ei voi " #~ "näyttää.\n" #~ msgid "" #~ "\n" #~ "Trying to load the Mozilla browser module... Note that this\n" #~ "might not work with every Mozilla version. If you have problems\n" #~ "and Liferea does not start, try to set MOZILLA_FIVE_HOME to\n" #~ "another Mozilla installation or delete the gconf configuration\n" #~ "key /apps/liferea/browser-module!\n" #~ "\n" #~ msgstr "" #~ "\n" #~ "Mozilla-selainmoduuli latautuu... Tämä ei välttämättä onnistu\n" #~ "kaikilla Mozillan versioilla. Jos ongelmia ilmenee ja Liferea\n" #~ "ei käynnisty, yritä asettaa MOZILLA_FIVE_HOME-ympäristömuuttujan\n" #~ "arvoksi toinen Mozillan asennushakemisto tai poista avain\n" #~ "/apps/liferea/browser-module Gconf-asetuksista.\n" #~ "\n" #~ msgid "" #~ "Failed to open HTML widget module (%s) specified in configuration!\n" #~ "%s\n" #~ msgstr "" #~ "Asetuksissa määritellyn HTML-komponentin moduulin (%s) lataaminen ei " #~ "onnistunut.\n" #~ "%s\n" #~ msgid "Htmlview API mismatch!" #~ msgstr "Htmlview-API ei täsmää." #~ msgid "Detected module is not a valid htmlview module!" #~ msgstr "Valittu moduuli ei ole kelvollinen Htmlview-moduuli." #~ msgid "Cannot load HTML widget module (%s)!" #~ msgstr "HTML-komponentin moduulia (%s) ei voi ladata." #~ msgid "Available browser modules (%s):\n" #~ msgstr "Mahdolliset selainmoduulit (%s):\n" #~ msgid "Loading configured browser module (%s)!\n" #~ msgstr "Määritelty selainmoduuli (%s) latautuu.\n" #~ msgid "No browser module configured!\n" #~ msgstr "Selainmoduulia ei ole määritelty.\n" #~ msgid "trying to load browser module %s (%s)\n" #~ msgstr "selainmoduuli %s (%s) latautuu\n" #~ msgid "" #~ "Sorry, I was not able to load any installed browser modules! Try the --" #~ "debug-all option to get debug information!" #~ msgstr "" #~ "Mikään asennetuista selainmoduuleista ei latautunut. Etsi vikaa " #~ "käyttämällä --debug-valitsimia." #~ msgid "New Feed" #~ msgstr "Uusi syöte" #~ msgid "Next Unread" #~ msgstr "Seuraava lukematon" #~ msgid "Mark As Read" #~ msgstr "Merkitse luetuksi" #~ msgid "Update All" #~ msgstr "Päivitä kaikki" #~ msgid "Liferea notification" #~ msgstr "Liferean ilmoitus" #~ msgid "/_New/New _Subscription..." #~ msgstr "/_Uusi/Uusi _syöte..." #~ msgid "/_New/New F_older..." #~ msgstr "/_Uusi/Uusi _kansio..." #~ msgid "/_New/New _VFolder..." #~ msgstr "/_Uusi/Uusi _v-kansio..." #~ msgid "/_Properties..." #~ msgstr "/_Ominaisuudet..." #~ msgid "/_Delete Folder" #~ msgstr "/Poista k_ansio" #~ msgid "/Toggle _Read Status" #~ msgstr "/Merkitse _luetuksi tai lukemattomaksi" #~ msgid "/Toggle Item _Flag" #~ msgstr "/_Merkitse otsikko tai poista merkintä" #~ msgid "/_Next Unread Item" #~ msgstr "/_Seuraava lukematon otsikko" #~ msgid "/_Increase Text Size" #~ msgstr "/K_asvata tekstin kokoa" #~ msgid "/_Decrease Text Size" #~ msgstr "/_Pienennä tekstin kokoa" #~ msgid "/Toggle _Online|Offline" #~ msgstr "/_Toimi verkossa|yhteydettä" #~ msgid "/_Preferences..." #~ msgstr "/_Asetukset..." #~ msgid "/_Show Window" #~ msgstr "/_Näytä ikkuna" #~ msgid "Update only feeds scheduled for updates" #~ msgstr "Päivitä vain ajastetut syötteet" #~ msgid "Reset feed update timers (Update no feeds)" #~ msgstr "Nollaa päivitysajastimet, älä päivitä" #~ msgid "Please do a search first!" #~ msgstr "Etsi ensin tekstiä." #~ msgid "New VFolder" #~ msgstr "Uusi v-kansio" #~ msgid "URL" #~ msgstr "URL" #~ msgid "" #~ "The included HTML tag is not supported with GtkHTML2.\n" #~ "Included Plugins might not be displayed." #~ msgstr "" #~ "Sisällytetty \"\" HTML-tagi ei ole tuettu GtkHTML2:ssa.\n" #~ "Sisällytetyt liitännäiset eivät välttämättä näy." #~ msgid "Toggle Search Box" #~ msgstr "Etsintälaatikko" #~ msgid " --iconify Start the program iconified" #~ msgstr " --iconify Käynnistä ohjelma pienennettynä" #~ msgid "http://lzone.de/liferea/help/help" #~ msgstr "http://lzone.de/liferea/help/help" #~ msgid ".rdf" #~ msgstr ".rdf" #~ msgid "There were errors while parsing a feed" #~ msgstr "Syötteen lukemisessa tapahtui virheitä" #~ msgid "" #~ "There were errors while parsing this feed. The following error occurred:" #~ "
      %s" #~ msgstr "" #~ "Tämän syötteen jäsentämisessä oli virheitä. Seuraavat virheet ilmenivät:" #~ "
      %s" #~ msgid "" #~ "There were errors while filtering this feed. The following error occurred:" #~ "
      %s
      " #~ msgstr "" #~ "Tämän syötteen jäsentämisessä oli virheitä. Seuraavat virheet ilmenivät:" #~ "
      %s
      " #~ msgid "" #~ "Starts a search for all items that do match the given search string " #~ "either in title or content." #~ msgstr "" #~ "Etsii kaikki otsikot, joiden nimi tai sisältö täsmää annettuihin " #~ "hakusanoihin." #~ msgid "Close search" #~ msgstr "Sulje etsintä" #~ msgid "" #~ "_Load feeds from disk when needed. Searching can \n" #~ "be slow if you have a lot of feeds." #~ msgstr "" #~ "_Lataa syötteet levyltä tarvittaessa. Tämä hidastaa\n" #~ "etsimistä jos syötteitä on paljon." #~ msgid "" #~ "_Keep all feeds loaded. This may improve speed \n" #~ "(especially when searching) but can cause a \n" #~ "significant memory footprint if you have a lot \n" #~ "of feeds!" #~ msgstr "" #~ "Säilytä syötteet _muistissa. Tämä nopeuttaa\n" #~ "(etenkin etsintää) mutta saattaa viedä paljon\n" #~ " muistia jos syötteitä on paljon." #~ msgid "" #~ "Liferea displays feeds' content using various HTML renderers. Depending " #~ "on which renderers are installed on your computer, different options will " #~ "be available. Restart Liferea for changes to take effect." #~ msgstr "" #~ "Liferea näyttää syötteiden sisällön jollakin HTML-piirtimellä. " #~ "Käytettävissä olevat piirtimet riippuvat siitä, mitä tietokoneelle on " #~ "asennettu. Liferea täytyy käynnistää uudelleen jotta nämä asetukset " #~ "tulevat voimaan." #~ msgid "enclosed file: %s" #~ msgstr "liitetiedosto: %s" #~ msgid "Invalid RFC822 date format! Ignoring date information!\n" #~ msgstr "Virheellinen RFC822-aikamuoto: aikatiedot jäävät huomiotta.\n" #~ msgid "Filter Feeds Without Unread Headlines" #~ msgstr "Suodata jo kokonaan luetut syötteet." #~ msgid "Headline Display" #~ msgstr "Otsikoiden näyttö" #~ msgid "URL points to permanent redirect, updating with new location..." #~ msgstr "" #~ "URL osoittaa pysyvään uudelleenohjaukseen, päivitetään uusi sijainti..." liferea-1.12.7/po/fr.po000066400000000000000000001717131352135647700146250ustar00rootroot00000000000000# Liferea French translation. # Copyright (C) 2003 Stéphane Jourdan # Copyright (C) 2004 Antoine Reversat # Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Vincent Lefèvre # This file is distributed under the same license as the Liferea package. # Stéphane Jourdan , 2003. # Antoine Reversat , 2004. # Vincent Lefèvre , 2004-2011. # Guillaume Bernard , 2017-2018 # msgid "" msgstr "" "Project-Id-Version: Liferea 1.8\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2018-03-22 11:30+0100\n" "Last-Translator: Guillaume Bernard \n" "Language-Team: français <>\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: Poedit 2.0.6\n" #: ../liferea.appdata.xml.in.h:1 msgid "RSS feed reader" msgstr "Lecteur de flux RSS" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" "Liferea est l’abréviation de Linux Feed Reader. C’est un agrégateur de flux " "pour sites web. Il gère un certain nombre de formats de flux dont RSS/RDF, " "CDF et ATOM. D’autres lecteurs de flux existent mais soit ils ne sont pas " "disponibles pour Linux, soit ils nécessitent beaucoup de bibliothèques " "externes pour être installés. Liferea essaie de combler ce manque en créant " "un agrégateur de flux rapide, facile à utiliser et à installer pour GTK/" "Gnome." #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "Fonctionnalités importantes :" #: ../liferea.appdata.xml.in.h:4 msgid "Read articles when offline" msgstr "Lire les articles hors-ligne" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "Synchroniser avec TheOldReader" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "Synchroniser avec TinyTinyRSS" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "Synchroniser avec les InoReader" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "Synchroniser avec Reedah" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "Sauvegarder des titres dans des boîtes à nouvelles" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "Retrouvez des articles en utilisant des dossiers de recherche" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "Lire les Podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Lecteur de flux" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Lecteur de flux Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Lecteurs de nouvelles et de blogs" #: ../net.sourceforge.liferea.desktop.in.h:5 #, fuzzy msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "news;feed;aggregator;blog;podcast;nouvelle;actualité;agrégateur;" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Ce flux a cessé d’exister. Il n’est plus disponible. Liferea ne le mettra " "plus à jour, mais vous pouvez toujours accéder aux titres situés dans le " "cache." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
      HTTP error code : " msgstr "" "La dernière mise à jour de cet abonnement a échoué !
      Code d’erreur " "HTTP  : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Des erreurs sont survenues pendant l’analyse syntaxique de ce flux !" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Détail des erreurs d’analyse syntaxique" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Détails" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "Vous pouvez contacter l’auteur ou le webmestre du flux à ce sujet !" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Des erreurs sont survenues pendant le filtrage de ce flux !" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Détail des erreurs de filtrage" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Flux :" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Source :" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Éditeur" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Copyright" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "enfants avec" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "titres non lus" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Dossier :" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Source" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Flux" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Classé sous" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Auteur" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Partagé par" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Via" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Lié" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Aussi posté dans" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Créateur" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "Coordonnées" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "Carte" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Commentaires" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Mise à jour…" #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Section" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Département" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Boîte à nouvelles :" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Ajoutez des éléments à cette boîte à nouvelles en sélectionnant « Copier " "dans la boîte à nouvelles » à partir du menu contextuel de la liste des " "éléments." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Dossier de recherche :" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "La commande du navigateur a échoué : %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Exécution de : « %s »" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Erreur d’autorisation" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Impossible de créer le répertoire cache « %s » !" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" "Votre version de WebKitGTK+ ne supporte pas le changement des paramètres du " "serveur mandataire depuis Liferea. Les paramètres du serveur mandataire du " "système seront utilisés." #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Aujourd’hui %H:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Hier %H:%M" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %H:%M" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d %b %H:%M" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "" "« %s » n’est pas un type de fichier de configuration de pièce jointe valide !" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Vous n’avez configuré aucun outil de téléchargement ! Vous pouvez le faire " "dans l’onglet « Pièces jointes » du menu Outils/Préférences." #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "La commande a échoué :\n" "\n" "%s\n" "\n" " Vérifiez s’il vous plaît que l’outil de téléchargement est bien installé et " "fonctionne correctement. Vous pouvez le changer dans l’onglet " "« Téléchargement » du menu Outils/Préférences." #: ../src/export.c:188 #, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Erreur lors du renommage de %s en %s : %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "Erreur XML pendant la lecture du fichier OPML ! Impossible d’importer " "« %s » !" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Document vide ! Le document OPML « %s » ne devrait pas être vide lors de " "l’importation." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "« %s » n’est pas un document OPML valide ! Liferea ne peut importer ce " "fichier !" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Liste des flux importée" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importer une liste de flux" #: ../src/export.c:481 msgid "Import" msgstr "Importer" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "Fichiers OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Erreur lors de l’exportation de la liste des flux !" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Liste des flux exportée !" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Exporter la liste des flux" #: ../src/export.c:498 msgid "Export" msgstr "Exporter" #: ../src/feed.c:317 msgid "" "

      Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

      " msgstr "" "

      Impossible de détecter le type de ce flux ! Veuillez vérifier que la " "source pointe vraiment vers une ressource fournie dans un des formats " "supportés !

      Sortie de l’analyseur syntaxique XML :
      " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "« %s » mis à jour…" #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "« %s » n’est pas disponible" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "L’URL à laquelle vous voulez vous abonner pointe vers une page web et aucun " "flux n’a été découvert sur cette page. Cette page web ne supporte peut-être " "pas la découverte automatique de flux." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "" "Erreur XML lors de la lecture du flux ! Le flux « %s » ne peut être chargé !" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Document vide !" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "XML non valide !" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "La source pointe vers un document HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Impossible de déterminer le type de flux." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Il n’y a aucun élément non lu" #: ../src/liferea_application.c:282 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Exécute Liferea avec sa fenêtre principale dans ÉTAT. ÉTAT peut être " "« shown » (fenêtre visible), « iconified » (fenêtre iconisée) ou " "« hidden » (fenêtre cachée)" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "ÉTAT" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Affiche des informations sur la version et quitte" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Ajoute un nouvel abonnement" #: ../src/liferea_application.c:284 msgid "uri" msgstr "uri" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Affiche des messages de débogage de tout type" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Affiche des messages de débogage pour la gestion du cache" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Affiche des messages de débogage pour la gestion de la configuration" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Affiche des messages de débogage de la gestion de la base de données" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Affiche des messages de débogage des fonctions de l’interface" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Active le débogage du rendu HTML. Chaque fois que Liferea affiche du HTML, " "il copiera aussi le HTML généré dans ~/.cache/liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Affiche des messages de débogage de toute l’activité réseau" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Affiche des messages de débogage des fonctions d’analyse syntaxique" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Affiche des messages de débogage quand une fonction prend trop de temps" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "" "Affiche des messages de débogage à l’entrée et à la sortie de fonctions" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "" "Affiche des messages de débogage du traitement de la mise à jour des flux" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "Affiche des messages de débogage pour le dossier de recherche" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Affiche des messages de débogage verbeux" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Affiche des messages de débogage pour le sujet donné" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "La demande de mise à jour a été annulée" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Impossible de résoudre le nom de la machine de destination" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Impossible de résoudre le nom de la machine serveur mandataire" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Impossible de se connecter à la machine distante" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Impossible de se connecter au serveur mandataire" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "Une erreur réseau s’est produite ou la machine distante a brusquement fermé " "la connexion" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "La ressource a été déplacée à un autre endroit de manière permanente" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Vous n’êtes pas autorisé à télécharger ce flux. Veuillez mettre à jour votre " "nom d’utilisateur et votre mot de passe dans la boîte de dialogue des " "propriétés du flux" #: ../src/net.c:476 msgid "Payment required" msgstr "Paiement nécessaire" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Vous n’êtes pas autorisé à accéder à cette ressource" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Ressource introuvable" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Méthode interdite" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Non acceptable" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Authentification par serveur mandataire exigée" #: ../src/net.c:482 msgid "Request timed out" msgstr "Délai de la requête expiré" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "La ressource n’existe pas. Veuillez vous désabonner !" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Il y a eu une erreur interne lors du traitement de la mise à jour" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Flux indisponible : le serveur a demandé une redirection qui n’est pas prise " "en charge !" #: ../src/net.c:492 msgid "Client Error" msgstr "Erreur du client" #: ../src/net.c:494 msgid "Server Error" msgstr "Erreur du serveur" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Une erreur réseau inconnue s’est produite !" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "L’élément" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "contient" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "ne contient pas" #: ../src/rule.c:175 msgid "Item title" msgstr "Le titre de l’élément" #: ../src/rule.c:176 msgid "Item body" msgstr "Le corps de l’élément" #: ../src/rule.c:177 msgid "Read status" msgstr "Le statut lu" #: ../src/rule.c:177 msgid "is unread" msgstr "n’est pas lu" #: ../src/rule.c:177 msgid "is read" msgstr "est lu" #: ../src/rule.c:178 msgid "Flag status" msgstr "Le marqueur" #: ../src/rule.c:178 msgid "is flagged" msgstr "est positionné" #: ../src/rule.c:178 msgid "is unflagged" msgstr "n’est pas positionné" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "inclus" #: ../src/rule.c:179 msgid "not included" msgstr "non inclus" #: ../src/rule.c:180 msgid "Category" msgstr "Une catégorie" #: ../src/rule.c:180 msgid "is set" msgstr "est mise" #: ../src/rule.c:180 msgid "is not set" msgstr "n’est pas mise" #: ../src/rule.c:181 msgid "Feed title" msgstr "Le titre de l’élément" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Une mise à jour de l’abonnement « %s » est déjà en cours !" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "L’abonnement à « %s » a cessé d’exister. Liferea ne le mettra plus à jour !" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Mise à jour de l’icône du flux « %s »" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Un problème est survenu pendant la lecture de cet abonnement. Veuillez " "vérifier l’URL et la sortie sur la console." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "L’URL de « %s » a changé définitivement et a été mise à jour" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "« %s » a cessé d’exister. Liferea ne le mettra plus à jour !" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "« %s » n’a pas changé depuis la dernière mise à jour" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Mise à jour de « %s »" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Erreur en ouvrant le fichier temporaire %s pour le filtrage !" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s s’est terminé avec le code de retour %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Erreur : impossible d’ouvrir le tube « %s »" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Erreur : impossible d’ouvrir le fichier « %s »" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Erreur : il n’y a pas de fichier « %s »" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Nouveau dossier de recherche" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Il y avait d’autres erreurs. La sortie a été tronquée !]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "Analyseur syntaxique XML : impossible d’analyser le document :\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Pièces jointes" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " Octets" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "Ko" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "Mo" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "Go" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d pièce jointe" msgstr[1] "%d pièces jointes" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Choisir un fichier" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Extension de fichier .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Fichier pixmap %s introuvable" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d nouveau)" msgstr[1] " (%d nouveaux)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d non lu%s" msgstr[1] "%d non lus%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Sommaire de l’aide" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Référence rapide" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "FAQ" #: ../src/ui/search_dialog.c:116 msgid "Saved Search" msgstr "Recherche enregistrée" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Entrer le nom d’utilisateur et le mot de passe pour « %s » (%s) :" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Source inconnue" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 msgid "_Cancel" msgstr "_Annuler" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Tous les fichiers" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea est hors-ligne. Les mises à jour sont impossibles." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Rechercher dans tous les flux" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Marquer le tout comme _lu" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Êtes-vous sûr de vouloir supprimer « %s » ?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Aucun lien n’est spécifié pour cet élément !" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Pas de titre ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr " important " #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Titre" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Date" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Vous devez sélectionner un flux pour effacer ses éléments !" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Aucun élément n’a été sélectionné" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Ouvrir dans un _onglet" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "_Ouvrir dans le navigateur" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Ouvrir dans le navigateur _externe" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Copier dans la boîte à nouvelles" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "_Ajouter un signet sur %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "Copier l’_adresse de l’élément" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Basculer l’état de lecture" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Basculer le _marqueur de l’élément" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "_Supprimer l’élément" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Ouvrir la pièce jointe…" #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Enregistrer sous…" #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Copier l’adresse du lien" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "Mettre à _jour" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Mettre à jour le dossier" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Nouvel _abonnement…" #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Nouveau _dossier…" #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Nouveau dossier de _recherche…" #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Nouvelle _source…" #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Nouvelle _boîte à nouvelles…" #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Nouveau" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Trier les flux" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "Tout _marquer comme lu" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "_Reconstruire" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Supprimer" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Propriétés" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Convertir en abonnements locaux…" #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "Paramètres par défaut de GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Texte sous les icônes" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Texte à côté des icônes" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Icônes uniquement" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Texte uniquement" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minutes" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "heures" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "jours" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Espace" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Espace" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Espace" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Vue normale" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Vue large" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Vue combinée" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Navigateur par défaut" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Manuel" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Type" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Programme" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Vide)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Reconstruction" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Suppression de l’entrée" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Êtes-vous sûr de vouloir supprimer « %s » et son contenu ?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Êtes-vous sûr de vouloir supprimer « %s » ?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Confirmation de la suppression" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Confirmation de la suppression" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "_Ouvrir" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "" "Le fournisseur de ce flux suggère un intervalle de mise à jour de %d minute." msgstr[1] "" "Le fournisseur de ce flux suggère un intervalle de mise à jour de %d minutes." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Ce flux ne spécifie aucun intervalle de mise à jour." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Sans titre" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Site web" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nouvel abonnement" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Choisir un fichier OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Nouvel abonnement OPML" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Impossible de trouver un type de source de liste de flux !" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Type de source" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" "La connexion pour « %s » n’est pas terminée. Veuillez attendre la fin de la " "connexion." #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" "L’abonnement au flux « %s » a été correctement converti en flux local !" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "La connexion a échoué !" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "Reedah" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "Impossible d’analyser le JSON envoyé par l’API Reedah !" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "L’API HTTP de TinyTinyRSS n’est pas accessible !" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" "L’abonnement à ce flux TinyTinyRSS a échoué ! Vérifiez que vous avez bien " "renseigné une URL de flux !" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "Le désabonnement de ce flux TinyTinyRSS a échoué !" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" "Cette version de TinyTinyRSS ne permet pas de supprimer de flux. Mettez à " "vous vers la version %s ou supérieure !" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "Impossible d’analyser le JSON envoyé par l’API TinyTinyRSS !" #: ../src/fl_sources/theoldreader_source.c:329 msgid "TheOldReader" msgstr "TheOldReader" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Ouvrir le lien dans un _onglet" #: ../src/webkit/liferea_web_view.c:176 msgid "Open Link In Browser" msgstr "Ouvrir le lien dans le navigateur" #: ../src/webkit/liferea_web_view.c:177 msgid "Open Link In External Browser" msgstr "Ouvrir le lien dans le navigateur externe" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_Publier le lien vers le signet sur %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Copier l’adresse du lien" #: ../src/webkit/liferea_web_view.c:193 msgid "_View Image" msgstr "Visionner l’image" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "_Copier l’adresse de l’image" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "Enregistrer le lien sous" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "Enregistrer l’image sous" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "S’_abonner…" #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "_Copier" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "_Augmenter la taille du texte" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Réduire la taille du texte" #: ../glade/about.ui.h:1 msgid "About" msgstr "À propos" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea est un agrégateur de flux pour GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Page d’accueil de Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Authentification" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "Nom d’_utilisateur :" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Mot de passe :" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Ouvrir la pièce jointe" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Ouvrir une pièce jointe de type :" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Que doit faire Liferea avec cette pièce jointe ? Veuillez entrer ci-dessous " "la commande que vous voulez exécuter. Les fichiers téléchargés seront passés " "en argument de cette commande :" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Parcourir" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "" "_Faire ceci automatiquement pour les pièces jointes comme celle-ci à partir " "de maintenant." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Ajouter un compte Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Veuillez entrer les paramètres de votre compte Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Mot de passe" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "Nom d’_utilisateur (e-mail)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "page 1" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "page 2" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "0" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Voir les titres" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "page 3" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Titres" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Marquer le tout comme _lu" #: ../glade/mark_read_dialog.ui.h:2 #, fuzzy msgid "Mark all as read" msgstr "Marquer le tout comme _lu" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Nouveau dossier" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "Nom du _dossier :" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Créer une boîte à nouvelles" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "Nom de _boîte à nouvelles :" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Source du flux" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Type de source :" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Commande" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "Fichier _local" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Sélectionner un fichier…" #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Source :" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Téléchargement / post-traitement" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "Ne _pas utiliser de serveur mandataire pour le téléchargement" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Utiliser un _filtre de conversion" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea peut utiliser des filtres de conversion externes sous forme de " "greffons pour accéder aux flux et aux répertoires qui sont dans des formats " "qui ne sont pas pris en charge. Lisez la documentation pour de plus amples " "informations." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Convertir _en utilisant :" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Sélection de la source" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Sélectionnez le type de source que vous voulez ajouter…" #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Ajouter OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Veuillez spécifier un fichier local ou une URL pointant sur une liste de " "flux OPML valide." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Adresse" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "Sélectionner un _fichier" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Préférences de Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Gestion du cache des flux" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_Nombre d’éléments de flux à sauvegarder par défaut :" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Paramètres de mise à jour des flux" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Remarque : Veuillez choisir un délai de rafraîchissement raisonnable. Un " "délai inférieur à une heure n’est généralement qu’un gaspillage de bande " "passante." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "_Mettre à jour tous les abonnements au démarrage." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "_Intervalle de rafraîchissement par défaut des flux :" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "1" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Flux" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Réglages d’affichage des dossiers" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "" "_Montrer les éléments de tous les flux enfants lorsqu’un dossier est " "sélectionné." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "_Cacher les éléments lus." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Icônes des flux" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "Mettre à _jour toutes les icônes de flux maintenant" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Dossiers" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Lecture des titres" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "_Survoler les articles avec :" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "Mode de vue par _défaut :" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Intégration web" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Poster les signets sur" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Paramètres du navigateur interne" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Ouvrir les liens dans la fenêtre de _Liferea." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "Désactiver _Javascript." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "Activer les _greffons du navigateur." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Paramètres du navigateur externe" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Navigateur :" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Manuel :" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s pour l’URL)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Navigateur" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Paramètres de la barre d’outils" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Cacher la barre d’outils." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "_Boutons de la barre d’outils :" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Interface" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "Serveur mandataire HTTP" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Détection automatique (GNOME ou environnement)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Pas de serveur mandataire" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Configuration manuelle :" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Hôte du serveur mandataire :" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Port du serveur mandataire :" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Utiliser l’_authentification pour le serveur mandataire" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "_Nom d’utilisateur pour le serveur mandataire :" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "_Mot de passe pour le serveur mandataire :" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" "Votre version de WebKitGTK+ est plus ancienne que la 2.15.3. Elle ne " "supporte pas le paramétrage de serveurs mandataires par application. Les " "paramètres du serveur mandataire du système seront utilisés." #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Serveur mandataire" #: ../glade/prefs.ui.h:51 msgid "Privacy Settings" msgstr "Paramètres de confidentialité" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "Indiquer aux sites que je _ne veux pas être pisté" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "Vie privée" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Téléchargement des pièces jointes" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Télécharger en utilisant" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Ouverture des pièces jointes" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Pièces jointes" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Propriétés des abonnements" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Nom du flux" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "Nom du _flux :" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Intervalle de mise à jour" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "" "_Utiliser l’intervalle de mise à jour par défaut, défini de manière globale." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_Intervalle de mise à jour spécifique au flux de" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "Ne _pas mettre à jour ce flux automatiquement." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "Le fournisseur de ce flux suggère un intervalle de mise à jour de %d minutes." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Général" #: ../glade/properties.ui.h:20 msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea peut utiliser des filtres de conversion externes pour accéder aux " "flux et aux répertoires qui sont dans des formats non pris en charge." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Le réglage du cache permet de contrôler si le contenu des flux doit être " "sauvegardé à la fermeture de Liferea. Les éléments marqués sont toujours " "sauvegardés dans le cache." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "_Paramètres du cache par défaut" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Désactiver le cache" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Cache illimité" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "Nombre d’éléments à _sauvegarder :" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Archivage" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Utiliser l’_authentification HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Téléchargement" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_Télécharger automatiquement toutes les pièces jointes de ce flux." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "_Chargement automatique de l’élément dans le navigateur configuré lors de la " "sélection des articles." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "_Ignorer les flux de commentaires pour cet abonnement." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Marquer les éléments téléchargés comme lus." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "Extraire tout le contenu de HTML5 et de Google AMP" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Avancé" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "Ajouter un compte Reedah" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "Veuillez entrer les paramètres de votre compte Reedah." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Renommer" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Nouveau nom :" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Propriétés du dossier de recherche" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "Nom de la _recherche :" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Rechercher les éléments satisfaisant les critères suivants" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "N’_importe quelle règle s’applique" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "_Toutes les règles doivent s’appliquer" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Recherche avancée" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "_Dossier de recherche…" #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Rechercher dans tous les flux" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Avancé…" #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Débute une recherche du texte spécifié dans tous les flux. Le résultat de la " "recherche apparaîtra dans la liste des éléments." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Chercher :" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Entrez une chaîne que Liferea doit trouver soit dans le titre, soit dans le " "contenu d’un élément." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Avancé…" #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Entrez une adresse de site web à utiliser pour la découverte automatique ou, " "si vous la connaissez, l’adresse exacte du flux." #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "Ajouter un compte TheOldReader" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "Veuillez entrer les paramètres de votre compte TheOldReader." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Ajouter un compte Tiny Tiny RSS" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "Veuillez entrer les paramètres de votre compte TinyTinyRSS." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "URL du _serveur" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "Nom d’_utilisateur" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Moniteur de mise à jour" #: ../glade/update_monitor.ui.h:2 msgid "Cancel All" msgstr "Tout annuler" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Demandes en attente" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "En cours de téléchargement" #~ msgid "_Subscriptions" #~ msgstr "A_bonnements" #~ msgid "Update _All" #~ msgstr "Tout mettre à _jour" #~ msgid "Updates all subscriptions." #~ msgstr "Met à jour tous les abonnements." #~ msgid "Marks read every item of every subscription." #~ msgstr "Marque comme lu chaque élément de chaque abonnement." #~ msgid "_Import Feed List..." #~ msgstr "_Importer une liste de flux…" #~ msgid "Imports an OPML feed list." #~ msgstr "Importe une liste de flux OPML." #~ msgid "_Export Feed List..." #~ msgstr "_Exporter la liste des flux…" #~ msgid "Exports the feed list as OPML." #~ msgstr "Exporte la liste des flux en OPML." #~ msgid "_Quit" #~ msgstr "_Quitter" #~ msgid "_Feed" #~ msgstr "_Flux" #~ msgid "Remove _All Items" #~ msgstr "Supprimer _tous les éléments" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Supprime tous les éléments du flux sélectionné." #~ msgid "_Item" #~ msgstr "_Élément" #~ msgid "Previous Item" #~ msgstr "Élément précédent" #~ msgid "Next Item" #~ msgstr "Élément suivant" #~ msgid "_Next Unread Item" #~ msgstr "Élément _non lu suivant" #~ msgid "_View" #~ msgstr "_Vue" #~ msgid "Increases the text size of the item view." #~ msgstr "Augmente la taille du texte dans la vue de l’élément." #~ msgid "Decreases the text size of the item view." #~ msgstr "Réduit la taille du texte dans la vue de l’élément." #~ msgid "_Tools" #~ msgstr "_Outils" #~ msgid "_Update Monitor" #~ msgstr "_Moniteur de mise à jour" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "" #~ "Montrer une liste de tous les flux actuellement dans la file d'attente" #~ msgid "_Preferences" #~ msgstr "_Préférences" #~ msgid "Edit Preferences." #~ msgstr "Éditer les préférences." #~ msgid "S_earch" #~ msgstr "_Recherche" #~ msgid "Search All Feeds..." #~ msgstr "Chercher dans tous les flux…" #~ msgid "Show the search dialog." #~ msgstr "Affiche la boîte de recherche." #~ msgid "_Help" #~ msgstr "_Aide" #~ msgid "_Contents" #~ msgstr "_Sommaire" #~ msgid "View help for this application." #~ msgstr "Voir l’aide concernant cette application." #~ msgid "_Quick Reference" #~ msgstr "_Référence rapide" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Voir une liste de tous les raccourcis clavier de Liferea." #~ msgid "_FAQ" #~ msgstr "_FAQ" #~ msgid "View the FAQ for this application." #~ msgstr "Voir la FAQ de cette application." #~ msgid "_About" #~ msgstr "À _propos" #~ msgid "Shows an about dialog." #~ msgstr "Affiche une fenêtre « À propos »." #~ msgid "_Normal View" #~ msgstr "Vue _normale" #~ msgid "Set view mode to mail client mode." #~ msgstr "Utiliser un affichage de client mail." #~ msgid "_Wide View" #~ msgstr "Vue _large" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Utiliser un affichage avec trois cadres verticaux." #~ msgid "_Combined View" #~ msgstr "Vue _combinée" #~ msgid "Set view mode to two pane mode." #~ msgstr "Utiliser un affichage avec deux cadres." #~ msgid "_Reduced Feed List" #~ msgstr "Liste de flux ré_duite" #~ msgid "Hide feeds with no unread items." #~ msgstr "Cacher les flux sans éléments non lus." #~ msgid "_New Subscription..." #~ msgstr "_Nouvel abonnement…" #~ msgid "Adds a subscription to the feed list." #~ msgstr "Ajoute un abonnement à la liste des flux." #~ msgid "Adds a folder to the feed list." #~ msgstr "Ajoute un dossier à la liste des flux." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Ajoute un nouveau dossier de recherche à la liste des flux." #~ msgid "New _Source..." #~ msgstr "Nouvelle _source…" #~ msgid "Adds a new feed list source." #~ msgstr "Ajoute une nouvelle source de liste de flux." #~ msgid "Adds a new news bin." #~ msgstr "Ajoute une nouvelle boîte à nouvelles." #~ msgid "_Mark Items Read" #~ msgstr "_Marquer les éléments comme lus" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Marque comme lus tous les éléments du nœud sélectionné de la liste des " #~ "flux / dans la liste des éléments." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Met à jour l’abonnement sélectionné ou tous les abonnements du dossier " #~ "sélectionné." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Ouvre la fenêtre des propriétés pour l’abonnement sélectionné." #~ msgid "_Remove" #~ msgstr "_Supprimer" #~ msgid "Removes the selected subscription." #~ msgstr "Supprime l’abonnement sélectionné." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Bascule l’état de lecture de l’élément sélectionné." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Bascule le statut du marqueur de l’élément sélectionné." #~ msgid "R_emove" #~ msgstr "_Supprimer" #~ msgid "Removes the selected item." #~ msgstr "Supprime l’élément sélectionné." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Ouvre le lien de l’élément dans un onglet du navigateur de Liferea." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Ouvre le lien de l’élément dans la fenêtre de flux de Liferea." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Ouvre le lien de l’élément dans le navigateur externe configuré." #~ msgid "_Fullscreen" #~ msgstr "_Plein écran" #~ msgid "Browse at full screen" #~ msgstr "Naviguer en plein écran" #~ msgid "_Work Offline" #~ msgstr "Travailler _hors ligne" #~ msgid "_Update All" #~ msgstr "Tout mettre à _jour" #~ msgid "_Show Liferea" #~ msgstr "_Montrer Liferea" #~ msgid "InoReader" #~ msgstr "InoReader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Remarque : le nom d’utilisateur et le mot de passe seront enregistrés " #~ "en clair dans votre liste de flux Liferea." #~ msgid "Add InoReader Account" #~ msgstr "Ajouter un compte InoReader" #~ msgid "Please enter your InoReader account settings." #~ msgstr "Veuillez entrer les paramètres de votre compte InoReader." #~ msgid "Plugins" #~ msgstr "Greffons" liferea-1.12.7/po/gl.po000066400000000000000000002210011352135647700146020ustar00rootroot00000000000000# Galician translations for liferea package. # Copyright (C) 2010 THE liferea'S COPYRIGHT HOLDER # This file is distributed under the same license as the liferea package. # aovidal , 2010. # msgid "" msgstr "" "Project-Id-Version: liferea 1.7.4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2010-08-19 16:32+0100\n" "Last-Translator: Anxo Outeiral \n" "Language-Team: Galician \n" "Language: gl\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" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Lector de fontes" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Liferea está desconectado" #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "Sincronización con servidores próximos" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "Sincronización con servidores próximos" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "Sincronización con servidores próximos" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "Sincronización con servidores próximos" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 #, fuzzy msgid "Play Podcasts" msgstr "Podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Lector de fontes" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Lector de fontes Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Esta fonte foi suspendida e non está dispoñíbel. Liferea non a actualizará " "máis pero poderá acceder aos titulares gardados na caché." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
      HTTP error code : " msgstr "" "A última actualización desta subscrición fallou!
      Código de erro HTTP " ": " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Atopáronse erros ao procesar esta fonte!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Detalles dos erros do analizador" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Detalles" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Atopáronse erros ao filtrar esta fonte!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Detalles dos erros do filtro" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Fonte:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Orixe:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Editor" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Dereitos de autor" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "fillos con" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "titulares non lidos" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Cartafol:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Fonte" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Fonte" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Arquivado en" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Autor" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Compartido por" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Vía" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Relacionado" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Tamén publicado en" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Creador" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Comentarios" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Actualizando..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Sección" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Departamento" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Bandexa de novas:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Engadir artigos a esta bandexa de novas seleccionando «Copiar a bandexa de " "novas» da lista de artigos do menú contextual." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Cartafol de busca:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Erro ao iniciar o navegador: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "A iniciar: «%s»" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Erro de autenticación" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Non foi posíbel crear o directorio da caché «%s»!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Hoxe %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Onte %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%b %d %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%b %d %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "«%s» non é un ficheiro válido de configuración de contidos asociados!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Erro ao renomear %s a %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "Erro do XML ao ler o ficheiro OPML! Non foi posíbel importar «%s»!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Documento baleiro! O documento OPML «%s» que se desexaba importar, está " "baleiro." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "«%s» non é un documento OPML válido! Liferea non pode importar este ficheiro!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Lista de fontes importadas" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importar lista de fontes" #: ../src/export.c:481 msgid "Import" msgstr "Importar" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 #, fuzzy msgid "OPML Files" msgstr "Escolla o ficheiro OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Erro ao exportar a lista de fontes!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Lista de fontes exportada!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Exportar lista de fontes" #: ../src/export.c:498 msgid "Export" msgstr "Exportar" #: ../src/feed.c:317 msgid "" "

      Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

      " msgstr "" "

      Non se puido detectar o tipo da fonte! Por favor, comprobe se a fonte " "apunta a un recurso fornecido nun dos formatos soportados!

      Saída do " "analizador XML:
      " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "«%s» actualizada..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "«%s» non está dispoñíbel" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "O URL que desexa subscribir no Liferea apunta a unha páxina web e a " "detección automática non atopou ningunha fonte nesta páxina. Talvez esta " "páxina web non soporte a detección automática de fontes." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "Erro XML ao ler a fonte «%s»! Non se puido cargar!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Documento baleiro!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "XML non válido!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "A fonte apunta a un documento HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Non foi posíbel determinar o tipo de fonte." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 #, fuzzy msgid "There are no unread items" msgstr "Non hai artigos non lidos" #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Iniciar Liferea coa xanela principal en ESTADO, que pode ser «shown» para " "mostrala, «iconified» para deixala na área de notificación, ou «hidden» " "para ocultala" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "ESTADO" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Amosa información da versión e finaliza" #: ../src/liferea_application.c:284 #, fuzzy msgid "Add a new subscription" msgstr "Nova subscrición" #: ../src/liferea_application.c:284 msgid "uri" msgstr "" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Amosa todas as mensaxes de depuración" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Amosa mensaxes de depuración para a xestión da caché" #: ../src/liferea_application.c:292 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "Amosa mensaxes de depuración da xestión de configuración" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Amosa mensaxes de depuración da xestión de bases de datos" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Amosa mensaxes de depuración de todas as funcións da interface gráfica" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Activa a depuración de renderización HTML. Cada vez que Liferea produza HTML " "de saída gardará ese contido no arquivo ~/.cache/liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Amosa mensaxes de depuración de toda a actividade de rede" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Amosa mensaxes de depuración de todas as funcións de procesamento" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "Amosa mensaxes de depuración cando unha función demórase moito tempo" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Amosa mensaxes de depuración na entrada e saída de funcións" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Amosa mensaxes de depuración do proceso de actualización de fontes" #: ../src/liferea_application.c:301 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "Amosa mensaxes de depuración para a xestión da caché" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Amosa máis información nas mensaxes de depuración" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Amosa mensaxes de depuración para asunto especificado" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "A solicitude de actualización foi cancelada" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Non foi posíbel resolver o nome do host de destino" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Non foi posíbel resolver o nome do host proxy" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Non foi posíbel conectar co host remoto" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Non foi posíbel conectar co proxy" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "Produciuse un erro de rede, ou o host de destino fechou a conexión" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "O recurso foi movido permanentemente a unha nova localización" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Non está autorizado para descargar esta fonte. Por favor, actualice o seu " "nome de usuario e contrasinal na caixa de diálogo das propiedades da fonte" #: ../src/net.c:476 msgid "Payment required" msgstr "É necesario o pagamento" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Non ten permiso para acceder a este recurso" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Recurso non atopado" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Método non atopado" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Non é aceptábel" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "O proxy require autenticación" #: ../src/net.c:482 msgid "Request timed out" msgstr "Excedeuse o tempo de espera" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Xa non está, o recuso non existe. Por favor, cancele a subscrición!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Ocorreu un erro interno no proceso de actualización" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Fonte non dispoñíbel: O servidor solicitou unha redirección non válida!" #: ../src/net.c:492 msgid "Client Error" msgstr "Erro do cliente" #: ../src/net.c:494 msgid "Server Error" msgstr "Erro do servidor" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Ocorreu un erro de rede descoñecido!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Artigo" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "contén" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "non contén" #: ../src/rule.c:175 msgid "Item title" msgstr "Título do artigo" #: ../src/rule.c:176 msgid "Item body" msgstr "Corpo do artigo" #: ../src/rule.c:177 msgid "Read status" msgstr "Estado de lectura" #: ../src/rule.c:177 msgid "is unread" msgstr "sen ler" #: ../src/rule.c:177 msgid "is read" msgstr "lido" #: ../src/rule.c:178 msgid "Flag status" msgstr "Estado do marcador" #: ../src/rule.c:178 msgid "is flagged" msgstr "sinalado" #: ../src/rule.c:178 msgid "is unflagged" msgstr "non sinalado" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "incluído" #: ../src/rule.c:179 msgid "not included" msgstr "non incluído" #: ../src/rule.c:180 msgid "Category" msgstr "Categoría" #: ../src/rule.c:180 msgid "is set" msgstr "está definido" #: ../src/rule.c:180 msgid "is not set" msgstr "non está definido" #: ../src/rule.c:181 msgid "Feed title" msgstr "Título da fonte" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "A subscrición «%s» estase a actualizar!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "A subscrición «%s» foi suspendida. Liferea non a actualizará!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Actualizando a icona da páxina de «%s»" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Atopouse un problema ao ler esta subscrición. Por favor comprobe o URL e a " "saída da consola." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "O URL de «%s» cambiou permanentemente e foi actualizada" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "«%s» foi suspendido. Liferea non a actualizará!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "«%s» non cambiou dende a última actualización" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "A actualizar «%s»" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Erro ao abrir o ficheiro temporal %s para usar na filtraxe!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s saíu con estado %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Erro: Non puido abrir a canalización «%s»" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Erro: Non puido abrir o ficheiro «%s»" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Erro: O ficheiro «%s» non existe" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Novo cartafol de busca" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Hai máis erros. A saída foi truncada!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "Analizador XML: Non puido analizar o documento:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Anexos" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " Bytes" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d anexo" msgstr[1] "%d anexos" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Escolla un ficheiro" #: ../src/ui/enclosure_list_view.c:444 #, fuzzy, c-format msgid "File Extension .%s" msgstr "Extensión do ficheiro .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Non foi posíbel localizar o ficheiro de mapa de píxeles: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d novo)" msgstr[1] " (%d novos)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d non lido%s" msgstr[1] "%d non lidos%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Temas de axuda" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Referencia rápida" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "Preguntas máis frecuentes" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Procura avanzada" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Introduza o nome de usuario e contrasinal para «%s» (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Fonte descoñecida" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "Cancelar _todo" #: ../src/ui/ui_common.c:211 #, fuzzy msgid "All Files" msgstr "Ficheiro _local" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea está en modo sen conexión. Non é posíbel actualizar." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Procurar en todas as fontes" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Marcar todo coma lido" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Está seguro de que quere eliminar «%s»?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Este artigo non ten ligazón especificada!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Sen título ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Encabezamento" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Seleccione unha fonte para eliminar os seus artigos!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Non se escolleu ningún artigo" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "" #: ../src/ui/popup_menu.c:111 #, fuzzy msgid "_Open In Browser" msgstr "_Iniciar no navegador" #: ../src/ui/popup_menu.c:115 #, fuzzy msgid "Open In _External Browser" msgstr "Preferencias do navegador externo" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Copiar á bandexa de novas " #: ../src/ui/popup_menu.c:147 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "_Marcar ligazón en %s" #: ../src/ui/popup_menu.c:153 #, fuzzy msgid "Copy Item _Location" msgstr "_Copiar localización da ligazón" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Alternar estado de _lectura" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Alternar _marcador do artigo" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "_Eliminar artigo" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Abrir contido asociado..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Gardar como..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Copiar localización da ligazón" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Actualizar" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Actualizar cartafol" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "_Nova subscrición..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Novo _cartafol..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Novo cartafol de _busca..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Nova _fonte..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Nova bandexa de _novas..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Nova" #: ../src/ui/popup_menu.c:312 #, fuzzy msgid "Sort Feeds" msgstr "Importar lista de fontes" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_Marcar todo coma lido" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Eliminar" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Propiedades" #: ../src/ui/popup_menu.c:343 #, fuzzy msgid "Convert To Local Subscriptions..." msgstr "_Nova subscrición..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "Predeterminado GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Texto abaixo das iconas" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Texto ao lado das iconas" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Só iconas" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Só texto" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minutos" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "horas" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "días" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Espazo" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Espazo" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Expazo" #: ../src/ui/preferences_dialog.c:112 #, fuzzy msgid "Normal View" msgstr "Visualización _normal" #: ../src/ui/preferences_dialog.c:113 #, fuzzy msgid "Wide View" msgstr "Visualización _ampla" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Combined View" msgstr "Visualización _combinada" #: ../src/ui/preferences_dialog.c:476 #, fuzzy msgid "Default Browser" msgstr "Navegador predeterminado de GNOME" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Tipo" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Programa" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Eliminando entrada" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Está seguro de que quere eliminar «%s» e todo o seu contido?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Está seguro de que quere eliminar «%s»?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Confirmar eliminación" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Confirmar eliminación" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "" "O provedor desta fonte aconsella un intervalo de actualización de %d minuto." msgstr[1] "" "O provedor desta fonte aconsella un intervalo de actualización de %d minutos." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "" "Esta fonte non especifica un intervalo de actualización predeterminado." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nova subscrición" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planeta, Lista de blogues, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Escolla o ficheiro OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Nova subscrición OPML" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Non se atopou ningún tipo de lista de fontes!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Tipo de fonte" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Fallou ao iniciar a sesión do Google Reader!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Lector de fontes" #: ../src/webkit/liferea_web_view.c:175 #, fuzzy msgid "Open Link In _Tab" msgstr "Iniciar a ligazón nun _separador" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "_Inicia a ligazón no navegador" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "_Inicia a ligazón no navegador" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_Marcar ligazón en %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Copiar localización da ligazón" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "_Ver" #: ../src/webkit/liferea_web_view.c:194 #, fuzzy msgid "_Copy Image Location" msgstr "_Copiar localización da ligazón" #: ../src/webkit/liferea_web_view.c:197 #, fuzzy msgid "S_ave Link As" msgstr "Gardar como..." #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Subscribirse..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "_Aumentar o tamaño do texto" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Diminuír o tamaño do texto" #: ../glade/about.ui.h:1 msgid "About" msgstr "Acerca de" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea é un agregador de novas para GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Páxina principal do Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autenticación" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Nome do usuario:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Contrasinal:" #: ../glade/enclosure_handler.ui.h:1 #, fuzzy msgid "Open Enclosure" msgstr "Abrir contido asociado..." #: ../glade/enclosure_handler.ui.h:2 #, fuzzy msgid "Open an enclosure of type:" msgstr "Descargando un contido asociado de tipo:" #: ../glade/enclosure_handler.ui.h:3 #, fuzzy msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Que debería facer Liferea con este contido asociado? Por favor introduza " "abaixo o comando que desexa executar. Os contidos asociados descargados " "serán empregados como argumentos para esta orde: " #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Navegar" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "" "_Facer isto automaticamente para contidos asociados coma este de agora en " "adiante." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Engadir conta de Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Por favor introduza os datos da súa conta de Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Contrasinal" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "Nome de _usuario (enderezo de correo electrónico)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Visualizar titulares" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Titulares" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Marcar todo coma lido" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Marcar todo coma lido" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Novo cartafol" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "Nome do _cartafol:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Crear unha bandexa de novas" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "Nome da bandexa de _novas:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Orixe da fonte" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Tipo de fonte:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Comando" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "Ficheiro _local" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Seleccionar ficheiro..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Orixe:" #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Descarga / Postprocesado" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "_Non empregar o proxy para descargas" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Utilizar _filtro de conversión" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea pode empregar plugins de filtros externos para acceder a fontes e " "directorios que non estean soportados. Vexa a documentación para máis " "información." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Converter _utilizando:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Selección da fonte" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Selección do tipo de fonte que desexa engadir..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Engadir OPML/Planeta" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Por favor especifique un ficheiro local ou un URL que apunte a unha lista de " "fontes en formato OPML." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Localización" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Seleccionar ficheiro" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Preferencias do Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_Número de artigos predeterminados a gardar por fonte:" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "Feed Update Settings" msgstr "Actualizar fonte" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Nota: Por favor, recorde establecer un tempo de actualización razonábel. " "Normalmente é un desperdicio de largura de banda obter fontes máis dunha vez " "cada hora." #: ../glade/prefs.ui.h:8 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Actualizar todas as subscricións." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "_Intervalo de actualización predeterminado:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Fontes" #: ../glade/prefs.ui.h:12 #, fuzzy msgid "Folder Display Settings" msgstr "" "Preferencias de visualización dos cartafoles" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "" "_Amosar os artigos de todas as fontes fillas ao seleccionar un cartafol." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "_Ocultar artigos lidos." #: ../glade/prefs.ui.h:15 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Iconas das fontes (Iconas das páxinas)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Actualizar todas as iconas das páxinas agora" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Cartafoles" #: ../glade/prefs.ui.h:18 #, fuzzy msgid "Reading Headlines" msgstr "titulares non lidos" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "_Avanzar polos artigos con:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:21 #, fuzzy msgid "Web Integration" msgstr "Orientación" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Publicar os marcadores en" #: ../glade/prefs.ui.h:24 #, fuzzy msgid "Internal Browser Settings" msgstr "Preferencias do navegador interno" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Abrir as ligazóns na _xanela do Liferea." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Desactivar Javascript." #: ../glade/prefs.ui.h:27 #, fuzzy msgid "_Enable browser plugins." msgstr "Preferencias do navegador externo" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "External Browser Settings" msgstr "Preferencias do navegador externo" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Navegador:" #: ../glade/prefs.ui.h:30 #, fuzzy msgid "_Manual:" msgstr "Manual" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Navegador" #: ../glade/prefs.ui.h:34 #, fuzzy msgid "Toolbar Settings" msgstr "Etiquetas dos _botóns da barra de ferramentas:" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Ocultar a barra de ferramentas." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Etiquetas dos _botóns da barra de ferramentas:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Interface gráfica de usuario" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "Detectar _automaticamente (do GNOME ou do ambiente)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Sen proxy" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "Configuración _manual:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Servidor proxy:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Porto do proxy:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Utilizar _autenticación proxy" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Nome de _usuario do proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "_Contrasinal do proxy:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "" "Preferencias de visualización dos cartafoles" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 #, fuzzy msgid "Downloading Enclosures" msgstr "Descargando contido asociado" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Descargar empregando" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 #, fuzzy msgid "Opening Enclosures" msgstr "Abrir contido asociado..." #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Contido asociado" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Propiedades da subscrición" #: ../glade/properties.ui.h:2 #, fuzzy msgid "Feed Name" msgstr "_Nome da fonte:" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Nome da fonte:" #: ../glade/properties.ui.h:4 #, fuzzy msgid "Update Interval" msgstr "Monitor de actualizacións" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Utilizar o intervalo de actualización establecido globalmente." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "Intervalo de actualización específico da _fonte de" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Non actualizar esta fonte automaticamente." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "O provedor desta fonte suxire un intervalo de actualización de %d minutos." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Xeral" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea pode empregar plugins de filtros externos para acceder a fontes e " "directorios que non estean soportados. Vexa a documentación para máis " "información." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "As configuracións da caché controlan se o contido das fontes vai ser gardado " "cando o Liferea finalice. Os artigos gardados son sempre almacenados na " "caché." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "Preferencias _predeterminadas da caché" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Deshabilitar caché" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "Caché _sen límite" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "_Número de artigos a gardar:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Arquivo" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Utilizar _autenticación HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Descarga" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "Descargar _automaticamente todos os contidos asociados desta fonte." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Cargar _automaticamente no navegador configurado a ligazón dos artigos que " "sexan seleccionados." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorar fontes de _comentarios para esta subscrición." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Marcar artigos descargados coma lidos." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Avanzado" #: ../glade/reedah_source.ui.h:1 #, fuzzy msgid "Add Reedah Account" msgstr "Engadir conta de Google Reader" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Por favor introduza os datos da súa conta de Google Reader." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Renomear" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Novo nome:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Preferencias do cartafol de busca" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "_Nome da procura:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 #, fuzzy msgid "Find Items that meet the following criteria" msgstr "Atopar artigos que reúnan os seguintes criterios" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "_Calquera regra coincide" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "_Todas as regras deben coincidir" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Procura avanzada" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "Cartafol de _busca..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Procurar en todas as fontes" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Avanzado..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Inicia unha procura do texto especificado en todas as fontes. O resultado da " "procura aparecerá na lista de artigos." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Procurar por:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Introduza unha cadea de busca que o Liferea debe procurar nos títulos dos " "artigos ou nos seus contidos." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Avanzado..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Introduza o enderezo dun sitio web para empregar o descubrimento automático " "da fonte, ou no caso de que a coñeza, a súa localización exacta." #: ../glade/theoldreader_source.ui.h:1 #, fuzzy msgid "Add TheOldReader Account" msgstr "Engadir conta de Google Reader" #: ../glade/theoldreader_source.ui.h:2 #, fuzzy msgid "Please enter your TheOldReader account settings." msgstr "Por favor introduza os datos da súa conta de Google Reader." #: ../glade/ttrss_source.ui.h:1 #, fuzzy msgid "Add Tiny Tiny RSS Account" msgstr "Engadir conta de Bloglines" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "Por favor introduza os datos da súa conta de Bloglines." #: ../glade/ttrss_source.ui.h:3 #, fuzzy msgid "_Server URL" msgstr "Erro do servidor" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "Nome de _usuario" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Monitor de actualizacións" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "Cancelar _todo" #: ../glade/update_monitor.ui.h:3 #, fuzzy msgid "Pending Requests" msgstr "Solicitudes pendentes" #: ../glade/update_monitor.ui.h:4 #, fuzzy msgid "Downloading Now" msgstr "Descargando" #~ msgid "_Subscriptions" #~ msgstr "_Subscricións" #~ msgid "Update _All" #~ msgstr "Actualizar _todas" #~ msgid "Updates all subscriptions." #~ msgstr "Actualizar todas as subscricións." #~ msgid "Mark All As _Read" #~ msgstr "Marcar todo coma _lido" #~ msgid "Marks read every item of every subscription." #~ msgstr "Marcar coma lidos todos os artigos de cada subscrición." #~ msgid "_Import Feed List..." #~ msgstr "_Importar lista de fontes..." #~ msgid "Imports an OPML feed list." #~ msgstr "Importar unha lista de fontes co formato OPML." #~ msgid "_Export Feed List..." #~ msgstr "_Exportar lista de fontes..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Exportar a lista de fontes co formato OPML." #~ msgid "_Quit" #~ msgstr "_Saír" #~ msgid "_Feed" #~ msgstr "_Fonte" #~ msgid "Remove _All Items" #~ msgstr "Eliminar _todos os artigos" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Eliminar todos os artigos da fonte seleccionada." #~ msgid "_Item" #~ msgstr "_Artigo" #, fuzzy #~ msgid "Next Item" #~ msgstr "_Seguinte artigo non lido" #~ msgid "_Next Unread Item" #~ msgstr "_Seguinte artigo non lido" #~ msgid "_View" #~ msgstr "_Ver" #~ msgid "Increases the text size of the item view." #~ msgstr "Aumenta o tamaño do texto na vista do artigo." #~ msgid "Decreases the text size of the item view." #~ msgstr "Diminúe o tamaño do texto na vista do artigo." #~ msgid "_Tools" #~ msgstr "_Ferramentas" #~ msgid "_Update Monitor" #~ msgstr "_Monitor de actualizacións" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Amosa unha lista de todas as fontes na cola de actualizacións" #~ msgid "_Preferences" #~ msgstr "_Preferencias" #~ msgid "Edit Preferences." #~ msgstr "Editar preferencias." #~ msgid "S_earch" #~ msgstr "_Procurar" #~ msgid "Search All Feeds..." #~ msgstr "Procurar en todas as fontes..." #~ msgid "Show the search dialog." #~ msgstr "Amosa a caixa de diálogo de busca." #~ msgid "_Help" #~ msgstr "_Axuda" #~ msgid "_Contents" #~ msgstr "_Contidos" #~ msgid "View help for this application." #~ msgstr "Ver a axuda para esta aplicación." #~ msgid "_Quick Reference" #~ msgstr "_Referencia rápida" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Ver a lista de todos os atallos do Liferea." #~ msgid "_FAQ" #~ msgstr "_Preguntas máis frecuentes" #~ msgid "View the FAQ for this application." #~ msgstr "Ver as preguntas máis frecuentes para esta aplicación." #~ msgid "_About" #~ msgstr "_Acerca de" #~ msgid "Shows an about dialog." #~ msgstr "Amosa información do programa." #~ msgid "_Normal View" #~ msgstr "Visualización _normal" #~ msgid "Set view mode to mail client mode." #~ msgstr "Define o modo de visualización en modo cliente de correo." #~ msgid "_Wide View" #~ msgstr "Visualización _ampla" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Define o modo de visualización usando tres paneis verticais." #~ msgid "_Combined View" #~ msgstr "Visualización _combinada" #~ msgid "Set view mode to two pane mode." #~ msgstr "Define o modo de visualización usando dous paneis." #~ msgid "_Reduced Feed List" #~ msgstr "Lista de fontes _reducida" #~ msgid "Hide feeds with no unread items." #~ msgstr "Agocha as fontes sen artigos non lidos" #~ msgid "_New Subscription..." #~ msgstr "_Nova subscrición..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Engade unha subscrición á lista de fontes." #~ msgid "Adds a folder to the feed list." #~ msgstr "Engade un cartafol á lista de fontes." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Engade un novo cartafol de busca á lista de fontes." #~ msgid "New _Source..." #~ msgstr "Nova _fonte..." #~ msgid "Adds a new feed list source." #~ msgstr "Engadir unha nova orixe de listas de fontes." #~ msgid "Adds a new news bin." #~ msgstr "Engade unha nova bandexa de novas." #~ msgid "_Mark Items Read" #~ msgstr "_Marcar artigos coma lidos" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "Marca coma lidos todos os artigos da lista de fontes seleccionada." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Actualiza a subscrición seleccionada ou todas as subscricións do cartafol " #~ "seleccionado." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Abre a caixa de diálogo para a subscrición seleccionada." #~ msgid "_Remove" #~ msgstr "_Eliminar" #~ msgid "Removes the selected subscription." #~ msgstr "Elimina a subscrición seleccionada." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Alterna o estado de lectura do artigo seleccionado." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Alterna o estado do marcador do artigo seleccionado." #~ msgid "R_emove" #~ msgstr "_Eliminar" #~ msgid "Removes the selected item." #~ msgstr "Elimina o artigo seleccionado." #, fuzzy #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Inicia a ligazón do artigo no navegador configurado." #, fuzzy #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Inicia a ligazón do artigo no navegador configurado." #, fuzzy #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Inicia a ligazón do artigo no navegador configurado." #~ msgid "_Work Offline" #~ msgstr "_Traballar sen conexión" #~ msgid "_Update All" #~ msgstr "_Actualizar todo" #~ msgid "_Show Liferea" #~ msgstr "_Amosar Liferea" #, fuzzy #~ msgid "InoReader" #~ msgstr "Google Reader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Nota: Gardarase sen cifrar o nome de usuario e contrasinal no ficheiro " #~ "de lista de fontes do Liferea " #, fuzzy #~ msgid "Add InoReader Account" #~ msgstr "Engadir conta de Google Reader" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "Por favor introduza os datos da súa conta de Google Reader." #~ msgid "normal view" #~ msgstr "vista normal" #~ msgid "wide view" #~ msgstr "vista larga" #~ msgid "combined view" #~ msgstr "vista combinada" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, lector de fontes para Linux" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "Para máis información, por favor visite https://lzone.de/liferea/" #, fuzzy #~ msgid "_Open Link In Browser" #~ msgstr "_Inicia a ligazón no navegador" #, fuzzy #~ msgid "_Open Link In External Browser" #~ msgstr "_Inicia a ligazón no navegador" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Crear unha fonte de motor de busca" #~ msgid "enter any search string you want" #~ msgstr "introduza unha cadea para procurar" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "_Cantidade máxima de artigos da busca:" #, fuzzy #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Nota: Liferea xerará unha fonte de subscrición que poderá ser usada para " #~ "consultar os resultados dos motores de busca da cadea especificada. Pode " #~ "manter esta fonte permanentemente e actualizala como calquera outra " #~ "subscrición." #~ msgid "Liferea is now online" #~ msgstr "Liferea está conectado" #~ msgid "Work Offline" #~ msgstr "Traballar sen conexión" #~ msgid "Liferea is now offline" #~ msgstr "Liferea está desconectado" #~ msgid "Work Online" #~ msgstr "Traballar con conexión" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Esta opción permite desactivar a actualización de subscricións." #~ msgid "Browser default" #~ msgstr "Navegador predeterminado" #~ msgid "Existing window" #~ msgstr "Xanela existente" #~ msgid "New window" #~ msgstr "Nova xanela" #~ msgid "New tab" #~ msgstr "Novo separador" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Lector de fontes" #~ msgid "Online/Offline Button" #~ msgstr "Botón de conexión/desconexión" #~ msgid "_Open link in:" #~ msgstr "_Abrir ligazón en:" #~ msgid "No comments yet." #~ msgstr "Aínda sen comentarios." #~ msgid "Refresh" #~ msgstr "Actualizar" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - Lector de fontes para Linux" #, fuzzy #~ msgid "" #~ "

      Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

      You can add new subscriptions

      • From main menu " #~ "'Subscription' -> 'New Subscription'
      • By dropping feed links " #~ "into the subscription list
      • By right clicking links and choosing " #~ "'Subscribe' within Liferea

      " #~ msgstr "" #~ "

      Benvido ao Liferea, un agregador de fontes de novas en liña " #~ "para o escritorio.

      O panel da esquerda contén a lista das súas " #~ "subscricións. Para engadir unha subscrición seleccione Fontes -> Nova " #~ "Subscrición. Para navegar polos titulares dunha fonte, selecciónea na " #~ "lista e os titulares cargaranse no panel dereito.

      " #, fuzzy #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "_Finalizar en vez de minimizar á icona da bandexa." #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d artigo novo" #~ msgstr[1] "%d artigos novos" #~ msgid "No new items" #~ msgstr "Non hai artigos novos" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d artigo non lido" #~ msgstr[1] "" #~ "%s\n" #~ "%d artigos non lidos" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Non hai artigos non lidos" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Fonte en formato Atom non válido: autor descoñecido" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Integra a lista de fontes da súa conta de Google Reader. Liferea amosará " #~ "a súa subscrición do Google Reader, e sincronizará a súa lista de fontes " #~ "e de lectura." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Integra lista de blogues ou Planetas na súa lista de fontes. Liferea " #~ "engadirá ou eliminará fontes automaticamente de acordo ás modificacións " #~ "no documento OPML" #, fuzzy #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Integra a lista de fontes da súa conta de Google Reader. Liferea amosará " #~ "a súa subscrición do Google Reader, e sincronizará a súa lista de fontes " #~ "e de lectura." #~ msgid "This feed does not exist anymore!" #~ msgstr "Esta fonte xa non existe!" #~ msgid "This news entry has no headline" #~ msgstr "Esta nova non ten titular" #~ msgid "Visit" #~ msgstr "Visita" #~ msgid "Open feed" #~ msgstr "Abrir fonte" #~ msgid "Feed Update" #~ msgstr "Actualizar fonte" #~ msgid "Show details" #~ msgstr "Amosar detalles" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "_Aplicar notificación emerxente para esta subscrición." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_Non amosar notificacións emerxentes para esta subscrición." #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Dereitos de autor (c) 2003-2009\n" #~ "Os desenvolvedores do Liferea\n" #, fuzzy #~ msgid "Notification Settings" #~ msgstr "Preferencias de notificación" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Amosa unha xanela _emerxente ao recibir novos titulares." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Amosa unha _icona na área de notificación (bandexa do sistema)." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Amosa a _cantidade de novos artigos na icona da bandexa." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "_Finalizar en vez de minimizar á icona da bandexa." #~ msgid "_Start in tray icon." #~ msgstr "_Iniciar a icona na bandexa" #~ msgid "Download and view feeds" #~ msgstr "Descarga e amosa fontes" #~ msgid "You may want to validate the feed using" #~ msgstr "Pode validar a fonte utilizando" #~ msgid "Launch Item In _Tab" #~ msgstr "Iniciar o artigo nun novo _separador" #~ msgid "_Launch Item In Browser" #~ msgstr "_Iniciar o artigo no navegador" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Copiar o _URL do artigo ao portapapeis" #~ msgid "flag" #~ msgstr "marcar" #~ msgid "bookmark" #~ msgstr "marcador" #~ msgid "comments" #~ msgstr "comentarios" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Fallou a descarga do contido asociado: «%s»" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Rematou a descarga do contido asociado: «%s»" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Esta versión do Liferea utiliza un novo formato de caché polo que as " #~ "antigas fontes foron trasladadas. O contido da caché en %s non se " #~ "eliminou automaticamente. Por favor, elimine este cartafol manualmente " #~ "cando teña a certeza de que a actualización rematou correctamente!" #, fuzzy #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Fallou a descarga do contido asociado: «%s»" #, fuzzy #~ msgid "Download finished." #~ msgstr "_Descargar empregando" #~ msgid "Choose download directory" #~ msgstr "Escolla o cartafol de descarga" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Manual:\n" #~ "(%s para URL)" #~ msgid "_Save downloads in" #~ msgstr "_Gardar descargas en" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "_Activar a sincronización na rede local" #~ msgid "_Service Name" #~ msgstr "Nome do _servizo" #~ msgid "Sync" #~ msgstr "Sincronizar" #~ msgid "Downloading Enclosure" #~ msgstr "Descargando contido asociado" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "_Pasar o URL e non descargar o contido asociado." #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Saltar ao seguinte artigo non lido. Se é preciso, selecciona a seguinte " #~ "fonte con artigos non lidos." #~ msgid "Liferea Sync %s@%s" #~ msgstr "Sincronizar Liferea %s@%s" #~ msgid "link cosmos" #~ msgstr "outras ligazóns" #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "Amosa mensaxes de depuración para a carga de plugins" #~ msgid "Liferea seems to be running already!" #~ msgstr "Semella que o Liferea xa está en execución!" #~ msgid "Update status" #~ msgstr "Estado da actualización" #~ msgid "was updated" #~ msgstr "foi actualizado" #~ msgid "was not updated" #~ msgstr "non foi actualizado" #~ msgid "The orientation of the tray." #~ msgstr "A orientación da bandexa." #~ msgid "%s" #~ msgstr "%s" #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "_Script Manager" #~ msgstr "_Xestor de scripts" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Permite configurar e editar ganchos de scripts LUA" #~ msgid "Search With ..." #~ msgstr "Procurar con ..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d Resultado da procura de «%s»" #~ msgstr[1] "%d Resultados da procura de «%s»" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d Resultado da Procura" #~ msgstr[1] "%d Resultados da Procura" #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "A lista de artigos contén todos aqueles artigos que coinciden co " #~ "resultado da procura especificada. Se desexa gardar este resultado, pode " #~ "premer no botón «Cartafol de busca» na caixa de diálogo de busca e o " #~ "Liferea engadirá un cartafol de busca á súa lista de fontes." #~ msgid "Count" #~ msgstr "Cantidade" #~ msgid "You have to select a feed entry" #~ msgstr "Debe seleccionar unha fonte" #~ msgid "(empty)" #~ msgstr "(baleiro)" #~ msgid "_Properties..." #~ msgstr "_Propiedades..." #~ msgid "Update out-dated feeds" #~ msgstr "Actualizar fontes desactualizadas" #~ msgid "Force update of all feeds" #~ msgstr "Obrigar a actualización de todas as fontes" #~ msgid "No feed update at all" #~ msgstr "Non se actualizou ningunha fonte" #~ msgid "startup" #~ msgstr "inicializar" #~ msgid "feed updated" #~ msgstr "fonte actualizada" #~ msgid "feed added" #~ msgstr "fonte engadida" #~ msgid "item selected" #~ msgstr "artigo seleccionado" #~ msgid "feed selected" #~ msgstr "fonte seleccionada" #~ msgid "item unselected" #~ msgstr "artigo non seleccionado" #~ msgid "feed unselected" #~ msgstr "fonte non seleccionada" #~ msgid "shutdown" #~ msgstr "pechar" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Desculpe, non hai soporte para scripts dispoñíbeis!" #~ msgid "Script Name" #~ msgstr "Nome do script" #~ msgid "No script selected!" #~ msgstr "Non se seleccionou ningún script!" #~ msgid "Create a new search feed." #~ msgstr "Crear unha nova fonte de busca." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea non pode amosar o contido deste artigo." #~ msgid "

      View this item's content.

      " #~ msgstr "

      Visualizar o contido deste artigo.

      " #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "Integra a lista de fontes da súa conta de Bloglines. Liferea amosará a " #~ "súa subscrición do Bloglines coma unha subárbore de só lectura na lista " #~ "de fontes." #~ msgid "feedlist.opml" #~ msgstr "feedlist_gl.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s ten %d titular novo ou actualizado\n" #~ msgstr[1] "%s ten %d titulares novos ou actualizados\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Hook" #~ msgstr "Gancho" #~ msgid "Registered Scripts" #~ msgstr "Scripts rexistrados" #~ msgid "Script Code" #~ msgstr "Código do script" #~ msgid "text/plain" #~ msgstr "texto/plano" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Esta opción pode causar significativos atrasos ao cargar cartafoles " #~ "que conteñen moitas fontes." #~ msgid "Downloading Enclosures" #~ msgstr "Descargando contidos asociados" #~ msgid "Feed Cache Handling" #~ msgstr "Xestión do caché da fonte" #~ msgid "Feed Name" #~ msgstr "Nome da fonte" #~ msgid "Feed Update Settings" #~ msgstr "" #~ "Preferencias de actualización das fontes" #~ msgid "HTTP Proxy Server" #~ msgstr "Servidor proxy HTTP" #~ msgid "Opening Enclosures" #~ msgstr "Abrindo contidos asociados" #~ msgid "Reading Headlines" #~ msgstr "Lendo titulares" #~ msgid "Toolbar Settings" #~ msgstr "Preferencias da barra de ferramentas" #~ msgid "Update Interval" #~ msgstr "Intervalo de actualización" #~ msgid "Web Integration" #~ msgstr "Integración web" #~ msgid "Add Script" #~ msgstr "Engadir un script" #~ msgid "At _startup:" #~ msgstr "Ao _iniciar:" #~ msgid "Attention Profile" #~ msgstr "Perfil de atención" #~ msgid "Create new script" #~ msgstr "Crear un novo script" #~ msgid "Exec Command" #~ msgstr "Executar comando" #~ msgid "Reuse existing script" #~ msgstr "Reutilizar un script existente" #~ msgid "Script Manager" #~ msgstr "Xestor de scripts" #~ msgid "Search _Link Cosmos with" #~ msgstr "Procurar no universo de ligazóns con" #~ msgid "_Allow Flash in Feeds." #~ msgstr "_Permitir flash nas fontes." liferea-1.12.7/po/he.po000066400000000000000000002203631352135647700146060ustar00rootroot00000000000000# Hebrew translation for liferea. # Copyright (c) 2003-2016 The Liferea Team # This file is distributed under the same license as the liferea package. # Yaron Sheffer , 2010. # msgid "" msgstr "" "Project-Id-Version: liferea 1.8.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2012-12-23 18:24+0200\n" "Last-Translator: Isratine Citizen \n" "Language-Team: Hebrew \n" "Language: he\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: Poedit 1.5.4\n" "X-Language: he\n" "X-Source-Language: en\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "קורא ערוצים" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" "‏Liferea הינו קיצור של Linux Feed Reader (קורא ערוצים של Linux). זהו מאגד " "חדשות עבור ערוצי חדשות מקוונים. זה תומך במספר של פורמטים שונים של ערוצים " "כולל RSS/RDF, ‏CDF וגם Atom. קיימים קוראי חדשות רבים אחרים זמינים, אך אלו לא " "זמינים עבור Linux או מצריכים ספריות חיצוניות רבות על מנת שיותקנו. Liferea " "מנסה לגשר על פער זה על ידי יצירת מאגד חדשות עבור GTK/GNOME מהיר, קל לשימוש, " "קל להתקנה." #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "תכונות מיוחדות:" #: ../liferea.appdata.xml.in.h:4 msgid "Read articles when offline" msgstr "קריאת מאמרים במצב לא־מקוון" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "סנכרון בעזרת TheOldReader" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "סנכרון בעזרת TinyTinyRSS" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "סנכרון בעזרת InoReader" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "סנכרון בעזרת Reedah" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "אחסון כותרות באופן קבוע בתוך סלי איסוף" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "התאמת פריטים באמצעות תיקיות חיפוש" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "ניגון פודקסטים" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "‫Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "קורא ערוצים" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "קורא ערוצים Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "קרא ערוצי חדשות ובלוגים" #: ../net.sourceforge.liferea.desktop.in.h:5 #, fuzzy msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "חדשות;ערוץ;הזנה;פיד;מאגד;בלוג;פודקסט;" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "ערוץ זה הופסק, ואינו זמין יותר. Liferea לא יעדכן את ערוץ זה בעתיד, אולם " "עדיין יש באפשרותך לגשת לכותרות המוטמנות." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
      HTTP error code : " msgstr "" "
      העדכון האחרון של הרשמה זו נכשל!
      HTTP " "error code :
      " #
      #
      #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "

      אירעו שגיאות במהלך פענוח ערוץ זה!

      " #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "פרטי שגיאת מפענח" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "

      פרטים

      " #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" "

      אפשרי כי ברצונך ליצור קשר עם מחבר/מנהל הערוץ אודות זאת!

      " #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "

      אירעו שגיאות במהלך סינון ערוץ זה!

      " #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "פרטי שגיאת מסנן" # הזנה: #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "ערוץ:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "מקור:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "

      מוציא לאור

      " #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "זכויות יוצרים" #
      ערוצים עם
      # RTL HTML MARKUP IS NEEDED # ערוצי משנה עם # > האם יש לך רעיון מוצלח יותר עבור children או child? # > אני חשבתי בכוון של child/parent process (תהליך צאצא/הורה) # > מהי דעתך בעניין? # כיוון שהמילה child/children מופיעה בדיוק פעמיים, ניתן לארגן פתרון אד הוק: # בבחירת תיקייה, _הצג את כל הפריטים של כל הערוצים שבתוכה (או - שתחתיה). # ופשוט "X ערוצים עם Y הודעות שלא נקראו". בהנחה שהמשתמש מבין מההקשר # שהכוונה לערוצים בתוך תיקייה מסוימת. #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "ערוצים עם" #
      כותרות שלא נקראו
      #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "כותרות שלא נקראו" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "
      תיקייה:
      " #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "מקור" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "ערוץ" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "תויק תחת" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "מחבר" # משותף #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "מומלץ על ידי" # באמצעות #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "דרך" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "קשורים" # פורסם גם אצל # בנוסף פורסם אצל #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "פורסם גם בערוץ" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "יוצר" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" # RLO workaround until RTL problem will be solved #

      תגובות

      #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "תגובות‮" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "מעדכן כעת…" #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "פלג" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "אגף" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "סל איסוף:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "

      כדי להוסיף פריטים לתוך סל איסוף זה, יש לבחור \"העתק לתוך סל " "איסוף\" מתוך תפריט ההקשר של רשימת הפריטים.

      " #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "

      תיקיית חיפוש:

      " #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "פקודת דפדפן נכשלה: ‭%s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "מפעיל כעת את: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "שגיאת הרשאה" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "לא ניתן ליצור מדור מטמון עבור \"%s\"!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "היום %k:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "אתמול %k:%M" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "יום %a %k:%M" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d ב%b %k:%M" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d ב%b %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "‏\"%s\" אינו קובץ תצורה תקין של טיפוס צירופים!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "לא הגדרת כלי הורדה עדיין! אנא עשה זאת בכרטיסייה 'הורדה' בתוך כלים/העדפות." #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "פקודה נכשלה: \n" "\n" "%s\n" "\n" " אנא בדוק כי כלי הורדה המוגדר הינו מותקן ועובד כראוי! באפשרותך לשנות זאת " "בכרטיסייה 'הורדה' בתוך כלים/העדפות." # בשינוי השם של #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "שגיאה בשינוי השם %s אל %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "שגיאת XML במהלך קריאת קובץ OPML! לא ניתן לייבא את \"%s\"!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "מסמך ריק! מסמך OPML ‏\"%s\" לא אמור להיות ריק במהלך ייבוא." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "‏\"%s\" אינו מסמך OPML תקין. Liferea לא מסוגל לייבא קובץ זה!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "רשימת ערוצים מיובאת" #: ../src/export.c:481 msgid "Import Feed List" msgstr "ייבוא רשימת ערוצים" #: ../src/export.c:481 msgid "Import" msgstr "יב_א" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "קבצי OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "אירעה שגיאה במהלך ייצוא רשימת ערוצים!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "ייצוא רשימת ערוצים הסתיים בהצלחה!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "ייצוא רשימת ערוצים" #: ../src/export.c:498 msgid "Export" msgstr "יצ_א" #: ../src/feed.c:317 msgid "" "

      Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

      " msgstr "" "

      לא ניתן לזהות את טיפוס הערוץ! אנא בדוק כי המקור אכן מצביע " "לאחד הפורמטים הנתמכים.

      תוצאת פענוח XML:


      " # <שם_הזנה> עודכנה... #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "‏\"%s\" עודכן..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "‏\"%s\" אינו זמין" # דף מרשתת #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "כתובת URL אליה ברצונך להירשם מצביעה על דף אינטרנט ולא זוהו ערוצים בתוכו " "באמצעות הגילוי האוטומטי. ייתכן שדף אינטרנט זה לא תומך בגילוי ערוצים אוטומטי." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "שגיאת XML במהלך קריאת ערוץ! לא ניתן לטעון את הערוץ \"%s\"!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "מסמך ריק!" # האם XML זה זכר או נקבה? #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "‏XML לא תקין!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "המקור מצביע למסמך HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "לא ניתן לקבוע את טיפוס הערוץ." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "אין פריטים שלא נקראו" #: ../src/liferea_application.c:282 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "`shown' וא `hidden' תויהל לוכי STATE. STATE בצמב ישארה ןולחה רשאכ Liferea תא " "לחתה" # cli #: ../src/liferea_application.c:282 msgid "STATE" msgstr "" # cli #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "אצו אסרג עדימ גצה" # cli #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "השדח המשרה ףסוה" # cli #: ../src/liferea_application.c:284 msgid "uri" msgstr "" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" # cli #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "סופיט לכמ גאביד תועדוה ספדה" # cli #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "ןומטמב לופיטה רובע גאביד תועדוה ספדה" # cli #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "הרוצתב לופיטה רובע גאביד תועדוה ספדה" # cli #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "םינותנ דסמב לופיטה רובע גאביד תועדוה ספדה" # cli #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "GUI תויצקנופ לכ לש גאביד תועדוה ספדה" # cli #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "~/.cache/liferea/output.xhtml ךותל קפומה דוקה תא ליטת םג איה HTML טלפ תרייצמ " "Liferea הב םעפ לכב .HTML רויצ גאביד רשפאמ" # cli #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "תשר תוליעפ לכ לש גאביד תועדוה ספדה" # cli #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "חונעפ תויצקנופ לכ לש גאביד תועדוה ספדה" # cli #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "דבעל ןמז ידמ רתוי חקול היצקנופל רשאכ גאביד תועדוה ספדה" # cli #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "תויצקהופ סיבזוע/םיסנכנ רשאכ גאביד תועדוה ספדה" # cli #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "ץורע ינוכדע דוביע לש גאביד תועדוה ספדה" # cli #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "שופיח תייקית תמאתה לש גאביד תועדוה ספדה" # cli #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "בר ללמ תולעב גאביד תועדוה ספדה" # cli #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "ןותנה אשונה רובע גאביד תועדוה ספדה" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "בקשת העדכון בוטלה" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "לא ניתן לפענח שם מחשב יעד" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "לא ניתן לפענח שם מחשב פרוקסי" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "לא ניתן להתחבר למארח מרוחק" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "לא ניתן להתחבר לפרוקסי" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "אירעה שגיאת תקשורת, או שהקצה המרוחק ניתק את הקשר באופן בלתי צפוי" # באופן קבוע #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "המשאב הועבר לצמיתות למיקום חדש" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "אינך מורשה לטעון את ערוץ זה. אנא עדכן את שם המשתמש והסיסמה שלך בתוך תיבת דו " "שיח של מאפייני ערוץ" #: ../src/net.c:476 msgid "Payment required" msgstr "נדרש תשלום" # אין באפשרות לגשת אל משאב זה # לא מותר לך לגשת אל משאב זה #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "אינך מורשה לגשת אל משאב זה" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "משאב לא נמצא" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "שיטה לא מורשית" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "לא קביל" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "נדרשת הזדהות אל מול פרוקסי" #: ../src/net.c:482 msgid "Request timed out" msgstr "תם הזמן שהוקצב לבקשה" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "הערוץ לא קיים. אנא בטל את ההרשמה!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "אירעה שגיאה פנימית בתהליך העדכון" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "ערוץ לא זמין: השרת ביקש הפנייה שאינה נתמכת!" #: ../src/net.c:492 msgid "Client Error" msgstr "שגיאת לקוח" #: ../src/net.c:494 msgid "Server Error" msgstr "שגיאת שרת" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "אירעה שגיאת תקשורת לא מוכרת!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "פריט" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "מכיל" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "לא מכיל" #: ../src/rule.c:175 msgid "Item title" msgstr "כותר פריט" #: ../src/rule.c:176 msgid "Item body" msgstr "גוף פריט" #: ../src/rule.c:177 msgid "Read status" msgstr "מצב קריאה" #: ../src/rule.c:177 msgid "is unread" msgstr "לא נקרא" #: ../src/rule.c:177 msgid "is read" msgstr "נקרא" #: ../src/rule.c:178 msgid "Flag status" msgstr "מצב דגל" #: ../src/rule.c:178 msgid "is flagged" msgstr "מסומן" #: ../src/rule.c:178 msgid "is unflagged" msgstr "לא מסומן" #: ../src/rule.c:179 msgid "Podcast" msgstr "פודקסט" #: ../src/rule.c:179 msgid "included" msgstr "כלול" #: ../src/rule.c:179 msgid "not included" msgstr "לא לכלול" #: ../src/rule.c:180 msgid "Category" msgstr "קטגוריה" #: ../src/rule.c:180 msgid "is set" msgstr "מוגדרת בתור" #: ../src/rule.c:180 msgid "is not set" msgstr "לא מוגדרת בתור" #: ../src/rule.c:181 msgid "Feed title" msgstr "כותר ערוץ" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "ההרשמה \"%s\" כבר מתעדכנת כעת!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "ההרשמה \"%s\" הופסקה. Liferea לא יעדכן אותה יותר!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "מעדכן כעת סמל עבור \"%s\"" # RTL HTML MARKUP IS NEEDED #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "אירעה בעיה במהלך קריאת הרשמה זו. אנא בדוק כתובת URL ופלט מסוף." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "כתובת URL של \"%s\" הוחלפה לצמיתות ועודכנה" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "‏\"%s\" הופסק. Liferea לא יעדכן אותו יותר!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "‏\"%s\" לא השתנה מאז עדכון אחרון" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "מעדכן כעת את \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "שגיאה בפתיחת הקובץ הזמני %s לשימוש בסינון!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "
      ‎%s סיים עם סטטוס %d
      " #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "שגיאה: לא ניתן לפתוח צינור \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "שגיאה: לא ניתן לפתוח את הקובץ \"%s\"" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "שגיאה: הקובץ \"%s\" לא קיים" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "תיקיית חיפוש חדשה" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[היו שגיאות נוספות. הפלט קוצץ!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "מפענח XML: לא ניתן לפענח את המסמך:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "קבצים מצורפים" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " בתים" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "ק״ב" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "מ״ב" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "ג״ב" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "‏%d קובץ מצורף" msgstr[1] "‏%d קבצים מצורפים" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "בחר קובץ" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "סיומת קובץ .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "לא היה ניתן למצוא קובץ מפת סיביות: ‏%s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] "(%d חדש) " msgstr[1] "(%d חדשים) " #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d לא נקרא%s " msgstr[1] "%d לא נקראו%s " #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "נושאי עזרה" # הפנייה מהירה #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "תיעוד מהיר" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "שו״ת" #: ../src/ui/search_dialog.c:116 msgid "Saved Search" msgstr "חיפוש שמור" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "הזן שם משתמש וסיסמה עבור \"%s\" ‏(%s):" # מוכר #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "מקור לא ידוע" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 msgid "_Cancel" msgstr "_ביטול" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "כל הקבצים" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "‏Liferea מצוי כעת במצב לא־מקוון. אין אפשרות לעדכן ערוצים." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "חיפוש בכל הערוצים" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "סמן הכל ככאלה שנקראו" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "האם אתה בטוח כי ברצונך למחוק את \"%s\"?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "לפריט זה לא צוין קישור!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** בלי כותרת ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "כותרת" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "תאריך" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "עליך לבחור ערוץ כדי למחוק את הפריטים שלו!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "לא נבחר אף פריט" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "פתח בתוך _כרטיסייה" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "_פתח בתוך דפדפן" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "פתח בתוך דפדפן _חיצוני" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "העתק לתוך סל איסוף" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "_סמן באתר %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "העתק _מיקום פריט" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "החלף מצב _נקרא" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "החלף מצב _סימון" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "_הסר פריט" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "פתח צירוף..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "שמור בשם..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "העתק כתובת קישור" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_עדכן" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_עדכן תיקייה" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "_הרשמה חדשה..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "_תיקייה חדשה..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "ת_יקיית חיפוש חדשה..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "מ_קור חדש..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "_סל איסוף חדש..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_חדש" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "מיין ערוצים" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_סמן הכל ככאלה שנקראו" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "_הרכב מחדש" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_מחק" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "מ_אפיינים" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "המר להרשמות מקומיות..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "ברירת מחדל GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "טקסט מתחת לסמלים" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "טקסט לצד סמלים" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "סמלים בלבד" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "טקסט בלבד" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "דקות" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "שעות" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "ימים" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "רווח" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr "Ctrl + רווח" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr "Alt + רווח" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "תצוגה רגילה" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "תצוגה רחבה" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "תצוגה משולבת" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "דפדפן ברירת מחדל" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "ידני" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "טיפוס" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "תוכנית" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(ריק)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "כעת מרכיב מחדש" # הרשומה נמחקת כעת #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "מוחק הרשמה" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "האם אתה בטוח כי ברצונך למחוק את \"%s\" ואת כל תכולתו?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "האם אתה בטוח כי ברצונך למחוק את \"%s\"?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "אימות מחיקה" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "אימות מחיקה" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "_פתח" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "הספק של ערוץ זה ממליץ על תדירות עדכון בת דקה %d." msgstr[1] "הספק של ערוץ זה ממליץ על תדירות עדכון בת %d דקות." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "לערוץ זה לא הוגדרה תדירות עדכון." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "ללא כותרת" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "אתר אינטרנט" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "הרשמה חדשה" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "‏Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "‏Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "בחירת קובץ ‫‫OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "הרשמת OPML חדשה" # הקובץ OPML הינו אוסף של הזנות/ערוצים # לא נמצאו מקורות לרשימת הערוצים! #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "לא נמצאו טיפוסים של מקור רשימת ערוץ!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "טיפוס מקור" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "כניסה של '%s' עדיין לא הושלמה! אנא המתן עד לסיום הכניסה." #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "ההרשמה '%s' הומרה בהצלחה לערוצים מקומיים!" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "התחברות נכשלה!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "‏Reedah" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "לא ניתן לפענח JSON שהוחזר על ידי API של Reedah!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "‏TinyTinyRSS: ‏HTTP API של לא נגיש!" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "‏TinyTinyRSS הרשמה לערוץ נכשלה! בדוק אם באמת העברת URL ערוץ!" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "‏TinyTinyRSS: ביטול הרשמת ערוץ נכשל!" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "גרסת TinyTinyRSS זו לא תומכת בהסרת ערוצים. שדרג לגרסא %s או חדשה יותר!" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "‏Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "לא ניתן לפענח JSON שהוחזר על ידי API של TinyTinyRSS!" #: ../src/fl_sources/theoldreader_source.c:329 msgid "TheOldReader" msgstr "‏TheOldReader" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "פתח קישור בתוך _כרטיסייה" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "_פתח קישור בתוך דפדפן" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "_פתח קישור בתוך דפדפן חיצוני" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_סמן קישור באתר %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_העתק מיקום קישור" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "שמור _תמונה בשם" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "_העתק מיקום תמונה" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "_שמור קישור בשם" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "שמור _תמונה בשם" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "ה_רשמה..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "ה_עתק" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "ה_גדל גודל טקסט" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "ה_קטן גודל טקסט" #: ../glade/about.ui.h:1 msgid "About" msgstr "אודות" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "‏Liferea הינו מאגד חדשות עבור ‎GTK+‎" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "דף הבית של Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "אימות" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_שם משתמש:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_סיסמה:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "פתח צירוף" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "הורדת צירוף מן טיפוס:" # ינופקו # שם הקובץ שלתוכו מורד הצירוף יועבר כפרמטר לפקודה זו #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "מה על Liferea לעשות עם צירוף זה? אנא הזן מטה את הפקודה שברצונך להריץ. " "צירופים מורדים יסופקו בתור ארגומנט עבור פקודה זו:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_עיון" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "_ביצוע פעולה זו אוטומטית עבור כל הצירופים שכמו צירוף זה מעתה והלאה." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "הוסף חשבון ‫Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "אנא הזן הגדרות חשבון Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_סיסמה" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_שם משתמש (דוא״ל)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "הצג כותרות" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "כותרות" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "סמן הכל ככאלה שנקראו" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "סמן הכל ככאלה שנקראו" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "תיקייה חדשה" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "שם _תיקייה:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "צור סל איסוף" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "שם _סל איסוף:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "מקור ערוץ" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "טיפוס מקור:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_כתובת URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_פקודה" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_קובץ מקומי" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "בחר קובץ..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_מקור:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "טעינה \\ עיבוד־מאוחר" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "א_ל תשתמש בפרוקסי" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "_השתמש במסנן המרה" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "‏Liferea מסוגל לעבוד עם תוספים מסננים חיצוניים על מנת לגשת לערוצים ולתיקיות " "בפורמטים שלא נתמכים. ראה את התיעוד למידע נוסף." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "המר ב_אמצעות:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "בחירת מקור" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "בחר את טיפוס המקור שברצונך להוסיף..." # Would not it be better: Add OPML/Planet source #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "הוספת מקור ‫OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "אנא ציין שם קובץ מקומי או כתובת URL של רשימת ערוצים תקינה בפורמט OPML." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_מיקום" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "בחר _קובץ" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "העדפות" # לנהל, לטפל # *ניהול הטמנת הזנות # טיפול בהזנת מטמון # ניהול הזנת מטמון #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "ניהול הטמנת ערוצים" # _מספר שגרתי של פריטים שיישמרו מכל ערוץ: #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_ברירת מחדל למספר הפריטים שיישמרו מכל ערוץ:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "הגדרות עדכון ערוץ" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "הערה: רצוי לקבוע זמן רענון הגיוני. בדרך כלל תשאול של ערוצים כל שעה או " "פחות מהווה בזבוז של רוחב פס." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "_עדכן את כל ההרשמות בעת הפעלה." # תדירות _רענון ערוץ שגרתית: #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "ב_רירת מחדל לזמן רענון ערוץ:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "ערוצים" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "הגדרות תצוגת תיקיות" # תת־הערוצים > ערוצי־המשנה # האם עומדת לרשותך מילה מוצלחת יותר מ־צאצא? # הזנת צאצא child feeds # תהליך צאצא child process # תהליך הורה parent process # _הצג את כל הפריטים של כל ההזנות המשניות כאשר תיקייה נבחרת. #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "_הצג את כל הפריטים של כל ערוצי המשנה כאשר תיקייה נבחרת." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "_הסתר פריטים שנקראו." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "סמלי ערוץ (Favicons)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_עדכן את כל הסמלים כעת" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "תיקיות" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "קריאת כותרות" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "_קרא מאמרים ברפרוף בעזרת:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "_מצב תצוגה שגרתי:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "מיזוג רשת" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_פרסם סימניות באתר" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "הגדרות דפדפן פנימי" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "פתח קישורים ב_חלון של Liferea." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_נטרל Javascript." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_אפשר תוספי דפדפן." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "הגדרות דפדפן חיצוני" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_דפדפן:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_ידני:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(s% עבור URL)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "דפדפן" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "הגדרות סרגל כלים" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "הס_תר סרגל כלים." # סיווג #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "_תוויות כפתורים בסרגל כלים:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" # מ.מ.ג. #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "ממשק" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "שרת פרוקסי HTTP" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_אתר אוטומטית (GNOME או סביבת עבודה)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_בלי פרוקסי" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_הגדרה ידנית:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_מארח פרוקסי:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_יציאת פרוקסי:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "ה_שתמש בזיהוי פרוקסי" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "שם מש_תמש פרוקסי:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "סיסמת _פרוקסי:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "פרוקסי" #: ../glade/prefs.ui.h:51 msgid "Privacy Settings" msgstr "הגדרות פרטיות" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "אמור לאתרים כי אני _לא רוצה להיות נתון למעקב" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "פרטיות" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "הורדת צירופים" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_הורד באמצעות" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "פתיחת צירופים" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "צירופים" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "מאפייני הרשמה" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "שם ערוץ" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_שם ערוץ:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "תדירות עדכון" # השתמש בתדירות עדכון _גלובלית. #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_השתמש בזמן עדכון גלובלי שגרתי." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_תדירות עדכון ערוץ ייחודית בשיעור של" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "א_ל תעדכן את ערוץ זה אוטומטית." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "ספק ערוץ זה ממליץ על תדירות עדכון של %d דקות." #: ../glade/properties.ui.h:11 msgid "General" msgstr "כללי" #: ../glade/properties.ui.h:20 msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "‏Liferea מסוגל לעבוד עם תסריטי סינון חיצוניים על מנת לגשת לערוצים ולתיקיות " "בפורמטים שלא נתמכים." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "הגדרות מטמון קובעות אם וכמה מתוכני הערוצים יישמרו כאשר היישום Liferea יוצא. " "פריטים מסומנים נשמרים תמיד לתוך המטמון." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "_הגדרות מטמון ברירת מחדל" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_נטרל מטמון" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_מטמון בלתי מוגבל" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "מספר _פריטים לשמור:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "ארכיון" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "_השתמש בזיהוי HTTP" # טעינת פריטים #: ../glade/properties.ui.h:34 msgid "Download" msgstr "טעינה" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_הורד אוטומטית את כל הצירופים של ערוץ זה." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "_טען אוטומטית קישור פריט לתוך דפדפן מוגדר בעת בחירת מאמרים." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "ה_תעלם מתגובות ערוצים עבור הרשמה זו." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_סמן פריטים שנטענו ככאלה שנקראו." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "מתקדם" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "הוסף חשבון Reedah" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "אנא הזן הגדרות חשבון Reedah." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "שינוי שם" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_שם חדש:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "מאפייני תיקיית חיפוש" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "_שם חיפוש:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "מצא פריטים אשר עומדים בקריטריונים המנויים להלן" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "_כל כלל מתאים" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "_על כל הכללים להתאים" # מתקדם #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "חיפוש מורחב" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "_תיקיית חיפוש..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "חיפוש בכל הערוצים" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_מורחב..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "חיפוש הטקסט שצוין בכל הערוצים. תוצאות החיפוש יופיעו ברשימת הפריטים." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_חפש:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "הזן מחרוזת תווים שאותה יחפש Liferea בכותרות הפריטים או בתוכנם." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "מתקדם..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "בכדי לעשות שימוש בגילוי ערוצים אוטומטי יש להזין כתובת URL של אתר אינטרנט, או " "כתובת מדויקת של הערוץ במידה והכתובת המדויקת ידועה לך." #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "הוסף חשבון TheOldReader" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "אנא הזן הגדרות חשבון TheOldReader." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "הוסף חשבון ‫Tiny Tiny RSS" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "אנא הזן הגדרות חשבון TinyTinyRSS." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "כתובת _שרת" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_שם משתמש" # מנטר העדכונים #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "ניטור אחר עדכונים" # _עצור #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "_בטל הכל" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "בקשות ממתינות" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "ערוצים שנטענים כעת" # _מינויים #~ msgid "_Subscriptions" #~ msgstr "_הרשמות" #~ msgid "Update _All" #~ msgstr "_עדכן הכל" #~ msgid "Updates all subscriptions." #~ msgstr "עדכון כל ההרשמות." #~ msgid "Mark All As _Read" #~ msgstr "סמן הכל בתור _נקראו" #~ msgid "Marks read every item of every subscription." #~ msgstr "סימון כל פריט בכל הרשמה ככזה שנקרא." #~ msgid "_Import Feed List..." #~ msgstr "י_בא רשימת ערוצים..." # מייבא רשימת הזנות מסוג OPML. # מייבא רשימת הזנות OPML. #~ msgid "Imports an OPML feed list." #~ msgstr "ייבוא רשימת ערוצים בתסדיר OPML." #~ msgid "_Export Feed List..." #~ msgstr "יצ_א רשימת ערוצים..." #~ msgid "Exports the feed list as OPML." #~ msgstr "ייצוא רשימת הערוצים בפורמט OPML." #~ msgid "_Quit" #~ msgstr "י_ציאה" #~ msgid "_Feed" #~ msgstr "ע_רוץ" #~ msgid "Remove _All Items" #~ msgstr "הסר את _כל הפריטים" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "הסר את כל הפריטים בערוץ שנבחר כעת." #~ msgid "_Item" #~ msgstr "_פריט" #~ msgid "Previous Item" #~ msgstr "פריט קודם" #~ msgid "Next Item" #~ msgstr "פריט הבא" #~ msgid "_Next Unread Item" #~ msgstr "_פריט הבא שלא נקרא" #~ msgid "_View" #~ msgstr "_תצוגה" #~ msgid "Increases the text size of the item view." #~ msgstr "הגדל את הטקסט בתצוגת הפריטים." #~ msgid "Decreases the text size of the item view." #~ msgstr "הקטן את הטקסט בתצוגת הפריטים." #~ msgid "_Tools" #~ msgstr "_כלים" #~ msgid "_Update Monitor" #~ msgstr "_עקוב אחר עדכונים" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "הצג רשימה של כל הערוצים שמצויים כעת בתוך תור העדכון" #~ msgid "_Preferences" #~ msgstr "_העדפות" #~ msgid "Edit Preferences." #~ msgstr "ערוך ההעדפות." #~ msgid "S_earch" #~ msgstr "_חיפוש" #~ msgid "Search All Feeds..." #~ msgstr "חפש בכל הערוצים..." #~ msgid "Show the search dialog." #~ msgstr "הצג דו שיח חיפוש." #~ msgid "_Help" #~ msgstr "_עזרה" #~ msgid "_Contents" #~ msgstr "_תכנים" #~ msgid "View help for this application." #~ msgstr "עיון במסכי עזרה עבור יישום זה." #~ msgid "_Quick Reference" #~ msgstr "_עזרה מהירה" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "צפייה בכל רשימת הקיצורים של Liferea." #~ msgid "_FAQ" #~ msgstr "_שו״ת" #~ msgid "View the FAQ for this application." #~ msgstr "צפייה בשאלות הנפוצות עבור יישום זה." #~ msgid "_About" #~ msgstr "_אודות" #~ msgid "Shows an about dialog." #~ msgstr "הצג דו שיח אודות." #~ msgid "_Normal View" #~ msgstr "תצוגה _רגילה" #~ msgid "Set view mode to mail client mode." #~ msgstr "הגדר צורת תצוגה בדומה ליישום דוא״ל." #~ msgid "_Wide View" #~ msgstr "תצוגה ר_חבה" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "הגדר צורת תצוגה לשלושה לוחות אנכיים." #~ msgid "_Combined View" #~ msgstr "תצוגה מ_שולבת" #~ msgid "Set view mode to two pane mode." #~ msgstr "הגדר צורת תצוגה לשני לוחות." #~ msgid "_Reduced Feed List" #~ msgstr "רשימת ערוצים מ_צומצמת" #~ msgid "Hide feeds with no unread items." #~ msgstr "הסתר ערוצים שבהם אין פריטים שלא נקראו." #~ msgid "_New Subscription..." #~ msgstr "_הרשמה חדשה..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "הוספת הרשמה לרשימת הערוצים." #~ msgid "Adds a folder to the feed list." #~ msgstr "הוספת תיקייה לרשימת הערוצים." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "הוספת תיקיית חיפוש חדשה לרשימת הערוצים." #~ msgid "New _Source..." #~ msgstr "_מקור חדש..." # הוספת מקור רשימת הזנות חדש. #~ msgid "Adds a new feed list source." #~ msgstr "הוספת מקור חדש לרשימת הערוצים." # סל איסוף חדשות #~ msgid "Adds a new news bin." #~ msgstr "הוספת סל איסוף חדש." #~ msgid "_Mark Items Read" #~ msgstr "_סמן פריטים ככאלה שנקראו" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "סימון כל הפריטים שנבחרו או את כל הערוצים בתיקייה שנבחרה ככאלה שנקראו." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "עדכון ההרשמה הנבחרת או את כל ההרשמות של התיקייה שנבחרה." # תכונות #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "פתיחת דו שיח המאפיינים עבור ההרשמה הנבחרת." #~ msgid "_Remove" #~ msgstr "הס_ר" #~ msgid "Removes the selected subscription." #~ msgstr "הסרת ההרשמה הנבחרת." #~ msgid "Toggles the read status of the selected item." #~ msgstr "החלפת מצב הקריאה של הפריט שנבחר." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "החלפת מצב הסימון של הפריט שנבחר." #~ msgid "R_emove" #~ msgstr "הס_ר" #~ msgid "Removes the selected item." #~ msgstr "הסרת הפריט שנבחר." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "שיגור הקישור של הפריט בתוך כרטיסיית דפדפן Liferea חדשה." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "שיגור הקישור של הפריט בתוך שמשת הפריטים של Liferea." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "שיגור הקישור של הפריט בתוך הדפדפן החיצוני שהוגדר." #~ msgid "_Fullscreen" #~ msgstr "_מסך מלא" #~ msgid "Browse at full screen" #~ msgstr "דפדף במסך מלא" #~ msgid "_Work Offline" #~ msgstr "עבוד _לא־מקוון" #~ msgid "_Update All" #~ msgstr "עדכן ה_כל" #~ msgid "_Show Liferea" #~ msgstr "_הצג את Liferea" #~ msgid "InoReader" #~ msgstr "‏InoReader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "הערה: שם המשתמש והסיסמה יישמרו בקובץ רשימת ערוצים של Liferea ללא שימוש " #~ "בהצפנה." #~ msgid "Add InoReader Account" #~ msgstr "הוסף חשבון InoReader" #~ msgid "Please enter your InoReader account settings." #~ msgstr "אנא הזן הגדרות חשבון InoReader." #~ msgid "Plugins" #~ msgstr "תוספים" #~ msgid "normal view" #~ msgstr "תצוגה רגילה" #~ msgid "wide view" #~ msgstr "תצוגה רחבה" #~ msgid "combined view" #~ msgstr "תצוגה משולבת" # cli #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "סקוניל לש םיצורע דגאמה ,Liferea" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "https://lzone.de/liferea/ רקב, ףסונ עדימל" #~ msgid "_Open Link In Browser" #~ msgstr "_פתח קישור בתוך דפדפן" #~ msgid "_Open Link In External Browser" #~ msgstr "_פתח קישור בתוך דפדפן חיצוני" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "צור ערוץ של מנוע חיפוש" #~ msgid "enter any search string you want" #~ msgstr "הזן מחרוזת חיפוש כלשהי" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "מספר מ_קסימלי של פריטי תוצאה:" # שפורטו #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "הערה: Liferea יפיק הרשמת ערוץ, המשמש לתשאל את תוצאות מנוע החיפוש עבור " #~ "מחרוזת החיפוש שצוינו. באפשרותך לשמור את ערוץ זה באופן קבוע ולעדכן אותו " #~ "כמו כל הרשמה אחרת." #~ msgid "Liferea is now online" #~ msgstr "‏Liferea מקוון כעת" #~ msgid "Work Offline" #~ msgstr "עבוד במצב לא־מקוון" #~ msgid "Liferea is now offline" #~ msgstr "‏Liferea לא־מקוון כעת" #~ msgid "Work Online" #~ msgstr "עבוד במצב מקוון" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "אפשרות זו מאפשרת לך לנטרל עדכון הרשמה." #~ msgid "Browser default" #~ msgstr "דפדפן ברירת מחדל" #~ msgid "Existing window" #~ msgstr "חלון קיים" #~ msgid "New window" #~ msgstr "חלון חדש" #~ msgid "New tab" #~ msgstr "כרטיסייה חדשה" #~ msgid "AOL Reader Login" #~ msgstr "כניסה אל AOL Reader" #~ msgid "AOL Reader" #~ msgstr "‏AOL Reader" #~ msgid "Online/Offline Button" #~ msgstr "מתג מקוון\\לא־מקוון" #~ msgid "_Open link in:" #~ msgstr "_פתח קישור בתוך:" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "ערוץ Atom לא תקין: מחבר לא ידוע" #~ msgid "Please enter your tt-rss account settings." #~ msgstr "אנא הזן את הגדרות חשבון tt-rss." # RLO workaround until RTL problem will be solved #

      אין עדיין תגובות.

      #~ msgid "No comments yet." #~ msgstr "אין עדיין תגובות." #~ msgid "Refresh" #~ msgstr "רענן" # The HTML bidi context seems to be incorrect, had to add markup #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "

      ‫Liferea‏ -‏ מאגד ערוצים של Linux

      " #~ msgid "" #~ "

      Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

      You can add new subscriptions

      • From main menu " #~ "'Subscription' -> 'New Subscription'
      • By dropping feed links " #~ "into the subscription list
      • By right clicking links and choosing " #~ "'Subscribe' within Liferea

      " #~ msgstr "" #~ "

      ברוך בואך אל Liferea, מאגד חדשות שולחני עבור ערוצים " #~ "מקוונים.

      באפשרותך להוסיף הרשמות חדשות

      • מתוך " #~ "תפריט ראשי 'הרשמות' -> 'הרשמה חדשה'
      • על ידי השלכת קישורי ערוץ " #~ "אל תוך רשימת ההרשמות
      • על ידי לחיצה ימנית על קישורים ובחירת תפריט " #~ "'הרשמה' בתוך Liferea

      " #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "שלב עם תפריט ההודעות (מחוון)" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "סיים במקום למזער אל תפריט ההודעות" #~ msgid "Start minimized to the messaging menu" #~ msgstr "התחל ממוזער אל תפריט ההודעות" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "פריט %d חדש" #~ msgstr[1] "%d פריטים חדשים" #~ msgid "No new items" #~ msgstr "אין פריטים חדשים" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "פריט %d שלא נקרא" #~ msgstr[1] "" #~ "%s\n" #~ "%d פריטים שלא נקראו" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "אין פריטים שלא נקראו" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "שילוב רשימת ערוצים של חשבון Google Reader. ‏Liferea יציג את ההרשמות שלך " #~ "מתוך Google Reader, ויסנכרן את רשימות הערוצים וסימוני הפריטים שנקראו." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "שילוב blogrolls או Planets בתוך רשימת הערוצים שלך. Liferea יוסיף ויוריד " #~ "ערוצים באופן אוטומטי ובהתאמה לפי השינויים במקור של מסמך OPML" #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "שילוב רשימת הערוצים של חשבון Tiny Tiny RSS (גרסא 1.5 ומעלה). Liferea יציג " #~ "את ההרשמות מתוך tt-rss, ויסנכרן את רשימות הערוצים וסימוני הפריטים שנקראו." #~ msgid "This feed does not exist anymore!" #~ msgstr "ערוץ זה לא קיים יותר!" #~ msgid "This news entry has no headline" #~ msgstr "לפריט חדשות זה אין כותרת" #~ msgid "Visit" #~ msgstr "בקר" #~ msgid "Open feed" #~ msgstr "פתח ערוץ" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "קיים עדכון %d עבור %s" #~ msgstr[1] "קיימים %d עדכונים עבור %s" #~ msgid "Feed Update" #~ msgstr "עדכון ערוץ" #~ msgid "Show details" #~ msgstr "הצג פרטים" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "ה_חל התראה קופצת עבור הרשמה זו." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_אל תציג התראה קופצת עבור הרשמה זו." #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" # הגדרות התראה #~ msgid "Notification Settings" #~ msgstr "הגדרת התראות" #~ msgid "Show a _popup window with new headlines." #~ msgstr "_הצג חלון קופץ עם כותרות חדשות." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "ה_צג צלמית מצב באזור ההתראות (מגש מערכת)." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "הצ_ג מספר של פריטים חדשים בסמל מגש." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "ס_יים במקום למזער אל סמל מגש." #~ msgid "_Start in tray icon." #~ msgstr "ה_תחל בסמל מגש." liferea-1.12.7/po/hu.po000066400000000000000000002233661352135647700146340ustar00rootroot00000000000000# Hungarian translation for liferea # Copyright (c) 2007, 2009, 2011, 2013 Free Software Foundation, Inc. # This file is distributed under the same license as the liferea package. # # Gabor Kelemen , 2009, 2011, 2013. # Balázs Úr , 2014. msgid "" msgstr "" "Project-Id-Version: liferea 1.10-rc4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2014-05-28 22:13+0200\n" "Last-Translator: Balázs Úr \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Hírforrásolvasó" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "A Liferea már nincs kapcsolódva az internethez" #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "Szinkronizálva közeli gépekkel" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "Szinkronizálva közeli gépekkel" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "Szinkronizálva közeli gépekkel" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "Szinkronizálva közeli gépekkel" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 #, fuzzy msgid "Play Podcasts" msgstr "Podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Hírforrásolvasó" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea hírforrásolvasó" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Hírforrások és blogok olvasása" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Ez a hírforrás megszűnt, többé nem érhető el. A Liferea nem frissíti a " "továbbiakban, de továbbra is elérhetőek lesznek a gyorsítótárazott címek." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
      HTTP error code : " msgstr "" "Nem sikerült a híreket frissíteni.
      . HTTP hibakód: " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Hiba történt a hírforrás elemzése közben." #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Értelmezési hiba részletei" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Részletek" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "Ezzel kapcsolatban keresse meg a hírforrás szerzőjét/webmesterét!" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Hiba történt a hírforrás szűrésekor." #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Szűrési hiba részletei" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Hírforrás:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Forrás:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Kiadó" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Copyright" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "gyermek" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "olvasatlan hírrel" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Mappa:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Forrás" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Hírforrás" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Beküldve" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Szerző" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Megosztotta" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Forrás:" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Kapcsolódó" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Beküldve továbbá" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Létrehozó" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Hozzászólások" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Frissítés…" #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Szakasz" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Részleg" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Hírgyűjtő:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Adjon elemeket a hírgyűjtőhöz a helyi menü „Másolás hírgyűjtőbe” pontjával." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Keresőmappa:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Hibás böngészőparancs: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "%s indítása" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Hitelesítési hiba" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Nem hozható létre a %s ideiglenes könyvtár." #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Ma %l.%M %P" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Tegnap %l.%M %P" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a., %k.%M" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%b. %e., %k.%M" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%Y. %b. %e." #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "„%s” nem érvényes melléklettípus-konfigurációs fájl." #: ../src/enclosure.c:292 #, fuzzy msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Még nem állított be letöltőeszközt. Ezt az Eszközök -> Beállítások ablak " "Letöltés lapján teheti meg." #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "A parancs meghiúsult:\n" "\n" "%s\n" "\n" "Ellenőrizze, hogy a beállított letöltőeszköz telepítve van-e és helyesen " "működik-e! Az Eszközök/Beállítások ablak „Letöltés” lapján megváltoztathatja." #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Hiba %s átnevezésekor %s névre\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "XML hiba az OPML-fájl olvasása közben! Nem lehet importálni a fájlt („%s”)." #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "Üres dokumentum! Az OPML-dokumentum („%s”) üres, nem lehet importálni." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "%s érvénytelen OPML dokumentum! A Liferea nem tudja importálni a fájlt!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Importált hírforrások" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Hírforráslista importálása" #: ../src/export.c:481 msgid "Import" msgstr "Importálás" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "OPML-fájlok" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Hiba történt a hírforráslista exportálása közben." #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Hírforráslista exportálva!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Hírforráslista exportálása" #: ../src/export.c:498 msgid "Export" msgstr "Exportálás" #: ../src/feed.c:317 msgid "" "

      Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

      " msgstr "" "

      Nem sikerült felismerni a hírforrás típusát. Kérem, ellenőrizze, hogy a " "forrás valóban olyan forráshelyre mutat-e, amelynek hírforrás szolgáltatását " "a Liferea támogatja!

      XML-értelmező kimenete:
      " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "„%s” frissítve…" #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "„%s” nem érhető el" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "Az URL, melyre fel szeretne iratkozni egy weblapra mutat, és az automatikus " "feltérképezés nem talált hírforrást az oldalon. Lehet, hogy a weblap nem " "támogatja az automatikus feltérképezést." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "XML hiba a hírforrás olvasásában. %s nem tölthető be." #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Üres dokumentum." #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Érvénytelen XML." #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "A forrás HTML dokumentumra mutat." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Nem állapítható meg a hírforrás típusa." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Nincsenek olvasatlan elemek" #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "A Liferea indítása adott ÁLLAPOTÚ főablakkal. Az ÁLLAPOT lehet " "„shown” (látható), „iconified” (ikonméret) vagy „hidden” (rejtett)." #: ../src/liferea_application.c:282 msgid "STATE" msgstr "ÁLLAPOT" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Verzióinformáció megjelenítése, majd kilépés" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Új feliratkozás hozzáadása" #: ../src/liferea_application.c:284 msgid "uri" msgstr "URI" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Minden típusú hibakeresési üzenet kiírása" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "A gyorsítótár-kezelési hibakeresési üzenetek kiírása" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "A beállításkezelés hibakeresési üzeneteinek kiírása" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Az adatbázis-kezelés hibakeresési üzeneteinek kiírása" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Minden GUI függvény hibakeresési üzeneteinek kiírása" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Engedélyezi a HTML megjelenítés hibakeresését. Amikor a Liferea HTML " "kimenetet jelenít meg, az előállított HTML-t kiírja a ~/.cache/liferea/" "output.xhtml fájlba." #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Minden hálózati tevékenység hibakeresési üzeneteinek kiírása" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Minden feldolgozási függvény hibakeresési üzeneteinek kiírása" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Hibakeresési üzenetek kiírása, ha egy függvény feldolgozása túl sokáig tart" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Hibakeresési üzenetek kiírása függvényekbe belépéskor/kilépéskor" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "A hírforrásfrissítés-feldolgozás hibakeresési üzeneteinek kiírása" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "A keresőmappa-illesztés hibakeresési üzeneteinek kiírása" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Részletes hibakeresési üzenetek kiírása" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "A megadott témában a hibakeresési üzenetek kiírása" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "A frissítési kérés megszakítva" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "A cél gépneve nem oldható fel" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "A proxy gépneve nem oldható fel" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "A távoli kiszolgálóhoz nem lehet csatlakozni" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Nem lehet csatlakozni a proxyhoz" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "Hálózati hiba történt, vagy a másik fél váratlanul lezárta a kapcsolatot" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Az erőforrás véglegesen új helyre került" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Ön nem jogosult a hírforrás letöltésére. Ellenőrizze a felhasználói nevét és " "jelszavát a hírforrás tulajdonságai ablakban" #: ../src/net.c:476 msgid "Payment required" msgstr "Fizetés szükséges" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Nem jogosult az erőforrás elérésére" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Erőforrás nem található" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Az eljárás nem megengedett" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Nem fogadható el" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Proxyhitelesítés szükséges" #: ../src/net.c:482 msgid "Request timed out" msgstr "A kérés túllépte az időkorlátot" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "A forrás nem létezik. Kérem iratkozzon le!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Belső hiba történt a frissítési folyamatban" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "A hírforrás nem érhető el. A szerver nem támogatott átirányítást kért." #: ../src/net.c:492 msgid "Client Error" msgstr "Klienshiba" #: ../src/net.c:494 msgid "Server Error" msgstr "Kiszolgálóhiba" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Ismeretlen hálózati hiba történt" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Elem" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "tartalmazza" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "nem tartalmazza" #: ../src/rule.c:175 msgid "Item title" msgstr "Elem címe" #: ../src/rule.c:176 msgid "Item body" msgstr "Elem szövege" #: ../src/rule.c:177 msgid "Read status" msgstr "Olvasottsági állapot" #: ../src/rule.c:177 msgid "is unread" msgstr "olvasatlan" #: ../src/rule.c:177 msgid "is read" msgstr "olvasott" #: ../src/rule.c:178 msgid "Flag status" msgstr "Megjelöltségi állapot" #: ../src/rule.c:178 msgid "is flagged" msgstr "megjelölve" #: ../src/rule.c:178 msgid "is unflagged" msgstr "nincs megjelölve" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "van" #: ../src/rule.c:179 msgid "not included" msgstr "nincs" #: ../src/rule.c:180 msgid "Category" msgstr "Kategória" #: ../src/rule.c:180 msgid "is set" msgstr "beállítva" #: ../src/rule.c:180 msgid "is not set" msgstr "nincs beállítva" #: ../src/rule.c:181 msgid "Feed title" msgstr "Hírforrás címe" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "„%s” feliratkozás már frissítve lett!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "„%s” feliratkozás meg lett szüntetve. A Liferea nem fogja már frissíteni." #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "„%s” hírforrásikonjának frissítése" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Hiba történt a hírforrás olvasásakor. Kérem ellenőrizze az URL-t és az " "alkalmazás konzoli kimenetét." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "" "A hírforrást („%s”) frissíteni kellett, mert URL-je véglegesen megváltozott" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "„%s” meg lett szüntetve. A Liferea nem fogja már frissíteni." #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "Az utolsó frissítés óta %s nem változott." #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "%s frissítése" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Hiba %s ideiglenes fájl szűrésre történő megnyitásakor." #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s kilépett %d állapotkóddal" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Hiba: %s adatcsatorna nem nyitható meg" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Hiba: nem nyitható meg „%s” nevű fájl" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Hiba: nem létezik „%s” nevű fájl" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Új keresőmappa" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Több hiba is történt. A kimenet csonkítva lett!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "XML-értelmező: A következő dokumentumot nem lehet elemezni:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Mellékletek" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " bájt" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d melléklet" msgstr[1] "%d melléklet" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Fájl választása" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr ".%s fájlkiterjesztés" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "A képfájl nem található: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d új)" msgstr[1] " (%d új)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d olvasatlan%s" msgstr[1] "%d olvasatlan%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Súgótémák" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Rövid leírás" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "GYIK" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Speciális keresés" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "" "Írjon be egy felhasználónevet és egy jelszót a következőhöz: „%s” (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Ismeretlen forrás" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "Összes _megszakítása" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Minden fájl" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "A Liferea nem kapcsolódik az internetre, nem lehet frissíteni." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Keresés az összes hírforrásban" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Összes megjelölése olvasottnak" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Biztosan törli a következőt: „%s”?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Nincs hivatkozás megadva ehhez az elemhez." #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Nincs cím ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Cím" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Dátum" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Válasszon ki egy hírforrást az elemeinek törléséhez." #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Nincs kiválasztott elem" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Megnyitás l_apon" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "_Megnyitás böngészőben" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Megnyitás _külső böngészőben" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Másolás hírgyűjtőbe" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "Hivatkozás i_de: %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "_Elem helyének másolása" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Olvasottság átka_pcsolása" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Megjelöl_tség átkapcsolása" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "Elem el_távolítása" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Melléklet megnyitása…" #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Mentés másként…" #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Hivatkozás megnyitása" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Frissítés" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "Mappa f_rissítése" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Új _feliratkozás…" #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Új _mappa…" #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Új ke_resőmappa…" #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Új _forrás…" #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Új _hírgyűjtő…" #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "Ú_j" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Hírforrások rendezése" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "Összes megjelölése _olvasottnak" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "Újjáé_pítés" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Törlés" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "T_ulajdonságok" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Átalakítás helyi feliratkozásokra…" #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "GNOME alapértelmezett" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Szöveg az ikonok alatt" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Szöveg az ikonok mellett" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Csak ikonok" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Csak szöveg" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "perc" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "óra" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "nap" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Szóköz" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr "Ctrl + szóköz" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr "Alt + szóköz" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Normál nézet" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Széles elrendezés" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Kombinált elrendezés" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Alapértelmezett böngésző" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Egyéb…" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Típus" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Üres)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Újraépítés" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Bejegyzés törlése" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Biztosan törölni szeretné %s bejegyzést és tartalmát?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Biztosan törli a következőt: „%s”?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Törlés megerősítés bejegyzést?e" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Törlés megerősítés bejegyzést?e" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "A hírforrás szolgáltatója %d perces frissítési időközt javasol." msgstr[1] "A hírforrás szolgáltatója %d perces frissítési időközt javasol." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Ez a hírforrás nem ad meg javasolt frissítési időközt." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Névtelen" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Weboldal" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b. %e. %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Új feliratkozás" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "OPML-fájl választása" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Új OPML-feliratkozás" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Nem találhatóak hírforráslista-típusok." #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Forrás típusa" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "A(z) „%s” feliratkozás sikeresen át lett alakítva helyi hírforrásokra!" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Google Reader bejelentkezés hibával zárult." #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 #, fuzzy msgid "Could not parse JSON returned by Reedah API!" msgstr "A tt-rss API által visszaadott JSON nem dolgozható fel!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 #, fuzzy msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "A tt-rss API által visszaadott JSON nem dolgozható fel!" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Hírforrásolvasó" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Hivatkozás megnyitása l_apon" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "Hivatkozás _megnyitása böngészőben" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "Hivatkozás megnyitása _külső böngészőben" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "Hivatkozást _könyvjelzőbe: %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "Hivatkozás _címének másolása" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "_Kép mentése másként" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "Ké_p helyének másolása" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "_Hivatkozás mentése másként" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "_Kép mentése másként" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Feliratkozás…" #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "Szövegméret _növelése" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "Szövegméret _csökkentése" #: ../glade/about.ui.h:1 msgid "About" msgstr "Névjegy" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "A Liferea egy hírolvasó program GTK+ grafikus felülettel." #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "A Liferea honlapja" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Hitelesítés" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Felhasználónév:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "Jel_szó:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Melléklet megnyitása" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "A következő típusú melléklet megnyitása:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Mit tegyen a Liferea ezzel a melléklettel? Adja meg alább a végrehajtandó " "parancsot. A mellékletek URL címe a következő parancs argumentumai lesznek:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Tallózás" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Tegye ezt mostantól minden ehhez hasonló melléklettel." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Google Reader-felhasználó hozzáadása" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Adja meg a Google Readeres felhasználói beállításait" #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "Jel_szó" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "Felhasználó_név (e-mail)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Címek megjelenítése" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Címek" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Összes megjelölése olvasottnak" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Összes megjelölése olvasottnak" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Új mappa" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "_Mappa neve:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Hírgyűjtő készítése" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Hírgyűjtő neve:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Hírforrás címe" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Forrás típusa:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "Paran_cs" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Helyi fájl" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Fájl kiválasztása…" #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Forrás:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Letöltés / Utófeldolgozás" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "_Ne használjon proxyt a letöltéshez" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Átalakítási _szűrő használata" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "A Liferea képes különböző bővítmények használatára, ami a nem támogatott " "formátumú hírforrásokat is olvashatóvá teszi. További információ a " "dokumentációban található." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "_Konvertáló:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Forrásválasztás" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Válassza ki a hozzáadandó forrástípust…" #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "OPML/Planet hozzáadása" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Adjon meg egy helyi fájlt vagy egy érvényes OPML-hírforráslistára mutató URL-" "t." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Hely" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "Fájl _kiválasztása" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Liferea beállításai" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Hírforrás gyorsítótárának kezelése" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "Elmentett _hírek alapértelmezés szerinti száma hírforrásonként:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Hírforrás frissítésének beállításai" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Megjegyzés: Kérjük, egy elfogadható frissítési időt írjon be. A legtöbb " "esetben csak a sávszélesség pazarlását jelenti óránkéntinél gyakoribb " "hírforrás-frissítés." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "Min_den feliratkozás frissítése induláskor." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Alapértelmezett _frissítési időköz:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Hírforrás" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Mappamegjelenítési beállítások" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "" "Ö_sszes a mappában található hírforrás híreinek mutatása mappa " "kiválasztáskor." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "Olvasott hírek _elrejtése." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Hírforrásikonok" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "Hírforrásikonok frissítése _most" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Mappák" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Fejlécek olvasása" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Cikkek át_futása:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "Alapértelmezett _nézetmód:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Webes integráció" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Könyvjelzők küldése:" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Belső böngésző beállításai" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Hivatkozások megnyitása a Liferea _ablakában." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_JavaScript tiltása." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "Bö_ngészőbővítmények engedélyezése." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Külsőböngésző-beállítások" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "Böngés_ző:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Kézi:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s az URL-hez)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Böngésző" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Eszköztár beállításai" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Eszköztár elrejtése." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Esz_köztárgombok címkéi:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Kezelőfelület" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "HTTP proxy kiszolgáló" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Automatikus felismerés (GNOME vagy környezet)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Proxy nélkül" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Kézi beállítás" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "Proxy _gépnév:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "Proxy _port:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Proxy hi_telesítés használata" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Proxy _felhasználónév:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Proxy jel_szó:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Mappamegjelenítési beállítások" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Mellékletek letöltése" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Letöltés módja:" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Mellékletek megnyitása" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Mellékletek" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Feliratkozás tulajdonságai" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Hírforrás neve" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "Hírforrás _neve:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Frissítési időköz" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "Alapé_rtelmezett frissítési időköz használata" #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "Hírforrás-specifikus _frissítési időköz:" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Ne frissítse ezt a hírforrást automatikusan." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "A hírszolgáltató %d percenkénti frissítést javasol." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Általános" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "A Liferea képes különböző bővítmények használatára, ami a nem támogatott " "formátumú hírforrásokat is olvashatóvá teszi. További információ a " "dokumentációban található." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "A gyorsítótárazás beállítás azt szabályozza, hogy kilépéskor a Liferea " "elmenti-e a hírforrások tartalmát. A fontosnak jelölt hírek mindig el " "lesznek mentve a gyorsítótárba." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "A_lapértelmezett gyorsítótár-beállítások" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Gyorsítótár tiltása" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Korlátlan méretű gyorsítótár" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "El_mentendő elemek száma:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Archiválás" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "HTTP _hitelesítés használata" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Letöltés" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "A hírforrás összes mellékletének _automatikus letöltése." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "A cikk kiválasztásakor az elem hivatkozásának _automatikus megnyitása a " "beállított böngészőben." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "H_ozzászólás-forrás mellőzése ehhez a feliratkozáshoz." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Letöltött elemek megjelölése olvasottként." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Haladó" #: ../glade/reedah_source.ui.h:1 #, fuzzy msgid "Add Reedah Account" msgstr "Google Reader-felhasználó hozzáadása" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Adja meg a Google Readeres felhasználói beállításait" #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Átnevezés" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Új név:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Keresőmappa tulajdonságai" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "_Keresés neve:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "A következő feltételeknek megfelelő elemek keresése" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Bá_rmely szabály illeszkedik" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "Min_den szabály illeszkedik" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Speciális keresés" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "Keresés ma_ppában…" #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Keresés az összes hírforrásban" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Speciális…" #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Megkezdi a megadott szöveg keresését az összes hírforráson. Az eredmény a " "hírek listájában jelenik meg." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Keresés:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Írjon be egy keresőkifejezést, amit a program a hírek címében vagy " "tartalmában keres." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Speciális…" #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Adjon meg egy webcímet, ahol a program automatikusan megkeresi a híreket, " "vagy, ha tudja, akkor a hírforrás pontos címét." #: ../glade/theoldreader_source.ui.h:1 #, fuzzy msgid "Add TheOldReader Account" msgstr "Google Reader-felhasználó hozzáadása" #: ../glade/theoldreader_source.ui.h:2 #, fuzzy msgid "Please enter your TheOldReader account settings." msgstr "Adja meg a Google Readeres felhasználói beállításait" #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Tiny Tiny RSS fiók hozzáadása" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "Írja be a tt-rss felhasználói beállításait." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "_Kiszolgáló URL-címe" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "Felhasználó_név" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Frissítésfigyelő" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "Összes _megszakítása" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Függőben lévő kérések" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Letöltés most" #~ msgid "_Subscriptions" #~ msgstr "_Feliratkozások" #~ msgid "Update _All" #~ msgstr "Öss_zes frissítése" #~ msgid "Updates all subscriptions." #~ msgstr "Minden feliratkozás frissítése." #~ msgid "Mark All As _Read" #~ msgstr "Összes _olvasottnak jelölése" #~ msgid "Marks read every item of every subscription." #~ msgstr "Minden feliratkozás minden elemét olvasottnak jelöli" #~ msgid "_Import Feed List..." #~ msgstr "Hírforráslista i_mportálása…" #~ msgid "Imports an OPML feed list." #~ msgstr "Egy OPML hírforráslistát importál." #~ msgid "_Export Feed List..." #~ msgstr "Hírforráslista _exportálása…" #~ msgid "Exports the feed list as OPML." #~ msgstr "A hírcsoportlistát exportálja OPML formátumban." #~ msgid "_Quit" #~ msgstr "_Kilépés" #~ msgid "_Feed" #~ msgstr "F_orrás" #~ msgid "Remove _All Items" #~ msgstr "Minden elem _törlése" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Eltávolít minden elemet a jelenlegi hírforrásból." #~ msgid "_Item" #~ msgstr "Ele_m" #~ msgid "Previous Item" #~ msgstr "Előző elem" #~ msgid "Next Item" #~ msgstr "Következő elem" #~ msgid "_Next Unread Item" #~ msgstr "_Következő olvasatlan elem" #~ msgid "_View" #~ msgstr "_Nézet" #~ msgid "Increases the text size of the item view." #~ msgstr "Növeli az elemnézetben használt betűk méretét." #~ msgid "Decreases the text size of the item view." #~ msgstr "Csökkenti az elemnézetben használt betűk méretét." #~ msgid "_Tools" #~ msgstr "_Eszközök" #~ msgid "_Update Monitor" #~ msgstr "_Frissítésfigyelő" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "A jelenleg frissítés alatt álló források felsorolása" #~ msgid "_Preferences" #~ msgstr "_Beállítások" #~ msgid "Edit Preferences." #~ msgstr "Beállítások szerkesztése." #~ msgid "S_earch" #~ msgstr "_Keresés" #~ msgid "Search All Feeds..." #~ msgstr "Keresés az összes forrásban…" #~ msgid "Show the search dialog." #~ msgstr "Megjeleníti a keresés párbeszédpanelt." #~ msgid "_Help" #~ msgstr "_Súgó" #~ msgid "_Contents" #~ msgstr "_Tartalom" #~ msgid "View help for this application." #~ msgstr "Súgó megjelenítése az alkalmazáshoz." #~ msgid "_Quick Reference" #~ msgstr "Rövid _leírás" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Egy felsorolás megtekintése a Liferea gyorsbillentyűiről." #~ msgid "_FAQ" #~ msgstr "_GYIK" #~ msgid "View the FAQ for this application." #~ msgstr "" #~ "Az alkalmazással kapcsolatos gyakran ismételt kérdések megjelenítése." #~ msgid "_About" #~ msgstr "_Névjegy" #~ msgid "Shows an about dialog." #~ msgstr "Megjeleníti a névjegy ablakot." #~ msgid "_Normal View" #~ msgstr "N_ormál nézet" #~ msgid "Set view mode to mail client mode." #~ msgstr "Levelezőkhöz hasonló megjelenési mód." #~ msgid "_Wide View" #~ msgstr "_Széles nézet" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Három függőleges ablaktábla megjelenítése." #~ msgid "_Combined View" #~ msgstr "_Kombinált nézet" #~ msgid "Set view mode to two pane mode." #~ msgstr "Két ablaktáblás nézet." #~ msgid "_Reduced Feed List" #~ msgstr "Csökkentett _hírforráslista" #~ msgid "Hide feeds with no unread items." #~ msgstr "Az új elemeket nem tartalmazó hírforrások elrejtése." #~ msgid "_New Subscription..." #~ msgstr "Új _feliratkozás…" #~ msgid "Adds a subscription to the feed list." #~ msgstr "Új feliratkozást ad a forráslistához." #~ msgid "Adds a folder to the feed list." #~ msgstr "Mappát ad a forráslistához." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Új keresőmappát ad a forráslistához." #~ msgid "New _Source..." #~ msgstr "Új f_orrás…" #~ msgid "Adds a new feed list source." #~ msgstr "Új forráslista-forrást ad hozzá." #~ msgid "Adds a new news bin." #~ msgstr "Új hírgyűjtő felvétele." #~ msgid "_Mark Items Read" #~ msgstr "_Olvasottnak jelölés" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "A kiválasztott hírforráslista-csomópont összes elemét olvasottnak jelöli." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Frissíti a kiválasztott feliratkozást vagy az összes feliratkozást a " #~ "kiválasztott mappában." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Megnyitja a tulajdonságok ablakot a kiválasztott feliratkozáshoz." #~ msgid "_Remove" #~ msgstr "_Eltávolítás" #~ msgid "Removes the selected subscription." #~ msgstr "Eltávolítja a kiválasztott feliratkozást." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Átkapcsolja az olvasottsági állapotát a kiválasztott elemnek." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Az elem megjelöltségét ki/bekapcsolja." #~ msgid "R_emove" #~ msgstr "_Eltávolítás" #~ msgid "Removes the selected item." #~ msgstr "Eltávolítja a kiválasztott elemet." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Megnyitja az elem hivatkozását egy új Liferea böngészőlapon." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Megnyitja az elem hivatkozását a Liferea elemsávján." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Megnyitja az elemhivatkozást a beállított külső böngészőben." #~ msgid "_Fullscreen" #~ msgstr "_Teljes képernyő" #~ msgid "Browse at full screen" #~ msgstr "Teljes képernyős üzemmód" #~ msgid "_Work Offline" #~ msgstr "K_apcsolat nélküli munka" #~ msgid "_Update All" #~ msgstr "Összes _frissítése" #~ msgid "_Show Liferea" #~ msgstr "Liferea _megjelenítése" #, fuzzy #~ msgid "InoReader" #~ msgstr "Google Reader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Megjegyzés: A felhasználónevet és a jelszót a program elmenti a " #~ "hírforráslistához, titkosítás nélkül." #, fuzzy #~ msgid "Add InoReader Account" #~ msgstr "Google Reader-felhasználó hozzáadása" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "Adja meg a Google Readeres felhasználói beállításait" #~ msgid "Plugins" #~ msgstr "Bővítmények" #~ msgid "normal view" #~ msgstr "normál elrendezés" #~ msgid "wide view" #~ msgstr "széles elrendezés" #~ msgid "combined view" #~ msgstr "kombinált elrendezés" #~ msgid "No comments yet." #~ msgstr "Még nincs hozzászólás." #~ msgid "Refresh" #~ msgstr "Frissítés" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea – A linuxos hírforrásolvasó" #~ msgid "For more information, please visit http://lzone.de/liferea/" #~ msgstr "További információkért lásd: http://lzone.de/liferea/" #~ msgid "Liferea is now online" #~ msgstr "A Liferea kapcsolódik az internethez" #~ msgid "Work Offline" #~ msgstr "Kapcsolat nélküli munka" #~ msgid "Work Online" #~ msgstr "Munka kapcsolódva" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Ez a lehetőség lehetővé teszi a frissítések szüneteltetését." #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea – Linuxos hírforrásolvasó" #~ msgid "" #~ "

      Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

      You can add new subscriptions

      • From main menu " #~ "'Subscription' -> 'New Subscription'
      • By dropping feed links " #~ "into the subscription list
      • By right clicking links and choosing " #~ "'Subscribe' within Liferea

      " #~ msgstr "" #~ "

      Üdvözöljük a Liferea asztali onlinehír-olvasóban.

      Új " #~ "feliratkozásokat vehet fel

      • A főmenü „Feliratkozás -> Új " #~ "feliratkozás” menüpontjának kiválasztásával
      • Hírforrás-" #~ "hivatkozások feliratkozáslistába húzásával
      • Hivatkozások helyi " #~ "menüjének „Feliratkozás” pontjának kiválasztásával a Lifereaban.
      • " #~ msgid "Browser default" #~ msgstr "Alapértelmezett böngésző" #~ msgid "Existing window" #~ msgstr "Létező ablak" #~ msgid "New window" #~ msgstr "Új ablak" #~ msgid "New tab" #~ msgstr "Új lap" #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "Integráció az üzenetkezelési menüvel (indikátorral)" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Kilépés az üzenetkezelési menüre való minimalizálás helyett" #~ msgid "Start minimized to the messaging menu" #~ msgstr "Indítás az üzenetkezelési menüre minimalizálva" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d új elem" #~ msgstr[1] "%d új elem" #~ msgid "No new items" #~ msgstr "Nincs új elem" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d olvasatlan elem" #~ msgstr[1] "" #~ "%s\n" #~ "%d olvasatlan elem" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Nincs olvasatlan elem" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Érvénytelen Atom hírforrás: ismeretlen szerző" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "A Google Reader fiók hírforráslistájának integrálása. A Liferea " #~ "megjeleníti a Google Reader feliratkozásokat és szinkronizálja a " #~ "hírforráslistát és az olvasott elemek listáját." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Blogrollok vagy planetek integrálása a hírforráslistába. A Liferea " #~ "automatikusan hozzá fogja adni és el fogja távolítani a hírforrásokat a " #~ "forrás OPML-dokumentum változásainak megfelelően." #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "A Tiny Tiny RSS 1.5+ fiók hírforráslistájának integrálása. A Liferea " #~ "megjeleníti a Tiny Tiny RSS 1.5+ feliratkozásokat, valamint " #~ "szinkronizálja a hírforráslistát és az olvasott elemek listáját." #~ msgid "This feed does not exist anymore!" #~ msgstr "Már nem létezik a hírforrás." #~ msgid "This news entry has no headline" #~ msgstr "Ennek a hírnek nincs címe" #~ msgid "Visit" #~ msgstr "Megtekintés" #~ msgid "Open feed" #~ msgstr "Hírforrás megnyitása" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "A(z) %s %d frissítést tartalmaz" #~ msgstr[1] "A(z) %s %d frissítést tartalmaz" #~ msgid "Feed Update" #~ msgstr "Hírforrásfrissítés" #~ msgid "Show details" #~ msgstr "Részletek" #~ msgid "Online/Offline Button" #~ msgstr "Online/Offline gomb" #~ msgid " " #~ msgstr " " #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "Fel_ugró értesítések engedélyezése ehhez a feliratkozáshoz." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_Ne használjon felugró értesítéseket ehhez a feliratkozáshoz." #~ msgid "Create Search Engine Feed" #~ msgstr "Keresőmotor-hírforrás készítése" #~ msgid "enter any search string you want" #~ msgstr "írja be a keresendő szöveget" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "Találatok ma_ximális száma:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Megjegyzés: A Liferea egy olyan hírforrás-feliratkozást fog készíteni, " #~ "amely a keresőmotor-eredmények lekérdezésére szolgál. A későbbiekre is " #~ "meg lehet tartani ezt a hírforrást, amely frissülni fog a hagyományos " #~ "hírforrásokhoz hasonlóan." #~ msgid "_Open link in:" #~ msgstr "Hivatk_ozás megnyitása:" #~ msgid "Notification Settings" #~ msgstr "Értesítések beállításai" #~ msgid "Show a _popup window with new headlines." #~ msgstr "_Felugró ablak megjelenítése az új hírekről." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Állap_otikon megjelenítése az értesítési területen (rendszertálcán)" #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Új elemek s_zámának mutatása az állapotikonon." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "_Kilépés az értesítési területre minimalizálás helyett" #~ msgid "_Start in tray icon." #~ msgstr "_Indítás tálcaikonként." #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgid "Download and view feeds" #~ msgstr "Hírforrások letöltése és megjelenítése" #~ msgid "You may want to validate the feed using" #~ msgstr "A hírforrás ellenőrizhető a következővel:" #~ msgid "bookmark" #~ msgstr "könyvjelző" #~ msgid "comments" #~ msgstr "hozzászólás" #~ msgid "flag" #~ msgstr "megjelölés" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Melléklet letöltése MEGHIÚSULT: „%s”" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Melléklet letöltése befejeződött: „%s”" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "A Liferea ezen verziója új gyorsítótár-formátumot használ, és erre " #~ "átvitte az Ön hírforrás-gyorsítótárát. Az gyorsítótár tartalma a(z) %s " #~ "mappából nem lett törölve. Ezt a mappát saját kezűleg kell törölnie, ha " #~ "megbizonyosodott az átvitel sikerességéről." #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "A következő olvasatlan elemre ugrik. Ha szükséges, kiválasztja a " #~ "következő forrást az olvasatlan elemeivel." #~ msgid "Download FAILED: \"%s\"" #~ msgstr "A letöltés MEGHIÚSULT: „%s”" #~ msgid "Download finished." #~ msgstr "A letöltés befejeződött." #~ msgid "Launch Item In _Tab" #~ msgstr "Megnyitás új l_apon" #~ msgid "_Launch Item In Browser" #~ msgstr "Megnyitás _böngészőben" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "_URL másolása vágólapra" #~ msgid "Choose download directory" #~ msgstr "Letöltési könyvtár kiválasztása" #~ msgid "Liferea Sync %s@%s" #~ msgstr "Liferea szinkronizálás %s@%s" #~ msgid "Downloading Enclosure" #~ msgstr "Melléklet letöltése" #~ msgid "Sync" #~ msgstr "Szinkronizálás" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "Helyi háló_zati szinkronizálás engedélyezése" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Kézi:\n" #~ "(%s az URL-hez)" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "U_RL átadása, melléklet letöltése nélkül." #~ msgid "_Save downloads in" #~ msgstr "Letöltés _helye" #~ msgid "_Service Name" #~ msgstr "S_zolgáltatás neve" #~ msgid "link cosmos" #~ msgstr "hivatkozáskozmoz" #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "A bővítménybetöltés hibakeresési üzeneteinek kiírása" #~ msgid "Liferea seems to be running already!" #~ msgstr "Úgy tűnik, a Liferea már fut!" #~ msgid "Update status" #~ msgstr "Frissítési állapot" #~ msgid "was updated" #~ msgstr "frissített" #~ msgid "was not updated" #~ msgstr "frissítetlen" #~ msgid "The orientation of the tray." #~ msgstr "A panel tájolása." #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "_Script Manager" #~ msgstr "_Parancsfájlkezelő" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Lehetővé teszi LUA parancsfájlok szerkesztését és beállítását" #~ msgid "Search With ..." #~ msgstr "Speciális keresés" #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d találat „%s” kifejezésre" #~ msgstr[1] "%d találat „%s” kifejezésre" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d találat" #~ msgstr[1] "%d találat" #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "Az elemlista most az összes találatot tartalmazza a megadott keresési " #~ "kifejezésre. A mindenkori találatok elmenthetők a „Keresési mappa” gomb " #~ "használatával a keresési ablakban, így a Liferea felvesz egy keresési " #~ "mappát a hírforráslistára." #~ msgid "You have to select a feed entry" #~ msgstr "Válasszon ki egy hírforrást" #~ msgid "(empty)" #~ msgstr "(üres)" #~ msgid "_Properties..." #~ msgstr "_Tulajdonságok…" #~ msgid "Update out-dated feeds" #~ msgstr "Elavult hírforrások frissítése" #~ msgid "Force update of all feeds" #~ msgstr "Összes hírforrás frissítésének kikényszerítése" #~ msgid "No feed update at all" #~ msgstr "Ne legyen frissítés" #~ msgid "startup" #~ msgstr "indítás" #~ msgid "feed updated" #~ msgstr "hírforrás frissítése" #~ msgid "feed added" #~ msgstr "hírforrás hozzáadása" #~ msgid "item selected" #~ msgstr "elem kijelölése" #~ msgid "feed selected" #~ msgstr "hírforrás kiválasztása" #~ msgid "item unselected" #~ msgstr "elem kiválasztásának megszűnése" #~ msgid "feed unselected" #~ msgstr "hírforrás kiválasztásának megszűnése" #~ msgid "shutdown" #~ msgstr "leállítás" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Nem érhető el a parancsfájl-támogatás." #~ msgid "Script Name" #~ msgstr "Parancsfájl neve" #~ msgid "No script selected!" #~ msgstr "Nincs kiválasztott parancsfájl." #~ msgid "Create a new search feed." #~ msgstr "Új keresési mappa létrehozása." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "A Liferea képtelen az elem tartalmának megjelenítésére." #~ msgid "

        View this item's content.

        " #~ msgstr "

        Elem tartalmának megtekintése.

        " #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "A felhasználó Bloglines hírforráslistájának összehangolása a Liferea " #~ "alkalmazáséval. A Liferea a Bloglines feliratkozásokat egy csak olvasható " #~ "részfaként fogja megjeleníteni a hírforráslistában." #~ msgid "feedlist.opml" #~ msgstr "feedlist.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s %d új/frissített bejegyzést tartalmaz\n" #~ msgstr[1] "%s %d új/frissített bejegyzést tartalmaz\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Hook" #~ msgstr "Esemény" #~ msgid "Registered Scripts" #~ msgstr "Regisztrált parancsfájlok" #~ msgid "Script Code" #~ msgstr "Parancsfájlkód" #~ msgid "text/plain" #~ msgstr "text/plain" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Ez az beállítás jelentősen lelassíthatja a túl sok hírforrást " #~ "tartalmazó mappák betöltését." #~ msgid "Downloading Enclosures" #~ msgstr "Mellékletek letöltése" #~ msgid "Feed Cache Handling" #~ msgstr "Hírforrás gyorsítótárának kezelése" #~ msgid "Feed Name" #~ msgstr "A hírforrás neve" #~ msgid "Feed Update Settings" #~ msgstr "Hírforrás frissítésének beállításai" #~ msgid "HTTP Proxy Server" #~ msgstr "HTTP proxy kiszolgáló" #~ msgid "Opening Enclosures" #~ msgstr "Mellékletek megnyitása" #~ msgid "Reading Headlines" #~ msgstr "Fejlécek olvasása" #~ msgid "Toolbar Settings" #~ msgstr "Eszköztár beállításai" #~ msgid "Update Interval" #~ msgstr "Frissítési időköz" #~ msgid "Web Integration" #~ msgstr "Webes integráció" #~ msgid "Add Script" #~ msgstr "Parancsfájl hozzáadása" #~ msgid "At _startup:" #~ msgstr "_Indításkor:" #~ msgid "Create new script" #~ msgstr "Új parancsfájl készítése" #~ msgid "Exec Command" #~ msgstr "Parancs végrehajtása" #~ msgid "Reuse existing script" #~ msgstr "Létező parancsfájl újrafelhasználása" #~ msgid "Script Manager" #~ msgstr "Parancsfájlkezelő" #~ msgid "Search _Link Cosmos with" #~ msgstr "_Hivatkozáskozmosz keresése ezzel:" #~ msgid "Count" #~ msgstr "Mennyiség" #~ msgid "Attention Profile" #~ msgstr "Figyelemprofil" liferea-1.12.7/po/id.po000066400000000000000000001766321352135647700146170ustar00rootroot00000000000000# Indonesian translations for Liferea package. # Copyright (C) 2014 THE Liferea'S COPYRIGHT HOLDER # This file is distributed under the same license as the Liferea package. # Samsul Ma'arif , 2014, 2017 # msgid "" msgstr "" "Project-Id-Version: Liferea 1.10.4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2017-05-27 04:04+0700\n" "Last-Translator: Samsul Ma'arif \n" "Language-Team: Indonesian\n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ASCII\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Pembaca Feed" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" "Liferea ialah akronim untuk Linux Feed Reader. Agregator berita untuk feed " "berita online. Mendukung berbagai format feed yang berbeda termasuk RSS/RDF, " "CDF dan Atom. Ada banyak pembaca berita yang tersedia, namun tidak tersedia " "untuk Linux atau memerlukan pustaka ekstra untuk diinstal. Liferea mencoba " "untuk memenuhinya dengan membuat agregator untuk GTK/GNOME yang cepat, mudah " "digunakan, mudah diinstall." #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "Fitur istimewa:" #: ../liferea.appdata.xml.in.h:4 msgid "Read articles when offline" msgstr "Baca artikel ketika luring" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "Sinkronisasi dengan TheOldReader" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "Sinkronisasi dengan TinyTinyRSS" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "Sinkronisasi dengan InoReader" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "Sinkronisasi dengan Reedah" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "Simpan headline di news bin" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "Item yang sesuai menggunakan pencarian folder" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "Mainkan Podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Pembaca Feed" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Pembaca Feed Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Baca feed berita dan blog" #: ../net.sourceforge.liferea.desktop.in.h:5 #, fuzzy msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "news;feed;aggregator;blog;podcast;" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Feed ini dihentikan. Tidak lagi tersedia. Liferea tidak akan memerbaruinya " "lagi namun Anda masih dapat mengakses cache berita utama." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "Pembaruan terakhir langganan ini gagal!
        HTTP error code : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Ada kesalahan ketika mengurai feed ini!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Rincian Kesalahan Pengurai" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Rincian" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "Mungkin Anda ingin menghubungi penulis/webmaster tentang feed ini!" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Ada kesalahan ketika menyaring feed ini!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Rincian Kesalahan Filter" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Feed:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Sumber:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Penerbit" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Hak Cipta" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "children with" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "belum dibaca" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Folder:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Sumber" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Feed" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Berada di" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Penulis" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Dibagikan oleh" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Melalui" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Terkait" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Juga diposkan di" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Pembuat" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Komentar" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Memerbarui..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Bagian" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Departemen" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Bin Berita:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Tambahkan item ke bin berita dengan memilih \"Salin ke Bin Berita\" dari " "menu konteks daftar item." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Cari Folder:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Perintah peramban gagal: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Memulai: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Kesalahan Otorisasi" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Tidak dapat membuat direktori cache \"%s\"" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Hari ini %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Kemarin %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d %b %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" bukan enklosure jenis file konfigurasi yang benar!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Anda belum mengonfigurasi alat unduh! Silahkan lakukan di tab 'Lampiran' di " "Alat/Preferensi." #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Perintah gagal: \n" "\n" "%s\n" "\n" " Silakan periksa apakah konfigurasi alat unduh terpasang dan berjalan dengan " "baik! Anda dapat mengubahnyya di tab 'Unduh' di Alat/Preferesi." #: ../src/export.c:188 #, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Kesalahan mengganti nama %s ke %s: %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "Kesalahan XML ketika membaca berkas OPML! Tidak dapat mengimpor \"%s\"!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "Dokumen kosong! Dokumen OPML \"%s\" tidak boleh kosong ketika diimpor." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" bukan dokumen OPML yang benar! Liferea tidak dapat mengimpor berkas " "ini!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Daftar feed yang diimpor" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Impor Daftar Feed" #: ../src/export.c:481 msgid "Import" msgstr "Impor" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "Berkas OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Kesalahan ketika mengekspor daftar feed!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Daftar Feed diekspor!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Ekspor Daftar Feed" #: ../src/export.c:498 msgid "Export" msgstr "Ekspor" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        Tidak dapat mendeteksi tipe feed ini! Silahkan perika sumber apakah benar-" "benar mengarah ke sumber daya yang tersedia di salah satu format sindikasi " "didukung!

        Keluaran Pengurai XML:
        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" diperbarui..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" tidak tersedia" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "URL yang ingin Anda lanngankan ke Liferea mengarah ke sebuah laman web dan " "pencarian otomatis tidak menemukan feed di halaman ini. Mungkin laman web " "ini tidak mendukung pencarian feed otomatis." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "Kesalahan XML ketika membaca feed! Feed \"%s\" tidak dapat dimuat!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Dokumen kosong!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "XML tidak cocok!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Sumber mengarah ke dokumen HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Tidak dapat menentukan tipe feed." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Tidak ada item yang belum dibaca" #: ../src/liferea_application.c:282 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Mulai Liferea dengan jendela utamanya di STATE. STATE mungkin `shown`, atau " "`hidden`" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "STATE" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Tampilkan informasi versi dan keluar" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Tambahkan langganan baru" #: ../src/liferea_application.c:284 msgid "uri" msgstr "uri" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Cetak pesan debut semua tipe" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Cetak pesan debug untuk menangani cache" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Cetak pesan debug untuk menangani konfigurasi" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Cetak pesan debug untuk mengangani basisdata" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Cetak pesan debut untuk semua fungsi GUI" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Aktifkan debug HTML render. Setiap Liferea merender keluaran HTML akan " "melimpahkan HTML yang digenerate ke ~/.cache/liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Cetak pesan debug untuk semua aktifitas jaringan" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Cetak pesan debug untuk mengurai semua fungsi" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "Cetak pesan debug ketika fungsi sangat lama diproses" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Cetak pesan debug ketika memasuki/keluar dari fungsi" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Cetak pesan debug dari proses pembaruan feed" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "Cetak pesan debug untuk pencarian folder yang cocok" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Cetak secara verbose pesan debug" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Cetak pesan debug untuk topik yang diberikan" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Permintaan pembaruan dibatalkan" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Tidak dapat menemukan tujuan nama host" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Tidak dapat menemukan nama host proxy" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Tidak dapat terhubung ke remote host" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Tidak dapat terhubung ke proxy" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "Terjadi kesalahan jaringan, atau yang lain menutp koneksi yang tidak " "diharapkan" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Sumberdaya dipindah ke lokasi baru secara permanen" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Anda tidak berhak mengunduh feed ini. Silahkan perbarui nama pengguna dan " "sandi lewat Anda di kotak dialog properti feed" #: ../src/net.c:476 msgid "Payment required" msgstr "Pembayaran diperlukan" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Anda tidak diperbolehkan mengakses sumber daya ini" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Sumber Daya Tidak Ditemukan" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Metode Tidak Diperbolehkan" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Tidak Dapat Diterima" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Otentikasi proxy diperlukan" #: ../src/net.c:482 msgid "Request timed out" msgstr "Permintaan terlalu lama" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Telah pergi. Sumberdaya tidak ada. Silahkan unsubscribe!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Ada kesalahan internal pada proses update" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Feed tidak tersedia: Server meminta redireksi yang tak didukung!" #: ../src/net.c:492 msgid "Client Error" msgstr "Kesalahan Klien" #: ../src/net.c:494 msgid "Server Error" msgstr "Kesalahan Server" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Terjadi kesalahan jaringan yang tidak diketahui!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Item" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "berisi" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "tidak berisi" #: ../src/rule.c:175 msgid "Item title" msgstr "Judul item" #: ../src/rule.c:176 msgid "Item body" msgstr "Tubuh item" #: ../src/rule.c:177 msgid "Read status" msgstr "Baca status" #: ../src/rule.c:177 msgid "is unread" msgstr "belum dibaca" #: ../src/rule.c:177 msgid "is read" msgstr "dibaca" #: ../src/rule.c:178 msgid "Flag status" msgstr "Bendera status" #: ../src/rule.c:178 msgid "is flagged" msgstr "diberi bendera" #: ../src/rule.c:178 msgid "is unflagged" msgstr "tidak berbendera" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "disertakan" #: ../src/rule.c:179 msgid "not included" msgstr "tidak disertakan" #: ../src/rule.c:180 msgid "Category" msgstr "Kategori" #: ../src/rule.c:180 msgid "is set" msgstr "diatur" #: ../src/rule.c:180 msgid "is not set" msgstr "tidak diatur" #: ../src/rule.c:181 msgid "Feed title" msgstr "Judul feed" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Langganan \"%s\" sedang diperbarui!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "Langganan \"%s\" tidak dilanjutkan. Liferea tidak akan memerbaruinya lagi!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Memerbarui favicon untuk \"%s\"" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Ada masalah ketika membaca langganan. Silahkan periksa URL dan keluaran " "konsol." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "URL dari \"%s\" telah berubah secara permanen dan telah diperbarui" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" tidak dilanjutkan. Liferea tidak akan memerbaruinya lagi!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" tidak berubah sejak pembaruan terakhir" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Memerbarui \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Error membuka berkas temp %s untuk penyaringan!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s keluar dengan status %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Kesalahan: Tidak dapat membuka pipa \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Kesalahan: Tidak dapat membuka berkas \"%s\"" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Kesalahan: Tidak ada berkas \"%s\"" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Pencarian Folder Baru" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Ada error baru. Keluaran telah dipotong!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "Pengurai XML: Tidak dapat mengurai dokumen:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Lampiran" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " Bytes" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d lampiran" msgstr[1] "%d lampiran" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Pilih Berkas" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Ekstensi Berkas .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Tidak dapat menemukan berkas pixmap: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d baru)" msgstr[1] " (%d baru)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d belum dibaca%s" msgstr[1] "%d belum dibaca%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Topik Bantuan" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Referensi Cepat" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "FAQ" #: ../src/ui/search_dialog.c:116 msgid "Saved Search" msgstr "Pencarian Tersimpan" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Masukkan nama pengguna dan kata sandi untuk \"%s\" (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Sumber tidak diketahui" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 msgid "_Cancel" msgstr "Ba_talkan" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Semua Berkas" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea dalam mode luring. Pembaruan tidak memungkinkan." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Cari Semua Feed" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Tandai semua telah dibaca" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Anda yakin hendak menghapus \"%s\"?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Item ini tidak memiliki tautan khusus!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "** Tidak ada judul ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Pokok Berita" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Tanggal" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Anda harus memilih feed yang akan dihapus itemnya!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Tidak ada item terpilih" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Buka di _Tab" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "_Buka di Peramban" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Buka di Peramban _Eksternal" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Salin ke Berita Bin" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "_Markah pada %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "Salin _Lokasi Item" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Toggle Status _Baca" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Toggle _Bendera Item" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "Hapus It_em" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Buka Lampiran..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Simpan dengan Nama..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Salin Lokasi Tautan" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Perbarui" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Perbarui Folder" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "_Langganan Baru..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "_Folder Baru..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Folder P_encarian Baru..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Sumber Ba_ru..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Berita _Bin Baru..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Baru" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Feed Pendek" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "Tandai Semua Telah _Dibaca" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "Ban_gun Ulang" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Properti" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Konversi Ke Langganan Lokal..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "Bawaan GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Teks di bawah ikon" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Teks di samping ikon" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Hanya ikon" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Hanya teks" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "menit" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "jam" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "hari" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Spasi" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Spasi" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Spasi" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Tampilan Normal" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Tampilan Luas" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Tampilan Gabungan" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Peramban Bawaan" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Tipe" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Kosong)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Membangun ulang" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Menghapus Entri" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Anda yakin ingin menghapus \"%s\" dan isinya?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Anda yakin hendak menghapus \"%s\"?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Konfirmasi Penghapusan" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Konfirmasi Penghapusan" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "_Buka" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "Penyedia feed ini menyarankan interval pembaruan %d menit." msgstr[1] "Penyedia feed ini menyarankan interval pembaruan %d menit." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Feed ini tidak ditentukan interval pembaruannya." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Tak berjudul" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Situs web" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Langganan Baru" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Pilih Berkas OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Langganan OPML Baru" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Tidak ada tipe daftar feed sumber yang ditemukan!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Tipe Sumber" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" "Masuk untuk '%s' belum selesai! Silakan tunggu higga proses masuk selesai" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "Langganan '%s' telah berhasil dikonversi ke feed lokal!" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "Gagal masuk!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "Reedah" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "Tidak dapat mengurai JSON yang dihasilkan oleh API Reedah!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "HTTP API milik TinyTinyRSS tidak dapat dijangkau!" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" "Gagal berlangganan feed ke TinyTinyRSS! Periksa apakah Anda telah " "menyelesaikan URL feed!" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "Gagal berhenti berlangganan feed TinyTinyRSS!" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" "Versi TinyTinyRSS ini tidak mendukung penghapusan feed. Perbarui ke versi %s " "atau lebih baru!" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "Tidak dapat mengurai JSON yang dihasilkan oleh API TinyTinyRSS!" #: ../src/fl_sources/theoldreader_source.c:329 msgid "TheOldReader" msgstr "TheOldReader" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Buka Tautan di _Tab" #: ../src/webkit/liferea_web_view.c:176 msgid "Open Link In Browser" msgstr "Buka Tautan di Peramban" #: ../src/webkit/liferea_web_view.c:177 msgid "Open Link In External Browser" msgstr "Buka Tautan di Peramban Eksternal" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_Markah Tautan pada %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Salin Tautan Lokasi" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "Simpan Gam_bar dengan Nama" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "Salin Lokasi _Gambar" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "Simpan T_autan dengan Nama" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "Simpan Gam_bar dengan Nama" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Langgan..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "_Salin" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "_Perbesar Ukuran Teks" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Kecilkan Ukuran Teks" #: ../glade/about.ui.h:1 msgid "About" msgstr "Tentang" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea ialah agregator berita untuk GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Halaman Depan Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Otentikasi" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Nama pengguna" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Kata sandi:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Buka Lampiran" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Buka lampiran bertipe:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Apa yang harus Liferea lakukan dengan lampiran ini? Silahkan masukkan " "perintah yang Anda inginkan untuk dieksekusi di bawah. URL lampiran akan " "disediakan sebagai argumen untuk perintah ini:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Jelajah" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Lakukan secara otomatis untuk lampiran semacam ini mulai sekarang." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Tambahkan Akun Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Silahkan masukkan pengaturan akun Google Reader Anda." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Kata sandi" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_Nama pengguna (Surel)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "0" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Tampilan Pokok Berita" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Pokok berita" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Tandai semua telah dibaca" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Tandai semua telah dibaca" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Folder Baru" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "Nama _Folder:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Buat Berita Bin" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Nama Berita Bin:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Sumber Feed" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Tipe Sumber:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Perintah" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "Berkas _Lokal" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Pilih Berkas..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Sumber:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Mengunduh / Postproses" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "_Jangan gunakan proxy untuk mengunduh" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Gunakan penyaring _percakapan" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea dapat menggunakan pengaya penyaring untuk mengakses feed dan " "direktori dalam format yang tidak didukung. Lihat dokumentasti untuk " "informasi lebih lengkap." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Konversi mengg_unakan:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Pilihan Sumber" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Pilih tipe sumber yang ingin Anda tambahkan..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Tambahkan OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Silahkan tentukan berkas lokal atau URL yang mengarah ke daftar feed OPML " "yang valid." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Lokasi" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Pilih Berkas" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Preferensi Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Penanganan Cache Feed" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_Jumlah item per feed bawaan untuk disimpan:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Pengaturan Pembaruan Feed" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Catatan: Harap diingat untuk mengatur waktu penyegaran yang beralasan. " "Biasanya hal ini menyianyiakan bandwidth untuk menarik feed lebih sering " "dari setiap jam." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "_Perbarui semua langganan ketika memulai." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "_Interval Penyegaran Feed Bawaan:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "1" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Feed" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Pengaturan Tampilan Folder" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "Tampilkan item dari _semua feed di bawah folder terpilih." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "Sembun_yikan item terbaca." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Ikon Feed (Favicon)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "Perbarui sel_uruh favicon sekarang" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Folder" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Membaca Pokok Berita" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Tepi_s artikel dengan:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "Mode _Tampilan Bawaan:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Integrasi Website" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Posting Markah ke" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Pengaturan Peramban Internal" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Buka tautan di _jendela Liferea." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Nonaktifkan Javascript." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_Aktifkan pengaya peramban." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Pengaturan Peramban Eksternal" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Peramban:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Manual:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s untuk URL)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Peramban" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Pengaturan Toolbar" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Sembunyikan toolbar." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "La_bel tombol toolbar:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "HTTP Proxy Server" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Deteksi Otomatis (GNOME atau lingkungan)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Tanpa Proxy" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "Pengaturan _Manual:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Host Proxy:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Port Proxy:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Gunakan Oten_tikasi Proxy" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "_Nama Pengguna Proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "_Kata Sandi Proxy:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:51 msgid "Privacy Settings" msgstr "Pengaturan Privasi" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "Beritahu situs bahwa saya ti_dak ingin dilacak" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "Privasi" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Mengunduh Lampiran" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Unduh menggunakan" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Membuka Lampiran" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Lampiran" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Properti Langganan" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Nama Feed" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Nama Feed:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Interval Pembaruan" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "Gunakan interval pembaruan bawaan global." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "Interval pembaruan _feed spesifik dari" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Jangan perbarui feed ini secara otomatis." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Penyedia feed ini menyarankan interval pembaruan %d menit." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Umum" #: ../glade/properties.ui.h:20 msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea dapat menggunakan pengaya penyaring untuk mengakses feed dan " "direktori dalam format yang tidak didukung." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Pengaturan cache mengontrol jika konten feed tersimpan ketika Liferea ada. " "Item tertandai selalu disimpan ke cache." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "Pengaturan cache _bawaan" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "Nona_ktifkan cache" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Cache tak terbatas" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "_Jumlah item untuk disimpan:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Arsip" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Gunakan _otentikasi HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Unduh" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_Unduh seluruh lampiran untuk feed ini secara otomatis." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Muat-_otomatis tautan item pada peramban terkonfigurasi ketika memilih " "artikel." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Abaikan _komentar feed untuk langganan ini." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "Tandai inte_m terunduh telah dibaca." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Tingkat Lanjut" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "Tambahkan Akun Reedah" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "Silahkan masukkan pengaturan akun Reedah Anda." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Ganti Nama" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Nama Baru:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Properti Pencarian Folder" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "Cari _Nama:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Temukan Item yang sesuai dengan kriteria berikut" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Beberapa Peratura_n Cocok" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "Semu_a Peraturan Harus Cocok" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Pencarian Lanjutan" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "_Folder Pencarian..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Cari Semua Feed" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "Tingkat _Lanjut..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Mulai mencari untuk teks spesifik pada semua feed. Hasil pencarian akan " "nampak di daftar item." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Cari untuk:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Masukkan string pencarian Liferea akan menemukan di antara judul item atau " "kontennya." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Tingkat Mahir..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Masukkan lokasi website untuk menggunakan feed autodiscovery atau jika Anda " "benar-benar tahu lokasi feednya." #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "Tambahkan Akun TheOldReader" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "Silahkan masukkan pengaturan akun TheOldReader Anda." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Tambahkan Akun Tiny Tiny RSS" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "Silahkan masukkan pengaturan akun TinyTinyRSS Anda" #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "URL _Server" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Nama Pengguna" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Monitor Pembaruan" #: ../glade/update_monitor.ui.h:2 msgid "Cancel All" msgstr "Batalkan Semua" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Batalkan Permintaan" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Sedang Mengunduh" #~ msgid "_Subscriptions" #~ msgstr "_Langganan" #~ msgid "Update _All" #~ msgstr "Perbarui Semu_a" #~ msgid "Updates all subscriptions." #~ msgstr "Perbarui semua langganan." #~ msgid "Mark All As _Read" #~ msgstr "Tandai Semua Sudah Di_baca" #~ msgid "Marks read every item of every subscription." #~ msgstr "Tandai sudah dibaca setiap item setiap langganan." #~ msgid "_Import Feed List..." #~ msgstr "_Impor Daftar Feed..." #~ msgid "Imports an OPML feed list." #~ msgstr "Impor daftar feed OPML." #~ msgid "_Export Feed List..." #~ msgstr "_Ekspor Daftar Feed..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Ekspor daftar feed sebagai OPML." #~ msgid "_Quit" #~ msgstr "_Keluar" #~ msgid "_Feed" #~ msgstr "_Feed" #~ msgid "Remove _All Items" #~ msgstr "Hapus _Semua Item" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Hapus semua item feed yang sedang dipilih." #~ msgid "_Item" #~ msgstr "_Item" #~ msgid "Previous Item" #~ msgstr "Item Sebelumnya" #~ msgid "Next Item" #~ msgstr "Item Selanjutnya" #~ msgid "_Next Unread Item" #~ msgstr "Item _Belum Dibaca Selanjutnya" #~ msgid "_View" #~ msgstr "_Lihat" #~ msgid "Increases the text size of the item view." #~ msgstr "Perbesar ukuran teks item ditampilkan." #~ msgid "Decreases the text size of the item view." #~ msgstr "Kecilkan ukuran teks item ditampilkan." #~ msgid "_Tools" #~ msgstr "_Alat" #~ msgid "_Update Monitor" #~ msgstr "_Monitor Pembaruan" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Tampilkan selua daftar feed yang sedang dalam antrian pembaruan" #~ msgid "_Preferences" #~ msgstr "_Preferensi" #~ msgid "Edit Preferences." #~ msgstr "Sunting Preferensi." #~ msgid "S_earch" #~ msgstr "_Cari" #~ msgid "Search All Feeds..." #~ msgstr "Cari Semua Feed..." #~ msgid "Show the search dialog." #~ msgstr "Tampilkan dialog pencarian." #~ msgid "_Help" #~ msgstr "_Bantuan" #~ msgid "_Contents" #~ msgstr "_Isi" #~ msgid "View help for this application." #~ msgstr "Tampilkan bantuan untuk aplikasi ini." #~ msgid "_Quick Reference" #~ msgstr "_Referensi Cepat" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Tampilkan daftar pintasan Liferea." #~ msgid "_FAQ" #~ msgstr "_FAQ" #~ msgid "View the FAQ for this application." #~ msgstr "Tampilkan FAQ untuk aplikasi ini." #~ msgid "_About" #~ msgstr "_Tentang" #~ msgid "Shows an about dialog." #~ msgstr "Tampilkan dialog tentang." #~ msgid "_Normal View" #~ msgstr "Tampilan _Normal" #~ msgid "Set view mode to mail client mode." #~ msgstr "Atur mode tampilan ke mode klien surel." #~ msgid "_Wide View" #~ msgstr "Tampilan _Lebar" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Atur mode tampilan untuk menggunakan tiga panel vertikal." #~ msgid "_Combined View" #~ msgstr "_Kombinasikan Tampilan" #~ msgid "Set view mode to two pane mode." #~ msgstr "Atur mode tampilan ke mode dua panel." #~ msgid "_Reduced Feed List" #~ msgstr "_Kurangi Daftar Feed" #~ msgid "Hide feeds with no unread items." #~ msgstr "Sembunyikan feed dengan item tak terbaca." #~ msgid "_New Subscription..." #~ msgstr "_Langganan Baru..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Tambahkan langganan ke daftar feed." #~ msgid "Adds a folder to the feed list." #~ msgstr "Tambahkan folder ke daftar feed." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Tambahkan folder pencarian baru ke daftar feed." #~ msgid "New _Source..." #~ msgstr "_Sumber Baru..." #~ msgid "Adds a new feed list source." #~ msgstr "Tambahkan sumber daftar feed baru." #~ msgid "Adds a new news bin." #~ msgstr "Tambahkan berita bin baru." #~ msgid "_Mark Items Read" #~ msgstr "_Tandai Item Dibaca" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Tandai semua item dari node daftar feed terpilih / di daftar item sebagai " #~ "telah dibaca." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Perbarui langganan terpilih untuk seluruh langganan pada folder terpilih." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Buka dialog properti untuk langganan terpilih." #~ msgid "_Remove" #~ msgstr "_Hapus" #~ msgid "Removes the selected subscription." #~ msgstr "Hapus langganan terpilih." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Alihkan status baca dari item terpilih." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Alihkan bendera status dari item terpilih." #~ msgid "R_emove" #~ msgstr "Ha_pus" #~ msgid "Removes the selected item." #~ msgstr "Hapus item terpilih." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Luncurkan tautan item ke tab peramban Liferea baru." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Luncurkan tautan item di item panel Liferea." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Luncurkan tautan item di peramban eksternal terkonfigurasi." #~ msgid "_Fullscreen" #~ msgstr "Layar _Penuh" #~ msgid "Browse at full screen" #~ msgstr "Jelajah pada layar penuh" #~ msgid "_Work Offline" #~ msgstr "Bekerja _Luring" #~ msgid "_Update All" #~ msgstr "Perbarui _Semua" #~ msgid "_Show Liferea" #~ msgstr "_Tampilkan Liferea" #~ msgid "InoReader" #~ msgstr "InoReader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Catatan: Nama pengguna dan kata sandi akan disimpan dalam daftar feed " #~ "Liferea Anda tanpa menggunakan enkripsi." #~ msgid "Add InoReader Account" #~ msgstr "Tambahkan Akun InoReader" #~ msgid "Please enter your InoReader account settings." #~ msgstr "Silahkan masukkan pengaturan akun InoReader Anda." #~ msgid "Plugins" #~ msgstr "Pengaya" #~ msgid "normal view" #~ msgstr "tampilan normal" #~ msgid "wide view" #~ msgstr "tampilan luas" #~ msgid "combined view" #~ msgstr "tampilan gabungan" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, Pembaca Feed Linux" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "Untuk informasi, silahkan kunjungi https://lzone.de/liferea/" #~ msgid "_Open Link In Browser" #~ msgstr "Buka Tautan di _Peramban" #~ msgid "_Open Link In External Browser" #~ msgstr "_Buka Tautan di Peramban Eksternal" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Buat Mesin Pencarian Feed" #~ msgid "enter any search string you want" #~ msgstr "masukkan string pencarian yang Anda inginkan" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "Jumlah _Maksimal Hasil:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Catatan: Liferea akan menghasilkan feed langganan yang digunakan untuk " #~ "query hasil mesin pencarian untuk menentukan string pencarian. Anda dapat " #~ "memertahankan feed ini secara permanen dan memerbaruinya seperti " #~ "langganan lain." #~ msgid "Liferea is now online" #~ msgstr "Liferea sekarang daring" #~ msgid "Work Offline" #~ msgstr "Bekerja Luring" #~ msgid "Liferea is now offline" #~ msgstr "Liferea sekarang luring" #~ msgid "Work Online" #~ msgstr "Bekerja Daring" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "" #~ "Pilihan ini mengizinkan Anda untuk menonaktifkan pembaruan langganan." #~ msgid "Browser default" #~ msgstr "Peramban bawaan" #~ msgid "Existing window" #~ msgstr "Jendela yang ada" #~ msgid "New window" #~ msgstr "Jendela baru" #~ msgid "New tab" #~ msgstr "Tab baru" #~ msgid "AOL Reader Login" #~ msgstr "AOL Reader Login" #~ msgid "AOL Reader" #~ msgstr "Pembaca AOL" #~ msgid "Online/Offline Button" #~ msgstr "Tombol Daring/Luring" #~ msgid "_Open link in:" #~ msgstr "_Buka tautan di:" #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "Integrasi dengan menu perpesanan (indikator)" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Akhiri daripada meminimalkan menu perpesanan" #~ msgid "Start minimized to the messaging menu" #~ msgstr "Mulai minimalkan ke menu perpesanan" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d item baru" #~ msgstr[1] "%d item baru" #~ msgid "No new items" #~ msgstr "Tidak ada item baru" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d item belum dibaca" #~ msgstr[1] "" #~ "%s\n" #~ "%d item belum dibaca" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Tidak ada item yang belum dibaca" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Atom Feed salah: penulis tidak diketahui" #~ msgid "AOL Reader login failed!" #~ msgstr "AOL Reader gagal login!" #~ msgid "" #~ "Integrate the feed list of your AOL Reader account. Liferea will present " #~ "your AOL Reader subscriptions, and will synchronize your feed list and " #~ "reading lists." #~ msgstr "" #~ "Integrasi daftar feed dengan akun AOL Reader Anda. Liferea akan " #~ "menyajikan langganan AOL Reader Anda, dan akan menyingkronkan daftar feed " #~ "dan daftar bacaan." #~ msgid "InoReader login failed!" #~ msgstr "InoReader login gagal!" #~ msgid "" #~ "Integrate the feed list of your InoReader account. Liferea will present " #~ "your InoReader subscriptions, and will synchronize your feed list and " #~ "reading lists." #~ msgstr "" #~ "Integrasi dengan daftar feed akun InoReader Anda. Liferea akan menyajikan " #~ "langganan InoReader Anda, dan akan menyingkronkan daftar feed dan daftar " #~ "bacaan." #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Integrasi dengan daftar feed akun Google Reader Anda. Liferea akan " #~ "menyajikan langganan Google Reader Anda, dan akan menyingkronkan daftar " #~ "feed dan daftar bacaan." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Integradi blogroll atau planet di daftar feed Anda. Liferea akan " #~ "menambahkan dan membuang feed secara otomatis sesuai perubahan pada " #~ "sumber dokumen OPML" #~ msgid "" #~ "Integrate the feed list of your Reedah account. Liferea will present your " #~ "Reedah subscriptions, and will synchronize your feed list and reading " #~ "lists." #~ msgstr "" #~ "Integrasi dengan daftar feed akun Reedah Anda. Liferea akan menyajikan " #~ "langganan Reedah Anda, dan akan menyingkronkan daftar feed dan daftar " #~ "bacaan." #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Integrasi dengan daftar feed akun Tiny Tiny RSS 1.5+ Anda. Liferea akan " #~ "menyajikan langganan tt-rss Anda, dan akan menyingkronkan daftar feed dan " #~ "daftar bacaan." #~ msgid "TheOldReader login failed!" #~ msgstr "TheOldReader login gagal!" #~ msgid "" #~ "Integrate the feed list of your TheOldReader account. Liferea will " #~ "present your TheOldReader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Integrasi dengan daftar bacaan akun TheOldReader Anda. Liferea akan " #~ "menyajikan langganan TheOldReader Anda, dan akan menyingkronkan daftar " #~ "feed dan daftar bacaan." #~ msgid "This feed does not exist anymore!" #~ msgstr "Feed ini sudah tidak ada!" #~ msgid "This news entry has no headline" #~ msgstr "Berita ini tidak memiliki pokok berita" #~ msgid "Visit" #~ msgstr "Kunjungi" #~ msgid "Open feed" #~ msgstr "Buka feed" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "%s memiliki %d pembaruan" #~ msgstr[1] "%s memiliki %d pembaruan" #~ msgid "Feed Update" #~ msgstr "Pembaruan Feed" #~ msgid "Show details" #~ msgstr "Tampilkan rincian" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "_Paksa popup notifikasi untuk langganan ini." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_Jangan pernah beri popup notifikasi untuk langganan ini." #~ msgid "Notification Settings" #~ msgstr "Pengaturan Notifikasi" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Perlihatkan jendela popup dengan pokok berita baru." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Perlihatkan _ikon status di area notifikasi (sistem tray)." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Perlihatkan _jumlah item baru di ikon tray." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "H_entikan ketimbang minimalkan ke ikon tray." #~ msgid "_Start in tray icon." #~ msgstr "_Mulai di ikon tray." #~ msgid "Please enter your tt-rss account settings." #~ msgstr "Silahkan masukkan pengaturan akun tt-rss Anda." #~ msgid "No comments yet." #~ msgstr "Belum ada komentar." #~ msgid "Refresh" #~ msgstr "Segarkan" liferea-1.12.7/po/it.po000066400000000000000000001654431352135647700146350ustar00rootroot00000000000000# Italian translation of Liferea. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Liferea package. # Gianvito Cavasoli , 2009, 2010, 2013, 2017. # msgid "" msgstr "" "Project-Id-Version: liferea 1.7.x\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2017-12-09 15:17+0100\n" "Last-Translator: Gianvito Cavasoli \n" "Language-Team: Italiano \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Gtranslator 2.91.7\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Lettore notiziari" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" "Liferea è un'abbreviazione di Linux Feed Reader. È un aggregatore di notizie " "per i notiziari in rete. Supporta diversi formati di notiziari tra cui RSS/" "RDF, CDF e Atom. Ci sono molti altri lettori di notizie disponibili, ma " "questi non sono disponibili per Linux o richiedono l'installazione di molte " "librerie aggiuntive. Liferea cerca di colmare questa lacuna creando un " "aggregatore di notizie veloce, facile da usare e facile da installare per " "GTK/GNOME." #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "Funzionalità distintive:" #: ../liferea.appdata.xml.in.h:4 msgid "Read articles when offline" msgstr "Legge gli articoli quando si è fuori rete" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "Sincronizza con TheOldReader" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "Sincronizza con TinyTinyRSS" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "Sincronizza con InoReader" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "Sincronizza con Reedah" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "Salve permanentemente le testate nell'archivio notizie" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "Abbina gli articoli usando le cartelle di ricerca" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "Riproduce i podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Lettore notiziari" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Lettore notiziari Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Leggi notizie e blog" #: ../net.sourceforge.liferea.desktop.in.h:5 #, fuzzy msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "notizie;notiziario;feed;aggregatore;blog;podcast;" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Questo notiziario è abbandonato. Non è più disponibile. Non verrà più " "aggiornato ma si potrà ancora accedere alle testate nella cache." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "L'ultimo aggiornamento di questo abbonamento non è riuscito.
        Codice " "di errore HTTP: : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Sono occorsi errori durante l'analisi di questo notiziario." #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Dettagli errori dell'analizzatore" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Dettagli" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "Contattare l'autore/webmaster di questo notiziario." #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "" "Si sono verificati degli errori durante il filtraggio di questo notiziario." #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Dettagli errori del filtro" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Notiziario:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Fonte:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Editore" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Copyright" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "articoli con" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "testate non lette" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Cartella:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Fonte" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Notiziario" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Archiviato sotto" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Autore" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Condiviso da" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Tramite" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Correlato" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Inserito anche in" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Creatore" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "Coordinate" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "Mappa" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Commenti" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Aggiornamento..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Sezione" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Reparto" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Archivio notizie:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Aggiungi articoli a questo archivio notizie selezionando «Copia in archivio " "notizie» dal menù contestuale dell'elenco." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Cartella ricerca:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Comando del browser non riuscito: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Avvio: «%s»" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Errore di autorizzazione" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Impossibile creare la directory di cache «%s»." #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Oggi %k:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Ieri %k:%M" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %k:%M" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d %b %k:%M" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "Il file «%s» non è una configurazione di tipo di allegato valida." #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Non è stato ancora configurato uno strumento di scaricamento. Configurarlo " "nella scheda «Allegati» in Strumenti/Preferenze." #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Comando non riuscito:\n" "\n" "%s\n" "\n" "Verificare che lo strumento di scaricamento configurato sia installato e " "funzioni correttamente. Si può cambiarlo nella scheda «Scaricamento» in " "Strumenti/Preferenze." #: ../src/export.c:188 #, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Errore nel rinominare %s in %s: %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "Errore XML durante la lettura del file OPML. Impossibile importare «%s»." #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Documento vuoto. Il documento OPML «%s» non deve essere vuoto durante " "l'importazione." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "Il documento OPML «%s» non è valido. Impossibile importare questo file." #: ../src/export.c:469 msgid "Imported feed list" msgstr "Elenco notiziari importati" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importa elenco notiziari" #: ../src/export.c:481 msgid "Import" msgstr "Importa" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "File OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Errore durante l'esportazione dell'elenco notiziari." #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Elenco notiziari esportato." #: ../src/export.c:498 msgid "Export Feed List" msgstr "Esporta elenco notiziari" #: ../src/export.c:498 msgid "Export" msgstr "Esporta" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        Impossibile individuare il tipo di questo notiziario. Verificare che la " "fonte punti davvero ad una risorsa fornita in uno dei formati supportati.Output analizzatore XML:

        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "«%s» aggiornato..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "«%s» non è disponibile" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "L'URL a cui si vuole abbonarsi punta ad una pagina web in cui il rilevamento " "automatico non ha trovato alcun notiziario. Probabilmente la pagina web non " "supporta il rilevamento automatico di notiziari." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "" "Errore XML durante la lettura del notiziario. Impossibile caricare il " "notiziario «%s»." #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Documento vuoto." #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "XML non valido." #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "La fonte punta a un documento HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Impossibile determinare il tipo di notiziario." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Non ci sono articoli non letti" #: ../src/liferea_application.c:282 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Avvia l'applicazione con la finestra principale nello STATO. STATO può " "essere \"shown\" o \"hidden\"" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "STATO" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Mostra informazioni di versione ed esce" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Aggiunge un nuovo abbonamento" #: ../src/liferea_application.c:284 msgid "uri" msgstr "uri" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Stampa messaggi di debug di tutti i tipi" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Stampa messaggi di debug del gestore di cache" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Stampa messaggi di debug del gestore di configurazione" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Stampa messaggi di debug del gestore del database" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Stampa messaggi di debug di tutte le funzioni dell'interfaccia grafica" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Abilita il debug del rendering HTML. Ogni volta che ci sarà il render di " "output HTML sarà riversato l'HTML generato anche in «~/.cache/liferea/output." "xhtml»" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Stampa messaggi di debug di tutte le attività di rete" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Stampa messaggi di debug di tutte le funzioni di analisi" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Stampa messaggi di debug quando una funzione richiede troppo tempo per " "elaborare" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Stampa messaggi di debug quando entra/lascia le funzioni" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "" "Stampa messaggi di debug dell'elaborazione di aggiornamento del notiziario" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "Stampa messaggi di debug della cartella dei risultati corrispondenti" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Stampa messaggi di debug dettagliati" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Stampa messaggi di debug dell'argomento scelto" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "La richiesta di aggiornamento è stata annullata" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Impossibile risolvere il nome host di destinazione" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Impossibile risolvere il nome host del proxy" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Impossibile connettersi all'host remoto" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Impossibile connettersi al proxy" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "Si è verificato un errore di rete, o l'altra estremità ha chiuso la " "connessione in modo inatteso" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "La risorsa è spostata permanentemente a un'altra posizione" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Non si è autorizzati a scaricare questo notiziario. Aggiornare il nome " "utente e la password nella finestra di dialogo delle proprietà del notiziario" #: ../src/net.c:476 msgid "Payment required" msgstr "Pagamento richiesto" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Non è consentito accedere a questa risorsa" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Risorsa non trovata" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Metodo non consentito" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Non accettabile" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Autenticazione del proxy richiesta" #: ../src/net.c:482 msgid "Request timed out" msgstr "Richiesta scaduta" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Risorsa non esistente. Rimuovere l'abbonamento." #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Si è verificato un errore interno nel processo di aggiornamento" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Notiziario non disponibile: il server ha richiesto una ridirezione non " "supportata." #: ../src/net.c:492 msgid "Client Error" msgstr "Errore del client" #: ../src/net.c:494 msgid "Server Error" msgstr "Errore del server" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Si è verificato un errore di rete sconosciuto." #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Articolo" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "contiene" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "non contiene" #: ../src/rule.c:175 msgid "Item title" msgstr "Titolo dell'articolo" #: ../src/rule.c:176 msgid "Item body" msgstr "Corpo dell'articolo" #: ../src/rule.c:177 msgid "Read status" msgstr "Stato di lettura" #: ../src/rule.c:177 msgid "is unread" msgstr "è non letto" #: ../src/rule.c:177 msgid "is read" msgstr "è letto" #: ../src/rule.c:178 msgid "Flag status" msgstr "Stato del contrassegno" #: ../src/rule.c:178 msgid "is flagged" msgstr "è contrassegnato" #: ../src/rule.c:178 msgid "is unflagged" msgstr "è non contrassegnato" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "incluso" #: ../src/rule.c:179 msgid "not included" msgstr "non incluso" #: ../src/rule.c:180 msgid "Category" msgstr "Categoria" #: ../src/rule.c:180 msgid "is set" msgstr "è impostato" #: ../src/rule.c:180 msgid "is not set" msgstr "non è impostato" #: ../src/rule.c:181 msgid "Feed title" msgstr "Titolo del notiziario" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "L'abbonamento di «%s» è già in aggiornamento." #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "L'abbonamento a «%s» è stato abbandonato. Non verrà più aggiornato." #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Aggiornamento favicon per «%s»" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Si è verificato un problema durante la lettura di questo abbonamento. " "Controllare l'URL e l'output della console." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "L'URL di «%s» è cambiato permanentemente ed è stato aggiornato" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "«%s» è abbandonato. Non verrà più aggiornato." #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "«%s» non è cambiato dall'ultimo aggiornamento" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Aggiornamento di «%s»" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "" "Errore durante l'apertura del file temporaneo %s da usare per il filtraggio." #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s è uscito con lo stato %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Errore: impossibile aprire la pipe «%s»" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Errore: impossibile aprire il file «%s»" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Errore: non c'è il file «%s»" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Nuova cartella di ricerca" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Si sono verificati più errori. L'output è stato troncato.]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "Analizzatore XML: impossibile analizzare il documento:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Allegati" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " byte" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MiB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GiB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d allegato" msgstr[1] "%d allegati" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Scegliere file" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Estensione file .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Impossibile trovare il file pixmap: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d nuovo)" msgstr[1] " (%d nuovi)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d non letto%s" msgstr[1] "%d non letti%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Guida argomenti" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Riferimenti veloci" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "Domande frequenti" #: ../src/ui/search_dialog.c:116 msgid "Saved Search" msgstr "Ricerca salvata" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Immettere il nome utente e la password per «%s» (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Fonte sconosciuta" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 msgid "_Cancel" msgstr "A_nnulla" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Tutti i file" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Modalità non in rete. Nessun aggiornamento è possibile." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Cerca in tutti i notiziari" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Segna tutto come _letto" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Eliminare veramente «%s»?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Questo articolo non ha un collegamento specificato." #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Nessun titolo ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Testata" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Si deve selezionare un notiziario per eliminare i suoi articoli." #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Nessun articolo è stato selezionato" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Apri nella _scheda" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "_Apri nel browser" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Apri nel browser _esterno" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Copia in archivio notizie" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "_Segnalibro su %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "Copia _posizione articolo" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Commuta stato l_etto" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Commuta contrass_egno articolo" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "Rimuo_vi articolo" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Apri allegato..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Salva come..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Copia posizione collegamento" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Aggiorna" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "A_ggiorna cartella" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Nuovo _abbonamento..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Nuova _cartella..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Nuova cartella ric_erca..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Nuova fo_nte..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Nuovo archivio no_tizie..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Nuovo" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Ordina notiziari" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "Se_gna tutto come letto" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "_Ricostruisci" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Elimina" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "Pr_oprietà" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Converti ad abbonamenti locali..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "Predefinito di GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Testo accanto alle icone" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Testo sotto le icone" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Solo icone" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Solo testo" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minuti" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "ore" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "giorni" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Spazio" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Spazio" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Spazio" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Visualizzazione normale" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Visualizzazione ampia" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Visualizzazione combinata" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Browser predefinito" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Manuale" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Tipo" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Programma" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Vuoto)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Ricostruzione" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Eliminazione voce" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Eliminare veramente «%s» e i suoi contenuti?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Eliminare veramente «%s»?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Conferma di eliminazione" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Conferma di eliminazione" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "_Apri" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "" "Il fornitore di questo notiziario suggerisce un intervallo di aggiornamento " "di %d minuto." msgstr[1] "" "Il fornitore di questo notiziario suggerisce un intervallo di aggiornamento " "di %d minuti." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "" "Questo notiziario non specifica un intervallo di aggiornamento predefinito." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Senza titolo" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Sito web" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nuovo abbonamento" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Scegliere file OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Nuovo abbonamento OPML" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Nessuno tipo di fonte di elenco dei notiziari trovato." #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Tipo di fonte" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" "L'accesso a «%s» non è ancora completato. Attendere fino alla conclusione." #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" "L'abbonamento «%s» è stato convertito con successo nei notiziari locali." #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "Accesso non riuscito." #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "Reedah" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "Impossibile analizzare JSON restituito dalle API di Reedah." #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "Le API HTTP di TinyTinyRSS non sono raggiungibili." #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" "L'abbonamento di TinyTinyRSS al notiziario non è riuscito. Verificare l'URL " "del notiziario." #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "Rimozione abbonamento al notiziario di TinyTinyRSS non riuscita." #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" "Questa versione di TinyTinyRSS non supporta la rimozione dei notiziari. " "Aggiornare alla versione %s o successiva." #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "Impossibile analizzare JSON restituito dalle API di TinyTinyRSS." #: ../src/fl_sources/theoldreader_source.c:329 msgid "TheOldReader" msgstr "TheOldReader" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Apri collegamento nella _scheda" #: ../src/webkit/liferea_web_view.c:176 msgid "Open Link In Browser" msgstr "Apri collegamento nel browser" #: ../src/webkit/liferea_web_view.c:177 msgid "Open Link In External Browser" msgstr "Apri collegamento nel browser esterno" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "Collegamento come _segnalibro su %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Copia posizione collegamento" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "S_alva immagine come" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "_Copia posizione immagine" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "S_alva collegamento come" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "S_alva immagine come" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Abbonati..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "_Copia" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "Au_menta dimensione testo" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Diminuisci dimensione testo" #: ../glade/about.ui.h:1 msgid "About" msgstr "Informazioni" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Un aggregatore di notizie per GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Pagina web di Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autenticazione" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Nome utente:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "Pass_word:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Apri allegato" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Aprire un allegato di tipo:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Cosa fare con questo allegato? Immettere qui sotto il comando che si vuole " "eseguire. Gli URL degli allegati saranno forniti come argomento per questo " "comando:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Esplora" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "" "Automaticamente app_licare questa scelta per gli allegati come questo d'ora " "in poi." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Aggiungi account Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Inserire le impostazioni dell'account Google Reader" #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "Pass_word" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_Nome utente (email)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "0" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Visualizza testate" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Testate" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Segna tutto come _letto" #: ../glade/mark_read_dialog.ui.h:2 #, fuzzy msgid "Mark all as read" msgstr "Segna tutto come _letto" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Nuova cartella" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "Nome cartel_la:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Crea archivio notizie" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "Nome archivio no_tizie:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Fonte notiziario" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Tipo di fonte:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "Coman_do" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "File loca_le" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Seleziona file..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Fonte:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Scaricamento / Elaborazione" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "No_n usare il proxy per scaricare" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Usare filtr_o di conversione" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "L'applicazione può usare un plugin di filtro esterno per accedere a " "notiziari e directory in formati non supportati. Consultare la " "documentazione per maggiori informazioni." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Convertire usan_do:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Selezione della fonte" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Selezionare il tipo di fonte che si desidera aggiungere..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Aggiungi OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Specificare un file locale oppure un URL che punti a un elenco di notiziario " "OPML valido." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "Pos_izione" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Seleziona file" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Preferenze di Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Gestione cache del notiziario" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_Numero predefinito di articoli per notiziario da salvare:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Impostazioni aggiornamento del notiziario" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Note: ricordarsi di impostare un tempo ragionevole di aggiornamento. " "Solitamente non è consigliabile far uso di banda per controllare i notiziari " "più di una volta l'ora." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "_Aggiornare tutti gli abbonamenti all'avvio." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "_Intervallo predefinito di aggiornamento del notiziario:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "1" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Notiziari" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Impostazioni visualizzazione delle cartelle" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "" "Mostr_are tutte le voci dei notiziari quando una cartella è selezionata." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "Nas_condere gli articoli letti." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Icone dei notiziari (favicon)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "Ag_giorna tutte le favicon ora" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Cartelle" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Lettura testate" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Scor_rere gli articoli con:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "Modalità _predefinita di visualizzazione:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Integrazione web" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Inserire segnalibri in" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Impostazioni del browser interno" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Aprire collegamenti nella _finestra." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "Disa_bilitare Javascript." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_Abilitare plugin del browser." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Impostazioni del browser esterno" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Browser:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Manuale:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s per l'URL)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Browser" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Impostazioni barra degli strumenti" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "Nascon_dere la barra degli strumenti." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Etichette _pulsanti della barra degli strumenti:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Interfaccia grafica" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "Server proxy HTTP" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "Rile_vare automaticamente (GNOME o ambiente)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "Nessu_n proxy" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "Impostazione man_uale:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Host del proxy:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "Por_ta del proxy:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Usare auten_ticazione proxy" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Nome _utente del proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Pass_word del proxy:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:51 msgid "Privacy Settings" msgstr "Impostazioni privacy" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "Indicare ai siti di _non voler essere tracciati" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "Privacy" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Scaricamento allegati" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "Scari_care usando" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Apertura allegati" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Allegati" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Proprietà dell'abbonamento" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Nome notiziario" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Nome notiziario:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Intervallo di aggiornamento" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "U_sare l'intervallo di aggiornamento globale predefinito." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "Intervallo specifico di aggiornamento del noti_ziario" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "N_on aggiornare automaticamente questo notiziario." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "Il fornitore del notiziario suggerisce un intervallo di aggiornamento di %d " "minuti." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Generale" #: ../glade/properties.ui.h:20 msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "L'applicazione può usare script esterni di filtro per accedere a notiziari e " "directory in formati non supportati." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Le impostazioni di cache controllano che il contenuto dei notiziari sia " "salvato all'uscita. Gli articoli segnati sono sempre salvati nella cache." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "Impostazioni di cache prede_finite" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Disabilitare cache" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "Cache i_llimitata" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "Nu_mero di articoli da salvare:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Archivio" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Usare a_utenticazione HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Scaricamento" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "Scaricare automaticamen_te tutti gli allegati di questo notiziario." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Cari_care automaticamente il collegamento dell'articolo nel browser " "configurato quando sono selezionati gli articoli." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorare i com_menti del notiziario per questo abbonamento." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Segnare articoli scaricati come letti." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Avanzato" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "Aggiungi account Reedah" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "Inserire le impostazioni dell'account Reedah." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Rinomina" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "Nuo_vo nome:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Proprietà cartella di ricerca" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "_Nome della ricerca:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Trova gli articoli che soddisfano i seguenti criteri" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "_Qualsiasi regola corrispondente" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "_Tutte le regole devono corrispondere" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Ricerca avanzata" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "Cartella ri_cerca..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Cerca in tutti i notiziari" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "Avan_zato..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Avvia la ricerca del testo specificato in tutti i notiziari. Il risultato " "della ricerca apparirà nell'elenco degli articoli." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "Cer_ca per:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Immettere la stringa di ricerca che si vuol cercare nei titoli o nel " "contenuto degli articoli." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Avanzato..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Inserire l'indirizzo di un sito web per usare il rilevamento automatico del " "notiziario oppure se si è a conoscenza l'indirizzo esatto del notiziario." #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "Aggiungi account TheOldReader" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "Inserire le impostazioni dell'account TheOldReader." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Aggiungi account Tiny Tiny RSS" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "Inserire le impostazioni dell'account TinyTinyRSS." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "URL del _server" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "Nom_e utente" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Controllo aggiornamenti" #: ../glade/update_monitor.ui.h:2 msgid "Cancel All" msgstr "Annulla tutto" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Richieste in attesa" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Scaricamento in corso" #~ msgid "_Subscriptions" #~ msgstr "_Abbonamenti" #~ msgid "Update _All" #~ msgstr "Aggiorna _tutto" #~ msgid "Updates all subscriptions." #~ msgstr "Aggiorna tutti gli abbonamenti." #~ msgid "Marks read every item of every subscription." #~ msgstr "Segna come letto tutti gli articoli e tutti gli abbonamenti." #~ msgid "_Import Feed List..." #~ msgstr "Im_porta elenco notiziari..." #~ msgid "Imports an OPML feed list." #~ msgstr "Importa un elenco notiziari OPML." #~ msgid "_Export Feed List..." #~ msgstr "Espo_rta elenco notiziari..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Esporta l'elenco notiziari come OPML." #~ msgid "_Quit" #~ msgstr "_Esci" #~ msgid "_Feed" #~ msgstr "_Notiziario" #~ msgid "Remove _All Items" #~ msgstr "Rimuovi _tutti gli articoli" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Rimuove tutti gli articoli del notiziario attualmente selezionato." #~ msgid "_Item" #~ msgstr "Arti_colo" #~ msgid "Previous Item" #~ msgstr "Articolo precedente" #~ msgid "Next Item" #~ msgstr "Articolo successivo" #~ msgid "_Next Unread Item" #~ msgstr "Articolo s_uccessivo non letto" #~ msgid "_View" #~ msgstr "_Visualizza" #~ msgid "Increases the text size of the item view." #~ msgstr "Aumenta la dimensione del testo nella visualizzazione dell'articolo" #~ msgid "Decreases the text size of the item view." #~ msgstr "" #~ "Diminuisce la dimensione del testo nella visualizzazione dell'articolo." #~ msgid "_Tools" #~ msgstr "_Strumenti" #~ msgid "_Update Monitor" #~ msgstr "Controllo _aggiornamenti" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "" #~ "Mostra un elenco di tutti gli attuali notiziari nella coda d'aggiornamento" #~ msgid "_Preferences" #~ msgstr "Preferen_ze" #~ msgid "Edit Preferences." #~ msgstr "Modifica le preferenze." #~ msgid "S_earch" #~ msgstr "_Cerca" #~ msgid "Search All Feeds..." #~ msgstr "Cerca in tutti i notiziari..." #~ msgid "Show the search dialog." #~ msgstr "Mostra il dialogo di ricerca." #~ msgid "_Help" #~ msgstr "A_iuto" #~ msgid "_Contents" #~ msgstr "Som_mario" #~ msgid "View help for this application." #~ msgstr "Visualizza la guida per questa applicazione." #~ msgid "_Quick Reference" #~ msgstr "Riferimenti velo_ci" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Visualizza un elenco di tutte le scorciatoie da tastiera." #~ msgid "_FAQ" #~ msgstr "Domande _frequenti" #~ msgid "View the FAQ for this application." #~ msgstr "Visualizza le domande frequenti per questa applicazione." #~ msgid "_About" #~ msgstr "I_nformazioni" #~ msgid "Shows an about dialog." #~ msgstr "Mostra un dialogo di informazioni." #~ msgid "_Normal View" #~ msgstr "Visualizzazione norma_le" #~ msgid "Set view mode to mail client mode." #~ msgstr "Imposta la modalità di visualizzazione come un client di posta." #~ msgid "_Wide View" #~ msgstr "Visualizzazione ampi_a" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "" #~ "Imposta la modalità di visualizzazione per usare tre riquadri verticali." #~ msgid "_Combined View" #~ msgstr "Visualizzazione com_binata" #~ msgid "Set view mode to two pane mode." #~ msgstr "Imposta la modalità di visualizzazione in due riquadri." #~ msgid "_Reduced Feed List" #~ msgstr "Elenco notiziari ri_dotto" #~ msgid "Hide feeds with no unread items." #~ msgstr "Nasconde i notiziari con nessun articolo non letto." #~ msgid "_New Subscription..." #~ msgstr "Nu_ovo abbonamento..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Aggiunge un abbonamento all'elenco dei notiziari." #~ msgid "Adds a folder to the feed list." #~ msgstr "Aggiunge una cartella all'elenco dei notiziari." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Aggiunge una nuova cartella di ricerca all'elenco dei notiziari." #~ msgid "New _Source..." #~ msgstr "Nuova fo_nte..." #~ msgid "Adds a new feed list source." #~ msgstr "Aggiunge una nuova fonte dell'elenco dei notiziari." #~ msgid "Adds a new news bin." #~ msgstr "Aggiunge un nuovo archivio delle notizie." #~ msgid "_Mark Items Read" #~ msgstr "Se_gna articoli come letti" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Segna tutti gli articoli selezionati nell'elenco dei notiziari alla voce " #~ "«/» come letti." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Aggiorna gli abbonamenti selezionati o tutti gli abbonamenti di una " #~ "cartella selezionata." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Apre il dialogo della proprietà dell'abbonamento selezionato." #~ msgid "_Remove" #~ msgstr "Rimuo_vi" #~ msgid "Removes the selected subscription." #~ msgstr "Rimuove l'abbonamento selezionato." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Commuta lo stato di letto dell'articolo selezionato." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Commuta lo stato del contrassegno dell'articolo selezionato." #~ msgid "R_emove" #~ msgstr "Rimuov_i" #~ msgid "Removes the selected item." #~ msgstr "Rimuove l'articolo selezionato." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "" #~ "Lancia i collegamenti degli articoli in una nuova scheda del browser " #~ "interno." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Lancia i collegamenti degli articoli nel riquadro degli articoli" #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "" #~ "Lancia i collegamenti degli articoli nel browser esterno configurato." #~ msgid "_Fullscreen" #~ msgstr "_Schermo intero" #~ msgid "Browse at full screen" #~ msgstr "Esplora a schermo intero" #~ msgid "_Work Offline" #~ msgstr "_Lavora fuori rete" #~ msgid "_Update All" #~ msgstr "Ag_giorna tutto" #~ msgid "_Show Liferea" #~ msgstr "Mo_stra finestra" #~ msgid "InoReader" #~ msgstr "InoReader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Nota: il nome utente e la password verranno salvati nell'elenco dei " #~ "notiziari senza usare alcuna cifratura." #~ msgid "Add InoReader Account" #~ msgstr "Aggiungi account InoReader" #~ msgid "Please enter your InoReader account settings." #~ msgstr "Inserire le impostazioni dell'account InoReader" #~ msgid "Plugins" #~ msgstr "Plugin" #~ msgid "normal view" #~ msgstr "visualizzazione normale" #~ msgid "wide view" #~ msgstr "visualizzazione ampia" #~ msgid "combined view" #~ msgstr "visualizzazione combinata" liferea-1.12.7/po/ja.po000066400000000000000000002141751352135647700146100ustar00rootroot00000000000000# liferea ja.po. # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2012, 2013 Free Software Foundation, Inc. # This file is distributed under the same license as the liferea package. # Takeshi AIHANA , 2003-2007,2009,2012. # Takeshi Hamasaki , 2012. # IWAI, Masaharu , 2016-2017. # # 翻訳の用例 (since 2004-08-16) # subscription: 購読 # items: トピック # feed: 配信元 # msgid "" msgstr "" "Project-Id-Version: liferea-1.12-rc2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2017-02-15 16:56+0900\n" "Last-Translator: IWAI, Masaharu \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "フィード・リーダ" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "特徴的な機能:" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Liferea はオフラインです" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "TheOldReader との同期" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "TinyTinyRSS との同期" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "InoReader との同期" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "Reedah との同期" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "Podcastを演奏する" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "フィード・リーダ" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea フィード・リーダ" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "この配信元は停止しているので、利用できません。今後 Liferea が更新することはあ" "りませんが、キャッシュに保存したヘッドラインにアクセスすることは可能です。" #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "この購読の最後の更新に失敗しました!
        HTTP のエラー・コード : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "この配信元を解析する際にエラーが発生しました!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "エラー解析の詳細" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "詳細" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "この配信元をフィルタリングする際にエラーが発生しました!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "フィルター・エラーの詳細" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "配信元:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "ソース:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "公開者" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "著作権" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "children with" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "未読のヘッドライン" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "フォルダ:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "ソース" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "配信元" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "カテゴリ:" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "作者" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "共有" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "経由" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "関連" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "別の投稿先" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "作者" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "コメント" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "更新中..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "セクション" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "部門" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "News Bin:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "トピックの一覧のコンテキスト・メニューで選択したものをこの NewsBin に追加しま" "す" #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "検索するフォルダ:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "ブラウザの起動に失敗しました: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "起動中: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "認証エラー" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "キャッシュ・フォルダ \"%s\" を生成できません!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "今日の%p%l:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "昨日の%p%l:%M" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%Aの%p%l:%M" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%B%e日 %p%l:%M" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%Y年%B%e日" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "" "\"%s\" は正しいエンクロージャの種類を定義する設定ファイルではありません!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" #: ../src/export.c:188 #, c-format msgid "Error renaming %s to %s: %s\n" msgstr "%s から %s へ名前を変更する際にエラー: %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "OPML ファイルを解析する際に XML エラーが発生しました! (\"%s\" をインポートで" "きませんでした)" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "ドキュメントが空です! (インポートする際にOPML ドキュメント \"%s\" は空にしな" "いで下さい...)" #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" は正しい OPML ドキュメントではありません! (このファイルをインポートで" "きません)" #: ../src/export.c:469 msgid "Imported feed list" msgstr "配信元一覧を取り込みました" #: ../src/export.c:481 msgid "Import Feed List" msgstr "配信元一覧のインポート" #: ../src/export.c:481 msgid "Import" msgstr "インポート" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "OPML ファイル" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "配信元一覧のエキスポート時にエラーが発生しました!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "配信元一覧をエキスポートしました!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "配信元一覧のエキスポート" #: ../src/export.c:498 msgid "Export" msgstr "エキスポート" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        この配信元の種類を特定できませんでした。配信元がサポートしている " "syndication 形式の一つとして提供されているものであるか確認して下さい!XML パーサの出力:

        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" を更新しました..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" は利用できません" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "Liferea に購読させようとしている URL はウェブページを指しており、そのページで" "は自動的に配信元を探し出す機能を提供していないようです。おそらく、このページ" "は配信元の自動検索機能をサポートしていないと思われます。" #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "" "配信元を読み込む際に XML エラーが発生しました! (配信元 \"%s\" を読み込めませ" "んでした)" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "ドキュメントが空です!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "XML が間違っています!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "ソースが HTML ドキュメントを指しています。" #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "配信元の種類を特定できませんでした。" #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "未読のトピックはありません" #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "指定した状態でメイン・ウィンドウを表示する (STATE: 'shown', " "'iconified','hidden')" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "STATE" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "バージョン情報を表示して終了する" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "新しい配信元を追加する" #: ../src/liferea_application.c:284 msgid "uri" msgstr "uri" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "全ての種類のデバッグ情報を出力する" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "キャッシュの操作に関するデバッグ情報を出力する" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "設定の処理に関するデバッグ情報を出力する" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "データベースの操作に関するデバッグ情報を出力する" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "GUI を扱う関数のデバッグ情報を出力する" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "HTML 描画機能のデバッグを有効にする (HTML 出力を行う度にその内容を ~/.cache/" "liferea/output.xhtml にも書き込む)" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "ネットワーク機能に関するデバッグ情報を出力する" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "全ての解析機能に関するデバッグ情報を出力する" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "任意の機能に時間がかかった時のデバッグ情報を出力する" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "関数の出入りに関するデバッグ情報を出力する" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "配信元の更新処理に関するデバッグ情報を出力する" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "検索フォルダの処理に関するデバッグ情報を出力する" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "詳細なデバッグ情報を出力する" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "指定したトピックに関するデバッグ情報を出力する" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "更新要求をキャンセルしました" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "ホスト名を解決できません" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "プロキシのホスト名を解決できません" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "リモートのホストに接続できません" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "プロキシに接続できません" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "ネットワークに関連するエラーが発生したか、あるいは相手側が接続を閉じたようで" "す" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "リソースの移動が完了しました" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "この配信元をダウンロードするために必要な認証を実施していません。配信元のプロ" "パティ・ダイアログでユーザ名とパスワードを更新して下さい。" #: ../src/net.c:476 msgid "Payment required" msgstr "課金請求がありました" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "このリソースにアクセスする権限がありません" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "リソースが見つかりませんでした" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "メソッドを実行できません" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "アクセスできません" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "プロキシによる認証が必要です" #: ../src/net.c:482 msgid "Request timed out" msgstr "要求がタイムアウトしました" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "完了しました。リソースが存在しません。購読を解約して下さい!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "プロセスを更新する際に内部エラーが発生しました" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "配信元を利用できません: サーバがサポートしないリダイレクションを要求しました" #: ../src/net.c:492 msgid "Client Error" msgstr "クライアントのエラー" #: ../src/net.c:494 msgid "Server Error" msgstr "サーバのエラー" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "原因不明のネットワーク・エラーが発生しました" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "トピック" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "が次の内容を含む" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "が次の内容を含まない" #: ../src/rule.c:175 msgid "Item title" msgstr "ヘッドライン" #: ../src/rule.c:176 msgid "Item body" msgstr "本文" #: ../src/rule.c:177 msgid "Read status" msgstr "ステータス" #: ../src/rule.c:177 msgid "is unread" msgstr "が未読である" #: ../src/rule.c:177 msgid "is read" msgstr "が既読である" #: ../src/rule.c:178 msgid "Flag status" msgstr "フラグ" #: ../src/rule.c:178 msgid "is flagged" msgstr "がセットされている" #: ../src/rule.c:178 msgid "is unflagged" msgstr "がセットされていない" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "を含む" #: ../src/rule.c:179 msgid "not included" msgstr "を含まない" #: ../src/rule.c:180 msgid "Category" msgstr "カテゴリ" #: ../src/rule.c:180 msgid "is set" msgstr "に次がセットされている" #: ../src/rule.c:180 msgid "is not set" msgstr "に次がセットされていない" #: ../src/rule.c:181 msgid "Feed title" msgstr "配信元のタイトル" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "この配信元 \"%s\" は既に更新済みです!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "その配信元 \"%s\" は更新を停止しています (今後 Liferea で更新されることはあり" "ません!)" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "\"%s\" の favicon の更新中" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "この購読を読み込む際に問題が発生しました。URL と端末に出力されているメッセー" "ジを確認して下さい。" #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "\"%s\" の URL が更新されていました" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "" "\"%s\" の更新は停止しています (今後 Liferea が更新することはありません!)" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" は最後の更新から変更はありません" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "\"%s\" の更新中" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "" "フィルターに使用する作業ファイル \"%s\" を開く際にエラーが発生しました!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "ステータス %2$d のトピック %1$s" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "エラー: パイプ \"%s\" を開けませんでした" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "エラー: ファイル \"%s\" を開けませんでした" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "エラー: ファイル \"%s\" がありません" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "新しい検索フォルダ" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[大量のエラーが発生したのでパーサのエラー出力を短くしました]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "XML パーサ: ドキュメントを解析できませんでした:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "添付ファイル" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " バイト" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "KB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "添付ファイル: %d個" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "ファイルの選択" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "拡張子 .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Pixmap ファイルが見つかりませんでした: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] "(新着%d個)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "未読%d個%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "ヘルプのトピックス" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "クィック・リファレンス" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "FAQ" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "拡張検索" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "\"%s\" (%s) のユーザ名とパスワードを入力して下さい:" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "配信元ソースが不明です" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 msgid "_Cancel" msgstr "キャンセル(_A)" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "全てのファイル" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea はオフライン・モードです (更新はできません)" #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "全ての配信元から検索" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "全て既読にする" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "本当に \"%s\" を削除してもよろしいですか?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "このトピックにはリンクが割り当てられていません!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** タイトルなし ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "ヘッドライン" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "日付" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "トピックを削除する配信元を選択して下さい!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "トピックが選択されていません" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "タブの中に開く(_T)" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "ブラウザで開く(_O)" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "外部ブラウザで開く(_E)" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "NewsBin にコピーする" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "ブックマークに追加(_B): %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "トピックの場所をコピー(_L)" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "既読ステータスの切り替え(_R)" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "トピック・フラグの切り替え(_F)" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "トピックの削除(_E)" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "エンクロージャを開く..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "別名で保存..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "リンク先のアドレスのコピー" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "更新(_U)" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "フォルダの更新(_U)" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "新しい購読(_S)..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "新しいフォルダ(_F)..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "新しい検索フォルダ(_E)..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "新しい場所(_O)..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "新しい NewsBin(_N)..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "新規(_N)" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "配信元の並べ替え" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "全て既読にする(_M)" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "再構築(_R)" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "削除(_D):" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "プロパティ(_P)" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "" #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "GNOME のデフォルト" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "アイコンの下にラベル" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "アイコンの横にラベル" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "アイコンのみ" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "ラベルのみ" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "分ごと" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "時間ごと" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "日ごと" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Space" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr "Ctrl+Space" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr "Alt+Space" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "通常の表示" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "ワイド表示" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "サマリ表示" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "デフォルト・ブラウザ" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "手動" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "種類" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "プログラム" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(空)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "エントリの削除" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "本当に \"%s\" とその内容を削除してもよろしいですか?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "本当に \"%s\" を削除してもよろしいですか?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "削除の確認" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "削除の確認" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "開く(_O)" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "この配信元では更新間隔を%d分にすることを推奨しています。" #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "この配信元ではデフォルトの更新間隔を設定してません。" #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "タイトルなし" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "ウェブサイト" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%B%e日 %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "新しい購読" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google リーダ" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet/BlogRoll/OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "OPML ファイルの選択" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "新しい OPML の購読" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "配信元一覧のソースの種類が見つかりませんでした!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "ソースの種類" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "ログインに失敗しました!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "Reedah API が返した JSON を解析できませんでした!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "Tiny Tiny RSS API が返した JSON を解析できませんでした!" #: ../src/fl_sources/theoldreader_source.c:329 msgid "TheOldReader" msgstr "TheOldReader" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "タブの中に開く(_T)" #: ../src/webkit/liferea_web_view.c:176 msgid "Open Link In Browser" msgstr "ブラウザで開く" #: ../src/webkit/liferea_web_view.c:177 msgid "Open Link In External Browser" msgstr "外部ブラウザで開く" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "%s のブックマークに追加(_B)" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "リンク先のコピー(_C)" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "画像を別名で保存(_A)" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "画像のリンク先のコピー(_C)" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "リンクを別名で保存(_A)" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "画像を別名で保存(_A)" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "購読する(_S)..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "コピー(_C):" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "文字を大きくする(_I)" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "文字を小さくする(_D)" #: ../glade/about.ui.h:1 msgid "About" msgstr "情報" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea は GTK+ 版のニュース・アグリゲータです。" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Liferea のホームページ" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "認証" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "ユーザ名(_N):" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "パスワード(_P):" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "エンクロージャを開く" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "開くエンクロージャの種類:" #: ../glade/enclosure_handler.ui.h:3 #, fuzzy msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "このエンクロージャに対して Liferea に何をさせるか?です。実行したいコマンドを" "入力して下さい。ダウンロードするエンクロージャはコマンドの引数として自動的に" "付与されます:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "参照(_B)" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "これ以降は類似したエンクロージャに対しても自動的に実行する(_D)" #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Google リーダのアカウントの追加" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Google リーダのアカウント情報を入力して下さい:" #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "パスワード(_P)" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "ユーザ名 (Eメール)(_U)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "ヘッドライン表示" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "ヘッドライン" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "全て既読にする" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "全て既読にする" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "新しいフォルダ" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "フォルダ名(_F):" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "NewsBin の作成" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "NewsBin の名前(_N):" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "配信元の場所" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "ソースの種類:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "URL(_U)" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "コマンド(_C)" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "ローカルのファイル(_L)" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "ファイルの選択..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "ソース(_S):" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "ダウンロードと事後処理" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "ダウンロード時にプロキシを使用しない(_D)" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "変換フィルターを利用する(_F)" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea は、サポート外の配信元とフォルダにアクセスするために、外部のフィル" "ターをプラグインとして利用することが可能です。詳細はドキュメントを参照して下" "さい。" #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "フィルタ名(_U):" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "ソースの選択" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "追加するソースの種類を選択して下さい..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "OPML/Planet の追加" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "妥当な OPML 配信元の一覧を表すローカル・ファイルまたは URL を指定して下さい。" #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "場所(_L)" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "選択(_S)..." #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Liferea の設定" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "キャッシュの扱い" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "配信元毎に保存するトピックの数(_U):" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "更新の設定" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "注記: 妥当な更新時間をセットするようにして下さい。但し、単位時間内の更新回" "数を多くしても使用するネットワーク (帯域) の無駄遣いです。" #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "起動時に全ての配信先を更新する(_U)" #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "配信元を更新する間隔(_I):" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "配信元" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "表示の設定" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "フォルダが選択されたらその配下にある配信元も全て表示する(_S)" #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "既読のトピックを隠す(_H)" #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "アイコン (Favicons)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "今すぐ全ての favicon を更新する(_U)" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "フォルダ" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "ヘッドラインの読み込み" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "エントリの斜め読みに使用するキー(_S):" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "デフォルトの表示モード(_D):" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "ウェブ・サービスとの統合" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "ブックマークの保存先(_P):" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "内部ブラウザの設定" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "リンクを Liferea のウィンドウ内で開く(_W)" #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "JavaScript を無効にする(_D)" #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "ブラウザのプラグインを使う(_E)" #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "外部ブラウザの設定" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "ブラウザ(_B):" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "手動(_M):" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s には URL が入ります)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "ブラウザ" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "ツールバーの設定" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "ツールバーを隠す(_H)" #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "ツールバーのスタイル:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "HTTP プロキシのサーバ" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "自動検出する(_A)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "プロキシなし(_N)" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "マニュアルで設定を行う(_M):" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "プロキシのホスト(_H):" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "プロキシのポート番号(_P):" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "プロキシの認証機能を使う(_U)" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "ユーザ名(_U):" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "パスワード(_W):" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "プロキシ" #: ../glade/prefs.ui.h:51 msgid "Privacy Settings" msgstr "プライバシーの設定" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "プライバシー" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "エンクロージャのダウンロード" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "使用するコマンド(_D):" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "エンクロージャの開き方" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "エンクロージャ" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "購読先のプロパティ" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "配信元の名前" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "配信元の名前(_N):" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "更新間隔" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "デフォルトの更新間隔を使用する(_U)" #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "配信元で指定した更新間隔にする(_F): " #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "この配信元を自動的に更新しない(_D)" #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "この配信元では更新間隔を %d分にすることを推奨しています。" #: ../glade/properties.ui.h:11 msgid "General" msgstr "全般" #: ../glade/properties.ui.h:20 msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea は、サポート外の配信元とフォルダにアクセスするために、外部フィルター" "スクリプトを利用できます。" #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "キャッシュの設定では、Liferea を終了する際に配信元の内容を保存するかどうかを" "決定します。マークが付与されたエントリは常にキャッシュへ保存されます。" #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "デフォルトの設定にする(_D)" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "キャッシュを無効にする(_S)" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "キャッシュを制限しない(_U)" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "保存するトピックの総数(_N):" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "アーカイブ" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "HTTP の認証機能を使う(_A)" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "ダウンロード" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "この配信元が提供する全てのエンクロージャを自動的にダウンロードする(_A)" #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "ニュースを選択している時にブラウザでトピックのリンクを自動的に読み込んでおく" "(_L)" #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "コメントの配信元を無視する(_C)" #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "ダウンロードしたトピックを既読にする(_M)" #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "拡張" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "Reedah のアカウントの追加" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "Reedah のアカウント情報を入力して下さい:" #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "フォルダ名の変更" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "新しい名前(_N):" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "検索フォルダのプロパティ" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "検索する内容(_N):" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "次の条件を満足するトピックを検索します:" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "幾つかを満足するもの(_N)" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "全てを満足するもの(_A)" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "拡張検索" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "フォルダの検索(_S)..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "全ての配信元から検索" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "拡張(_A)..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "全ての配信元から指定した文字列を検索し、その結果を一覧表示します" #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "検索する文字列(_S):" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "配信元のタイトルまたはその内容から検索する文字列を入力して下さい" #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "拡張..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "自動的に配信元を探索するウェブ上の場所か、または実際に配信元が存在する場所を" "入力して下さい。" #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "TheOldReader のアカウントの追加 " #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "TheOldReader のアカウント情報を入力して下さい:" #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Tiny Tiny RSS アカウントの追加" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "Tiny Tiny RSS のアカウント情報を入力して下さい:" #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "サーバの URL(_S)" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "ユーザ名(_U)" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "更新モニタ" #: ../glade/update_monitor.ui.h:2 msgid "Cancel All" msgstr "全てキャンセル" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "保留中のリクエスト" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "ダウンロード中のリクエスト" #~ msgid "_Subscriptions" #~ msgstr "購読(_S)" #~ msgid "Update _All" #~ msgstr "全て更新(_A)" #~ msgid "Updates all subscriptions." #~ msgstr "全ての購読先を更新します" #~ msgid "Mark All As _Read" #~ msgstr "全て既読にする(_R)" #~ msgid "Marks read every item of every subscription." #~ msgstr "全ての購読の全てのトピックに既読マークを付与します" #~ msgid "_Import Feed List..." #~ msgstr "配信元一覧のインポート(_I)..." #~ msgid "Imports an OPML feed list." #~ msgstr "OPML 配信元一覧をインポートします" #~ msgid "_Export Feed List..." #~ msgstr "配信元一覧のエキスポート(_E)..." #~ msgid "Exports the feed list as OPML." #~ msgstr "OPML の配信元一覧としてエキスポートします" #~ msgid "_Quit" #~ msgstr "終了(_Q)" #~ msgid "_Feed" #~ msgstr "配信元(_F)" #~ msgid "Remove _All Items" #~ msgstr "全て削除(_A)" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "現在選択している全てのトピックを削除します" #~ msgid "_Item" #~ msgstr "トピック(_I)" #~ msgid "Previous Item" #~ msgstr "前のトピック" #~ msgid "Next Item" #~ msgstr "次トピック" #~ msgid "_Next Unread Item" #~ msgstr "次の未読のトピック(_N)" #~ msgid "_View" #~ msgstr "表示(_V)" #~ msgid "Increases the text size of the item view." #~ msgstr "エントリの表示サイズを大きくします" #~ msgid "Decreases the text size of the item view." #~ msgstr "エントリの表示サイズを小さくします" #~ msgid "_Tools" #~ msgstr "ツール(_T)" #~ msgid "_Update Monitor" #~ msgstr "更新モニタ(_U)" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "更新キューの中にある全ての配信元の一覧を表示します" #~ msgid "_Preferences" #~ msgstr "設定(_P)" #~ msgid "Edit Preferences." #~ msgstr "設定を編集します" #~ msgid "S_earch" #~ msgstr "検索(_E)" #~ msgid "Search All Feeds..." #~ msgstr "全ての配信元から検索..." #~ msgid "Show the search dialog." #~ msgstr "検索ダイアログを表示します" #~ msgid "_Help" #~ msgstr "ヘルプ(_H)" #~ msgid "_Contents" #~ msgstr "目次(_C)" #~ msgid "View help for this application." #~ msgstr "このアプリケーションのヘルプを表示します" #~ msgid "_Quick Reference" #~ msgstr "クイック・リファレンス(_Q)" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "ショートカット・キーの一覧を表示します" #~ msgid "_FAQ" #~ msgstr "FAQ(_F)" #~ msgid "View the FAQ for this application." #~ msgstr "このアプリケーションの FAQ を表示します" #~ msgid "_About" #~ msgstr "このアプリケーションについて(_A)" #~ msgid "Shows an about dialog." #~ msgstr "情報ダイアログを表示します" #~ msgid "_Normal View" #~ msgstr "通常の表示(_N)" #~ msgid "Set view mode to mail client mode." #~ msgstr "メーラー・モードで表示します" #~ msgid "_Wide View" #~ msgstr "ワイド表示(_W)" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "ニュースやトピック、その内容を縦型に表示します" #~ msgid "_Combined View" #~ msgstr "サマリ表示(_C)" #~ msgid "Set view mode to two pane mode." #~ msgstr "トピックを要約して表示します" #~ msgid "_Reduced Feed List" #~ msgstr "既読の配信一覧を隠す(_R)" #~ msgid "Hide feeds with no unread items." #~ msgstr "トピックが全て既読の配信元を非表示にします" #~ msgid "_New Subscription..." #~ msgstr "新しい購読(_N)..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "新しい購読を配信元一覧に追加します" #~ msgid "Adds a folder to the feed list." #~ msgstr "新しいフォルダを配信元一覧に追加します" #~ msgid "Adds a new search folder to the feed list." #~ msgstr "新しい検索フォルダを配信元一覧に追加します" #~ msgid "New _Source..." #~ msgstr "新しい場所(_S)..." #~ msgid "Adds a new feed list source." #~ msgstr "新しい配信元一覧の場所を追加します" #~ msgid "Adds a new news bin." #~ msgstr "新しい NewsBin を追加します" #~ msgid "_Mark Items Read" #~ msgstr "全て既読にする(_M)" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "現在選択している配信元一覧や購読の一覧にある全てのトピックを既読にします" #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "選択した購読または選択したフォルダにある全ての購読を更新します" #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "選択した購読のプロパティ・ダイアログを開きます" #~ msgid "_Remove" #~ msgstr "削除(_R)" #~ msgid "Removes the selected subscription." #~ msgstr "選択した購読を削除します" #~ msgid "Toggles the read status of the selected item." #~ msgstr "選択したトピックの既読ステータスを切り替えます" #~ msgid "Toggles the flag status of the selected item." #~ msgstr "選択したトピックの既読ステータスを切り替えます" #~ msgid "R_emove" #~ msgstr "トピックの削除(_E)" #~ msgid "Removes the selected item." #~ msgstr "現在選択しているトピックを削除します" #, fuzzy #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "設定したブラウザでトピックのリンクを開きます" #, fuzzy #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "設定したブラウザでトピックのリンクを開きます" #, fuzzy #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "設定したブラウザでトピックのリンクを開きます" #~ msgid "_Fullscreen" #~ msgstr "フルスクリーン(_F)" #~ msgid "Browse at full screen" #~ msgstr "フルスクリーンで見る" #~ msgid "_Work Offline" #~ msgstr "オフラインで動作(_W)" #~ msgid "_Update All" #~ msgstr "全て更新(_U)" #~ msgid "_Show Liferea" #~ msgstr "表示する(_S)" #~ msgid "InoReader" #~ msgstr "InoReader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "注記: ユーザ名とパスワードは暗号化せずに Liferea 配信元一覧のファイルへ" #~ "保存されます。" #~ msgid "Add InoReader Account" #~ msgstr "InoReader のアカウントの追加" #~ msgid "Please enter your InoReader account settings." #~ msgstr "InoReader のアカウント情報を入力して下さい:" #~ msgid "Plugins" #~ msgstr "プラグイン" #~ msgid "normal view" #~ msgstr "通常の表示" #~ msgid "wide view" #~ msgstr "ワイドな表示" #~ msgid "combined view" #~ msgstr "サマリ表示" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea - Linux 向けのフィード・リーダです" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "詳細は https://lzone.de/liferea/ を訪問してみて下さい" #~ msgid "_Open Link In Browser" #~ msgstr "ブラウザで開く(_O)" #~ msgid "_Open Link In External Browser" #~ msgstr "外部ブラウザで開く(_O)" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "検索エンジンの配信元の生成" #~ msgid "enter any search string you want" #~ msgstr "検索する文字列を入力して下さい" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "検索結果の最大数(_N):" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "注記: Liferea は指定した文字列をいろいろな検索エンジンで検索を行うために使" #~ "用する配信元を生成します。この配信元を保存し、他の配信元を更新することがで" #~ "きます。" #~ msgid "Liferea is now online" #~ msgstr "Liferea はオンラインです" #~ msgid "Work Offline" #~ msgstr "オフラインで動作" #~ msgid "Liferea is now offline" #~ msgstr "Liferea はオフラインです" #~ msgid "Work Online" #~ msgstr "オンラインで動作" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "このオプションで購読の更新を無効にできます" #~ msgid "Browser default" #~ msgstr "デフォルト" #~ msgid "Existing window" #~ msgstr "既存のウィンドウ" #~ msgid "New window" #~ msgstr "新しいウィンドウ" #~ msgid "New tab" #~ msgstr "新しいタブ" #~ msgid "AOL Reader" #~ msgstr "AOL Reader" #~ msgid "Online/Offline Button" #~ msgstr "オンライン/オフライン切り換えボタン" #~ msgid "_Open link in:" #~ msgstr "リンクを開く場所(_O):" #~ msgid "No comments yet." #~ msgstr "コメントなし" #~ msgid "Refresh" #~ msgstr "更新" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - Linux ニュース・アグリゲータ" #~ msgid "" #~ "

        Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

        You can add new subscriptions

        • From main menu " #~ "'Subscription' -> 'New Subscription'
        • By dropping feed links " #~ "into the subscription list
        • By right clicking links and choosing " #~ "'Subscribe' within Liferea

        " #~ msgstr "" #~ "

        Liferea へようこそ。これはオンラインで配信されているニュースを収" #~ "集するデスクトップ向けニュース・アグリゲータです。

        次の方法で新しい" #~ "購読を追加することができます

        • メイン・メニューにある [購読]->[新" #~ "しい購読] を開く
        • 左側のペインに配信元のリンクをドロップする
        • 左側のペインで右クリックして表示されるコンテキストメニューの [新" #~ "規] を開く

        " #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "メッセージ・メニューと統合する (インジケータ)" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "メッセージメニューをクリックしたら最小化しないで終了する" #~ msgid "Start minimized to the messaging menu" #~ msgstr "起動時にメッセージ・メニューにアイコン化する" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "新しいトピックが%d個あります" #~ msgid "No new items" #~ msgstr "新しいトピックはありません" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "未読のトピックが%d個あります" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "未読のトピックはありません" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "おかしな Atom 配信元: 作者が不明です" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Google リーダで購読している配信元を取り込みます。Google リーダの購読内容を" #~ "表示して同期します。" #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "BlogRoll や Planets の情報を配信元一覧にまとめて取り込みます。 Liferea で" #~ "はソース OPML ドキュメントで発生した変更点に相当する配信元を自動的に追加し" #~ "たり削除します。" #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Tiny Tiny RSS 1.5 以上のアカウントで購読している配信元を統合します。" #~ "Liferea では tt-rss の購読を提供し配信元の一覧を同期して一覧に表示します。" #~ msgid "This feed does not exist anymore!" #~ msgstr "この配信元はもう存在していません!" #~ msgid "This news entry has no headline" #~ msgstr "このエントリにはヘッドラインがありません" #~ msgid "Visit" #~ msgstr "訪問する" #~ msgid "Open feed" #~ msgstr "配信元を開く" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "%s には%d個の新着トピックスがあります" #~ msgid "Feed Update" #~ msgstr "配信元の更新" #~ msgid "Show details" #~ msgstr "詳細を表示する" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "更新内容をポップアップ通知で知らせる(_E)" #~ msgid "_Never do popup notification for this subscription." #~ msgstr "更新内容をポップアップ通知で知らせない(_N)" #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Copyright (c) 2003-2012\n" #~ "Liferea 開発チーム\n" #~ msgid "Notification Settings" #~ msgstr "通知の設定" #~ msgid "Show a _popup window with new headlines." #~ msgstr "新しいヘッドラインをポップアップ・ウィンドウで表示する(_P)" #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "パネル通知エリアの中にステータス・アイコンを表示する(_I)" #~ msgid "Show _number of new items in the tray icon." #~ msgstr "トレイ・アイコンの中に新しいトピックの総数を表示する(_N)" #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "トレイ・アイコンをクリックしたら最小化しないで終了する(_E)" #~ msgid "_Start in tray icon." #~ msgstr "起動時にアイコン化する(_S)" #~ msgid "Download and view feeds" #~ msgstr "配信元をダウンロードして表示します" #~ msgid "You may want to validate the feed using" #~ msgstr "次を使って配信元の妥当性を検証した方が良いかもしれません:" #~ msgid "bookmark" #~ msgstr "ブックマーク" #~ msgid "comments" #~ msgstr "コメント" #~ msgid "flag" #~ msgstr "フラグ" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "エンクロージャのダウンロードに失敗しました: \"%s\"" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "エンクロージャのダウンロードが完了しました: \"%s\"" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "このバージョンの Liferea からキャッシュの形式が新しくなったので、お使いの" #~ "古いキャッシュを変換しておきました。但し、%s にある古いキャッシュは自動的" #~ "には削除されません。新しいキャッシュに変換できたことを確認した上で、この古" #~ "いキャッシュを格納したフォルダを手動で削除しておいて下さい!" #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "次の未読のトピックにジャンプします。必要であれば、未読のトピックを含む次の" #~ "配信元を選択します。" #~ msgid "Download FAILED: \"%s\"" #~ msgstr "ダウンロード失敗: \"%s\"" #~ msgid "Download finished." #~ msgstr "ダウンロード完了です" #~ msgid "Launch Item In _Tab" #~ msgstr "タブの中に開く(_T)" #~ msgid "_Launch Item In Browser" #~ msgstr "ブラウザで開く(_L)" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "URL をクリップボードへコピーする(_U)" #~ msgid "Choose download directory" #~ msgstr "ダウンロード・フォルダの選択" #~ msgid "Liferea Sync %s@%s" #~ msgstr "Liferea 同期 %s@%s" #~ msgid "Downloading Enclosure" #~ msgstr "エンクロージャのダウンロード" #~ msgid "Sync" #~ msgstr "同期" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "ローカルの LAN で同期できるようにする(_E)" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "手動(_M):\n" #~ "(URL は %s で指定する)" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "URL を渡すがエンクロージャはダウンロードしない(_P)" #~ msgid "_Save downloads in" #~ msgstr "保存する場所(_S):" #~ msgid "_Service Name" #~ msgstr "サービス名" liferea-1.12.7/po/ko.po000066400000000000000000003505341352135647700146270ustar00rootroot00000000000000# GTP Korean translation of 0.4.4. # Copyright (C) 2003 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # 박지인 , 2003. # msgid "" msgstr "" "Project-Id-Version: liferea 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2005-12-11 13:52+0900\n" "Last-Translator: Park Ji-In \n" "Language-Team: GNOME Korea \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=0;\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "피드 캐시" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Liferea는 현재 오프라인입니다." #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "피드 이름" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "피드 이름" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "피드 이름" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "피드 이름" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:2 #, fuzzy msgid "Feed Reader" msgstr "피드 캐시" #: ../net.sourceforge.liferea.desktop.in.h:3 #, fuzzy msgid "Liferea Feed Reader" msgstr "Liferea - 리눅스 피드 보기" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "이 피드는 연속적이지 않습니다. 더 이상 사용할 수 없습니다. Liferea는 더이상 " "그것을 새로 고치지 않지만, 캐시된 머릿글은 읽을 수 있습니다." #: ../xslt/feed.xml.in.h:2 #, fuzzy msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "이 구독의 마지막 고침이 정상적이지 않았습니다!
        HTTP 에러 코드 %d: %s" #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "이 피드를 해석하던 중 에러가 발생했습니다." #: ../xslt/feed.xml.in.h:4 #, fuzzy msgid "Parser Error Details" msgstr "자세히 보기" #: ../xslt/feed.xml.in.h:5 #, fuzzy msgid "Details" msgstr "자세히 보기" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "이 피드를 거르던 중 에러가 발생했습니다!" #: ../xslt/feed.xml.in.h:8 #, fuzzy msgid "Filter Error Details" msgstr "자세히 보기" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "피드:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "소스:" #: ../xslt/feed.xml.in.h:11 #, fuzzy msgid "Publisher" msgstr "출판자" #: ../xslt/feed.xml.in.h:12 #, fuzzy msgid "Copyright" msgstr "저작권" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 #, fuzzy msgid "unread headlines" msgstr "머릿글" #: ../xslt/folder.xml.in.h:1 #, fuzzy msgid "Folder:" msgstr "가상폴더" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 #, fuzzy msgid "Source" msgstr "소스:" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "피드" #: ../xslt/item.xml.in.h:3 #, fuzzy msgid "Filed under" msgstr "피드 캐시" #: ../xslt/item.xml.in.h:4 #, fuzzy msgid "Author" msgstr "저자" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "" #: ../xslt/item.xml.in.h:9 #, fuzzy msgid "Creator" msgstr "제작자" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 #, fuzzy msgid "Comments" msgstr "덧말" #: ../xslt/item.xml.in.h:13 #, fuzzy msgid "Updating..." msgstr "%s을(를) 새로고치는 중" #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "" #: ../xslt/newsbin.xml.in.h:1 #, fuzzy msgid "News Bin:" msgstr "새 창" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" #: ../xslt/vfolder.xml.in.h:1 #, fuzzy msgid "Search Folder:" msgstr "폴더 만들기" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "브라우져 명령 실패: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "%s을(를) 시작함" #. unauthorized #: ../src/comments.c:120 #, fuzzy msgid "Authorization Error" msgstr "인증" #: ../src/common.c:66 #, fuzzy, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "캐시 디렉토리 %s을(를) 생설할 수 없습니다!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\"은(는) 적절한 첨부 종류 설정파일이 아닙니다!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "%s을(를) %s(으)로 변환하는 중 에러발생\n" #: ../src/export.c:417 ../src/export.c:419 #, fuzzy, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "캐시파일 \"%s\"을(를) 읽던중 XML 에러가 발생. 캐시파일을 가져올 수 없습니다!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "빈 도큐먼트 입니다! OPML 도큐먼트 \"%s\"은(는) 가져오기 할 때 비어있으면 안됩" "니다." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\"은(는) 올바른 OPML 파일이 아닙니다. Liferea는 이 파일을 가져올 수 없습" "니다." #: ../src/export.c:469 msgid "Imported feed list" msgstr "가져온 피드 리스트" #: ../src/export.c:481 msgid "Import Feed List" msgstr "피드 목록 들여오기" #: ../src/export.c:481 msgid "Import" msgstr "가져오기" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 #, fuzzy msgid "OPML Files" msgstr "파일 고르기" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "피드 리스트를 내보내던 중 에러가 발생했습니다." #: ../src/export.c:491 msgid "Feed List exported!" msgstr "피드 목록이 내보내졌습니다" #: ../src/export.c:498 msgid "Export Feed List" msgstr "피드 목록 내보내기" #: ../src/export.c:498 msgid "Export" msgstr "내보내기" #: ../src/feed.c:317 #, fuzzy msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        이 피드의 종류를 결정할 수 없습니다!. 소스가 지원되는 형식의 자원을 정확" "히 가리키는지 확인해 주세요

        %s" #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\"이(가) 갱신되었습니다..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\"이(가) 사용 가능하지 않습니다." #: ../src/feed_parser.c:137 #, fuzzy msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "

        URL이 웹페이지를 가리키고 있는데, 자동 검색해본 결과 이 페이지에서 피드를 " "찾을 수 없었습니다. 아마 이 웹페이지는 피드 자동검색을 지원하지 않는 것 같군" "요.

        " #: ../src/feed_parser.c:170 #, fuzzy, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "" "

        피드를 읽는 도중 XML 에러가 발생!. \"%s\" 피드를 로드할 수 없습니다.

        " #: ../src/feed_parser.c:175 #, fuzzy msgid "Empty document!" msgstr "

        빈 도큐먼트!

        " #: ../src/feed_parser.c:187 #, fuzzy msgid "Invalid XML!" msgstr "

        잘못된 XML!

        " #: ../src/feed_parser.c:227 #, fuzzy msgid "Source points to HTML document." msgstr "XML 도큐먼트를 만들 수 없습니다" #: ../src/feed_parser.c:230 #, fuzzy msgid "Could not determine the feed type." msgstr "

        RDF 헤더를 찾을 수 없습니다!

        " #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 #, fuzzy msgid "There are no unread items" msgstr "읽지 않은 아이템이 없습니다 " #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" " 상태는 'shown', 'iconified', 혹은 'hidden'이 될 수 있습니" "다." #: ../src/liferea_application.c:282 msgid "STATE" msgstr "" #: ../src/liferea_application.c:283 #, fuzzy msgid "Show version information and exit" msgstr " --version Liferea의 버전 정보를 보여주고 끝냅니다." #: ../src/liferea_application.c:284 #, fuzzy msgid "Add a new subscription" msgstr "새 서명" #: ../src/liferea_application.c:284 msgid "uri" msgstr "" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 #, fuzzy msgid "Print debugging messages of all types" msgstr " --debug-all 모든 종류의 디버깅 메시지를 뿌립니다." #: ../src/liferea_application.c:291 #, fuzzy msgid "Print debugging messages for the cache handling" msgstr " --debug-cache 캐시 다루기에 대한 디버깅 메시지를 보여줍니다." #: ../src/liferea_application.c:292 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr " --debug-conf 설정 다루기에 대한 디버깅 메시지를 보여줍니다." #: ../src/liferea_application.c:293 #, fuzzy msgid "Print debugging messages of the database handling" msgstr " --debug-cache 캐시 다루기에 대한 디버깅 메시지를 보여줍니다." #: ../src/liferea_application.c:294 #, fuzzy msgid "Print debugging messages of all GUI functions" msgstr " --debug-gui GUI 함수에 대한 디버깅 메시지를 보여줍니다." #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" #: ../src/liferea_application.c:296 #, fuzzy msgid "Print debugging messages of all network activity" msgstr " --debug-all 모든 종류의 디버깅 메시지를 뿌립니다." #: ../src/liferea_application.c:297 #, fuzzy msgid "Print debugging messages of all parsing functions" msgstr " --debug-parsing 모든 파싱 함수에 대한 디버깅 메시지를 보여줍니다." #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/liferea_application.c:299 #, fuzzy msgid "Print debugging messages when entering/leaving functions" msgstr "" " --debug-trace 함수를 들어가고 나오는것에 대한 디버깅 메시지를 보여줍니" "다." #: ../src/liferea_application.c:300 #, fuzzy msgid "Print debugging messages of the feed update processing" msgstr "" " --debug-update 피드를 업데이트하는 것에 대한 디버깅 메시지를 보여줍니다." #: ../src/liferea_application.c:301 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr " --debug-cache 캐시 다루기에 대한 디버깅 메시지를 보여줍니다." #: ../src/liferea_application.c:302 #, fuzzy msgid "Print verbose debugging messages" msgstr " --debug-verbose 자세한 디버깅 메시지를 보여줍니다." #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 #, fuzzy msgid "Print debugging messages for the given topic" msgstr " --debug-cache 캐시 다루기에 대한 디버깅 메시지를 보여줍니다." #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "" #: ../src/net.c:466 #, fuzzy msgid "Unable to connect to remote host" msgstr "원격 호스트로 접속하던 중 에러" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "" #. http 4xx client error #: ../src/net.c:474 #, fuzzy msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "이 피드를 다운로드 할 수 있도록 인증되지 않았습니다. 사용자 이름과 열쇠글을 " "피드 등록정보 대화상자에서 확인해주세요." #: ../src/net.c:476 #, fuzzy msgid "Payment required" msgstr "(돈)지불이 필요합니다" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "자원을 찾을 수 없습니다" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "동작이 허용되지 않습니다" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "받아들일 수 없습니다" #: ../src/net.c:481 #, fuzzy msgid "Proxy authentication required" msgstr "프록시 인증이 필요합니다" #: ../src/net.c:482 #, fuzzy msgid "Request timed out" msgstr "요청 시간이 초과되었습니다" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "사라짐.자원이 더 이상 존재하지 않습니다. 해지 해 주세요." #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "피드 사용 불가: 서버가 지원되지 않는 리다이렉션을 요청받았습니다." #: ../src/net.c:492 msgid "Client Error" msgstr "클라이언트 에러" #: ../src/net.c:494 msgid "Server Error" msgstr "서버 에러" #: ../src/net.c:496 #, fuzzy msgid "An unknown networking error happened!" msgstr "(알 수 없는 네트워크 에러가 일어남)" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "아이템" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "포함함" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "포함하지 않음" #: ../src/rule.c:175 msgid "Item title" msgstr "아이템 제목" #: ../src/rule.c:176 msgid "Item body" msgstr "아이템 본문" #: ../src/rule.c:177 msgid "Read status" msgstr "읽은 상태" #: ../src/rule.c:177 msgid "is unread" msgstr "안 읽었음" #: ../src/rule.c:177 msgid "is read" msgstr "읽었음" #: ../src/rule.c:178 msgid "Flag status" msgstr "플래그 상태" #: ../src/rule.c:178 msgid "is flagged" msgstr "플래그 되었음" #: ../src/rule.c:178 msgid "is unflagged" msgstr "플래그 되지 않음" #: ../src/rule.c:179 msgid "Podcast" msgstr "" #: ../src/rule.c:179 #, fuzzy msgid "included" msgstr "포함된 사진" #: ../src/rule.c:179 #, fuzzy msgid "not included" msgstr "포함된 사진" #: ../src/rule.c:180 #, fuzzy msgid "Category" msgstr "분류" #: ../src/rule.c:180 #, fuzzy msgid "is set" msgstr "읽었음" #: ../src/rule.c:180 msgid "is not set" msgstr "" #: ../src/rule.c:181 msgid "Feed title" msgstr "피드 제목" #: ../src/subscription.c:106 #, fuzzy, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "피드 \"%s\"은(는) 이미 새로 고쳐졌습니다!" #: ../src/subscription.c:111 #, fuzzy, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "피드가 연속적이지 않습니다. Liferea는 더이상 그 피드를 새로 고칠 수 없습니다." #: ../src/subscription.c:145 #, fuzzy, c-format msgid "Updating favicon for \"%s\"" msgstr "\"%s\"의 피드 아이콘을 새로 고치는중" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "이 등록피드를 읽던 중 문제가 발생했습니다. URL과 콘솔 출력을 확인하세요." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "\"%s\"의 URL이 영원히 바뀌었고, 갱신되었습니다." #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "" "\"%s\"이(가) 연속적이지 않습니다. Liferea는 그것을 더이상 새로 고칠 수 없습니" "다!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\"은(는) 마지막으로 업데이트 된 후 바뀌지 않았습니다." #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "%s을(를) 새로고치는 중" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "필터링을 위해 임시파일 %s을(를) 열던중 에러가 생겼습니다!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "에러: 파이프 %s을(를) 열 수 없습니다" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "에러: 파일 %s을(를) 열 수 없습니다" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "에러: \"%s\" 파일이 없습니다!" #: ../src/vfolder.c:54 #, fuzzy msgid "New Search Folder" msgstr "폴더 만들기" #: ../src/xml.c:410 #, fuzzy msgid "[There were more errors. Output was truncated!]" msgstr "[해석기 에러 출력이 생략되었습니다!]" #: ../src/xml.c:563 #, fuzzy msgid "XML Parser: Could not parse document:\n" msgstr "" "xmlReadMemory():·도큐먼트를 파싱할 수 없음:\n" "%s%s" #: ../src/ui/enclosure_list_view.c:175 #, fuzzy msgid "Attachments" msgstr "덧말" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr "" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "파일 고르기" #: ../src/ui/enclosure_list_view.c:444 #, fuzzy, c-format msgid "File Extension .%s" msgstr "파일 확장자 .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "pixmap 파일 %s을(를) 찾을 수 없습니다" #: ../src/ui/liferea_shell.c:404 #, fuzzy, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] "%d개의 새로운 아이템" msgstr[1] "%d개의 새로운 아이템들" #: ../src/ui/liferea_shell.c:409 #, fuzzy, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "안 읽었음" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "도움말 항목" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "간단 도움말" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "자주 묻는 질문" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "피드스터에서 찾기" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "\"%s\"에 대한 사용자 이름과 패스워드를 입력하세요 (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "알 수 없는 소스" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "전부 갱신(_A)" #: ../src/ui/ui_common.c:211 #, fuzzy msgid "All Files" msgstr "로컬 파일(_L)" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea가 오프라인 상태로 동작중입니다. 새로고침이 불가능합니다." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "모든 피드에서 찾기." #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "전부 읽은 것으로 표시(_R)" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "정말 %s을(를) 지우고 싶으세요?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "이 아이템은 어떠한 연결도 할당되지 않았습니다." #: ../src/ui/item_list_view.c:484 #, fuzzy msgid "*** No title ***" msgstr "[제목 없음]" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "머릿글" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "날짜" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "아이템을 지울 피드를 선택해야 합니다!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "아이템이 선택되지 않았습니다" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "" #: ../src/ui/popup_menu.c:111 #, fuzzy msgid "_Open In Browser" msgstr "브라우져로 띄우기(_L)" #: ../src/ui/popup_menu.c:115 #, fuzzy msgid "Open In _External Browser" msgstr "외부 브라우져" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "" #: ../src/ui/popup_menu.c:153 #, fuzzy msgid "Copy Item _Location" msgstr "/링크 위치 복사하기(_C)" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "읽은 상태를 토글(_R)" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "아이템 플래그 토글(_F)" #: ../src/ui/popup_menu.c:170 #, fuzzy msgid "R_emove Item" msgstr "/아이템을 지우기(_E)" #: ../src/ui/popup_menu.c:200 #, fuzzy msgid "Open Enclosure..." msgstr "/첨부 열기..." #: ../src/ui/popup_menu.c:201 #, fuzzy msgid "Save As..." msgstr "다른 이름으로 저장..." #: ../src/ui/popup_menu.c:202 #, fuzzy msgid "Copy Link Location" msgstr "/링크 위치 복사하기(_C)" #: ../src/ui/popup_menu.c:280 #, fuzzy msgid "_Update" msgstr "/갱신(_U)" #: ../src/ui/popup_menu.c:282 #, fuzzy msgid "_Update Folder" msgstr "/폴더 갱신(_U)" #: ../src/ui/popup_menu.c:292 #, fuzzy msgid "New _Subscription..." msgstr "새 구독(_N)..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "새 폴더(_F)..." #: ../src/ui/popup_menu.c:298 #, fuzzy msgid "New S_earch Folder..." msgstr "새 폴더(_F)..." #: ../src/ui/popup_menu.c:299 #, fuzzy msgid "New S_ource..." msgstr "/새로 만들기(_N)/새 폴더(_N)..." #: ../src/ui/popup_menu.c:300 #, fuzzy msgid "New _News Bin..." msgstr "/새로 만들기(_N)/새 폴더(_N)..." #: ../src/ui/popup_menu.c:303 #, fuzzy msgid "_New" msgstr "/새로 만들기(_N)" #: ../src/ui/popup_menu.c:312 #, fuzzy msgid "Sort Feeds" msgstr "피드 목록 들여오기" #: ../src/ui/popup_menu.c:320 #, fuzzy msgid "_Mark All As Read" msgstr "/전부 읽은 것으로 표시(_M)" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 #, fuzzy msgid "_Delete" msgstr "/지우기(_D)" #: ../src/ui/popup_menu.c:336 #, fuzzy msgid "_Properties" msgstr "등록 정보(_P)..." #: ../src/ui/popup_menu.c:343 #, fuzzy msgid "Convert To Local Subscriptions..." msgstr "새 구독(_N)..." #: ../src/ui/preferences_dialog.c:86 #, fuzzy msgid "GNOME default" msgstr "그놈 기본 브라우져를 사용합니다" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 #, fuzzy msgid "minutes" msgstr "분." #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr "" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr "" #: ../src/ui/preferences_dialog.c:112 #, fuzzy msgid "Normal View" msgstr "로컬 파일(_L)" #: ../src/ui/preferences_dialog.c:113 #, fuzzy msgid "Wide View" msgstr "보기(_V)" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Combined View" msgstr "간결하게 보기 토글(_C)" #: ../src/ui/preferences_dialog.c:476 #, fuzzy msgid "Default Browser" msgstr "그놈 기본 브라우져를 사용합니다" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "수동" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "종류" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "프로그램" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "엔트리 지우기" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "정말 %s을(를) 지우고 내용을 없애시겠습니까?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "정말 %s을(를) 지우고 싶으세요?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "지우기 확인" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "지우기 확인" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, fuzzy, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "이 피드의 제공자는 갱신 주기를 %d분 으로 제안했습니다." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "이 피드는 기본 갱신 주기를 정하지 않습니다." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "제목없음" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "새 서명" #: ../src/fl_sources/google_source.c:111 #, fuzzy msgid "Google Reader" msgstr "피드 캐시" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "" #: ../src/fl_sources/opml_source.c:379 #, fuzzy msgid "Choose OPML File" msgstr "파일 고르기" #: ../src/fl_sources/opml_source.h:28 #, fuzzy msgid "New OPML Subscription" msgstr "새 서명" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "" #: ../src/fl_sources/node_source.c:363 #, fuzzy msgid "Source Type" msgstr "소스 종류:" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, fuzzy, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "변환이 성공적이지 않습니다. %i 옥텟이 변환되었습니다.\n" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "피드 캐시" #: ../src/webkit/liferea_web_view.c:175 #, fuzzy msgid "Open Link In _Tab" msgstr "/링크를 탭으로 띄우기(_T)" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "/링크를 브라우져로 띄우기(_L)" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "/링크를 브라우져로 띄우기(_L)" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "" #: ../src/webkit/liferea_web_view.c:190 #, fuzzy msgid "_Copy Link Location" msgstr "/링크 위치 복사하기(_C)" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "보기(_V)" #: ../src/webkit/liferea_web_view.c:194 #, fuzzy msgid "_Copy Image Location" msgstr "/링크 위치 복사하기(_C)" #: ../src/webkit/liferea_web_view.c:197 #, fuzzy msgid "S_ave Link As" msgstr "다른 이름으로 저장..." #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "" #: ../src/webkit/liferea_web_view.c:207 #, fuzzy msgid "_Subscribe..." msgstr "/구독(_S)..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "글자 크기 크게하기(_I)" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "글자 크기 작게하기(_D)" #: ../glade/about.ui.h:1 msgid "About" msgstr "정보" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea는 GTK+를 이용한 뉴스 수집기입니다" #: ../glade/about.ui.h:3 #, fuzzy msgid "Liferea Homepage" msgstr "Liferea - 리눅스 피드 보기" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "인증" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "사용자 이름:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "열쇠글(_P):" #: ../glade/enclosure_handler.ui.h:1 #, fuzzy msgid "Open Enclosure" msgstr "/첨부 열기..." #: ../glade/enclosure_handler.ui.h:2 #, fuzzy msgid "Open an enclosure of type:" msgstr "첨부를 받고 있습니다. 종류:" #: ../glade/enclosure_handler.ui.h:3 #, fuzzy msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "이 첨부를 Liferea가 어떻게 하면 좋을까요? 원하는 명령을 써주세요. 다운로드한 " "파일이 이 명령의 인자로 넘겨질 것입니다. 명령:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "찾아보기(_B)" #: ../glade/enclosure_handler.ui.h:5 #, fuzzy msgid "_Do this automatically for enclosures like this from now on." msgstr "지금부터 이런 파일은 자동으로 이렇게 합니다." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "" #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 #, fuzzy msgid "_Password" msgstr "열쇠글(_P):" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 #, fuzzy msgid "View Headlines" msgstr "머릿글을 보는 방법(_V)" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "머릿글" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "전부 읽은 것으로 표시(_R)" #: ../glade/mark_read_dialog.ui.h:2 #, fuzzy msgid "Mark all as read" msgstr "전부 읽은 것으로 표시(_R)" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "폴더 만들기" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "폴더 이름(_F):" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "피드 소스" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "소스 종류:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "명령(_C)" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "로컬 파일(_L)" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "파일 고르기..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "소스(_S):" #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "다운로드 프로그램(_D)" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "변환 거르개를 사용(_F)" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea는 지원되지 않는 피드에 접근하기 위해 외부 거르개 플러그인을 사용할 " "수 있습니다. 자세한 것은 문서를 참조하세요." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "다음을 써서 변환(_U):" #: ../glade/node_source.ui.h:1 #, fuzzy msgid "Source Selection" msgstr "피드 종류 고르기" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "" #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" #: ../glade/opml_source.ui.h:3 #, fuzzy msgid "_Location" msgstr "/링크 위치 복사하기(_C)" #: ../glade/opml_source.ui.h:4 #, fuzzy msgid "_Select File" msgstr "파일 고르기" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Liferea 기본 설정" #: ../glade/prefs.ui.h:2 #, fuzzy msgid "Feed Cache Handling" msgstr "피드 다루기 설정" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "각 피드당 저장될 기본 아이템 숫자(_N):" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "Feed Update Settings" msgstr "피드 캐시" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 #, fuzzy msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "주의 합리적인 다시읽기 시간을 정하기 위해서 꼭 기억해 주세요. 매일 갱신되" "는 피드를15분 간격으로 다시 읽는것은 좋지 않습니다. 자동 갱신을 끄시려면 시" "간 간격을0으로 정해주세요." #: ../glade/prefs.ui.h:8 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "새 구독 더하기." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "기본 피드 새로고침 간격(_I):" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "피드" #: ../glade/prefs.ui.h:12 #, fuzzy msgid "Folder Display Settings" msgstr "폴더 표시 설정" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "선택된 폴더안에 들은 모든 자식 피드의 아이템들을 보여줍니다(_S)." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "읽은 아이템 숨기기(_H)" #: ../glade/prefs.ui.h:15 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "피드 아이콘(Favicons)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "모든 피드아이콘을 지금 갱신합니다(_U)." #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "폴더" #: ../glade/prefs.ui.h:18 #, fuzzy msgid "Reading Headlines" msgstr "머릿글" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "다음 항목으로 넘어가기 위한 키(_S):" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:21 #, fuzzy msgid "Web Integration" msgstr "방침" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "" #: ../glade/prefs.ui.h:24 #, fuzzy msgid "Internal Browser Settings" msgstr "외부 브라우져" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "링크를 Liferea 윈도우 안에서 엽니다(_W)." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "자바스크립트 비활성화(_D)." #: ../glade/prefs.ui.h:27 #, fuzzy msgid "_Enable browser plugins." msgstr "외부 브라우져" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "External Browser Settings" msgstr "외부 브라우져" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "브라우져(_B):" #: ../glade/prefs.ui.h:30 #, fuzzy msgid "_Manual:" msgstr "수동" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "브라우져" #: ../glade/prefs.ui.h:34 #, fuzzy msgid "Toolbar Settings" msgstr "프록시 설정" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "" #: ../glade/prefs.ui.h:36 #, fuzzy msgid "Toolbar _button labels:" msgstr "프록시 설정" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "HTTP 프록시 서버" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "" #: ../glade/prefs.ui.h:42 #, fuzzy msgid "_No Proxy" msgstr "프록시" #: ../glade/prefs.ui.h:43 #, fuzzy msgid "_Manual Setting:" msgstr "메뉴 설정" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "프록시 호스트(_H):" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "프록시 포트(_P):" #: ../glade/prefs.ui.h:46 #, fuzzy msgid "Use Proxy Au_thentication" msgstr "프록시 인증을 사용합니다(_A)" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "사용자 이름(_U):" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "프록시 열쇠글(_W):" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "프록시" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "폴더 표시 설정" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 #, fuzzy msgid "Downloading Enclosures" msgstr "첨부파일 다운로드" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "다운로드 프로그램(_D)" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 #, fuzzy msgid "Opening Enclosures" msgstr "/첨부 열기..." #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "첨부" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "서명 항목" #: ../glade/properties.ui.h:2 #, fuzzy msgid "Feed Name" msgstr "피드 이름(_N):" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "피드 이름(_N):" #: ../glade/properties.ui.h:4 #, fuzzy msgid "Update Interval" msgstr "/디렉토리 갱신(_U)" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "기본 갱신 주기를 사용합니다(_U)." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "피드 지정 새로 고침 간격" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "이 피드를 자동으로 업데이트 하지 말것(_D)." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "이 피드의 제공자는 갱신 주기를 %d분으로 제안했습니다." #: ../glade/properties.ui.h:11 msgid "General" msgstr "일반" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea는 지원되지 않는 피드에 접근하기 위해 외부 거르개 플러그인을 사용할 " "수 있습니다. 자세한 것은 문서를 참조하세요." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "캐시 설정은 Liferea 끝날 때 피드의 내용이 저장될지를 결정합니다.표시된 아이템" "들은 항상 캐시에 저장됩니다." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "기본 캐시 설정(_D)" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "캐시 끄기(_S)" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "무제한 캐시(_U)" #: ../glade/properties.ui.h:27 #, fuzzy msgid "_Number of items to save:" msgstr "각 피드당 저장될 기본 아이템 숫자(_N):" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "HTTP 인증을 사용합니다(_A)" #: ../glade/properties.ui.h:34 #, fuzzy msgid "Download" msgstr "다운로드 프로그램(_D)" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "이피드의 모든 첨부물을 자동으로 다운로드 받습니다(_A)." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" #: ../glade/properties.ui.h:37 #, fuzzy msgid "Ignore _comment feeds for this subscription." msgstr "선택된 구독을 위한 속성 대화창을 엽니다." #: ../glade/properties.ui.h:38 #, fuzzy msgid "_Mark downloaded items as read." msgstr "선택한 것들을 읽은 것으로 표시(_M)" #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "" #: ../glade/rename_node.ui.h:1 #, fuzzy msgid "Rename" msgstr "파일 이름" #: ../glade/rename_node.ui.h:2 #, fuzzy msgid "_New Name:" msgstr "이름(_N):" #: ../glade/search_folder.ui.h:1 #, fuzzy msgid "Search Folder Properties" msgstr "가상폴더 등록정보" #: ../glade/search_folder.ui.h:2 #, fuzzy msgid "Search _Name:" msgstr "피드 이름(_N):" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "" #: ../glade/search.ui.h:1 #, fuzzy msgid "Advanced Search" msgstr "피드스터에서 찾기" #: ../glade/search.ui.h:2 #, fuzzy msgid "_Search Folder..." msgstr "새 폴더(_F)..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "모든 피드에서 찾기." #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "" #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "모든 피드에서 지정한 내용을 찾습니다. 결과는 아이템 목록에 나타날 것 입니다." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "찾기(_S):" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "Liferea가 아이템 제목이나 내용에서 찾을 단어를 입력해주세요." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "" #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "" #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "" #: ../glade/ttrss_source.ui.h:3 #, fuzzy msgid "_Server URL" msgstr "피드 URL" #: ../glade/ttrss_source.ui.h:5 #, fuzzy msgid "_Username" msgstr "사용자 이름:" #: ../glade/update_monitor.ui.h:1 #, fuzzy msgid "Update Monitor" msgstr "/디렉토리 갱신(_U)" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "전부 갱신(_A)" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "" #: ../glade/update_monitor.ui.h:4 #, fuzzy msgid "Downloading Now" msgstr "첨부파일 다운로드" #, fuzzy #~ msgid "_Subscriptions" #~ msgstr "새 서명" #~ msgid "Update _All" #~ msgstr "전부 갱신(_A)" #, fuzzy #~ msgid "Updates all subscriptions." #~ msgstr "새 구독 더하기." #~ msgid "Mark All As _Read" #~ msgstr "전부 읽은 것으로 표시(_R)" #~ msgid "Marks read every item of every subscription." #~ msgstr "구독하는 모든 아이템을 읽은 것으로 표시합니다." #~ msgid "_Import Feed List..." #~ msgstr "피드 목록 들여오기(_I)..." #~ msgid "Imports an OPML feed list." #~ msgstr "OPML피드 리스트 가져오기." #~ msgid "_Export Feed List..." #~ msgstr "피드 리스트 내보내기 (_E)..." #, fuzzy #~ msgid "Exports the feed list as OPML." #~ msgstr "OPML형식으로 피드 리스트 내보내기." #, fuzzy #~ msgid "_Quit" #~ msgstr "/끝내기(_Q)" #, fuzzy #~ msgid "_Feed" #~ msgstr "피드(_F)" #, fuzzy #~ msgid "Remove _All Items" #~ msgstr "모두 지우기(_A)" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "현재 선택된 피드의 모든 아이템을 지웁니다." #, fuzzy #~ msgid "_Item" #~ msgstr "아이템들(_I)" #, fuzzy #~ msgid "Next Item" #~ msgstr "다음 안 읽은 아이템(_N)" #~ msgid "_Next Unread Item" #~ msgstr "다음 안 읽은 아이템(_N)" #~ msgid "_View" #~ msgstr "보기(_V)" #~ msgid "Increases the text size of the item view." #~ msgstr "아이템 보기의 글자 크기를 늘입니다." #~ msgid "Decreases the text size of the item view." #~ msgstr "아이템 보기의 글자 크기를 작게 합니다." #, fuzzy #~ msgid "_Update Monitor" #~ msgstr "/디렉토리 갱신(_U)" #, fuzzy #~ msgid "_Preferences" #~ msgstr "기본 설정" #, fuzzy #~ msgid "Edit Preferences." #~ msgstr "설정 고치기." #, fuzzy #~ msgid "S_earch" #~ msgstr "찾기" #, fuzzy #~ msgid "Search All Feeds..." #~ msgstr "모든 피드에서 찾기." #, fuzzy #~ msgid "Show the search dialog." #~ msgstr "찾기 상자 보이거나 감추기." #~ msgid "_Help" #~ msgstr "도움말(_H)" #~ msgid "_Contents" #~ msgstr "차례(_C)" #~ msgid "View help for this application." #~ msgstr "이 프로그램에 대한 도움말을 봅니다." #~ msgid "_Quick Reference" #~ msgstr "간단 도움말(_Q)" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Liferea의 모든 단축키 목록을 봅니다." #~ msgid "_FAQ" #~ msgstr "자주 묻는 질문들(_F)" #~ msgid "View the FAQ for this application." #~ msgstr "이 프로그램에 대한 자주 묻는 질문을 봅니다." #~ msgid "_About" #~ msgstr "정보(_A)" #~ msgid "Shows an about dialog." #~ msgstr "정보 대화창을 보여줍니다." #, fuzzy #~ msgid "_Normal View" #~ msgstr "로컬 파일(_L)" #, fuzzy #~ msgid "_Wide View" #~ msgstr "보기(_V)" #, fuzzy #~ msgid "_Combined View" #~ msgstr "간결하게 보기 토글(_C)" #, fuzzy #~ msgid "Hide feeds with no unread items." #~ msgstr "이것이 켜져 있다면 읽지 않은 아이템이 없는 피드는 숨깁니다." #~ msgid "_New Subscription..." #~ msgstr "새 구독(_N)..." #, fuzzy #~ msgid "Adds a subscription to the feed list." #~ msgstr "피드 목록에 새 구독 더하기." #, fuzzy #~ msgid "Adds a folder to the feed list." #~ msgstr "피드 목록에 폴더를 더합니다." #, fuzzy #~ msgid "Adds a new search folder to the feed list." #~ msgstr "피드 목록에 가상폴더를 더합니다." #, fuzzy #~ msgid "New _Source..." #~ msgstr "/새로 만들기(_N)/새 폴더(_N)..." #, fuzzy #~ msgid "Adds a new feed list source." #~ msgstr "피드 목록에 가상폴더를 더합니다." #, fuzzy #~ msgid "Adds a new news bin." #~ msgstr "새 구독 더하기." #, fuzzy #~ msgid "_Mark Items Read" #~ msgstr "읽은 것으로 표시(_M)" #, fuzzy #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "모든 선택된 구독 혹은 선택된 폴더의 구독의 아이템들을 모두 읽은 것으로 표" #~ "시합니다." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "선택된 구독을 혹은 모든 선택된 폴더의 구독을 새로 고칩니다." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "선택된 구독을 위한 속성 대화창을 엽니다." #, fuzzy #~ msgid "_Remove" #~ msgstr "모두 지우기(_A)" #~ msgid "Removes the selected subscription." #~ msgstr "선택된 구독을 없애버립니다." #~ msgid "Toggles the read status of the selected item." #~ msgstr "선택한 아이템의 읽은 상태를 토글합니다." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "선택한 아이템의 읽은 상태를 켜거나 끕니다." #, fuzzy #~ msgid "R_emove" #~ msgstr "/아이템을 지우기(_E)" #~ msgid "Removes the selected item." #~ msgstr "선택된 아이템을 없애버립니다." #, fuzzy #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "설정된 브라우져로 아이템의 링크를 엽니다." #, fuzzy #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "설정된 브라우져로 아이템의 링크를 엽니다." #, fuzzy #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "설정된 브라우져로 아이템의 링크를 엽니다." #~ msgid "_Work Offline" #~ msgstr "오프라인 작업" #, fuzzy #~ msgid "_Update All" #~ msgstr "/전부 새로 고침(_U)" #, fuzzy #~ msgid "InoReader" #~ msgstr "피드 캐시" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "참고: 사용자 이름과 열쇠글은 Liferea 피드리스트에 암호화되지 않은채로저" #~ "장됩니다." #, fuzzy #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea - 리눅스 피드 보기" #, fuzzy #~ msgid "_Open Link In Browser" #~ msgstr "/링크를 브라우져로 띄우기(_L)" #, fuzzy #~ msgid "_Open Link In External Browser" #~ msgstr "/링크를 브라우져로 띄우기(_L)" #~ msgid " " #~ msgstr " " #~ msgid "enter any search string you want" #~ msgstr "아무거나 원하는 찾을 말을 입력해보세요" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "최대 결과 갯수(_N):" #, fuzzy #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "참고: Liferea는 특정한 찾을말을 위해 Feedster 결과에 질의하는 피드 등록을 " #~ "생성합니다. 이것을 다른 subscription 처럼 영구히 저장하고,갱신할 수 있습니" #~ "다." #~ msgid "Liferea is now online" #~ msgstr "Liferea가 온라인으로 동작합니다" #, fuzzy #~ msgid "Work Offline" #~ msgstr "오프라인 작업" #~ msgid "Liferea is now offline" #~ msgstr "Liferea는 현재 오프라인입니다." #, fuzzy #~ msgid "Work Online" #~ msgstr "오프라인 작업" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "이 옵션을 선택하면 구독 갱신을 비활성화 합니다." #~ msgid "Browser default" #~ msgstr "기본 브라우져" #~ msgid "Existing window" #~ msgstr "존재하는 창" #~ msgid "New window" #~ msgstr "새 창" #~ msgid "New tab" #~ msgstr "새 탭" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "피드 캐시" #~ msgid "_Open link in:" #~ msgstr "링크 여는 방법(_O):" #, fuzzy #~ msgid "No comments yet." #~ msgstr "덧말" #, fuzzy #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - 리눅스 피드 보기" #, fuzzy #~ msgid "" #~ "

        Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

        You can add new subscriptions

        • From main menu " #~ "'Subscription' -> 'New Subscription'
        • By dropping feed links " #~ "into the subscription list
        • By right clicking links and choosing " #~ "'Subscribe' within Liferea

        " #~ msgstr "" #~ "

        온라인 소식 피드를 위한 책상 소식 긁어오기 Liferea에 오신것을 환" #~ "영 합니다.

        왼쪽의 판때기는 모든 구독목록을 가지고 있습니다. 새로운 " #~ "구독을 더하려면 Feeds -> New Subscription를 선택하세요. 피드" #~ "의 머릿글을 보려면 피드목록에서 피드를 고르세요. 머릿글이 오른쪽 판때기에 " #~ "표시됩니다.

        " #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d개의 새로운 아이템" #~ msgstr[1] "%d개의 새로운 아이템들" #~ msgid "No new items" #~ msgstr "새로운 아이템이 없습니다." #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d개의 안 읽은 아이템" #~ msgstr[1] "" #~ "%s\n" #~ "%d개의 안 읽은 아이템들" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "모두 읽었습니다" #, fuzzy #~ msgid "This feed does not exist anymore!" #~ msgstr "이 아이템은 어떠한 연결도 할당되지 않았습니다." #, fuzzy #~ msgid "Feed Update" #~ msgstr "피드 캐시" #, fuzzy #~ msgid "Show details" #~ msgstr "자세히 보기" #, fuzzy #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "선택된 구독을 위한 속성 대화창을 엽니다." #, fuzzy #~ msgid "Notification Settings" #~ msgstr "알림 영역 " #~ msgid "Show a _popup window with new headlines." #~ msgstr "새로운 머릿글로 팝업 윈도우를 보여줍니다(_P)." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "알림 영역(시스템 트레이 라고도 불리는)에 상태 아이콘을 보입니다." #, fuzzy #~ msgid "Launch Item In _Tab" #~ msgstr "/탭으로 띄우기(_L)" #, fuzzy #~ msgid "_Launch Item In Browser" #~ msgstr "/브라우져로 띄우기(_L)" #, fuzzy #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "/아이템 URL을 클립보드로 복사(_U)" #~ msgid "comments" #~ msgstr "덧말" #, fuzzy #~ msgid "Download finished." #~ msgstr "다운로드 프로그램(_D)" #~ msgid "Choose download directory" #~ msgstr "다운로드 할 디렉토리를 선택하세요" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "수동(_M):\n" #~ "(URL은 %s)" #~ msgid "_Save downloads in" #~ msgstr "다운로드한 파일 저장위치(_S)" #~ msgid "Downloading Enclosure" #~ msgstr "첨부파일 다운로드" #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "다음 안 읽은 아이템으로 뛰어갑니다. 현재 피드에 없다면 다음 피드의 안읽은 " #~ "아이템으로 뛰어버립니다." #, fuzzy #~ msgid "Liferea Sync %s@%s" #~ msgstr "Liferea 소스포지 뉴스" #, fuzzy #~ msgid "Print debugging messages for the plugin loading" #~ msgstr " --debug-cache 캐시 다루기에 대한 디버깅 메시지를 보여줍니다." #, fuzzy #~ msgid "Update status" #~ msgstr "플래그 상태" #, fuzzy #~ msgid "was updated" #~ msgstr "\"%s\"이(가) 갱신되었습니다..." #, fuzzy #~ msgid "was not updated" #~ msgstr "마지막으로 수정된 내용" #~ msgid "The orientation of the tray." #~ msgstr "트레이의 방침" #, fuzzy #~ msgid "Search With ..." #~ msgstr "피드스터에서 찾기(_F)..." #, fuzzy #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%s을(를) 찾기" #, fuzzy #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "%s

        \"%s\"에 대한 검색결과 %d개

        아이템 목록은 지정한 검색 패턴에 " #~ "대한 모든 찾기 결과를 담고 있습니다. 만약 이 검색 결과를 저장하고 싶다면, " #~ "찾기 대화창에서 가상폴더 단추를 클릭하세요. Liferea가 폴더를 더해줄 것입니" #~ "다." #, fuzzy #~ msgid "Count" #~ msgstr "정보" #~ msgid "You have to select a feed entry" #~ msgstr "피드 엔트리를 선택해야 합니다!" #~ msgid "(empty)" #~ msgstr "(비었음)" #~ msgid "_Properties..." #~ msgstr "등록 정보(_P)..." #, fuzzy #~ msgid "Update out-dated feeds" #~ msgstr "모든 피드 갱신" #, fuzzy #~ msgid "Force update of all feeds" #~ msgstr "모든 피드 갱신" #, fuzzy #~ msgid "startup" #~ msgstr "시작 할 때(_S):" #, fuzzy #~ msgid "feed updated" #~ msgstr "\"%s\"이(가) 갱신되었습니다..." #, fuzzy #~ msgid "feed added" #~ msgstr "피드 캐시" #, fuzzy #~ msgid "item selected" #~ msgstr "선택한 것 지우기(_S)" #, fuzzy #~ msgid "feed selected" #~ msgstr "선택한 것 지우기(_S)" #, fuzzy #~ msgid "item unselected" #~ msgstr "아이템이 선택되지 않았습니다" #, fuzzy #~ msgid "feed unselected" #~ msgstr "선택한 것 지우기(_S)" #, fuzzy #~ msgid "Sorry, no scripting support available!" #~ msgstr "설명이 없습니다." #, fuzzy #~ msgid "No script selected!" #~ msgstr "아이템이 선택되지 않았습니다" #, fuzzy #~ msgid "Create a new search feed." #~ msgstr "피드스터 찾기 피드를 만듭니다." #~ msgid "feedlist.opml" #~ msgstr "feedlist.opml" #~ msgid " " #~ msgstr " " #, fuzzy #~ msgid " " #~ msgstr " " #, fuzzy #~ msgid " " #~ msgstr " " #~ msgid "Feed Source" #~ msgstr "피드 소스" #, fuzzy #~ msgid "Hook" #~ msgstr "규칙" #, fuzzy #~ msgid "Registered Scripts" #~ msgstr "피드 소스" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "이 옵션을 선택하면 많은 피드가 들은 폴더를 불러올 때 심각하게 느리게 " #~ "될 수있습니다" #~ msgid "Downloading Enclosures" #~ msgstr "첨부 다운로드" #~ msgid "External Browser Settings" #~ msgstr "외부 브라우져 설정" #~ msgid "Feed Cache Handling" #~ msgstr "피드 캐다루기 설정" #~ msgid "Feed Name" #~ msgstr "피드 이름" #~ msgid "Feed Update Settings" #~ msgstr "피드 새로고침 설정" #~ msgid "HTTP Proxy Server" #~ msgstr "HTTP 프록시 서버" #~ msgid "Internal Browser Settings" #~ msgstr "내부 브라우져 설정" #~ msgid "Notification Settings" #~ msgstr "알림 설정\t" #~ msgid "Opening Enclosures" #~ msgstr "첨부파일 연결 프로그램" #~ msgid "Reading Headlines" #~ msgstr "머릿글 보기" #, fuzzy #~ msgid "Toolbar Settings" #~ msgstr "메뉴 설정" #~ msgid "Update Interval" #~ msgstr "새로고침 간격" #, fuzzy #~ msgid "Web Integration" #~ msgstr "새로고침 간격" #~ msgid "At _startup:" #~ msgstr "시작 할 때(_S):" #, fuzzy #~ msgid "Attention Profile" #~ msgstr "인증이 실패하였습니다!" #, fuzzy #~ msgid "Create new script" #~ msgstr "새 구독 더하기." #, fuzzy #~ msgid "Exec Command" #~ msgstr "명령(_C)" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "" #~ "예기치 않은 end-of-character 시퀀스이거나 잘못된 UTF-8 인코딩입니다! 몇몇 " #~ "문자가 버려집니다" #~ msgid "" #~ "Error while reading cache file \"%s\" ! Cache file could not be loaded!" #~ msgstr "" #~ "캐서파일 \"%s\"을(를) 읽던중 XML 에러가 발생. 캐시파일을 읽을 수 없습니다." #~ msgid "" #~ "

        XML error while parsing cache file! Feed cache file \"%s\" could not " #~ "be loaded!

        " #~ msgstr "" #~ "

        피드 캐서파일을(를) 해석하던 중 XML 에러가 발생. 캐시파일 \"%s\"을" #~ "(를) 읽을 수 없습니다.

        " #~ msgid "

        \"%s\" is no valid cache file! Cannot read cache file!

        " #~ msgstr "

        \"%s\"은(는) 올바른 캐시 파일이 아닙니다. 읽을 수 없습니다!

        " #~ msgid "There were errors while parsing cache file \"%s\"" #~ msgstr "캐시파일 \"%s\"을(를) 해석하던 중 에러가 발생했습니다!" #~ msgid "Access Forbidden" #~ msgstr "접근이 금지되었습니다" #~ msgid "URL is invalid" #~ msgstr "URL이 잘못 되었습니다" #~ msgid "Unsupported network protocol" #~ msgstr "지원하지 않는 네트웍 프로토콜" #~ msgid "Hostname could not be found" #~ msgstr "호스트 이름을 찾을 수 없습니다" #~ msgid "Network connection was refused by the remote host" #~ msgstr "원격 호스트로 부터 접속이 거부되었습니다" #~ msgid "Remote host did not finish sending data" #~ msgstr "원격 호스트가 데이터를 보내다 말았습니다." #~ msgid "Too many HTTP redirects were encountered" #~ msgstr "너무 많은 HTTP 리다이렉션입니다! 포기할래요 엉엉." #~ msgid "Remote host sent an invalid response" #~ msgstr "웹서버가 잘못된 리다이렉트를 보내왔습니다" #~ msgid "Webserver's authentication method incompatible with Liferea" #~ msgstr "웹서버의 인증 방법을 지원할 수 없습니다" #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "피드 링크 자동 찾기가 실패하였습니다. 아무런 피드 링크도 없습니다!" #~ msgid "single item view" #~ msgstr "단일 아이템 보기" #~ msgid "_Limit cache to" #~ msgstr "제한된 캐시(_L)" #~ msgid "items." #~ msgstr "아이템들." #~ msgid "Feed Loading Settings" #~ msgstr "피드 불러오기 설정" #~ msgid "Optimize for reduced _memory usage." #~ msgstr "메모리 사용을 위한 최적화(_M)." #~ msgid "Optimize for _speed." #~ msgstr "속도를 위한 최적화(_S)." #~ msgid "Date Column Settings" #~ msgstr "날짜 열 설정" #~ msgid "Display only _time" #~ msgstr "시간만 보여주기(_T)" #~ msgid "Display _date and time" #~ msgstr "시간과 날짜 보여주기(_D)" #~ msgid "_User defined format:" #~ msgstr "사용자가 정한 모양(_U):" #~ msgid "" #~ "for expert users: specify a time format string, consult the strftime() " #~ "manpage for the format codes" #~ msgstr "" #~ "숙련된 사용자에게: strftime() 맨페이지를 참고해서 시간 포맷 문자를 써주세" #~ "요" #~ msgid "Please restart Liferea for changes to take effect." #~ msgstr "설정을 적용하려면 Liferea를 재시작 해야 합니다." #~ msgid " " #~ msgstr " " #~ msgid "Lower Right" #~ msgstr "오른쪽 아래" #~ msgid "Upper Right" #~ msgstr "오른쪽 위" #~ msgid "Upper Left" #~ msgstr "왼쪽 위" #~ msgid "Lower Left" #~ msgstr "왼쪽 아래" #~ msgid "Popup Placement" #~ msgstr "팝업 위치" #~ msgid "Show Menu _And Toolbar" #~ msgstr "메뉴와 툴바 보이기(_A)" #~ msgid "Show _Menu Only" #~ msgstr "메뉴만 보이기(_M)" #~ msgid "Show _Toolbar Only" #~ msgstr "툴바만 보이기(_T)" #~ msgid "" #~ "Liferea reuses the GNOME proxy settings. If you use GNOME you can " #~ "change these settings in the GNOME Control Center." #~ msgstr "" #~ "Liferea는 그놈 프록시 설정을 사용합니다. 만약 당신이 그놈을 사용한다" #~ "면, 그놈메뉴의 '네트워크 프록시'를 통해서 바꿀 수 있습니다." #~ msgid "_Enable Proxy" #~ msgstr "프록시를 사용함(_E)" #~ msgid "Rename Folder" #~ msgstr "폴더 이름 바꾸기" #~ msgid "Liferea Homepage" #~ msgstr "Liferea 홈페이지" #, fuzzy #~ msgid "" #~ "Code, Patches, Debugging\n" #~ "\n" #~ "James Doherty\n" #~ "Jeremy Messenger\n" #~ "John McKnight\n" #~ "Tomasz Maka\n" #~ "Karl Soderstrom\n" #~ "Christophe Barbe\n" #~ "Juho Snellman\n" #~ "Roshan Revankar\n" #~ "Oliver Feiler\n" #~ "Niklas Morberg\n" #~ "Johannes Schlueter\n" #~ "Pierre Phaneuf\n" #~ "ahmed el-helw\n" #~ "James Bowes\n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary\n" #~ "Christoph Hohmann\n" #~ "Raphael Slinckx\n" #~ "Bjorn Monnens\n" #~ "Aristotle Pagaltzis\n" #~ "Norman Jonas\n" #~ "and many more...\n" #~ "\n" #~ "Code from other projects\n" #~ "\n" #~ "Anders Carlsson (tray icon support)\n" #~ "Philippe Martin, Brion Vibber (favicon support)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Included Software\n" #~ "\n" #~ "Liferea uses the XSPF Web Music Player to \n" #~ "allow direct podcast playback. This player was \n" #~ "written by Fabricio Zuardi and can be found \n" #~ "at http://musicplayer.sourceforge.net" #~ msgstr "" #~ "코딩, 패치, 디버깅\n" #~ "\n" #~ "James Doherty <...>\n" #~ "Jeremy Messenger \n" #~ "John McKnight <...>\n" #~ "Tomasz Maka \n" #~ "Karl Soderstrom \t\n" #~ "Christophe Barbe \n" #~ "Juho Snellman \n" #~ "Roshan Revankar \n" #~ "Oliver Feiler \n" #~ "Niklas Morberg \n" #~ "Johannes Schlueter \n" #~ "Pierre Phaneuf \n" #~ "ahmed el-helw \n" #~ "James Bowes \n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary \n" #~ "Christoph Hohmann \n" #~ "Raphael Slinckx \n" #~ "Bjorn Monnens \n" #~ "and many more...\n" #~ "\n" #~ "다른 프로젝트에서 가져온 코드들\n" #~ "\n" #~ "Anders Carlsson (tray icon support)\n" #~ "Philippe Martin, Brion Vibber (favicon support)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)" #~ msgid "Contributors" #~ msgstr "도움을 주신 분들" #~ msgid "Translation" #~ msgstr "번역한 분들" #, fuzzy #~ msgid "" #~ "Note: Items are added to the search folder if at least one additive rule\n" #~ "matches. They are removed if at least one removing rule matches." #~ msgstr "" #~ "알아두기: 만약 하나이상의 부가 규칙과 맞아 떨어진다면 가상폴더에\n" #~ "아이템이 더해집니다. 그것들은 맞는 규칙이 하나도 없어지면 사라집니다." #~ msgid "Saves this search as a VFolder, which will appear in the feed list." #~ msgstr "피드 목록에 나타나는 가상 폴더에 찾은 결과를 저장합니다." #~ msgid "VFolder" #~ msgstr "가상폴더" #~ msgid " --help Print this help and exit" #~ msgstr " --help 이 내용을 보여주고 끝냅니다." #~ msgid " --mainwindow-state=STATE" #~ msgstr " --mainwindow-state=상태" #~ msgid " Start Liferea with its main window in STATE." #~ msgstr " Liferea의 메인 윈도우를 특정상태로 시작합니다." #, fuzzy #~ msgid " --debug-plugins Print debugging messages when loading plugins" #~ msgstr "" #~ " --debug-parsing 모든 파싱 함수에 대한 디버깅 메시지를 보여줍니다." #~ msgid "The --mainwindow-state argument must be given a parameter.\n" #~ msgstr "--mainwindow-state 옵션은 반드시 인자를 가져야 합니다.\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "--session 옵션은 반드시 인자를 가져야 합니다.\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "Liferea는 알 수 없는 인자: %s을(를) 겪어버렸어요!\n" #~ msgid "" #~ "Another copy of Liferea was found to be running. Please use it instead. " #~ "If there is no other copy of Liferea running, please delete the \"~/." #~ "liferea/lock\" lock file." #~ msgstr "" #~ "또 다른 Liferea가 실행중입니다. 그녀석을 써주세요. 만약 Liferea가 실행중이" #~ "지 않은데도 그런거라면, \"~/.liferea/lock\" 잠금 파일을 지워주세요." #~ msgid "does match" #~ msgstr "일치함" #~ msgid "does not match" #~ msgstr "일치하지 않음" #~ msgid "Note: Using the subscriptions filter disables drag & drop" #~ msgstr "참고: 구독에 대한 필터를 사용하는 것은 '긁어서 놓기'를 끕니다." #, fuzzy #~ msgid "" #~ "Sorry, I was not able to load any installed browser plugin! Try the --" #~ "debug-plugins option to get debug information!" #~ msgstr "" #~ "죄송합니다만, 어떤 브라우져 모듈도 불러올 수 없군요. --debug-all 옵션을 사" #~ "용해서 디버깅 정보를 보세요." #~ msgid "_Program" #~ msgstr "프로그램(_P)" #~ msgid "Updates all subscriptions. This does not update OCS directories." #~ msgstr "즉시 모든 피드를 새로 고칩니다. OCS 디렉토리는 포함하지 않습니다." #~ msgid "_Search" #~ msgstr "찾기(_S)" #~ msgid "Update _Selected" #~ msgstr "선택된 것 갱신(_S)" #~ msgid "_Delete Selected" #~ msgstr "선택된 것 지우기(_D)" #~ msgid "Toggles the item list mode between condensed and normal mode." #~ msgstr "아이템 목록 상태를 접힌상태와 보통상태 양쪽을 왔다갔다합니다." #~ msgid "/Toggle _Read Status" #~ msgstr "/읽은 상태를 토글(_R)" #~ msgid "/Toggle Item _Flag" #~ msgstr "/아이템 플래그 토글(_F)" #~ msgid "/_Next Unread Item" #~ msgstr "/다음 안 읽은 아이템(_N)" #~ msgid "/_Increase Text Size" #~ msgstr "/글자 크기 크게하기(_I)" #~ msgid "/_Decrease Text Size" #~ msgstr "/글자 크기 작게하기(_D)" #~ msgid "/Toggle _Online|Offline" #~ msgstr "/온라인/오프라인 작업 토글(_O)" #~ msgid "/_Preferences..." #~ msgstr "/기본 설정(_P)..." #~ msgid "/_Show Window" #~ msgstr "/창 보이기(_S)" #~ msgid "/_Quit" #~ msgstr "/끝내기(_Q)" #~ msgid "/_New/New _Subscription..." #~ msgstr "/새로 만들기(_N)/새 구독(_S)..." #, fuzzy #~ msgid "/_New/New _Folder..." #~ msgstr "/새로 만들기(_N)/새 가상폴더(_V)..." #, fuzzy #~ msgid "/_New/New S_earch Folder..." #~ msgstr "/새로 만들기(_N)/새 가상폴더(_V)..." #, fuzzy #~ msgid "/_New/New S_ource..." #~ msgstr "/새로 만들기(_N)/새 폴더(_N)..." #~ msgid "/_Rename Folder..." #~ msgstr "/폴더 이름 바꾸기(_R)..." #~ msgid "/_Delete Folder" #~ msgstr "/폴더 지우기(_D)" #~ msgid "/_Properties..." #~ msgstr "/등록정보(_P)..." #~ msgid "Update only feeds scheduled for updates" #~ msgstr "스케쥴 된 피드만 업데이트 합니다" #~ msgid "Reset feed update timers (Update no feeds)" #~ msgstr "" #~ "피드 새로 고침 타이머를 새로 맞춥니다. (피드는 업데이트 하지 않습니다)" #~ msgid "Cookie for %s has expired!" #~ msgstr "%s에 대한 쿠키가 만료되었습니다!" #~ msgid "Liferea notification" #~ msgstr "Liferea 알림" #, fuzzy #~ msgid "" #~ "
        You may want to validate the feed using FeedValidator." #~ msgstr "\">피드검증기를 이용해서 피드를 검증할 수 있습니다." #~ msgid "user defined command" #~ msgstr "사용자가 정한 명령:" #~ msgid "Item:" #~ msgstr "아이템:" #~ msgid "date" #~ msgstr "날짜" #~ msgid "feed generator" #~ msgstr "피드를 만든 사람에게." #~ msgid "contributors" #~ msgstr "도움을 주신 분들" #~ msgid "language" #~ msgstr "언어" #~ msgid "feed published on" #~ msgstr "피드가 출판된 곳" #~ msgid "content last updated" #~ msgstr "마지막으로 수정된 내용" #~ msgid "managing editor" #~ msgstr "관리하는 사람" #~ msgid "webmaster" #~ msgstr "웹마스터" #~ msgid "report errors to" #~ msgstr "에러를 보내주세요." #~ msgid "original source" #~ msgstr "원래 소스" #~ msgid "original time" #~ msgstr "원래 시간" #~ msgid "license" #~ msgstr "라이센스" #~ msgid "type" #~ msgstr "종류" #~ msgid "format" #~ msgstr "형식" #~ msgid "identifier" #~ msgstr "구별자" #~ msgid "source" #~ msgstr "소스" #~ msgid "coverage" #~ msgstr "범위" #, fuzzy #~ msgid "vfolder" #~ msgstr "가상폴더" #, fuzzy #~ msgid "VFolder:" #~ msgstr "가상폴더" #~ msgid "New _VFolder..." #~ msgstr "새 가상폴더(_V)..." #, fuzzy #~ msgid "Adds a new plugin instance to the feed list." #~ msgstr "피드 목록에 가상폴더를 더합니다." #, fuzzy #~ msgid "%s - %d unread item" #~ msgid_plural "%s - %d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d개의 안 읽은 아이템" #~ msgstr[1] "" #~ "%s\n" #~ "%d개의 안 읽은 아이템들" #~ msgid "/_New/New F_older..." #~ msgstr "/새로 만들기(_N)/새 폴더(_N)..." #~ msgid "New VFolder" #~ msgstr "새 가상폴더 만들기" #, fuzzy #~ msgid "

        Could not find Atom 1.0 header!

        " #~ msgstr "

        RDF 헤더를 찾을 수 없습니다!

        " #~ msgid "internal OCS namespace parsing error!" #~ msgstr "내부 OSC 네임스페이스 파싱 에러 " #~ msgid "no namespace handler for <%s:%s>!\n" #~ msgstr "<%s:%s> 를 위한 네임스페이스 핸들러가 없습니다!\n" #~ msgid "

        Could not find RDF header!

        " #~ msgstr "

        RDF 헤더를 찾을 수 없습니다!

        " #~ msgid "

        Could not find OPML header!

        " #~ msgstr "

        OPML 헤더를 찾을 수 없습니다.!

        " #~ msgid "

        Could not find Atom/Echo/PIE header!

        " #~ msgstr "

        Atom/Echo/PIE 헤더를 찾을 수 없습니다.!

        " #~ msgid "

        Could not find RDF/RSS header!

        " #~ msgstr "

        RDF/RSS 헤더를 찾을 수 없습니다!

        " #~ msgid "" #~ "The included HTML tag is not supported with GtkHTML2.\n" #~ "Included Plugins might not be displayed." #~ msgstr "" #~ " 태그는 GtkHTML2에서 지원하지 않습니다.\n" #~ "포함된 플러그인은 안 보일것입니다." #~ msgid "" #~ "\n" #~ "Trying to load the Mozilla browser module... Note that this\n" #~ "might not work with every Mozilla version. If you have problems\n" #~ "and Liferea does not start, try to set MOZILLA_FIVE_HOME to\n" #~ "another Mozilla installation or delete the gconf configuration\n" #~ "key /apps/liferea/browser-module!\n" #~ "\n" #~ msgstr "" #~ "\n" #~ "모질라 브라우져 모듈 불러오기를 시도합니다... 이것은 모든\n" #~ "모질라 버전에서 잘 동작하지는 않음을 참고하세요. 만약 문제가 있고\n" #~ "Liferea가 정상적으로 시작하지 않는다면, MOZILLA_FIVE_HOME을 \n" #~ "다른버전의 모질라가 깔린 곳으로 설정하거나, 아니면 \n" #~ "/apps/liferea/brower-module gconf 키를 지워버리세요.\n" #~ "\n" #~ msgid "" #~ "Failed to open HTML widget module (%s) specified in configuration!\n" #~ "%s\n" #~ msgstr "" #~ "설정된 HTML 위젯 모듈 (%s)을(를) 여는 것을 실패했습니다!\n" #~ "%s\n" #~ msgid "Htmlview API mismatch!" #~ msgstr "Htmlview API가 맞지 않습니다!" #~ msgid "Detected module is not a valid htmlview module!" #~ msgstr "검색된 모듈이 올바른 htmlview 모듈이 아닙니다" #~ msgid "Available browser modules (%s):\n" #~ msgstr "사용 가능한 브라우져 모듈 (%s):\n" #~ msgid "Loading configured browser module (%s)!\n" #~ msgstr "브라우져 모듈(%s)을(를) 불러옵니다! \n" #~ msgid "No browser module configured!\n" #~ msgstr "설정된 브라우져 모듈이 없습니다!\n" #~ msgid "trying to load browser module %s (%s)\n" #~ msgstr "브라우져 모듈 %s (%s)을(를) 불러오는것을 시도합니다.\n" #~ msgid "internal error! time conversion error! mktime failed!\n" #~ msgstr "내부 에러! 시간 변환 실패! mktime 실패\n" #~ msgid "Invalid ISO8601 date format! Ignoring information!\n" #~ msgstr "잘못된 ISO8601 날짜 형식. 정보를 무시합니다\n" #, fuzzy #~ msgid "" #~ "

        Could not determine the feed type. Please check that it is a valid type and listed in the supported formats." #~ "

        " #~ msgstr "" #~ "

        피드 종류를 알 수 없습니다.·그것이 맞는 형식인지 확인하시고 지원되는 형식인지 확인해 주세요.

        " #~ msgid "Please do a search first!" #~ msgstr "찾기를 먼저 해주세요!" #~ msgid "You must select a feed entry." #~ msgstr "피드 엔트리를 선택해야 합니다." #~ msgid "A folder must be selected." #~ msgstr "풀더가 선택되어 있어야 합니다." #~ msgid "You must select a feed entry" #~ msgstr "피드 엔트리를 선택해야 합니다" #~ msgid "" #~ "internal error! unknown entry type! cannot display appropriate icon!\n" #~ msgstr "" #~ "내부 에러! 알 수 없는 엔트리 종류! 적당한 아이콘을 보여줄 수 없습니다.\n" #~ msgid "Cannot load HTML widget module (%s)!" #~ msgstr "HTML 위젯 모듈 (%s)를 불러올 수 없습니다!" #~ msgid "New Feed" #~ msgstr "새 피드" #~ msgid "Next Unread" #~ msgstr "다음 안 읽은 것" #~ msgid "Mark As Read" #~ msgstr "읽은 것으로 표시" #~ msgid "Update All" #~ msgstr "전부 새로 고침" #~ msgid "Viewing Mode" #~ msgstr "보기 모드" #~ msgid "Switches between 2 and 3 pane mode." #~ msgstr "판때기 2개짜리 혹은 3개짜리로 상태를 바꿉니다." #~ msgid "URL" #~ msgstr "URL" #~ msgid "" #~ "Marks all items of the current selected subscription or all of " #~ "subscriptions of the selected folder as read." #~ msgstr "" #~ "현재 선택된 모든 구독, 혹은 모든 선택된 폴더의 구독의 아이템들을 모드 읽" #~ "은 것으로 표시합니다." #~ msgid "Toggles the item flag." #~ msgstr "아이템 플래그 토글." #~ msgid "_Select File..." #~ msgstr "파일 고르기(_S)..." #~ msgid "Enlosures" #~ msgstr "첨부" #~ msgid "Browse" #~ msgstr "찾아보기" #~ msgid "Rules" #~ msgstr "규칙" #~ msgid "Search for" #~ msgstr "찾기" #~ msgid "" #~ "

        Welcome to Liferea

        The left pane contains the feed list where " #~ "you can add new subscriptions and select subscriptions to read their " #~ "headlines. The right side either displays a list of the headlines of the " #~ "selected subscription and a pane to view the selected headline or all " #~ "headlines at once if condensed mode is selected.

        Basic Actions
        • Add Subscription - Creates a new subscription in the " #~ "selected folder. To create a new subscription enter the feed URL or if " #~ "you don't know it the URL of the website which provides the feed.

        • Update Subscription - This will update the subscription " #~ "you selected. You may want to do this if you want to immediately check a " #~ "subscription for updates. Usually it is adequate to rely on the auto " #~ "updating according to the update interval of the subscription.

        • Update All - This will update all your subscriptions at " #~ "once. Again usually it is adequate to rely on the auto updating.

        • Edit Subscription Properties - Sometimes you might want " #~ "to change the update interval, title, authentication or caching " #~ "properties of a subscription.

        To learn more about Liferea " #~ "you should read the documentation provided in the help feed or in the FAQ available at the project homepage.

        " #~ msgstr "" #~ "

        Liferea에 오신것을 환영합니다

        왼쪽의 판자는 당신이 새로 추가할 " #~ "수 있는 새로운 구독을 가지고 있습니다. 그것을 선택해서 머릿글을 읽을 수 있" #~ "습니다. 오른쪽에선 선택된 구독의 머릿글을 보여주고 선택된 머릿글이나 모든 " #~ "머릿글을 한번에 볼 수도 있습니다.

        기본 동작

        • 구독 " #~ "추가하기 - 선택한 폴더에 새로운 구독을 만듭니다. 새로운 구독을 만들기 " #~ "위해서는 피드 URL을 입력하거나, 만약 URL을 모른다면 피드를 제공하는 웹사이" #~ "트의 URL을 입력해 주세요.

        • 구독 새로 고침 - 이것은 당" #~ "신이 선택한 구독을 새로고칩니다. 구독을 지금 즉시 최신으로 새로 고치고 싶" #~ "다면 이것을 선택하세요. 보통은 자동으로 업데이트 하는 것으로 충분합니다. " #~ "

        • 전부 새로고침 - 이것은 당신의 모든 구독을 한번에 새" #~ "로 고칩니다. 다시 말하지만 자동 새로고침으로 충분합니다.

        • 구" #~ "독 등록정보 수정 - 가끔 새로 고침 간격이나 제목, 인증 방법이나 캐싱 등" #~ "록정보 등을 고치고 싶을 때가 합니다.

        Liferea에 대해 더 자" #~ "세히 알고 싶으시면 도움말 피드에서 제공되는 문서나 프로젝트 홈페이지FAQ를 꼭 읽어보세요.

        " #~ msgid "Toggle Search Box" #~ msgstr "찾기 상자 토글" #~ msgid " --iconify Start the program iconified" #~ msgstr " --iconify 프로그램을 아이콘화 한 채 시작합니다" #~ msgid "http://lzone.de/liferea/help/help" #~ msgstr "http://lzone.de/liferea/help/help" #~ msgid ".rdf" #~ msgstr ".rdf" #~ msgid "There were errors while parsing a feed" #~ msgstr "이 피드를 해석하던 중 에러가 발생했습니다." #~ msgid "" #~ "There were errors while parsing this feed. The following error occurred:" #~ "
        %s" #~ msgstr "" #~ "이 피드를 해석하던 중 에러가 발생했습니다. 다음과 같은 에러가 발생했습니" #~ "다:
        %s" #~ msgid "" #~ "There were errors while filtering this feed. The following error occurred:" #~ "
        %s
        " #~ msgstr "" #~ "이 피드를 해석하던 중 에러가 발생했습니다. 다음과 같은 에러가 발생했습니" #~ "다:
        %s" #~ msgid "" #~ "Starts a search for all items that do match the given search string " #~ "either in title or content." #~ msgstr "" #~ "제목이나 본문이 주어진 검색어에 부합하는 모든 피드에 대한 찾기를 시작한다." #~ msgid "Close search" #~ msgstr "찾기를 닫습니다." #~ msgid "" #~ "_Load feeds from disk when needed. Searching can \n" #~ "be slow if you have a lot of feeds." #~ msgstr "" #~ "필요하면 피드를 디스크에서 불러옵니다. 많은 피드를\n" #~ "가지고 있다면 찾기가 느려질 수도 있습니다.(_L)" #~ msgid "" #~ "_Keep all feeds loaded. This may improve speed \n" #~ "(especially when searching) but can cause a \n" #~ "significant memory footprint if you have a lot \n" #~ "of feeds!" #~ msgstr "" #~ "모든 피드를 불러온 상태를 유지합니다(_K).\n" #~ "이렇게 하면 속도가 향상됩니다.(특히 검색할 때)\n" #~ "하지만 많은 피드를 가지고 있다면\n" #~ "메모리를 무지하게 써댑니다!" #~ msgid "" #~ "Liferea displays feeds' content using various HTML renderers. Depending " #~ "on which renderers are installed on your computer, different options will " #~ "be available. Restart Liferea for changes to take effect." #~ msgstr "" #~ "Liferea는 여러가지 HTML 렌더러를 통해서 피드의 내용을 보여줍니다. 어떤 렌" #~ "더러가 여러분의 컴퓨터에 설치 되어있느냐에 따라 여러가지 옵션을 사용할 수 " #~ "있습니다. Liferea를 재시작 해야 바뀐점이 적용됩니다." #~ msgid "enclosed file: %s" #~ msgstr "동봉된 파일: %s" #~ msgid "Invalid RFC822 date format! Ignoring date information!\n" #~ msgstr "잘못된 RFC822 날짜 형식. 날짜 정보를 무시합니다\n" #~ msgid "URL points to permanent redirect, updating with new location..." #~ msgstr "" #~ "이 URL은 영구 리다이렉션을 가리키고 있어서, 새로운 위치로 업데이트 합니" #~ "다..." #~ msgid "Filter Feeds Without Unread Headlines" #~ msgstr "읽지않은 머릿글을 제외하고 피드를 거릅니다" #~ msgid "Headline Display" #~ msgstr "머릿글" #~ msgid "ERROR: zlib_uncompress: %d %s\n" #~ msgstr "에러: zlib_uncompress: %d %s\n" #~ msgid "ERROR: No output during decompression" #~ msgstr "에러: 압축을 푸는동안 출력이 전혀 없음" #~ msgid "ERROR: Invalid magic bytes for GZIP data" #~ msgstr "에러: GZIP데이터에 대한 잘못된 magic-bytes " #~ msgid "ERROR: Compression method is not deflate" #~ msgstr "에러: Compression method is not deflate" #~ msgid "ERROR: Unsupported flags %d\n" #~ msgstr "에러: 지원하지 않는 플래그 %d\n" #~ msgid "Liferea 0.6.1" #~ msgstr "Liferea 0.6.1" #~ msgid "" #~ "
        When Liferea starts for the first time it loads a localized default " #~ "feed list. There are already default lists for English, French, German " #~ "and Spanish. If you think you know a good set of default feeds for your " #~ "language please post them (maybe as OPML) on the mailing list and it will be included in " #~ "the next release!
        " #~ msgstr "" #~ "Liferea가 처음 시작할 때 지역화된 기본 피드목록을 불러옵니다.영어, 불" #~ "어, 독어 그리고 스페인어의 기본목록이 이미 있습니다. 만약 당신이 사용하는 " #~ "언어의 좋은 기본 피드 목록을 알고 있다고 생각한다면메일링 리스트로 그것들을 (가능하" #~ "면 OPML로) 보내주세요그것들은 다음 릴리즈에 포함될 것입니다!" #~ msgid "RSS namespace %s not yet configured! Activating...\n" #~ msgstr "RSS 네임스페이스 %s이(가) 아직 설정되지 않았습니다. 활성화중...\n" #~ msgid "Online Help Feed" #~ msgstr "온라인 도움말 피드" #~ msgid "_File" #~ msgstr "파일(_F)" #~ msgid "Conversion Filter" #~ msgstr "변환 거르개" #~ msgid "" #~ "Takeshi AIHANA \n" #~ "Dario Conigliaro \n" #~ "Carlos Fenollosa \n" #~ "Enrico Genauck \n" #~ "Park Ji-In \n" #~ "Stephane Jourdan \n" #~ "Juraj Kubelka \n" #~ "Vincent Lefevre \n" #~ "Tomislav Markovski \n" #~ "Jose Maria Mateos \n" #~ "Vladimir Petkov \n" #~ "Rex Tsai \n" #~ "Alekseev Vladimir \n" #~ "Antoine REVERSAT \n" #~ "Tibor Pittich \n" #~ msgstr "" #~ "Takeshi AIHANA \n" #~ "Dario Conigliaro \n" #~ "Carlos Fenollosa \n" #~ "Enrico Genauck \n" #~ "박지인 \n" #~ "Stephane Jourdan \n" #~ "Juraj Kubelka \n" #~ "Vincent Lefèvre \n" #~ "Tomislav Markovski \n" #~ "Jose Maria Mateos \n" #~ "Vladimir Petkov \n" #~ "Rex Tsai \n" #~ "Alekseev Vladimir \n" #~ "Antoine REVERSAT \n" #~ "Tibor Pittich \n" #~ msgid "internal error! could not get feed tree view selection!\n" #~ msgstr "내부 에러! 트리뷰의 선택부분을 찾을 수 없습니다!\n" #~ msgid "This feed's refresh interval defaults to %d seconds." #~ msgstr "피드의 새로고침 간격이 %d초로 설정되었습니다." #~ msgid "Directories cannot be autoupdated." #~ msgstr "디렉토리는 자동으로 갱신할 수 없습니다." #~ msgid "Deleting \"%s\"" #~ msgstr "\"%s\"을(를) 지웁니다" #~ msgid "A folder must be empty to delete it!" #~ msgstr "폴더를 지우시려면 먼저 폴더를 비우세요!" #~ msgid "/_Mark As Read" #~ msgstr "/읽은 것으로 표시(_M)" #~ msgid "/_New/New _Feed" #~ msgstr "/새로 만들기(_N)/새 피드(_F)" #~ msgid "\"%s\" has no new items" #~ msgstr "\"%s\"은(는) 새로운 아이템이 없습니다." #~ msgid "\"%s\" has %d new items" #~ msgstr "\"%s\"은(는) %d개의 새로운 아이템이 있습니다." #~ msgid "create VFolder" #~ msgstr "가상 폴더 만들기" #~ msgid "/_Delete VFolder" #~ msgstr "/가상 폴더 지우기(_D)" #~ msgid "edit filter rules" #~ msgstr "거르개 규칙 고치기" #~ msgid "edit rule properties" #~ msgstr "규칙 설정하기" #~ msgid "Rule Type" #~ msgstr "규칙 종류" #~ msgid "add items with exact match" #~ msgstr "정확히 일치하는 아이템 더하기" #~ msgid "remove items with exact match" #~ msgstr "정확히 일치하는 아이템 빼기" #~ msgid "Rule Value" #~ msgstr "규칙 값" #~ msgid "" #~ "You cannot delete the help! Disable loading the help by changing the " #~ "preferences. You will be able to delete the help folder after restarting " #~ "Liferea." #~ msgstr "" #~ "도움말은 지울 수 없습니다! 설정 고침에서 도움말을 꺼주세요.그리고 Liferea" #~ "를 재시작하면 help 폴더를 지울 수 있습니다." #~ msgid "You cannot modify help feeds." #~ msgstr "도움말 피드는 지울 수 없습니다" #~ msgid "Value" #~ msgstr "값" #~ msgid "" #~ "

        Could not determine the feed type. Please check that it is in a " #~ "supported format.

        " #~ msgstr "" #~ "

        피드 종류를 결정할 수 없습니다! 지원되는 형식인지 확인해주세요!

        " #~ msgid "The feed no longer exists. Please unsubscribe." #~ msgstr "피드가 더 이상 존재하지 않습니다. 해지 해 주세요." #~ msgid "Select A File" #~ msgstr "파일 고르기" #~ msgid "" #~ "Liferea can import a list of feeds from an OPML file. This can be used " #~ "to either restore a backup feed list or import a feed list from another " #~ "aggregator like that supports OPML export." #~ msgstr "" #~ "Liferea는 OPML 파일로부터 피드 리스트를 가져올 수 있습니다. 이 기능으로 백" #~ "업받은 피드 리스트를 가져오거나 혹은 OPML을 지원하는 다른 aggregator로 부" #~ "터 가져올 수 있습니다." #~ msgid "" #~ "Liferea can export the list of feeds as an OPML list. You can use this " #~ "feature to backup your feed list or export your feed list to another " #~ "aggregator." #~ msgstr "" #~ "Liferea는 피드 목록을 OPML 목록 으로 내보낼 수 있습니다. 이것을 가지고피" #~ "드 목록을 백업하거나 다른 aggregator로 가져갈 수 있습니다." #~ msgid "window1" #~ msgstr "윈도우1" #~ msgid "" #~ "Stephane Jourdan \n" #~ "Takeshi Aihana \n" #~ "Park Ji-In \n" #~ "Carlos Fenollosa \n" #~ "Jose Maria Mateos \n" #~ "Enrico Genauck \n" #~ "Vladimir Petkov \n" #~ "Tomislav Markovski \n" #~ "Dario Conigliaro \n" #~ "Rex Tsai \n" #~ "Alekseev Vladimir \n" #~ "Juraj Kubelka \n" #~ "Martin-Eric Racine " #~ msgstr "" #~ "Stephane Jourdan \n" #~ "Takeshi Aihana \n" #~ "박지인 \n" #~ "Carlos Fenollosa \n" #~ "Jose Maria Mateos \n" #~ "Enrico Gernauck \n" #~ "Vladimir Petkov \n" #~ "Tomislav Markovski \n" #~ "Dario Conigliaro " #~ msgid "_Update all feeds on program startup." #~ msgstr "프로그램이 시작될때 모든 피드를 갱신합니다." #~ msgid "time" #~ msgstr "시간" #~ msgid "internal error! unknown tag type while parsing Dublin Core tag!" #~ msgstr "내부 에러! 더블린 코어 태그를 해석하던 중 알 수 없는 태그타입 !" #~ msgid "" #~ "Invalid browser command! There is no %%s URL place holder in the browser " #~ "command string you specified in the preferences dialog!!!" #~ msgstr "" #~ "잘못된 브라우져 명령! 당신이 다이얼로그에 설정한 브라우져 명령 문자열인 %" #~ "%s URL place holder가 없습니다." #~ msgid "Use browser command:" #~ msgstr "브라우져 명령을 사용합니다:" #~ msgid "specify a browser command using %s as URL placeholder" #~ msgstr "%s을(를) URL 위치놓기로, 브라우져 명령을 정해주세요 " #~ msgid "If the browser module allows it open links inside Liferea." #~ msgstr "만약 브라우져 모듈이 허용한다면, Liferea내부에서 링크를 엽니다." #~ msgid "GUI Settings" #~ msgstr "GUI 설정" #~ msgid "Connecting to " #~ msgstr "연결 중" #~ msgid "Connecting to %s..." #~ msgstr "%s에 연결중..." #~ msgid "Downloading \"http://%s%s\"" #~ msgstr "\"http://%s%s\"을(를) 다운로드중..." #~ msgid "socket connect" #~ msgstr "소켓 연결" #~ msgid "Following HTTP redirects" #~ msgstr "HTTP 리다이렉션을 따라갑니다." #~ msgid "The feed no longer exists. Please unsubscribe!" #~ msgstr "피드가 더 이상 존재하지 않습니다. 해지 해 주세요." #~ msgid "The webserver %s sent illegal HTTP/1.0 reply! I cannot parse this." #~ msgstr "" #~ "웹서버 %s이(가) 잘못된 HTTP/1.0 응답을 보내왔습니다. 해독불가합니다." #~ msgid "URL does not contain authentication information!" #~ msgstr "URL이 인증정보를 담고 있지 않습니다." #~ msgid "Could not generate authentication information!" #~ msgstr "인증 정보를 생성할 수 없습니다!" #~ msgid "Unsupported authentication method requested by server!" #~ msgstr "서버가 지원하지 않는 인증 방법을 제시했습니다! (쳇)" #~ msgid "This URL doesn't look too valid to me, don't you think?" #~ msgstr "이 URL은 잘못 된 것 같은데요.. 그렇게 생각하지 않나요?" #~ msgid "Couldn't create network socket!" #~ msgstr "네트웍 소켓을 열 수 없습니다." #~ msgid "Can't resolve host %s!" #~ msgstr "%s의 ip주소를 찾을 수 없습니다." #~ msgid "Could not connect to server %s: %s" #~ msgstr "%s에 접속할 수 없습니다. : %s" #~ msgid "Connection timed out." #~ msgstr "연결 중" #~ msgid "Aborted." #~ msgstr "취소 되었습니다." #~ msgid "Internal error while converting UTF-8 chars to HTTP URI!" #~ msgstr "내부에러! UTF-8 문자를 HTTP-URI로 변경하던 중 발생 " #~ msgid "internal error! could not find file dialog select button!" #~ msgstr "내부 에러! 파일 대화창 선택단추를 찾을 수 없습니다!" #~ msgid "internal error! could not get a new folder key!" #~ msgstr "내부 에러! 새 폴더키를 얻을 수 없습니다!" #~ msgid "Could not delete icon file %s! Please remove manually!" #~ msgstr "아이콘파일 %s을(를) 지울 수 없습니다.! 직접 지워주세요." #~ msgid "could not write XML item node!\n" #~ msgstr "XML 아이템 노드를 기록할 수 없습니다!\n" #~ msgid "could not create XML feed node for feed cache document!" #~ msgstr "피드 캐시 도큐먼트를 위한 XML 피드 노드를 만들 수 없습니다." #~ msgid "" #~ "Error while reading cache file\"%s\" ! Cache file could not be loaded!" #~ msgstr "" #~ "캐서파일 \"%s\"을(를) 읽던중 XML 에러가 발생. 캐시파일을 읽을 수 없습니다." #~ msgid "Could not delete cache file %s! Please remove manually!" #~ msgstr "캐시파일 %s을(를) 지울 수 없습니다.! 직접 지워주세요." #~ msgid "program preferences" #~ msgstr "프로그램 설정" #~ msgid "Search With Feedster" #~ msgstr "피드스터로 찾기" #~ msgid "Search for " #~ msgstr "찾기" #~ msgid "" #~ "You can't delete the help! Edit the preferences to disable loading the " #~ "help." #~ msgstr "" #~ "도움말을 지울 수 없습니다! 설정을 고쳐서 도움말을 불러오지 않도록 하세요." #~ msgid "" #~ "Could not download \"%s\"!\n" #~ "\n" #~ " Maybe the URL is invalid or the feed is temporarily not available. You " #~ "can retry downloading or remove the feed subscription via the context " #~ "menu from the feed list.\n" #~ msgstr "" #~ "\"%s\"을(를) 다운로드 할 수 없습니다\n" #~ " URL이 잘못되었거나, 피드가 일시적으로 접근 불가능 한 것 같습니다.다시 받" #~ "기를 시도하시거나 피드 목록에서 피드를 지워주세요\n" #~ msgid "" #~ "The newly created feed's type could not be detected! Please check if the " #~ "source really points to a resource provided in one of the supported " #~ "syndication formats" #~ msgstr "" #~ "이 피드의 종류를 결정할 수 없습니다. URL이 지원되는 형식의 자원을 정확히 " #~ "가리키는지 확인해 주세요 " #~ msgid "internal error! item list display for NULL pointer requested!\n" #~ msgstr "내부 에러! 아이템 리스트가 NULL 포인터 요청을 나타냅니다\n" #~ msgid "internal error! could not find feed tree view widget!\n" #~ msgstr "내부 에러! 트리 뷰를 찾을 수 없습니다!\n" #~ msgid "could not allocate memory!" #~ msgstr "메모리를 할당 할 수 없습니다!" #~ msgid "creating VFolder for search term \"%s\"" #~ msgstr "검색어 \"%s\"에 대한 가상폴더 만들기" #~ msgid "_Scroll Or Next Unread" #~ msgstr "스크롤 혹은 다음 안 읽은 것(_S)" #~ msgid "Scrolls the item view down or jumps to the next unread item." #~ msgstr "아이템 보기를 아래로 내리거나 다음 안 읽은 아이템으로 넘어갑니다." #~ msgid "condensed item list" #~ msgstr "간결한 아이템 목록" #~ msgid "item list widget lookup failed!\n" #~ msgstr "아이템 목록 위젯을 찾을 수 없습니다!\n" #~ msgid "could not retrieve selection of item list!\n" #~ msgstr "선택한 아이템 목록을 받을 수 없습니다.\n" #~ msgid "GtkHTML2" #~ msgstr "GtkHTML2" #~ msgid "Mozilla (experimental)" #~ msgstr "모질라 (실험용)" #~ msgid "" #~ "The newly created feed's type could not be detected. Please subscribe " #~ "again and select a feed type!" #~ msgstr "" #~ "새로 만들어진 피드의 종류를 알 수 없습니다. 다시 구독절차를 밟으시고 피드 " #~ "종류를 선택해주세요!" #~ msgid "Text Viewer (experimental)" #~ msgstr "텍스트 뷰어 (실험용)" #~ msgid "" #~ "There is no %%s URL place holder in the browser command string you " #~ "specified in the preferences dialog!!!" #~ msgstr "" #~ "당신이 설정한 설정 다이얼로그에 브라우져 명령 문자열인 %%s URL place " #~ "holder가 없습니다." #~ msgid "GtkHTML3 (experimental)" #~ msgstr "모질라 (실험용)" #~ msgid "conversion wasn't successful.\n" #~ msgstr "변환이 실패했습니다.\n" #~ msgid "not enough memory\n" #~ msgstr "메모리가 부족합니다\n" #~ msgid "Date Column Settings" #~ msgstr "날짜 열 설정" #~ msgid "Marks all items of the current feed as read." #~ msgstr "현재 피드의 모든 아이템을 읽은 것으로 표시." #~ msgid "" #~ "Please enter the URL (including the http:// prefix) you want to \n" #~ "subscribe to. Or enter a valid pathname if you want to load a local file." #~ msgstr "" #~ "등록하기 원하시는 URL(http:// 를 포함해서)을 입력해 주세요.\n" #~ "아니면 정확한 로컬 파일 이름을 입력해 주세요." #~ msgid "URL Input" #~ msgstr "URL 입력" #~ msgid "" #~ "Edit the following entries to adjust the feed source URL or\n" #~ "the feed title, which is displayed in the feed list." #~ msgstr "" #~ "피드 소스 URL이나 피드 목록에 나타난 피드 제목을 설정하기 위해 \n" #~ "다음 항목을 수정하시기 바랍니다." #~ msgid "" #~ "Either leave the name supplied by the feed or enter an alternative name " #~ "which you like to be listed in the feed list." #~ msgstr "" #~ "피드에 의해 제공되는 이름을 놔두거나, 아니면 피드리스트에 보일 새 피드 이" #~ "름을 정해주세요." #~ msgid "Enter the URL the feed should be loaded from." #~ msgstr "피드를 읽어올 URL을 입력해 주세요." #~ msgid "Feed URL and Title" #~ msgstr "피드 URL 과 제목" #~ msgid "Internal error! No feed selected, but property change requested...\n" #~ msgstr "" #~ "내부 에러! 피드가 선택되지 않았지만 속성 바꾸기이 요구되었습니다...\n" #~ msgid "_New Folder" #~ msgstr "폴더 만들기(_N)" #~ msgid "_Delete Folder" #~ msgstr "폴더 지우기(_D)" #~ msgid "_Edit Folder Name" #~ msgstr "폴더 이름 바꾸기(_E)" #~ msgid "" #~ "You have to specify the type of the feed you want to subscribe \n" #~ "to. If you are unsure select \"Auto Detect\"." #~ msgstr "" #~ "등록하시려는 피드의 종류를 정해주세요.확실치 않으시다면 알아서 찾기를 선택" #~ "하시면 됩니다." #~ msgid "Auto Detect" #~ msgstr "알아서 찾기" #~ msgid "RSS" #~ msgstr "RSS" #~ msgid "CDF" #~ msgstr "CDF" #~ msgid "Atom/Echo/PIE" #~ msgstr "Atom/Echo/PIE" #~ msgid "OCS" #~ msgstr "OCS" #~ msgid "OPML" #~ msgstr "OPML" #~ msgid "internal error! invalid type selected! This should never happen!\n" #~ msgstr "내부 에러! 잘못된 타입 선택! 이건 있을 수 없어어어어어!!\n" #~ msgid "/_Delete Directory" #~ msgstr "/디렉토리 지우기(_D)" #~ msgid "internal error! unknown feed type %d while updating feeds!" #~ msgstr "내부 에러! 피드를 갱신하던 중 알 수 없는 피드타입 %d 발견!" #~ msgid "internal error: XML document pointer NULL! This should not happen!\n" #~ msgstr "내부 에러: XML 도큐먼트 포인터 NULL. 이건 있을 수 없어어어어어!!\n" #~ msgid "internal error! could not retrieve feed list for gconf path %s\n" #~ msgstr "내부 에러! Gconf 경로 %s에서 피드 목록을 얻을 수 없습니다 !\n" #~ msgid "error! could not get a free entry key!\n" #~ msgstr "에러! 자유 엔트리 키를 얻을 수 없습니다!\n" #~ msgid "error! could not set a URL for this key!\n" #~ msgstr "에러! 이 키에 URL을 지정할 수 없습니다!\n" #~ msgid "error! could not set a type for this key!\n" #~ msgstr "에러! 이 키에 타입을 지정할 수 없습니다!\n" #~ msgid "could not read from gconf path \"%s\"!\n" #~ msgstr "Gconf 경로 %s을(를) 읽을 수 없습니다 !\n" #~ msgid "could not create empty keylist in gconf path \"%s\"!\n" #~ msgstr "gconf 경로 %s에 빈 키목록을 만들 수 없습니다!\n" #~ msgid "saving all feeds..." #~ msgstr "모든 피드를 저장합니다..." #~ msgid "error: URL missing!" #~ msgstr "에러: URL이 없습니다!" #~ msgid "" #~ "Could not detect feed type of \"%s\"! Please manually select a feed type." #~ msgstr "" #~ "\"%s\"의 피드 종류를 알 수 없습니다.! 피드 종류를 직접 설정해 주세요." #~ msgid "internal error! unknown feed type in newFeed()!" #~ msgstr "내부 에러! NewFeed()에서 알 수 없는 피드타입 !" #~ msgid "error! could not add feed to configuration!\n" #~ msgstr "에러! 설정에 피드를 더할 수 없습니다!\n" #~ msgid "updating all feeds..." #~ msgstr "모든 피드 갱신..." #~ msgid "internal error! there is no feed assigned to feedkey \"%s\"!\n" #~ msgstr "내부 에러! 피드키 \"%s\"(으)로 할당된 피드가 없습니다!\n" #~ msgid "" #~ "getFolderTitle() internal error! could not determine folder iterator for " #~ "keyprefix \"%s\"!\n" #~ msgstr "" #~ "getFolderTitle() 내부 에러! keyprefix \"%s\"에 대한 폴더 이터레이터를 결" #~ "정 할 수 없습니다!\n" #~ msgid "" #~ "setFolderTitle() internal error! could not determine folder iter for " #~ "keyprefix \"%s\"!\n" #~ msgstr "" #~ "setFolderTitle() 내부 에러! keyprefix \"%s\"에 대한 폴더키를 결정 할 수 없" #~ "습니다!\n" #~ msgid "" #~ "removeFolder() internal error! could not determine folder iter for " #~ "keyprefix \"%s\"!\n" #~ msgstr "" #~ "removeFoler() 내부 에러! keyprefix \"%s\"에 대한 폴더키를 결정 할 수 없습" #~ "니다!\n" #~ msgid "error! could not move cache file %s to file %s\n" #~ msgstr "에러! 캐시파일 %s을(를) %s(으)로 옮길 수 없습니다.\n" #~ msgid "Missing symbol \"%s\" in configured HTML module!" #~ msgstr "설정된 HTML 모듈에서 심볼 \"%s\"이(가) 빠졌습니다!" #~ msgid "Zoom _In" #~ msgstr "확대(_I)" #~ msgid "Zoom _Out" #~ msgstr "축소(_O)" #~ msgid "" #~ "Liferea views headlines using a HTML renderer. Depending on your " #~ "installation there may be different choices presented below. Note: " #~ "Changes will take place after the next restart!" #~ msgstr "" #~ "Liferea는 HTML 렌더러를 이용해서 머릿글을 읽습니다. 당신의 설치환경에 따" #~ "라 다음과 같은 여러가지를 선택할 수 있습니다. 참고: 이 설정의 변경사항은 " #~ "다음에 다시 시작할 때 부터적용됩니다!" #~ msgid "add folder" #~ msgstr "폴더 더하기" #~ msgid "edit folder name" #~ msgstr "폴더 이름 바꾸기" #~ msgid "" #~ "Internal error! Invalid output request mode for namespace information!" #~ msgstr "내부 에러! Invalid output request mode for namespace information!" #~ msgid "Sorry Liferea does not yet support drag&drop of folders!" #~ msgstr "죄송합니다, Liferea는 아직 드래그&드랍을 지원하지 않습니다" #~ msgid "you cannot modify the special help folder contents!" #~ msgstr "스페셜한 도움말 폴더의 내용을 고칠 수 없습니다" #~ msgid "entry list widget lookup failed!\n" #~ msgstr "엔트리 목록 위젯 찾기 실패\n" #~ msgid "could not retrieve selection of entry list!" #~ msgstr "선택한 엔트리 목록을 받을 수 없습니다!" #~ msgid "fatal! selected feed entry has no key!!!" #~ msgstr "치명적! 선택한 피드 엔트리는 키가 없습니다!!" #~ msgid "internal error! could not select newly created treestore iter!" #~ msgstr "내부 에러! 새로 만들어진 treestore iter를 선택할 수 없습니다!" #~ msgid "It seems like there is no selected feed entry!" #~ msgstr "선택한 피드 엔트리가 보이지 않습니다!" #~ msgid "You have to select a folder entry!" #~ msgstr "폴더 엔트리를 선택해야만 합니다!" #~ msgid "Error: Cannot determine folder key!" #~ msgstr "폴더키를 정할 수 없습니다!" #~ msgid "could not find item list widget!" #~ msgstr "아이템 목록 위젤을 찾을 수 없습니다." #~ msgid "could not retrieve selection of item list!" #~ msgstr "선택한 아이템 목록을 받을 수 없습니다." #~ msgid "/Zoom In" #~ msgstr "/확대하기" #~ msgid "/Zoom Out" #~ msgstr "/축소하기" #~ msgid "VFolder %s" #~ msgstr "가상폴더 %s" #~ msgid "internal error! could not get folder key prefix!" #~ msgstr "내부 에러! 새 폴더키를 prefix를 얻을 수 없습니다!" #~ msgid "Feed source is NULL! This should never happen - cannot update!" #~ msgstr "" #~ "피드 목록이 NULL입니다! 이럴수럴수럴수러럴수..가 업데이트 할 수 없습니다." #~ msgid "" #~ "You have disabled both the menubar and the toolbar. Without one of these " #~ "you won't be able to access all program functions. I'll reenable the " #~ "toolbar!" #~ msgstr "" #~ "메뉴 막대와 도구 막대를 모두 감추었습니다. 둘중 하나 없이는 모든 기능을 " #~ "쓸 수 없습니다. 도구 막다를 다시 보이겠습니다." #~ msgid "internal error! could not reset HTML widget scrolling!" #~ msgstr "내부 에러! HTML위젯 스크롤을 초기화 할 수 없습니" #~ msgid "Empty document! Feed was not added!" #~ msgstr "빈 문서! 피드가 더해지지 않았습니다." #~ msgid "not enough memory!" #~ msgstr "메모리가 부족합니다 !" #~ msgid "Could not allocate memory!" #~ msgstr "메모리를 할당 할 수 없습니다!" #~ msgid "Empty document! Feed cache file should not be empty..." #~ msgstr "빈 도큐먼트! 패드 캐시파일은 비어 있으면 안됩니다..." #~ msgid "" #~ "The last update of this feed failed. Please see the console output for " #~ "more information!" #~ msgstr "" #~ "이 피드의 갱신작업이 실패했습니다. 좀 더 많은 정보를 보시려면 콘솔 출력을 " #~ "보세요" #~ msgid "Disable Tool Bar." #~ msgstr "도구 모음을 감춘다." #~ msgid "Disable Menu Bar." #~ msgstr "메뉴 모음을 감춘다." #~ msgid "" #~ "XML error while reading directory! Directory \"%s\" could not be loaded!" #~ msgstr "" #~ "디렉토리를 읽는 도중 XML 에러! 디렉토리 \"%s\"을(를) 읽을 수 없습니다." #~ msgid "Could not find PIE header! Feed was not added!" #~ msgstr "PIE 헤더를 찾을 수 없습니다! 헤더가 더해지지 않았습니다!" #~ msgid "Feedster search request failed.\n" #~ msgstr "피드스터 찾기 요청이 실패하였습니다.\n" #~ msgid "Could not allocate memory to read file!" #~ msgstr "파일을 읽을 메모리를 할당 할 수 없습니다.!" #~ msgid "" #~ "internal error: parseTextInput without a channel! Skipping text input!\n" #~ msgstr "내부 에러: 채널없이 paseTextInput! 텍스트 입력을 넘어갑니다.\n" #~ msgid "internal error: parseImage without a channel! Skipping image!\n" #~ msgstr "내부 에러: 채널없이 parseImage. 이미지를 넘어갑니다.\n" #~ msgid "Search In All Items" #~ msgstr "모든 아이템에서 찾기" #~ msgid "Could not find RDF/RSS header! Feed was not added!" #~ msgstr "RDF/RSS 헤더를 찾을 수 없습니다. 피드는 더해지지 않았습니다." liferea-1.12.7/po/lt.po000066400000000000000000002003151352135647700146240ustar00rootroot00000000000000# Lithuanian translation for liferea # Copyright (C) 2011 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the liferea package. # # Mindaugas Baranauskas , 2011. msgid "" msgstr "" "Project-Id-Version: liferea-1.6.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2011-08-22 15:08+0300\n" "Last-Translator: Mindaugas Baranauskas \n" "Language-Team: Lithuanian \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" "%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Lokalize 1.2\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Naujienų kanalų skaitytuvė" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "„Liferea“ programai šiuo metu draudžiama prisijungti prie interneto" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Naujienų kanalų skaitytuvė" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea naujienų kanalų skaitytuvė" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Šis naujienų kanalas sustabdė savo veiklą. Jis nebeprieinamas. „Liferea“ " "nebegali jo atnaujinti, tačiau tebegalite pasiekti jau įkeltuosius " "straipsnius." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "Nepavyko atnaujinti atnaujinti naujienų kanalo informacijos!
        HTTP " "klaidos kodas : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Analizuojant kanalą įvyko klaidų!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Analizavimo klaida išsamiau" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Išsamiau" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Filtruojant kanalą įvyko klaidų!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Filtro klaida išsamiau" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Naujienų kanalas:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Šaltinis:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Paskelbė" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Autorinės teisės" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "vaikas su" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "neskaitytos antraštės" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Aplankas:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Šaltinis" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Naujienų kanalas" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Etiketės:" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Autorius" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Pasidalino" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "per" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Susiję" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Taip pat paskelbė" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Sukūrė" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Komentarai" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Atnaujinama..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Sekcija" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Padalinys" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Paieškos aplankas:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Nepavyko įvykdyti naršyklės komandos: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Paleidžiama: „%s“" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Prieigos teisės klaida" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Nepavyksta sukurti podėlio katalogo „%s“!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Šiandien %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Vakar %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%Y %b %d" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "„%s“ nėra tinkama intarpų tipų konfigūracijos rinkmena!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Klaida %s pervadinant į %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "XML klaida skaitant OPML rinkmeną! Negalima importuoti „%s“!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Tuščias dokumentas! Importuotinas OPML dokumentas „%s“ neturėtų būti tuščias." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "„%s“ nėra tinkamas OPML dokumentas! „Liferea“ negali importuoti šios " "rinkmenos!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Importuotas naujienų kanalų sąrašas" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importuoti kanalų sąrašą" #: ../src/export.c:481 msgid "Import" msgstr "Importuoti" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Klaida eksportuojant naujienų kanalų sąrašą!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Naujienų kanalų sąrašas eksportuotas!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Eksportuoti naujienų kanalų sąrašą" #: ../src/export.c:498 msgid "Export" msgstr "Eksportuoti" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "„%s“ atnaujintas..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "„%s“ neprieinamas" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "" "Skaitant naujienų kanalą įvyko XML klaida! Naujienų kanalo „%s“ negalima " "įkelti!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Tuščias dokumentas!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Netinkamas XML!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Šaltinis nurodo HTML dokumentą." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Nepavyksta apibrėžti naujienų kanalo tipo." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 #, fuzzy msgid "There are no unread items" msgstr "Nėra nėra neskaitytų straipsnių " #: ../src/liferea_application.c:282 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Rodyti informaciją apie versiją ir išeiti" #: ../src/liferea_application.c:284 #, fuzzy msgid "Add a new subscription" msgstr "Nauja prenumerata" #: ../src/liferea_application.c:284 msgid "uri" msgstr "" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Rodyti visus derinimo pranešimus" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Rodyti derinimo pranešimus, susijusius su podėlio apdorojimu" #: ../src/liferea_application.c:292 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "Rodyti derinimo pranešimus, susijusius su konfigūracijos apdorojimu" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Rodyti derinimo pranešimus, susijusius su duomenų bazės apdorojimu" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Rodyti derinimo pranešimus, susijusius su grafine sąsaja" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Rodyti visus derinimo pranešimus, susijusius su tinklo veikla" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Rodyti visus derinimo pranešimus, susijusius su analizavimu" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "Rodyti derinimo pranešimus, jei funkcija atliekama pernelyg ilgai" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Rodyti derinimo pranešimus apie įėjimą/išėjimą iš funkcijų" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Rodyti derinimo pranešimus, susijusius su naujienų kanalo atnaujinimu" #: ../src/liferea_application.c:301 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "Rodyti derinimo pranešimus, susijusius su podėlio apdorojimu" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Rodyti nurodytos temos derinimo pranešimus" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Atšaukta atnaujinimo užklausa" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Nepavyksta nustatyti paskirties serverio vardo" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Nepavyksta nustatyti įgaliotojo serverio vardo" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Nepavyksta prisijungti prie nuotolinio serverio" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Nepavyksta prisijungti prie įgaliotojo serverio" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Išteklius negrįžtamai persikėlė į naują vietą" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Šio naujienų kanalo parsiuntimui nenustatėte savo tapatybės. Naujienų kanalo " "savybių dialoge atnaujinkite savo naudotojo vardą ir slaptažodį." #: ../src/net.c:476 msgid "Payment required" msgstr "Reikia sumokėti" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Jums neleidžiama prieiti prie šio šaltinio" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Išteklius nerastas" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Metodas neleidžiamas" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Nepriimtina" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Reikia nurodyti tapatybę jungiantis prie įgaliotojo serverio" #: ../src/net.c:482 msgid "Request timed out" msgstr "Baigėsi užklausos laikas" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Ištekliaus nebėra. Nutraukite prenumeratą!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Atnaujinimo proceso vidinė klaida" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" #: ../src/net.c:492 msgid "Client Error" msgstr "Kliento klaida" #: ../src/net.c:494 msgid "Server Error" msgstr "Serverio klaida" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Įvyko nežinoma tinklo klaida!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Straipsnis" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "turi" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "neturi" #: ../src/rule.c:175 msgid "Item title" msgstr "Straipsnio pavadinimas" #: ../src/rule.c:176 msgid "Item body" msgstr "Straipsnio kūnas" #: ../src/rule.c:177 msgid "Read status" msgstr "Perskaitymo būsena" #: ../src/rule.c:177 msgid "is unread" msgstr "neskaitytas" #: ../src/rule.c:177 msgid "is read" msgstr "skaitytas" #: ../src/rule.c:178 msgid "Flag status" msgstr "Svarbumas" #: ../src/rule.c:178 msgid "is flagged" msgstr "svarbus" #: ../src/rule.c:178 msgid "is unflagged" msgstr "nesvarbus" #: ../src/rule.c:179 msgid "Podcast" msgstr "" #: ../src/rule.c:179 msgid "included" msgstr "įtraukta" #: ../src/rule.c:179 msgid "not included" msgstr "neįtraukta" #: ../src/rule.c:180 msgid "Category" msgstr "Kategorija" #: ../src/rule.c:180 msgid "is set" msgstr "nustatyta" #: ../src/rule.c:180 msgid "is not set" msgstr "nenustatyta" #: ../src/rule.c:181 msgid "Feed title" msgstr "Naujienų kanalo pavadinimas" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "„%s“ prenumerata jau atnaujinta!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "„%s“ prenumerata nebegalima. „Liferea“ jos nebeatnaujins!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Atnaujinti „%s“ ženkliuką" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Klaida skaitant prenumeratą. Patikrinkite URL ir žiūrėkite išvestį konsolėje." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "„%s“ URL negrįžtamai pasikeitė ir buvo atnaujintas" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "„%s“ nutraukė veiklą. „Liferea“ nebegalės atnaujinti!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "„%s“ pasikeitė po paskutinio atnaujinimo" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Atnaujinama: „%s“" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s baigimo kodas %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Klaida: nepavyksta atverti kanalo „%s“" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Klaida: nepavyksta atverti rinkmenos „%s“" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Klaida: nėra „%s“ rinkmenos" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Naujas paieškos aplankas" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Buvo ir daugiau klaidų. Išvestis sutrumpinta!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "XML analizavimas: nepavyksta išanalizuoti dokumento:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Priedai" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " B" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d priedas" msgstr[1] "%d priedai" msgstr[2] "%d priedų" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Rinkmenos pasirinkimas" #: ../src/ui/enclosure_list_view.c:444 #, fuzzy, c-format msgid "File Extension .%s" msgstr "Rinkmenos prievardis .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d naujas)" msgstr[1] " (%d nauji)" msgstr[2] " (%d naujų)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d neskaitytas%s" msgstr[1] "%d neskaityti%s" msgstr[2] "%d neskaitytų%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Žinyno temos" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Trumpa informacija" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "D. U. K." #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Sudėtingesnė paieška" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Įveskite „%s“ (%s) naudotojo vardą ir slaptažodį:" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Nežinomas šaltinis" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "_Atšaukti visus" #: ../src/ui/ui_common.c:211 #, fuzzy msgid "All Files" msgstr "_Vietinė rinkmena" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "„Liferea“ veikia neprisijungusia veiksena. Atnaujinti negalima." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Paieška visuose naujienų kanaluose" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Visus pažymėti skaitytais" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Tikrai pašalinti „%s“?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Šis straipsnis be nuorodos!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Be pavadinimo ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Antraštė" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Nurodykite naujienų kanalą, kurio straipsnius norite pašalinti!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Nepažymėtas nei vienas straipsnis" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "" #: ../src/ui/popup_menu.c:111 #, fuzzy msgid "_Open In Browser" msgstr "Atverti _naršyklėje" #: ../src/ui/popup_menu.c:115 #, fuzzy msgid "Open In _External Browser" msgstr "Išorinės naršyklės nuostatos" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "" #: ../src/ui/popup_menu.c:147 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "Įtraukti į %s _adresyną" #: ../src/ui/popup_menu.c:153 #, fuzzy msgid "Copy Item _Location" msgstr "_Kopijuoti nuorodą" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Keisti _skaitymo būseną" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Keisti straipsnio s_varbumą" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "_Pašalinti straipsnį" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Atverti intarpą..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Įrašyti kaip..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Kopijuoti nuorodą" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Atnaujinti" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Atnaujinti aplanką" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Nauja p_renumerata..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Naujas _aplankas..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Naujas pa_ieškos aplankas..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Naujas _šaltinis" #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "" #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Naujas" #: ../src/ui/popup_menu.c:312 #, fuzzy msgid "Sort Feeds" msgstr "Importuoti kanalų sąrašą" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_Visus žymėti skaitytais" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Šalinti" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Savybės..." #: ../src/ui/popup_menu.c:343 #, fuzzy msgid "Convert To Local Subscriptions..." msgstr "Nauja prenumerata..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "GNOME numatytoji" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Tekstas po ženkliukais" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Tekstas šalia ženkliukų" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Tik ženkliukai" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Tik tekstas" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "min." #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "val." #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "d." #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Tarpas" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr "Vald + tarpas" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr "Alt + tarpas" #: ../src/ui/preferences_dialog.c:112 #, fuzzy msgid "Normal View" msgstr "_Normalus rodinys" #: ../src/ui/preferences_dialog.c:113 #, fuzzy msgid "Wide View" msgstr "_Platus rodinys" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Combined View" msgstr "_Bendras rodinys" #: ../src/ui/preferences_dialog.c:476 #, fuzzy msgid "Default Browser" msgstr "Numatytoji GNOME naršyklė" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "(Kita)" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Tipas" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Programa" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Įrašo šalinimas" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Tikrai pašalinti „%s“ ir visą jo turinį?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Tikrai pašalinti „%s“?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Šalinimo patvirtinimas" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Šalinimo patvirtinimas" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "Prenumeratos teikėjas siūlo %d min atnaujinimo intervalą." msgstr[1] "Prenumeratos teikėjas siūlo %d min atnaujinimo intervalą." msgstr[2] "Prenumeratos teikėjas siūlo %d min atnaujinimo intervalą." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Šis naujienų kanalas neturi numatytojo atnaujinimo intervalo." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nauja prenumerata" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Nauja OPML prenumerata" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Šaltinio tipas" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Naujienų kanalų skaitytuvė" #: ../src/webkit/liferea_web_view.c:175 #, fuzzy msgid "Open Link In _Tab" msgstr "Nuorodą atverti _kortelėje" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "Nuorodą atverti _naršyklėje" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "Nuorodą atverti _naršyklėje" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "Įtraukti į %s _adresyną" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Kopijuoti nuorodą" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "Ro_dymas" #: ../src/webkit/liferea_web_view.c:194 #, fuzzy msgid "_Copy Image Location" msgstr "_Kopijuoti nuorodą" #: ../src/webkit/liferea_web_view.c:197 #, fuzzy msgid "S_ave Link As" msgstr "Įrašyti kaip..." #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Prenumeruoti..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "Pa_didinti teksto dydį" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "Su_mažinti teksto dydį" #: ../glade/about.ui.h:1 msgid "About" msgstr "Apie" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "„Liferea“ yra sklaidos kanalų skaitytuvė" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Liferea puslapis" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Tapatybės nustatymas" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "Naudotojo _vardas:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Slaptažodis:" #: ../glade/enclosure_handler.ui.h:1 #, fuzzy msgid "Open Enclosure" msgstr "Atverti intarpą..." #: ../glade/enclosure_handler.ui.h:2 #, fuzzy msgid "Open an enclosure of type:" msgstr "Parsiuntimas intarpų, kurių tipas yra:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Naršyti" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "Nuo šiol taip _elgtis su visais tokio tipo intarpais." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "" #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Slaptažodis" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_Naudotojo vardas (el. p. adresas)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Antraščių rodymas" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Antraštės" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Visus pažymėti skaitytais" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Visus pažymėti skaitytais" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Naujas aplankas" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "_Aplanko pavadinimas" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Naujienų kanalo šaltinis" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Šaltinio tipas:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Komanda" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Vietinė rinkmena" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Pasirinkti rinkmeną..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Šaltinis:" #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Parsiuntimas / galutinis apdorojimas" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "Parsisiuntimams _nenaudoti įgaliotojo serverio" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Naudoti konvertavimo _filtrą" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Konvertuoti _naudojant:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Šaltinio pasirinkimas" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Norimo pridėti šaltinio tipo pasirinkimas..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Pridėti OPML/Planetą" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "Nurodykite OPML naujienų kanalo sąrašo vietinę rinkmeną arba URL" #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Vieta" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Pasirinkti rinkmeną" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Liferea nuostatos" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "Numatytasis naujienų kanale saugomų straipsnių _skaičius:" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "Feed Update Settings" msgstr "Naujienų kanalų atnaujinimas" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" #: ../glade/prefs.ui.h:8 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Atnaujinti visas prenumeratas." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Numatytasis kanalo atnaujinimo _intervalas:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Naujienų kanalai" #: ../glade/prefs.ui.h:12 #, fuzzy msgid "Folder Display Settings" msgstr "Aplankų rodymo nuostatos" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "" #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "_Slėpti perskaitytus straipsnius." #: ../glade/prefs.ui.h:15 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Naujienų kanalų ženkliukai" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Atnaujinti visus ženkliukus dabar" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Aplankai" #: ../glade/prefs.ui.h:18 #, fuzzy msgid "Reading Headlines" msgstr "neskaitytos antraštės" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:21 #, fuzzy msgid "Web Integration" msgstr "Orientacija" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "" #: ../glade/prefs.ui.h:24 #, fuzzy msgid "Internal Browser Settings" msgstr "Vidinės naršyklės nuostatos" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Nuorodas atverti „Liferea“ lange." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Uždrausti „JavaScript“." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "Įgalinti _naršyklių papildinius." #: ../glade/prefs.ui.h:28 #, fuzzy msgid "External Browser Settings" msgstr "Išorinės naršyklės nuostatos" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Naršyklė:" #: ../glade/prefs.ui.h:30 #, fuzzy msgid "_Manual:" msgstr "(Kita)" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Naršyklė" #: ../glade/prefs.ui.h:34 #, fuzzy msgid "Toolbar Settings" msgstr "_Mygtukų juostos etiketės:" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Slėpti mygtukų juostą" #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "_Mygtukų juostos etiketės:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Grafinė sąsaja" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Aptikti automatiškai (GNOME arba aplinkos)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Nenaudoti įgaliotojo serverio" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Savita nuostata" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "Įgaliotasis ser_veris:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "Prieva_das:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Nurodyti tapatybę jungiantis prie įgaliotojo _serverio" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "_Naudotojo vardas:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "_Slaptažodis:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Įgaliotasis serveris" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Aplankų rodymo nuostatos" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 #, fuzzy msgid "Downloading Enclosures" msgstr "Intarpų parsiuntimas" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Parsiųsti naudojant" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 #, fuzzy msgid "Opening Enclosures" msgstr "Atverti intarpą..." #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Intarpai" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Prenumeratos savybės" #: ../glade/properties.ui.h:2 #, fuzzy msgid "Feed Name" msgstr "Naujienų kanalo pa_vadinimas:" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "Naujienų kanalo pa_vadinimas:" #: ../glade/properties.ui.h:4 #, fuzzy msgid "Update Interval" msgstr "Atnaujinimo stebėjimas" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Naudoti visuotinį atnaujinimo intervalą." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "Šio naujienų kanalo atnaujinimo _intervalas" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Šio kanalo automatiškai neatnaujinti." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Prenumeratos teikėjas siūlo %d min atnaujinimo intervalą." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Bendra" #: ../glade/properties.ui.h:20 msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "_Numatytosios podėlio nuostatos" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Uždrausti podėlį" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Podėlio neriboti" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "Į_rašytinų straipsnių skaičius:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Archyvas" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Nurodyti tapatybę jungiantis prie _HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Parsiuntimas" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_Automatiškai parsiųsti visus šio naujienų kanalo intarpus." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "" #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Parsiųstus straipsnius žymėti skaitytais." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Sudėtingiau" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "" #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Pervadinti" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Naujas pavadinimas:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Paieškos aplanko savybės" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "_Paieškos pavadinimas:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 #, fuzzy msgid "Find Items that meet the following criteria" msgstr "Ieškoti straipsnių pagal nurodytus kriterijus" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Atitinka _bent vieną taisyklę" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "Atitinka _visas taisykles" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Sudėtingesnė paieška" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "_Kurti paieškos aplanką..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Paieška visuose naujienų kanaluose" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Sudėtingiau..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Ko ieškoti:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Sudėtingiau..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "" #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "" #: ../glade/ttrss_source.ui.h:3 #, fuzzy msgid "_Server URL" msgstr "Serverio klaida" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Naudotojo vardas" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Atnaujinimo stebėjimas" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "_Atšaukti visus" #: ../glade/update_monitor.ui.h:3 #, fuzzy msgid "Pending Requests" msgstr "Laukiančios užklausos" #: ../glade/update_monitor.ui.h:4 #, fuzzy msgid "Downloading Now" msgstr "Šiuo metu parsiunčiama" #~ msgid "_Subscriptions" #~ msgstr "_Prenumeratos" #~ msgid "Update _All" #~ msgstr "Viską _atnaujinti" #~ msgid "Updates all subscriptions." #~ msgstr "Atnaujinti visas prenumeratas." #~ msgid "Mark All As _Read" #~ msgstr "Visus žymėti _skaitytais" #~ msgid "Marks read every item of every subscription." #~ msgstr "Pažymėti visų prenumeratų visus straipsnius." #~ msgid "_Import Feed List..." #~ msgstr "_Importuoti kanalų sąrašą..." #~ msgid "Imports an OPML feed list." #~ msgstr "Importuoti OPML naujienų kanalų sąrašą." #~ msgid "_Export Feed List..." #~ msgstr "_Eksportuoti kanalų sąrašą..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Eksportuoti naujienų kanalų sąrašą kaip OPML" #~ msgid "_Quit" #~ msgstr "_Baigti" #~ msgid "_Feed" #~ msgstr "_Kanalas" #~ msgid "Remove _All Items" #~ msgstr "Pašalinti _visus" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Pašalinti visus pasirinkto naujienų kanalo straipsnius." #~ msgid "_Item" #~ msgstr "_Straipsnis" #, fuzzy #~ msgid "Next Item" #~ msgstr "_Tolesnis neskaitytas" #~ msgid "_Next Unread Item" #~ msgstr "_Tolesnis neskaitytas" #~ msgid "_View" #~ msgstr "Ro_dymas" #~ msgid "Increases the text size of the item view." #~ msgstr "Padidinti rodinio teksto dydį." #~ msgid "Decreases the text size of the item view." #~ msgstr "Sumažinti rodinio teksto dydį." #~ msgid "_Tools" #~ msgstr "Į_rankiai" #~ msgid "_Update Monitor" #~ msgstr "_Atnaujinimo stebėjimas" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Rodo visus atnaujinimo eilėje esančius naujienų kanalų sąrašą" #~ msgid "_Preferences" #~ msgstr "_Nuostatos" #~ msgid "Edit Preferences." #~ msgstr "Keisti nuostatas" #~ msgid "S_earch" #~ msgstr "Pa_ieška" #~ msgid "Search All Feeds..." #~ msgstr "Ieškoti visuose naujienų kanaluose..." #~ msgid "Show the search dialog." #~ msgstr "Rodyti paieškos dialogo langą." #~ msgid "_Help" #~ msgstr "_Pagalba" #~ msgid "_Contents" #~ msgstr "_Turinys" #~ msgid "View help for this application." #~ msgstr "Rodyti šios programos žinyną." #~ msgid "_Quick Reference" #~ msgstr "_Trumpa informacija" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Rodyti visus „Liferea“ sparčiuosius klavišus." #~ msgid "_FAQ" #~ msgstr "_D. U. K." #~ msgid "View the FAQ for this application." #~ msgstr "Rodyti dažniausiai užduodamus klausimus." #~ msgid "_About" #~ msgstr "_Apie" #~ msgid "Shows an about dialog." #~ msgstr "Rodyti dialogo langą apie programą." #~ msgid "_Normal View" #~ msgstr "_Normalus rodinys" #~ msgid "_Wide View" #~ msgstr "_Platus rodinys" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Rodyti trijuose vertikaliuose polangiuose" #~ msgid "_Combined View" #~ msgstr "_Bendras rodinys" #~ msgid "Set view mode to two pane mode." #~ msgstr "Rodyti dviejuose polangiuose" #~ msgid "_Reduced Feed List" #~ msgstr "_Sutrumpintas kanalų sąrašas" #~ msgid "Hide feeds with no unread items." #~ msgstr "Slėpti naujienų kanalus, kuriuose nėra neskaitytų straipsnių." #~ msgid "_New Subscription..." #~ msgstr "Nauja prenumerata..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Prenumeruoti naują naujienų kanalą" #~ msgid "Adds a folder to the feed list." #~ msgstr "Naujienų kanalų sąraše sukurti naują aplanką." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Naujienų kanalų sąraše sukurti naują paieškos aplanką." #~ msgid "New _Source..." #~ msgstr "Naujas _šaltinis..." #~ msgid "Adds a new feed list source." #~ msgstr "Pridėti naują kanalų sąrašo šaltinį." #~ msgid "_Mark Items Read" #~ msgstr "Žymėti _skaitytu" #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Atnaujini pasirinktą prenumeratą arba visas pasirinkto aplanko " #~ "prenumeratas." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Atverti pasirinktos prenumeratos savybių dialogą." #~ msgid "_Remove" #~ msgstr "Pa_šalinti" #~ msgid "Removes the selected subscription." #~ msgstr "Nutraukti pasirinktą prenumeratą." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Pakeisti pasirinkto straipsnio skaitymo būseną." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Pakeisti pasirinkto straipsnio svarbumo būseną." #~ msgid "R_emove" #~ msgstr "Pa_šalinti" #~ msgid "Removes the selected item." #~ msgstr "Pašalinti pasirinktą straipsnį." #, fuzzy #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Straipsnio nuorodą atveria sukonfigūruotoje naršyklėje." #, fuzzy #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Straipsnio nuorodą atveria sukonfigūruotoje naršyklėje." #, fuzzy #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Straipsnio nuorodą atveria sukonfigūruotoje naršyklėje." #~ msgid "_Work Offline" #~ msgstr "Dirbti _neprisijungus" #~ msgid "_Update All" #~ msgstr "_Atnaujinti visus" #~ msgid "_Show Liferea" #~ msgstr "_Rodyti „Liferea“" #, fuzzy #~ msgid "InoReader" #~ msgstr "Naujienų kanalų skaitytuvė" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Pastaba: naudotojo vardas ir slaptažodis bus laikomi neužšifruoti " #~ "„Liferea“ naujienų kanalo sąrašo rinkmenoje." #~ msgid "normal view" #~ msgstr "normalus rodinys" #~ msgid "wide view" #~ msgstr "platus rodinys" #~ msgid "combined view" #~ msgstr "bendras rodinys" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, Linux programa naujienų kanalų skaitymui" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "" #~ "Daugiau informacijos rasite apsilankę https://lzone.de/liferea/ " #~ "svetainėje." #, fuzzy #~ msgid "_Open Link In Browser" #~ msgstr "Nuorodą atverti _naršyklėje" #, fuzzy #~ msgid "_Open Link In External Browser" #~ msgstr "Nuorodą atverti _naršyklėje" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Sukurti paieškos sistemos naujienų kanalą" #~ msgid "enter any search string you want" #~ msgstr "įveskite bet kokį norimą paieškos tekstą" #~ msgid "Liferea is now online" #~ msgstr "„Liferea“ programai šiuo metu leidžiama prisijungti prie interneto" #~ msgid "Work Offline" #~ msgstr "Atsijungti" #~ msgid "Liferea is now offline" #~ msgstr "„Liferea“ programai šiuo metu draudžiama prisijungti prie interneto" #~ msgid "Work Online" #~ msgstr "Prisijungti" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Ši parinktis leidžia uždrausti prenumeratos atnaujinimą." #~ msgid "Browser default" #~ msgstr "numatytojoje naršyklėje" #~ msgid "Existing window" #~ msgstr "esamame lange" #~ msgid "New window" #~ msgstr "naujame lange" #~ msgid "New tab" #~ msgstr "naujoje kortelėje" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Naujienų kanalų skaitytuvė" #~ msgid "Online/Offline Button" #~ msgstr "Dardo prisijungus/atsijungus mygtukas" #~ msgid "_Open link in:" #~ msgstr "Nuorodą _atverti:" #~ msgid "No comments yet." #~ msgstr "Dar niekas nekomentavo." #~ msgid "Refresh" #~ msgstr "Atnaujinti" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea – Linux naujienų kanalų skaitytuvė" #, fuzzy #~ msgid "" #~ "

        Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

        You can add new subscriptions

        • From main menu " #~ "'Subscription' -> 'New Subscription'
        • By dropping feed links " #~ "into the subscription list
        • By right clicking links and choosing " #~ "'Subscribe' within Liferea

        " #~ msgstr "" #~ "

        Jus sveikina Liferea programa, skirta internetinių naujienų " #~ "kanalų skaitymui.

        Kairiame polangyje rodomas prenumeratų sąrašas. " #~ "Norėdami prenumeruoti naują naujienų kanalą, eikite „Prenumeratos -> " #~ "Nauja prenumerata“. Norėdami naršyti naujienų kanalo antraštes, " #~ "pasirinkite kanalą naujienų kanalų sąraše; antraštes matysite dešiniame " #~ "polangyje.

        " #, fuzzy #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "_Baigti, o ne nuleisti į sistemos dėklą." #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d naujas straipsnis" #~ msgstr[1] "%d nauji straipsniai" #~ msgstr[2] "%d naujų straipsnių" #~ msgid "No new items" #~ msgstr "Naujų straipsnių nėra" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d neskaitytas straipsnis" #~ msgstr[1] "" #~ "%s\n" #~ "%d neskaityti straipsniai" #~ msgstr[2] "" #~ "%s\n" #~ "%d neskaitytų straipsnių" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Nėra neskaitytų straipsnių" #~ msgid "This feed does not exist anymore!" #~ msgstr "Tokio naujienų kanalo nebėra!" #~ msgid "This news entry has no headline" #~ msgstr "Šis naujienų įrašas neturi antraštės" #~ msgid "Visit" #~ msgstr "Aplankyti" #~ msgid "Open feed" #~ msgstr "Atverti naujienų kanalą" #~ msgid "Feed Update" #~ msgstr "Naujienų kanalų atnaujinimas" #~ msgid "Show details" #~ msgstr "Rodyti išsamiau" #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Autorinės teisės (c) 2003-2009\n" #~ "Liferea komanda\n" #, fuzzy #~ msgid "Notification Settings" #~ msgstr "Informavimo nuostatos" #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "_Baigti, o ne nuleisti į sistemos dėklą." #~ msgid "_Start in tray icon." #~ msgstr "Paleisti _sistemos dėkle" #~ msgid "Download and view feeds" #~ msgstr "Parsiųskite ir skaitykite naujienas" #~ msgid "You may want to validate the feed using" #~ msgstr "Naujienų kanalą galite patikrinti naudodami" #~ msgid "Launch Item In _Tab" #~ msgstr "Straipsnį atverti _kortelėje" #~ msgid "_Launch Item In Browser" #~ msgstr "_Straipsnį atverti naršyklėje" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "_URL kopijuoti į iškarpinę" #~ msgid "flag" #~ msgstr "svarbus" #~ msgid "bookmark" #~ msgstr "įrašyti į adresyną" #~ msgid "comments" #~ msgstr "komentarai" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "NEPAVYKO parsiųsti intarpo: „%s“" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Baigta parsiųsti intarpą: „%s“" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Ši „Liferea“ programos versija naudoja naują podėlio formatą, seni " #~ "duomenys jau konvertuoti į naująjį formatą. Podėlio turinys (%s) nebuvo " #~ "automatiškai pašalintas. Kai įsitikinsite, kad duomenys sėkmingai " #~ "perkelti, šį aplanką pašalinkite savarankiškai!" #, fuzzy #~ msgid "Download FAILED: \"%s\"" #~ msgstr "NEPAVYKO parsiųsti intarpo: „%s“" #, fuzzy #~ msgid "Download finished." #~ msgstr "_Parsiųsti naudojant" #~ msgid "Choose download directory" #~ msgstr "Pasirinkite parsiuntimo katalogą" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Kita:\n" #~ "(%s žymi URL)" #~ msgid "_Save downloads in" #~ msgstr "_Siuntinius rašyti į" #~ msgid "_Service Name" #~ msgstr "_Paslaugos pavadinimas" #~ msgid "Sync" #~ msgstr "Sinchronizavimas" #~ msgid "Downloading Enclosure" #~ msgstr "Intarpų parsiuntimas" #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Pereiti prie sekančio neskaityto straipsnio. Prireikus gali pereiti prie " #~ "kito naujienų kanalo." #~ msgid "Liferea Sync %s@%s" #~ msgstr "„Liferea“ sinchronizavimas %s@%s" #~ msgid "link cosmos" #~ msgstr "ieškoti saityne" #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "Rodyti derinimo pranešimus, susijusius su papildinių įkėlimu" #~ msgid "Liferea seems to be running already!" #~ msgstr "Regis Liferea programa jau paleista!" #~ msgid "Update status" #~ msgstr "Atnaujinimo būsena" #~ msgid "was updated" #~ msgstr "atnaujintas" #~ msgid "was not updated" #~ msgstr "neatnaujintas" #~ msgid "The orientation of the tray." #~ msgstr "Dėklo orientacija." #~ msgid "_Script Manager" #~ msgstr "_Scenarijų tvarkytuvė" #~ msgid "Search With ..." #~ msgstr "Ieškoti naudojant ..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d „%s“ radinys" #~ msgstr[1] "%d „%s“ radiniai" #~ msgstr[2] "%d „%s“ radinių" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d radinys" #~ msgstr[1] "%d radiniai" #~ msgstr[2] "%d radinių" #~ msgid "You have to select a feed entry" #~ msgstr "Turite pasirinkti naujienų kanalo įrašą" #~ msgid "(empty)" #~ msgstr "(tuščia)" #~ msgid "_Properties..." #~ msgstr "_Savybės..." #~ msgid "Update out-dated feeds" #~ msgstr "Atnaujinti pasenusius naujienų kanalus" #~ msgid "Force update of all feeds" #~ msgstr "Priverstinai atnaujinti visus kanalus" #~ msgid "No feed update at all" #~ msgstr "Neatnaujinti jokių kanalų" #~ msgid "startup" #~ msgstr "paleidimas" #~ msgid "feed updated" #~ msgstr "naujienų kanalas atnaujintas" #~ msgid "feed added" #~ msgstr "naujienų kanalas pridėtas" #~ msgid "item selected" #~ msgstr "straipsnis pasirinktas" #~ msgid "feed selected" #~ msgstr "naujienų kanalas pasirinktas" #~ msgid "item unselected" #~ msgstr "straipsnis nepasirinktas" #~ msgid "feed unselected" #~ msgstr "naujienų kanalas nepasirinktas" #~ msgid "shutdown" #~ msgstr "išjungti" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Atsiprašome, scenarijai nepalaikomi!" #~ msgid "Script Name" #~ msgstr "Scenarijaus pavadinimas" #~ msgid "No script selected!" #~ msgstr "Nepasirinktas joks scenarijus!" #~ msgid "Create a new search feed." #~ msgstr "Sukurti naują paieškos kanalą." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "„Liferea“ programa negali parodyti šio straipsnio turinio." #~ msgid "

        View this item's content.

        " #~ msgstr "

        Rodyti šio straipsnio turinį.

        " #~ msgid "feedlist.opml" #~ msgstr "naujienos.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s: %d nauja arba atnaujinta antraštė\n" #~ msgstr[1] "%s: %d naujos arba atnaujintos antraštės\n" #~ msgstr[2] "%s: %d naujų arba atnaujintų antraščių\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Registered Scripts" #~ msgstr "Registruoti scenarijai" #~ msgid "Script Code" #~ msgstr "Scenarijaus kodas" #~ msgid "Downloading Enclosures" #~ msgstr "Intarpų parsiuntimas" #~ msgid "Feed Cache Handling" #~ msgstr "Kanalo podėlio tvarkymas" #~ msgid "Feed Name" #~ msgstr "Naujienų kanalo pavadinimas" #~ msgid "Feed Update Settings" #~ msgstr "Naujienų kanalų atnaujinimo nuostatos" #~ msgid "HTTP Proxy Server" #~ msgstr "HTTP įgaliotasis serveris" #~ msgid "Opening Enclosures" #~ msgstr "Intarpų atvėrimas" #~ msgid "Reading Headlines" #~ msgstr "Antraščių skaitymas" #~ msgid "Toolbar Settings" #~ msgstr "Mygtukų juostos nuostatos" #~ msgid "Update Interval" #~ msgstr "Atnaujinimo intervalas" #~ msgid "Web Integration" #~ msgstr "Saityno integravimas" #~ msgid "Add Script" #~ msgstr "Pridėti scenarijų" #~ msgid "At _startup:" #~ msgstr "_Paleidžiant" #~ msgid "Create new script" #~ msgstr "Sukurti naują scenarijų" #~ msgid "Reuse existing script" #~ msgstr "Vėl naudoti esamą scenarijų" #~ msgid "Script Manager" #~ msgstr "Scenarijų tvarkytuvė" liferea-1.12.7/po/lv.po000066400000000000000000002206721352135647700146360ustar00rootroot00000000000000# Latvian translation for liferea. # Copyright (C) 2011 liferea # This file is distributed under the same license as the liferea package. # # Rūdolfs Mazurs , 2011, 2012, 2014. # Arvis Lācis , 2012. # Rihards Priedītis , 2011. msgid "" msgstr "" "Project-Id-Version: liferea-1.10-rc4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2014-04-20 20:59+0300\n" "Last-Translator: Rihards Prieditis \n" "Language-Team: Latvian \n" "Language: Latvian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " "2);\n" "X-Generator: Lokalize 1.5\n" "X-Poedit-Language: Latvian\n" "X-Poedit-Country: LATVIA\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Plūsmu lasītājs" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Liferea ir bezsaitē" #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "Sinhronizēts ar Nearby Hosts" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "Sinhronizēts ar Nearby Hosts" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "Sinhronizēts ar Nearby Hosts" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "Sinhronizēts ar Nearby Hosts" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 #, fuzzy msgid "Play Podcasts" msgstr "Podraide" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Plūsmu lasītājs" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea plūsmu lasītājs" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Lasīt ziņu plūsmas un blogus" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Šī plūsma ir pārtraukta un vairs nav pieejama. Liferea to vairs " "neatjauninās, bet jūs vēl aizvien varat piekļūt saglabātajiem virsrakstiem." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "Neizdevās atjaunināt šo abonementu!
        HTTP kļūdas kods : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Radās kļūda, parsējot šo plūsmu!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Parsēt kļūdu informāciju" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Sīkāka informācija" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" "Iespējams, ka vēlaties par šo sazināties ar autoru/vietnes plūsmas " "uzturētāju!" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Radās kļūda, filtrējot šo plūsmu!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Filtrēt kļūdu informāciju" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Plūsma:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Avots:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Izdevējs" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Autortiesības" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "bērni ar" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "nelasīti virsraksti" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Mape:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Avots" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Plūsma" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Saglabāts zem" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Autors" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Dalījās" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Caur" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Saistīts" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Ievietots arī" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Veidotājs" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Komentāri" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Atjaunina..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Sadaļa" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Nodaļa" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Ziņu grozs:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Pievienot vienumus šajā ziņu grozā, izvēloties “Kopēt uz ziņu grozu” no " "vienumu saraksta konteksta izvēlnes." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Meklēšanas mape:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Pārlūka komanda cieta neveiksmi — %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Palaiž: “%s”" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Pilnvarošanas kļūda" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Nevar izveidot kešatmiņas mapi “%s”!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Šodien %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Vakar %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%b %d %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "“%s“ nav derīgs ietvara veids konfigurācijas datnei!" #: ../src/enclosure.c:292 #, fuzzy msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Jūs vēl neesat konfigurējis lejupielādes rīku! Lūdzu, izdariet to Rīki/" "Iestatījumi cilnē “Lejupielādes”" #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Komanda neizdevās:\n" "\n" "%s\n" "\n" " Lūdzu, pārliecinieties, vai konfigurēšanas rīks ir uzinstalēts un strādā " "pareizi! Jūs to varat mainīt Rīki/Iestatījumi cilnē “Lejupielādes”" #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Kļūda, pārsaucot %s uz %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "XML kļūda, nolasot OPML datni! Nevarēja importēt “%s”!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "Tukšs dokuments! OMPL dokumentam “%s” nevajadzētu būt tukšam." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "“%s” nav derīgs OMPL dokuments! Liferea nevar importēt šo datni!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Importēto plūsmu saraksts" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importēt plūsmu sarakstu" #: ../src/export.c:481 msgid "Import" msgstr "Importēt" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "OPML datnes" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Kļūda, eksportējot plūsmu sarakstu!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Plūsmu saraksts ir eksportēts!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Eksportēt plūsmu sarakstu" #: ../src/export.c:498 msgid "Export" msgstr "Eksportēt" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        Nevarēja noteikt šīs plūsmas veidu! Lūdzu, pārbaudiet, vai avots tiešām " "norāda uz resursu, kurš ir kādā no atbalstītajiem sindikāta formātiem!

        " "XML parsētāja izvade:
        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "“%s” ir atjaunināts..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "“%s” nav pieejams" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "URL norāda uz tīmekļa lapu, un automātiskā atklāšana šajā lapā neatrada " "plūsmas. Iespējams, ka šī lapa vienkārši neatbalsta plūsmu automātisku " "atklāšanu." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "XML kļūda, parsējot plūsmu! Nevarēja ielādēt plūsmu “%s”!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Tukšs dokuments!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Nederīgs XML!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Avota norāda uz HTML dokumentu." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Nevarēja noteikt plūsmas tipu." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Nav nelasītu vienumu " #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Palaist Liferea ar tā galveno logu stāvoklī STATE. STATE var būt “shown”, " "“iconified” vai “hidden”" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "STATE" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Parādīt informāciju par versiju un iziet" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Pievienot jaunu abonementu" #: ../src/liferea_application.c:284 msgid "uri" msgstr "uri" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Izdrukāt atkļūdošanas ziņojumus visiem tipiem" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Izdrukāt atkļūdošanas ziņojumus kešatmiņas apstrādāšanai" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Izdrukāt atkļūdošanas ziņojumus konfigurācijas apstrādāšanai" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Izdrukāt atkļūdošanas ziņojumus datubāzes apstrādāšanai" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Izdrukāt atkļūdošanas ziņojumus visām GUI funkcijām" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Aktivē HTML renderēšanas atkļūdošanu. Katru reizi, kad Liferea renderē HTML " "izvadu, tas novieto HTML datnē ~/.cache/liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Izdrukāt atkļūdošanas ziņojumus visām tīkla aktivitātēm" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Izdrukāt atkļūdošanas ziņojumus visām parsēšanas funkcijām" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "Izdrukāt atkļūdošanas ziņojumus, kad funkcija aizņem pārāk daudz laika" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Izdrukāt atkļūdošanas ziņojumus, kad ieiet/pamet funkcijas" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Izdrukāt atkļūdošanas ziņojumus par plūsmu atjaunināšanas apstrādi" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "Izdrukāt atkļūdošanas ziņojumus atbilstošām meklēšanas mapēm" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Izdrukāt detalizētus atkļūdošanas ziņojumus" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Izdrukāt atkļūdošanas ziņojumus dotajam tematam" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Atjaunināšanas pieprasījums tika atcelts" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Neizdevās sameklēt mērķa datora nosaukumu" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Neizdevās sameklēt starpniekservera nosaukumu" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Neizdevās savienoties ar attālināto datoru" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Neizdevās savienoties ar starpniekserveri" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "Radās tīkla kļūda, vai arī otrā puse negaidīti aizvēra savienojumu" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Resurss ir pastāvīgi pārvietos uz citu vietu" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Jūs neesat pilnvarots lejupielādēt šo plūsmu. Lūdzu, norādiet savu lietotāja " "vārdu un paroli plūsmas īpašību dialoglodziņā" #: ../src/net.c:476 msgid "Payment required" msgstr "Nepieciešama apmaksa" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Jums nav atļaujas piekļūt šim resursam" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Resurss nav atrasts" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Metode nav atļauta" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Nav pieņemams" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Nepieciešama starpniekservera autentifikācija" #: ../src/net.c:482 msgid "Request timed out" msgstr "Laiks iztecējis" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Nav. Resurss neeksistē. Lūdzu, atrakstieties!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Atjauninot radās iekšēja kļūda" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Plūsma nav pieejama — serveris pieprasīja neatbalstītu pāradresēšanu!" #: ../src/net.c:492 msgid "Client Error" msgstr "Klienta kļūda" #: ../src/net.c:494 msgid "Server Error" msgstr "Servera kļūda" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Radās nezināma tīkla kļūda!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Vienums" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "satur" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "nesatur" #: ../src/rule.c:175 msgid "Item title" msgstr "Vienuma virsraksts" #: ../src/rule.c:176 msgid "Item body" msgstr "Vienuma pamatteksts" #: ../src/rule.c:177 msgid "Read status" msgstr "Lasīšanas statuss" #: ../src/rule.c:177 msgid "is unread" msgstr "nav lasīts" #: ../src/rule.c:177 msgid "is read" msgstr "ir lasīts" #: ../src/rule.c:178 msgid "Flag status" msgstr "Atzīmes statuss" #: ../src/rule.c:178 msgid "is flagged" msgstr "ir atzīmēts" #: ../src/rule.c:178 msgid "is unflagged" msgstr "nav atzīmēts" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podraide" #: ../src/rule.c:179 msgid "included" msgstr "iekļauts" #: ../src/rule.c:179 msgid "not included" msgstr "nav iekļauts" #: ../src/rule.c:180 msgid "Category" msgstr "Kategorija" #: ../src/rule.c:180 msgid "is set" msgstr "ir iestatīts" #: ../src/rule.c:180 msgid "is not set" msgstr "nav iestatīts" #: ../src/rule.c:181 msgid "Feed title" msgstr "Barotnes virsraksts" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Abonements “%s” jau tiek atjaunināts!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "Abonements “%s” vairs nav pieejams. Liferea to vairs neatjauninās!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Atjaunina “%s” favicon ikonu" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Lasot šo abonementu, radās problēma. Lūdzu, pārbaudiet URL un konsoles " "izvadi." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "“%s” URL ir mainīts pastāvīgi un tika atjaunināts" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "“%s” ir pārtraukts. Liferea to vairs neatjauninās!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "“%s” nav mainīts kopš iepriekšējās atjaunināšanas" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Atjaunina “%s”" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Kļūda, atverot pagaidu datni %s, lai to izmantotu filtrēšanai!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s izgāja ar statusu %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Kļūda — nevarēja atvērt konveijeru “%s”" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Kļūda — nevarēja atvērt datni “%s”" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Kļūda — nav datnes “%s”" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Jauna meklēšanas mape" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Bija vairākas kļūdas. Izvade ir saīsināta!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "XML parsētājs — neizdevās analizēt dokumentu:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Pielikumi" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " Baiti" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d pielikums" msgstr[1] "%d pielikumi" msgstr[2] "%d pielikumu" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Izvēlieties datni" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Datnes paplašinājums .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Nevarēja atrast bitkartes datni — %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d jauns)" msgstr[1] " (%d jauni)" msgstr[2] " (%d jaunu)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d nelasīta%s" msgstr[1] "%d nelasītas%s" msgstr[2] "%d nelasītu%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Palīdzības tēmas" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Ātrā rokasgrāmata" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "BUJ" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Paplašinātā meklēšana" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Ievadiet “%s” lietotāja vārdu un paroli (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Nezināms avots" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "_Atcelt visu" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Visas datnes" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea ir bezsaites režīmā. Nevar veikt atjaunināšanu." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Meklēt visās plūsmās" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Atzīmēt visas kā lasītas" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Vai tiešām vēlaties dzēst “%s”?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Šim vienumam nav norādīta saite!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Nav virsraksta ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Virsraksts" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Datums" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Jums jāizvēlas plūsma, lai dzēstu tās vienumus!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Nav izvēlētu vienumu" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Atvērt _cilnē" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "Atvērt pār_lūkā" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "_Atvērt ārējā pārlūkā" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Kopēt uz ziņu grozu" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "Ie_grāmatot %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "Kopēt _vienuma adresi" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Pā_rslēgt lasīšanas statusu" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Pārslēgt vienuma _atzīmi" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "Izņ_emt vienumu" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Atvērt ietvaru..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Saglabāt kā..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Kopēt saites vietu" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "Atja_unināt" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "Atja_unināt mapi" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Jaun_s abonements..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Jauna _mape..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Jauna m_eklēšanas mape..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Jauns av_ots..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Jau_ns ziņu grozs..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "Jau_ns" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Sakārtot plūsmas" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "Atzī_mēt visas kā lasītas" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "Pā_rbūvēt" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Dzēst" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "Ī_pašības" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Konvertēt uz lokālu abonementu..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "GNOME noklusējuma" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Teksts zem ikonām" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Teksts blakus ikonām" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Tikai ikonas" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Tikai teksts" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minūtes" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "stundas" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dienas" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Atstarpe" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Atstarpe" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Atstarpe" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Normāls skats" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Plats skats" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Kombinētais skats" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Noklusētais pārlūks" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Manuāli" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Veids" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Programma" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Tukšs)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Pārbūvē" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Dzēš ierakstu" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Vai tiešām vēlaties dzēst “%s” un tās saturu?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Vai tiešām vēlaties dzēst “%s”?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Dzēšanas apstiprināšana" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Dzēšanas apstiprināšana" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "Šīs plūsmas piegādātājs iesaka atjaunināšanas intervālu %d minūte." msgstr[1] "Šīs plūsmas piegādātājs iesaka atjaunināšanas intervālu %d minūtes." msgstr[2] "Šīs plūsmas piegādātājs iesaka atjaunināšanas intervālu %d minūšu." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Plūsma nenorāda noklusēto atjaunināšanas intervālu." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Nenosaukts" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Tīmekļa vietne" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Jauns abonements" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Izvēlieties OPML datni" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Jauns OPML abonements" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Nav atrasti plūsmas saraksta avota tipi!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Avota veids" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "“%s” abonements tika veiksmīgi pārveidots par lokālajām plūsmām!" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Google Reader pieteikšanās neizdevās!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 #, fuzzy msgid "Could not parse JSON returned by Reedah API!" msgstr "Nevarēja parsēt JSON, atgriezta tt-rss API!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 #, fuzzy msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "Nevarēja parsēt JSON, atgriezta tt-rss API!" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Plūsmu lasītājs" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Atvērt sai_ti cilnē" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "Atvērt saiti pār_lūkā" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "Atvērt saiti ārējā pār_lūkā" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "Ie_grāmatot saiti %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Kopēt saites adresi" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "S_aglabāt attēlu kā" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "_Kopēt attēla adresi" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "S_aglabāt saiti kā" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "S_aglabāt attēlu kā" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Abonēt..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "Pal_ielināt teksta izmēru" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Samazināt teksta izmēru" #: ../glade/about.ui.h:1 msgid "About" msgstr "Par" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea ir ziņu sakopotājs GTK+ videi" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Liferea mājaslapa" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autentifikācija" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Lietotājvārds:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Parole:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Atvērt ietvaru" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Atvērt ietvaru ar tipu:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Ko Liferea vajadzētu darīt ar šo ietvaru? Lūdzu, zemāk ievadiet komandu, ko " "vēlaties izpildīt. Ietvari tiks padoti kā parametri šai komandai:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Pārlūkot" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "Šā_diem ietvariem to turpmāk darīt automātiski." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Pievienot Google Reader kontu" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Lūdzu, ievadiet sava Google Reader konta iestatījumus." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Parole" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_Lietotājvārds (e-pasts)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Skatīt virsrakstus" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Virsraksti" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Atzīmēt visas kā lasītas" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Atzīmēt visas kā lasītas" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Jauna mape" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "_Mapes nosaukums:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Izveidot ziņu grozu" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "Ziņu groza _nosaukums:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Plūsmas avots" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Avota veids:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Komanda" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Lokāla datne" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Izvēlēties datni..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "Avot_s:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Lejupielāde / pēcapstrāde" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "Neizmantot starpniekserveri lejupielā_dēšanai" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Izmantot pārveidošanas _filtru" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea var izmantot ārējus filtru spraudņus, lai piekļūtu plūsmām un mapēm " "nestandarta formātos. Skatiet dokumentāciju, lai iegūtu vairāk informācijas." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Pār_veidot izmantojot:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Avota izvēle" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Izvēlieties avota tipu, ko vēlaties pievienot..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Pievienot OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Lūdzu, norādiet lokālo datni vai URL, kas norāda uz derīgu OPML plūsmas " "sarakstu." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Vieta" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "Izvēlētie_s datni" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Liferea iestatījumi" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Plūsmu kešatmiņas apkalpošana" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_Noklusētais vienumu skaits plūsmai, ko saglabāt:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Plūsmas atjaunināšanas iestatījumi" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Piezīme — atcerieties iestatīt saprātīgus atsvaidzināšanas laikus. " "Parasti plūsmu atjaunināšana biežāk kā reizi stundā ir tīkla resursu " "izniekošana." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "_Atjaunināt visus abonementus palaižoties." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Noklusētais plūsmas atsvaidzināšanas _intervāls:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Plūsmas" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Mapju attēlošanas iestatījumi" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "Rādīt vienumu_s visām apakšplūsmām, kad ir izvēlēta mape." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "Slēpt _lasītos vienumus." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Plūsmu ikonas (Favicon)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "Atja_unināt visas ikonas (favicon) tagad" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Mapes" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Lasa virsrakstus" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Pārlapot rak_stus ar:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "_Noklusējuma skata režīms:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Tīmekļa integrācija" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "Nosūtīt _grāmatzīmes uz" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Iekšējā pārlūka iestatījumi" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Atvērt saites jaunā Liferea _logā." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Deaktivēt Javascript." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_Aktivēt pārlūka spraudņus." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Ārējā pārlūka iestatījumi" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Pārlūks:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Manuāli:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s priekš URL)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Pārlūks" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Rīkjoslas iestatījumi" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Slēpt rīkjoslu." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Rīkjoslas _pogu etiķetes:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "HTTP starpniekserveris" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Automātiski noteikt (GNOME vai vide)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Nav starpniekservera" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Manuāli iestatījumi:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "Sta_rpniekserveris:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "Starpnieka _ports:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Izmantot starpniekservera _autentificēšanu" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Starpnieka _lietotājvārds:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Starpnieka pa_role:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Starpniekserveris" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Mapju attēlošanas iestatījumi" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Lejupielādēt ietvarus" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "Lejupielā_dēt izmantojot" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Atver ietvarus" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Ietvari" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Abonementa īpašības" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Plūsmas nosaukums" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "Plūsmas _nosaukums:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Atjaunināšanas intervāls" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "Izmantot globālos nokl_usētos atjaunināšanas intervālus." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "Plūsmai speci_fiskais atjaunināšanas intervāls" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Neatjaunināt šo plūsmu automātiski." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Šīs plūsmas piegādātājs iesaka atjaunināšanas intervālu %d minūtes." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Vispārīgi" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea var izmantot ārējus filtru spraudņus, lai piekļūtu plūsmām un mapēm " "nestandarta formātos. Skatiet dokumentāciju, lai iegūtu vairāk informācijas." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Kešatmiņas iestatījumi nosaka, vai plūsmu saturs tiek saglabāts, kad Liferea " "iziet. Atzīmētie vienumi vienmēr tiek saglabāti kešatmiņā." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "_Noklusētie kešatmiņas iestatījumi" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "De_aktivēt kešatmiņu" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Neierobežota kešatmiņa" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "Saglabājamo vie_numu skaits:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Arhīvs" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Izmantot HTTP _autentificēšanu" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Lejupielādēt" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_Automātiski lejupielādēt visus ietvarus šai plūsmai." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Automātiski ie_lādēt vienuma saiti konfigurētā pārlūkā, kad izvēlas rakstus." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorēt _komentāru plūsmas šim abonementam." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "Atzī_mēt lejupielādētos vienumus kā lasītus." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Paplašināti" #: ../glade/reedah_source.ui.h:1 #, fuzzy msgid "Add Reedah Account" msgstr "Pievienot Google Reader kontu" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Lūdzu, ievadiet sava Google Reader konta iestatījumus." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Pārsaukt" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "Ja_uns nosaukums:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Meklēt mapes īpašībās" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "Meklēt _nosaukumu:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Atrast vienumus, kas atbilst sekojošajiem kritērijiem" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Sakrīt kāds _noteikums" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "Jās_akrīt visām kārtulām" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Paplašinātā meklēšana" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "_Meklēšanas mape..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Meklēt visās plūsmās" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "P_aplašināti..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Sāk meklēt norādīto tekstu visās plūsmās. Meklēšanas rezultāti parādīsies " "vienumu sarakstā." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Meklēt:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Ierakstiet meklēšanas virkni, ko Liferea vajadzētu atrast vai nu vienumu " "virsrakstos vai to saturos." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Paplašināti..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Ievadiet tīmekļa vietni, ko izmantot plūsmu automātiskai atklāšanai, vai arī " "precīzu plūsmas atrašanās vietu." #: ../glade/theoldreader_source.ui.h:1 #, fuzzy msgid "Add TheOldReader Account" msgstr "Pievienot Google Reader kontu" #: ../glade/theoldreader_source.ui.h:2 #, fuzzy msgid "Please enter your TheOldReader account settings." msgstr "Lūdzu, ievadiet sava Google Reader konta iestatījumus." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Pievienot Tiny Tiny RSS kontu" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "Lūdzu, ievadiet sava tt-rrs konta iestatījumus." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "_Servera URL" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Lietotājvārds" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Atjaunināšanas uzraugs" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "_Atcelt visu" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Gaidošie pieprasījumi" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Lejupielādēt tagad" #~ msgid "_Subscriptions" #~ msgstr "_Abonementi" #~ msgid "Update _All" #~ msgstr "_Atjaunināt visus" #~ msgid "Updates all subscriptions." #~ msgstr "Atjaunina visus abonementus." #~ msgid "Mark All As _Read" #~ msgstr "Atzīmēt visus kā _lasītus" #~ msgid "Marks read every item of every subscription." #~ msgstr "Atzīmē kā lasītus visus vienumus katrā abonementā." #~ msgid "_Import Feed List..." #~ msgstr "_Importēt plūsmu sarakstu..." #~ msgid "Imports an OPML feed list." #~ msgstr "Importē OPML plūsmu sarakstu." #~ msgid "_Export Feed List..." #~ msgstr "_Eksportēt plūsmu sarakstu..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Eksportē plūsmu sarakstu kā OPML." #~ msgid "_Quit" #~ msgstr "_Iziet" #~ msgid "_Feed" #~ msgstr "_Plūsma" #~ msgid "Remove _All Items" #~ msgstr "Izņemt _visus vienumus" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Izņem visus vienumus no pašlaik izvēlētās plūsmas." #~ msgid "_Item" #~ msgstr "V_ienums" #~ msgid "Previous Item" #~ msgstr "Iepriekšējais vienums" #~ msgid "Next Item" #~ msgstr "Nākamais vienums" #~ msgid "_Next Unread Item" #~ msgstr "_Nākamais nelasītais" #~ msgid "_View" #~ msgstr "_Skats" #~ msgid "Increases the text size of the item view." #~ msgstr "Palielina teksta izmēru vienumu skatā." #~ msgid "Decreases the text size of the item view." #~ msgstr "Samazina teksta izmēru vienumu skatā." #~ msgid "_Tools" #~ msgstr "_Rīki" #~ msgid "_Update Monitor" #~ msgstr "Atjaunināšanas _uzraugs" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Rādīt sarakstu ar visām plūsmām, kas atrodas atjaunināšanas rindā" #~ msgid "_Preferences" #~ msgstr "_Iestatījumi" #~ msgid "Edit Preferences." #~ msgstr "Rediģēt iestatījumus." #~ msgid "S_earch" #~ msgstr "M_eklēt" #~ msgid "Search All Feeds..." #~ msgstr "Meklēt visās plūsmās..." #~ msgid "Show the search dialog." #~ msgstr "Rādīt meklēšanas dialogu." #~ msgid "_Help" #~ msgstr "_Palīdzība" #~ msgid "_Contents" #~ msgstr "_Saturs" #~ msgid "View help for this application." #~ msgstr "Skatīt šīs lietotnes palīdzību." #~ msgid "_Quick Reference" #~ msgstr "_Ātrā atsauce" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Skatīt sarakstu ar visiem Liferea īsceļiem." #~ msgid "_FAQ" #~ msgstr "_BUJ" #~ msgid "View the FAQ for this application." #~ msgstr "Skatīt šīs lietotnes BUJ." #~ msgid "_About" #~ msgstr "P_ar" #~ msgid "Shows an about dialog." #~ msgstr "Parāda informāciju par programmu." #~ msgid "_Normal View" #~ msgstr "_Normāls skats" #~ msgid "Set view mode to mail client mode." #~ msgstr "Iestatīt skata režīmu uz pasta klienta režīmu." #~ msgid "_Wide View" #~ msgstr "_Plašs skats" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Iestatīt skatīšanas režīmu uz trīs vertikālām rūtīm." #~ msgid "_Combined View" #~ msgstr "_Kombinētais skats" #~ msgid "Set view mode to two pane mode." #~ msgstr "Iestatīt skatīšanas režīmu uz divu rūšu režīmu." #~ msgid "_Reduced Feed List" #~ msgstr "_Reducētais plūsmu saraksts" #~ msgid "Hide feeds with no unread items." #~ msgstr "Slēpt plūsmas ar nelasītiem vienumiem." #~ msgid "_New Subscription..." #~ msgstr "Jau_ns abonements..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Pievieno abonementu plūsmu sarakstam." #~ msgid "Adds a folder to the feed list." #~ msgstr "Pievieno mapi plūsmu sarakstam." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Pievieno jaunu meklēšanas mapi plūsmu sarakstam." #~ msgid "New _Source..." #~ msgstr "Jaun_s avots..." #~ msgid "Adds a new feed list source." #~ msgstr "Pievieno jaunu plūsmas saraksta avotu." #~ msgid "Adds a new news bin." #~ msgstr "Pievieno jaunu ziņu grozu." #~ msgid "_Mark Items Read" #~ msgstr "Atzī_mēt kā lasītus" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Atzīmē visus vienumus izvēlētajā plūsmas saraksta mezglā / vienumu " #~ "sarakstā kā lasītus." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Atjaunina izvēlētos abonementus vai visus abonementus izvēlētajā mapē." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Atver īpašību dialogu izvēlētajiem abonementiem." #~ msgid "_Remove" #~ msgstr "_Izņemt" #~ msgid "Removes the selected subscription." #~ msgstr "Izņem izvēlēto abonementu." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Pārslēdz lasīšanas statusu izvēlētajiem vienumiem." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Pārslēdz atzīmes statusu izvēlētajam vienumam." #~ msgid "R_emove" #~ msgstr "Izņ_emt" #~ msgid "Removes the selected item." #~ msgstr "Izņem izvēlēto vienumu." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Atver vienuma saiti Liferea pārlūka cilnē." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Atver vienuma saiti Liferea vienuma rūtī." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Atver vienuma saiti konfigurētajā ārējā pārlūkā." #~ msgid "_Fullscreen" #~ msgstr "_Pilnekrāns" #~ msgid "Browse at full screen" #~ msgstr "Pārlūkot pilnekrānā" #~ msgid "_Work Offline" #~ msgstr "_Strādāt nesaistē" #~ msgid "_Update All" #~ msgstr "_Atjaunināt visas" #~ msgid "_Show Liferea" #~ msgstr "_Rādīt Liferea" #, fuzzy #~ msgid "InoReader" #~ msgstr "Google Reader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Piezīme: Lietotājvārds un parole tiks saglabāta Liferea plūsmu " #~ "saraksta datnē bez šifrēšanas." #, fuzzy #~ msgid "Add InoReader Account" #~ msgstr "Pievienot Google Reader kontu" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "Lūdzu, ievadiet sava Google Reader konta iestatījumus." #~ msgid "Plugins" #~ msgstr "Spraudņi" #~ msgid "normal view" #~ msgstr "normāls skats" #~ msgid "wide view" #~ msgstr "plašs skats" #~ msgid "combined view" #~ msgstr "kombinētais skats" #~ msgid "No comments yet." #~ msgstr "Vēl nav komentāru." #~ msgid "Refresh" #~ msgstr "Atsvaidzināt" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, Linux plūsmu lasītājs" #~ msgid "For more information, please visit http://lzone.de/liferea/" #~ msgstr "Lai uzzinātu vairāk, apmeklējiet http://lzone.de/liferea/" #~ msgid "Liferea is now online" #~ msgstr "Liferea ir tiešsaistē" #~ msgid "Work Offline" #~ msgstr "Strādāt bezsaitē" #~ msgid "Work Online" #~ msgstr "Strādāt tiešsaistē" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Šī opcija atļauj deaktivēt abonementu atjaunināšanu." #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea – Linux plūsmu lasītājs" #~ msgid "" #~ "

        Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

        You can add new subscriptions

        • From main menu " #~ "'Subscription' -> 'New Subscription'
        • By dropping feed links " #~ "into the subscription list
        • By right clicking links and choosing " #~ "'Subscribe' within Liferea

        " #~ msgstr "" #~ "

        Laipni lūdzam Liferea, darbvirsmas ziņu sakopotājs tiešsaistes " #~ "ziņu plūsmām.

        Jaunus abonementus var pievienot

        • no galvenās " #~ "izvēlnes “Abonementi” -> “Jauns abonements”,
        • velkot plūsmas " #~ "saiti uz abonementu sarakstu,
        • Liferea programmā veicot labo peles " #~ "klikšķi uz saites un izvēloties “Abonēt”.

        " #~ msgid "Browser default" #~ msgstr "Pārlūka noklusējums" #~ msgid "Existing window" #~ msgstr "Esošs logs" #~ msgid "New window" #~ msgstr "Jauns logs" #~ msgid "New tab" #~ msgstr "Jauna cilne" #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "Integrēt ar ziņojumu izvēlni (indikatoru)" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Izslēgt, nevis minimizēt ziņojumu izvēlnē" #~ msgid "Start minimized to the messaging menu" #~ msgstr "Palaist minimizētu ziņojumu izvēlnē" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d jauns vienums" #~ msgstr[1] "%d jauni vienumi" #~ msgstr[2] "%d jaunu vienumu" #~ msgid "No new items" #~ msgstr "Nav jaunu vienumu" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d nelasīts vienums" #~ msgstr[1] "" #~ "%s\n" #~ "%d nelasīti vienumi" #~ msgstr[2] "" #~ "%s\n" #~ "%d nelasītu vienumu" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Nav nelasītu vienumu" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Nederīga Atom plūsma — nezināms autors" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Integrējiet plūsmu sarakstu no sava Google Reader konta. Liferea attēlos " #~ "Google Reader abonementus un sinhronizēs plūsmu sarakstu un lasīšanas " #~ "sarakstus. " #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Integrē BlogRolls vai Planets barotņu sarakstā. Liferea automātiski " #~ "pievienos un izņems plūsmas atbilstoši avota OPML dokumentam" #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Integrējiet plūsmu sarakstu no sava Tiny Tiny RSS 1.5+ konta. Liferea " #~ "attēlos tt-rss abonementus un sinhronizēs plūsmu sarakstu un lasīšanas " #~ "sarakstus. " #~ msgid "This feed does not exist anymore!" #~ msgstr "Šī plūsma vairs neeksistē!" #~ msgid "This news entry has no headline" #~ msgstr "Šai ziņai nav virsraksta" #~ msgid "Visit" #~ msgstr "Apmeklēt" #~ msgid "Open feed" #~ msgstr "Atvērt plūsmu" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "%s ir %d jaunums" #~ msgstr[1] "%s ir %d jaunumi" #~ msgstr[2] "%s ir %d jaunumu" #~ msgid "Feed Update" #~ msgstr "Plūsmu atjaunināšana" #~ msgid "Show details" #~ msgstr "Rādīt sīkāku informāciju" #~ msgid "Online/Offline Button" #~ msgstr "Tiešsaistes/bezsaites poga" #~ msgid " " #~ msgstr " " #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "Uzspiest uzn_irstošos paziņojumus šai plūsmai." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_Nekad nerādīt uznirstošo paziņojumu šim abonementam." #~ msgid "Create Search Engine Feed" #~ msgstr "Izveidot meklēšanas dziņa plūsmu" #~ msgid "enter any search string you want" #~ msgstr "ievadiet jebkādu meklēšanas virkni" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "Maksimālais rezultāta vie_numu skaits:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Piezīme — Liferea ģenerēs plūsmu abonementu, kas tiks izmantots, lai " #~ "vaicātu meklēšanas dzinim rezultātus noteiktai meklēšanas virknei. Jūs " #~ "varat paturēt šo plūsmu pastāvīgi un atjaunināt to tāpat kā jebkuru citu " #~ "abonementu." #~ msgid "_Open link in:" #~ msgstr "Kur _atvērt saiti:" #~ msgid "Notification Settings" #~ msgstr "Paziņojumu iestatījumi" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Rādīt _uznirstošo logu ar jauniem virsrakstiem." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Rādīt statusa _ikonu paziņojumu laukā (sistēmas paplātē)." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Rādīt vienumu skaitu paplātes ikonā." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "Izslēgt, n_evis minimizēt paplātes ikonā." #~ msgid "_Start in tray icon." #~ msgstr "Palai_st paplātes ikonā." #~ msgid "Download and view feeds" #~ msgstr "Lejupielādēt un lasīt plūsmas" #~ msgid "You may want to validate the feed using" #~ msgstr "Jūs varētu vēlēties pārbaudīt plūsmu, izmantojot" #~ msgid "bookmark" #~ msgstr "grāmatzīme" #~ msgid "comments" #~ msgstr "komentāri" #~ msgid "flag" #~ msgstr "atzīme" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Neizdevās lejupielādēt ietvaru — “%s”" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Pabeigta ietvara lejupielāde — “%s”" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Šī Liferea versija izmanto jaunu kešatmiņas formātu, un ir migrējusi jūsu " #~ "plūsmu kešatmiņu. %s kešatmiņas saturs netika automātiski izdzēsts. " #~ "Lūdzu, izņemiet šo mapi manuāli, kad būsiet pārliecināts, ka migrēšana ir " #~ "izdevusies!" #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Pāriet uz nākamo nelasīto vienumu. Ja nepieciešams, izvēlas nākamo " #~ "plūsmu, kurā ir nelasīti vienumi." #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Neizdevās lejupielādēt — “%s”" #~ msgid "Download finished." #~ msgstr "Lejupielāde pabeigta." #~ msgid "Launch Item In _Tab" #~ msgstr "Atvēr_t vienumu cilnē" #~ msgid "_Launch Item In Browser" #~ msgstr "Atvērt vienumu pār_lūkā" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Kopēt vienumu _URL starpliktuvē" #~ msgid "Choose download directory" #~ msgstr "Izvēlieties lejupielādes mapi" #~ msgid "Liferea Sync %s@%s" #~ msgstr "Liferea sinhronizācija %s@%s" #~ msgid "" #~ "Copyright (c) 2003-2010\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Autortiesības (c) 2003-2010\n" #~ "Liferea komanda\n" #~ msgid "Downloading Enclosure" #~ msgstr "Lejupielādēt ietvaru" #~ msgid "Sync" #~ msgstr "Sinhronizēt" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "_Aktivēt lokālā tīkla sinhronizāciju" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Manuāli:\n" #~ "(%s URL)" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "_Padot URL un nelejupielādēt ietvaru." #~ msgid "_Save downloads in" #~ msgstr "_Saglabāt lejupielādes mapē" #~ msgid "_Service Name" #~ msgstr "_Servisa nosaukums" #~ msgid "link cosmos" #~ msgstr "link cosmos" #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "Izdrukāt atkļūdošanas ziņojumus spraudņu ielādei" #~ msgid "Liferea seems to be running already!" #~ msgstr "Izskatās, ka Liferea jau darbojas!" #~ msgid "Update status" #~ msgstr "Atjaunināšanas statuss" #~ msgid "was updated" #~ msgstr "tika atjaunināts" #~ msgid "was not updated" #~ msgstr "netika atjaunināts" #~ msgid "The orientation of the tray." #~ msgstr "Paplātes novietojums." #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "_Script Manager" #~ msgstr "_Skriptu pārvaldnieks" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Atļauj konfigurēt un rediģēt LUA āķu skriptus" #~ msgid "Search With ..." #~ msgstr "Meklēt ar..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d meklēšanas rezultāts vaicājumam \"%s\"" #~ msgstr[1] "%d meklēšanas rezultāti vaicājumam \"%s\"" #~ msgstr[2] "%d meklēšanas rezultātu vaicājumam \"%s\"" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d meklēšanas rezultāts" #~ msgstr[1] "%d meklēšanas rezultāti" #~ msgstr[2] "%d meklēšanas rezultātu" #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "Vienumu saraksts tagad satur vienumus, kas atbilst meklēšanas " #~ "nosacījumiem. Ja vēlaties saglabāt meklēšanas rezultātus pastāvīgi, " #~ "meklēšanas dialoglodziņā uzklikšķiniet uz pogas \"Meklēšanas mapes\" un " #~ "Liferea pievienos meklēšanas mapi barotņu avotam." #~ msgid "You have to select a feed entry" #~ msgstr "Jums jāizvēlas barotnes ieraksts" #~ msgid "(empty)" #~ msgstr "(tukšs)" #~ msgid "_Properties..." #~ msgstr "Ī_pašības..." #~ msgid "Update out-dated feeds" #~ msgstr "Atjaunināt neaktuālās barotnes" #~ msgid "Force update of all feeds" #~ msgstr "Piespiest atjaunināt visas barotnes" #~ msgid "No feed update at all" #~ msgstr "Neatjaunināt barotnes vispār" #~ msgid "startup" #~ msgstr "startēšana" #~ msgid "feed updated" #~ msgstr "barotne atjaunināta" #~ msgid "feed added" #~ msgstr "barotne pievienota" #~ msgid "item selected" #~ msgstr "vienums izvēlēts" #~ msgid "feed selected" #~ msgstr "barotne izvēlēta" #~ msgid "item unselected" #~ msgstr "vienums neizvēlēts" #~ msgid "feed unselected" #~ msgstr "barotne neizvēlēta" #~ msgid "shutdown" #~ msgstr "izslēgt" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Diemžēl skriptēšana nav atbalstīta!" #~ msgid "Script Name" #~ msgstr "Skripta nosaukums" #~ msgid "No script selected!" #~ msgstr "Nav izvēlēts neviens skripts!" #~ msgid "Create a new search feed." #~ msgstr "Izveidot jaunu meklēšanas barotni." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea nevar parādīt tā vienuma saturu." #~ msgid "

        View this item's content.

        " #~ msgstr "

        Skatīt šī vienuma saturu.

        " #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "Integrē barotņu sarakstu ar Bloglines kontu. Liferea attēlos jūsu " #~ "Bloglines abonementus tikai lasīšanas apakškokā barotņu sarakstā." #~ msgid "feedlist.opml" #~ msgstr "feedlist.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s ir %d jauns / atjaunināts virsraksts\n" #~ msgstr[1] "%s ir %d jauni / atjaunināti virsraksti\n" #~ msgstr[2] "%s ir %d jaunu / atjauninātu virsrakstu\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Hook" #~ msgstr "Āķis" #~ msgid "Registered Scripts" #~ msgstr "Reģistrētie skripti" #~ msgid "Script Code" #~ msgstr "Skripta kods" #~ msgid "text/plain" #~ msgstr "teksts/vienkāršs" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Šī opcija var izraisīt būtiskus kavējumus, ielādējot mapes, kurās ir " #~ "daudz barotņu." #~ msgid "Downloading Enclosures" #~ msgstr "Lejupielādē ietvaru" #~ msgid "Feed Cache Handling" #~ msgstr "Barotņu keša apstrāde" #~ msgid "Feed Name" #~ msgstr "Barotnes nosaukums" #~ msgid "Feed Update Settings" #~ msgstr "Barotņu atjaunināšanas iestatījumi" #~ msgid "HTTP Proxy Server" #~ msgstr "HTTP starpnieka serveris" #~ msgid "Opening Enclosures" #~ msgstr "Atver iestatījumus" #~ msgid "Reading Headlines" #~ msgstr "Lasa virsrakstus" #~ msgid "Toolbar Settings" #~ msgstr "Rīkjoslas iestatījumi" #~ msgid "Update Interval" #~ msgstr "Atjaunināšanas intervāls" #~ msgid "Web Integration" #~ msgstr "Tīmekļa integrācija" #~ msgid "Add Script" #~ msgstr "Pievienot skriptu" #~ msgid "At _startup:" #~ msgstr "_Startējoties:" #~ msgid "Create new script" #~ msgstr "Izveidot jaunu skriptu" #~ msgid "Exec Command" #~ msgstr "Izpildīt komandu" #~ msgid "Reuse existing script" #~ msgstr "Atkātoti izmantot esošo skriptu" #~ msgid "Script Manager" #~ msgstr "Skriptu pārvaldnieks" #~ msgid "Search _Link Cosmos with" #~ msgstr "Meklēt _Link Cosmos ar" liferea-1.12.7/po/mk.po000066400000000000000000002774741352135647700146400ustar00rootroot00000000000000# translation of mk.po to Macedonian # English translation of liferea. # Copyright (C) 2004 THE liferea'S COPYRIGHT HOLDER # This file is distributed under the same license as the liferea package. # Томислав Марковски , 2004. # Tomislav Markovski , 2004. # msgid "" msgstr "" "Project-Id-Version: new\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2004-10-24 02:34+0200\n" "Last-Translator: Tomislav Markovski \n" "Language-Team: Macedonian \n" "Language: mk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural= n%10==1 && n%100!=11 ? 0 : 1;X-\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Кеш за вести" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Лајфри е исклучена" #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "Наслов на вестите" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "Наслов на вестите" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "Наслов на вестите" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "Наслов на вестите" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 #, fuzzy msgid "Liferea" msgstr "Помош за Лајфри" #: ../net.sourceforge.liferea.desktop.in.h:2 #, fuzzy msgid "Feed Reader" msgstr "Кеш за вести" #: ../net.sourceforge.liferea.desktop.in.h:3 #, fuzzy msgid "Liferea Feed Reader" msgstr "Вести за Лајфри на Сорсфорџ" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Овие вести веќе нема да се ажурираат, но се уште можете да ги гледате " "кешираните наслови." #: ../xslt/feed.xml.in.h:2 #, fuzzy msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "Последното ажурирање на вестите беше неуспешно!
        HTTP error code %d: " "%s" #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Се појавивија грешки при парсирање на вестите!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" #: ../xslt/feed.xml.in.h:7 #, fuzzy msgid "There were errors while filtering this feed!" msgstr "Се појавивија грешки при парсирање на вестите!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Вест:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Извор:" #: ../xslt/feed.xml.in.h:11 #, fuzzy msgid "Publisher" msgstr "објавувач" #: ../xslt/feed.xml.in.h:12 #, fuzzy msgid "Copyright" msgstr "авторски права" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 #, fuzzy msgid "unread headlines" msgstr "Наслов" #: ../xslt/folder.xml.in.h:1 #, fuzzy msgid "Folder:" msgstr "В-папка" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 #, fuzzy msgid "Source" msgstr "Извор:" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Вест" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "" #: ../xslt/item.xml.in.h:4 #, fuzzy msgid "Author" msgstr "автор" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "" #: ../xslt/item.xml.in.h:9 #, fuzzy msgid "Creator" msgstr "креатор" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 #, fuzzy msgid "Comments" msgstr "коментари" #: ../xslt/item.xml.in.h:13 #, fuzzy msgid "Updating..." msgstr "Ажурирам \"%s\"" #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "" #: ../xslt/newsbin.xml.in.h:1 #, fuzzy msgid "News Bin:" msgstr "Нов прозорец" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" #: ../xslt/vfolder.xml.in.h:1 #, fuzzy msgid "Search Folder:" msgstr "Барај за" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "команда за прелистувач е науспешна: \"%s\"" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Отворам: \"%s\"" #. unauthorized #: ../src/comments.c:120 #, fuzzy msgid "Authorization Error" msgstr "Автентикација" #: ../src/common.c:66 #, fuzzy, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Не може да се креира папката за кеш %s!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "" #: ../src/enclosure.c:201 #, fuzzy, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "" "\"%s\" не е правилен ОПМЛ документ. Лајфри не може да ја увези оваа датотека!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Не можам да преименувам %s во %s\n" #: ../src/export.c:417 ../src/export.c:419 #, fuzzy, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "XML грешка при читање на датотеката за кеш! Не можам да увезам \"%s\"!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Празен документ. ОПМЛ документот \"%s\" не смее да биде празен при " "увезување..." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" не е правилен ОПМЛ документ. Лајфри не може да ја увези оваа датотека!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Листата на вести е увезена" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Увези листа на вести" #: ../src/export.c:481 msgid "Import" msgstr "Увези" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 #, fuzzy msgid "OPML Files" msgstr "Одберете датотека" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Грешка при извезување на листата со вести!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Листата со вести е извезена!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Извези листа на вести" #: ../src/export.c:498 msgid "Export" msgstr "Извези" #: ../src/feed.c:317 #, fuzzy msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        Не можам да го одредам форматот на вестите. Ве молам проверете дали " "адресата покажува кон вести со поддржан формат!

        %s" #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" ажурирано..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" е недостапно!" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" #: ../src/feed_parser.c:170 #, fuzzy, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "" "

        XML грешка при читање на вестите! Веста \"%s\" не може да се вчита!

        " #: ../src/feed_parser.c:175 #, fuzzy msgid "Empty document!" msgstr "

        Празен документ!

        " #: ../src/feed_parser.c:187 #, fuzzy msgid "Invalid XML!" msgstr "

        Невалиден XML!

        " #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "" #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "" #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 #, fuzzy msgid "There are no unread items" msgstr "Сите вести се прочитани!" #: ../src/liferea_application.c:282 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "" #: ../src/liferea_application.c:283 #, fuzzy msgid "Show version information and exit" msgstr " --version Покажи ја верзијата на Лајфри" #: ../src/liferea_application.c:284 #, fuzzy msgid "Add a new subscription" msgstr "Нова претплата" #: ../src/liferea_application.c:284 msgid "uri" msgstr "" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 #, fuzzy msgid "Print debugging messages of all types" msgstr " --debug-all Print debugging messages of all types" #: ../src/liferea_application.c:291 #, fuzzy msgid "Print debugging messages for the cache handling" msgstr " --debug-cache Print debugging messages for the cache handling" #: ../src/liferea_application.c:292 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "" " --debug-conf Print debugging messages of the configuration handling" #: ../src/liferea_application.c:293 #, fuzzy msgid "Print debugging messages of the database handling" msgstr " --debug-cache Print debugging messages for the cache handling" #: ../src/liferea_application.c:294 #, fuzzy msgid "Print debugging messages of all GUI functions" msgstr " --debug-gui Print debugging messages of all GUI functions" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" #: ../src/liferea_application.c:296 #, fuzzy msgid "Print debugging messages of all network activity" msgstr " --debug-all Print debugging messages of all types" #: ../src/liferea_application.c:297 #, fuzzy msgid "Print debugging messages of all parsing functions" msgstr " --debug-parsing Print debugging messages of all parsing functions" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/liferea_application.c:299 #, fuzzy msgid "Print debugging messages when entering/leaving functions" msgstr "" " --debug-trace Print debugging messages when entering/leaving functions" #: ../src/liferea_application.c:300 #, fuzzy msgid "Print debugging messages of the feed update processing" msgstr "" " --debug-update Print debugging messages of the feed update processing" #: ../src/liferea_application.c:301 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr " --debug-cache Print debugging messages for the cache handling" #: ../src/liferea_application.c:302 #, fuzzy msgid "Print verbose debugging messages" msgstr " --debug-verbose Print verbose debugging messages" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 #, fuzzy msgid "Print debugging messages for the given topic" msgstr " --debug-cache Print debugging messages for the cache handling" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "" #: ../src/net.c:466 #, fuzzy msgid "Unable to connect to remote host" msgstr "Грешка во поврзувањето со адресата" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "" #. http 4xx client error #: ../src/net.c:474 #, fuzzy msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Немате дозвола за преземање на овие вести. Ве молам ажурирајте го Вашето " "корисничко име и лозинка во прозорецот за својства на веста." #: ../src/net.c:476 #, fuzzy msgid "Payment required" msgstr "Потребна е уплата" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Нема ресурси" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Методот не е дозволен" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Не е прифатливо" #: ../src/net.c:481 #, fuzzy msgid "Proxy authentication required" msgstr "Потребна е Proxy автентикација" #: ../src/net.c:482 #, fuzzy msgid "Request timed out" msgstr "Барањето истече" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Напуштено. Вестите не постојат. Ве молам избришете ја ставката!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Вестите се недостапни: Серверот сигнализираше неподдржано пренасочување!" #: ../src/net.c:492 msgid "Client Error" msgstr "Клиентска грешка" #: ../src/net.c:494 msgid "Server Error" msgstr "Грешка на опслужувачот" #: ../src/net.c:496 #, fuzzy msgid "An unknown networking error happened!" msgstr "(unknown error class)" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Предмет" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "содржи" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "не содржи" #: ../src/rule.c:175 msgid "Item title" msgstr "[Наслов на предметот]" #: ../src/rule.c:176 msgid "Item body" msgstr "Содржината на предметот" #: ../src/rule.c:177 msgid "Read status" msgstr "Статус (не)прочитано" #: ../src/rule.c:177 msgid "is unread" msgstr "е непрочитано" #: ../src/rule.c:177 msgid "is read" msgstr "е прочитано" #: ../src/rule.c:178 msgid "Flag status" msgstr "Статус на знаменце" #: ../src/rule.c:178 msgid "is flagged" msgstr "има знаменце" #: ../src/rule.c:178 msgid "is unflagged" msgstr "нема знаменце" #: ../src/rule.c:179 msgid "Podcast" msgstr "" #: ../src/rule.c:179 #, fuzzy msgid "included" msgstr "вклучена слика" #: ../src/rule.c:179 #, fuzzy msgid "not included" msgstr "вклучена слика" #: ../src/rule.c:180 #, fuzzy msgid "Category" msgstr "категорија" #: ../src/rule.c:180 #, fuzzy msgid "is set" msgstr "е прочитано" #: ../src/rule.c:180 msgid "is not set" msgstr "" #: ../src/rule.c:181 #, fuzzy msgid "Feed title" msgstr "[Наслов на предметот]" #: ../src/subscription.c:106 #, fuzzy, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Вестите \"%s\" веќе се ажурираат!" #: ../src/subscription.c:111 #, fuzzy, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "Овие вести нема повеќе да се ажуриаат!" #: ../src/subscription.c:145 #, fuzzy, c-format msgid "Updating favicon for \"%s\"" msgstr "Ажурирам \"%s\"" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "There was a problem while reading this subscription. Please check the URL " "and console output!" #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "URL адресата на \"%s\" е перманетно променета и ажурирана." #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" нема повеќе да се ажурира!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" не е променет од последеното ажурирање." #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Ажурирам \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Не можам да отворам пајп \"%s\"!" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Не може да се отвори датотеката \"%s\"!" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Грешка: Не постои датотеката \"%s\"!" #: ../src/vfolder.c:54 #, fuzzy msgid "New Search Folder" msgstr "Нова папка" #: ../src/xml.c:410 #, fuzzy msgid "[There were more errors. Output was truncated!]" msgstr "[Грешката од излезот на парсерот е скратена!]" #: ../src/xml.c:563 #, fuzzy msgid "XML Parser: Could not parse document:\n" msgstr "" "xmlReadMemory(): Не можам да го парсирам документот:\n" "%s%s" #: ../src/ui/enclosure_list_view.c:175 #, fuzzy msgid "Attachments" msgstr "коментари" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr "" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Одберете датотека" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Не можам да ја најдам pixmap датотеката: %s" #: ../src/ui/liferea_shell.c:404 #, fuzzy, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] "%d нов предмет!" msgstr[1] "%d нови предмети!" msgstr[2] "%d нови предмети!" #: ../src/ui/liferea_shell.c:409 #, fuzzy, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "е непрочитано" msgstr[1] "е непрочитано" msgstr[2] "е непрочитано" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "" #: ../src/ui/liferea_shell.c:772 #, fuzzy msgid "Quick Reference" msgstr "Уреди ги параметрите." #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Пребарување со Feedster" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Внесете корисник и лозинка за \"%s\" (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Непознат извор" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "_Ажурирај ги сите" #: ../src/ui/ui_common.c:211 #, fuzzy msgid "All Files" msgstr "_Датотека" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Лајфри е во офлајн режим. Нема можност за ажурирање." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Барај во сите вести." #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "/_Обележи сè како прочитанo" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Дали сте сигурни дека саката да избришете \"%s\"?" #: ../src/ui/item_list_view.c:113 #, fuzzy msgid "This item has no link specified!" msgstr "Предметот нема означено врска!" #: ../src/ui/item_list_view.c:484 #, fuzzy msgid "*** No title ***" msgstr "[Без наслов]" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Наслов" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Датум" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Мора да одбереш вест за бришење на ставките!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Нема означени ставки!" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "" #: ../src/ui/popup_menu.c:111 #, fuzzy msgid "_Open In Browser" msgstr "_Отвори во прелистувач" #: ../src/ui/popup_menu.c:115 #, fuzzy msgid "Open In _External Browser" msgstr "Подесувања за надворешниот прелистувач" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "" #: ../src/ui/popup_menu.c:153 #, fuzzy msgid "Copy Item _Location" msgstr "/_Копирај ја локацијата на врската" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Промени статус во (не)прочитано" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Промени го _знаменцето" #: ../src/ui/popup_menu.c:170 #, fuzzy msgid "R_emove Item" msgstr "/Отстрани го предметот" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "" #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "" #: ../src/ui/popup_menu.c:202 #, fuzzy msgid "Copy Link Location" msgstr "/_Копирај ја локацијата на врската" #: ../src/ui/popup_menu.c:280 #, fuzzy msgid "_Update" msgstr "/_Ажурирај" #: ../src/ui/popup_menu.c:282 #, fuzzy msgid "_Update Folder" msgstr "/_Ажурирај" #: ../src/ui/popup_menu.c:292 #, fuzzy msgid "New _Subscription..." msgstr "_Нова претплата..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "_Нова папка..." #: ../src/ui/popup_menu.c:298 #, fuzzy msgid "New S_earch Folder..." msgstr "_Нова папка..." #: ../src/ui/popup_menu.c:299 #, fuzzy msgid "New S_ource..." msgstr "_Нова папка..." #: ../src/ui/popup_menu.c:300 #, fuzzy msgid "New _News Bin..." msgstr "_Нова папка..." #: ../src/ui/popup_menu.c:303 #, fuzzy msgid "_New" msgstr "/_Нова" #: ../src/ui/popup_menu.c:312 #, fuzzy msgid "Sort Feeds" msgstr "Увези листа на вести" #: ../src/ui/popup_menu.c:320 #, fuzzy msgid "_Mark All As Read" msgstr "/_Обележи сè како прочитанo" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 #, fuzzy msgid "_Delete" msgstr "/_Избриши вест" #: ../src/ui/popup_menu.c:336 #, fuzzy msgid "_Properties" msgstr "_Својства..." #: ../src/ui/popup_menu.c:343 #, fuzzy msgid "Convert To Local Subscriptions..." msgstr "_Нова претплата..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 #, fuzzy msgid "minutes" msgstr "минути." #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Space" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Space" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Space" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "" #: ../src/ui/preferences_dialog.c:113 #, fuzzy msgid "Wide View" msgstr "_Поглед" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Combined View" msgstr "Промени _компактност на преглед" #: ../src/ui/preferences_dialog.c:476 #, fuzzy msgid "Default Browser" msgstr "Прелистувач" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Рачно" #: ../src/ui/preferences_dialog.c:725 #, fuzzy msgid "Type" msgstr "вид" #: ../src/ui/preferences_dialog.c:728 #, fuzzy msgid "Program" msgstr "_Апликација" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Бришење на вестите" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Дали сте сигурни дека сакате да избришете \"%s\" и целата содржина?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Дали сте сигурни дека саката да избришете \"%s\"?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Потврда за бришење" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Потврда за бришење" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, fuzzy, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "Опслужувачот на овие вести сугерира време на ажурирање од %d минути" msgstr[1] "Опслужувачот на овие вести сугерира време на ажурирање од %d минути" msgstr[2] "Опслужувачот на овие вести сугерира време на ажурирање од %d минути" #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Овие вести немаат информација за време на ажурирање." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Без наслов" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Нова претплата" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "" #: ../src/fl_sources/opml_source.c:379 #, fuzzy msgid "Choose OPML File" msgstr "Одберете датотека" #: ../src/fl_sources/opml_source.h:28 #, fuzzy msgid "New OPML Subscription" msgstr "Нова претплата" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "" #: ../src/fl_sources/node_source.c:363 #, fuzzy msgid "Source Type" msgstr "Тип на правило:" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Кеш за вести" #: ../src/webkit/liferea_web_view.c:175 #, fuzzy msgid "Open Link In _Tab" msgstr "/_Отвори во прелистувач" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "/_Отвори во прелистувач" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "/_Отвори во прелистувач" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "" #: ../src/webkit/liferea_web_view.c:190 #, fuzzy msgid "_Copy Link Location" msgstr "/_Копирај ја локацијата на врската" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "_Поглед" #: ../src/webkit/liferea_web_view.c:194 #, fuzzy msgid "_Copy Image Location" msgstr "/_Копирај ја локацијата на врската" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "" #: ../src/webkit/liferea_web_view.c:207 #, fuzzy msgid "_Subscribe..." msgstr "/_Претплати се..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "_Зголеми го текстот" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Намали го текстот" #: ../glade/about.ui.h:1 msgid "About" msgstr "За" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Лајфри е прелистувач на вести за ГТК+" #: ../glade/about.ui.h:3 #, fuzzy msgid "Liferea Homepage" msgstr "Помош за Лајфри" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Автентикација" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "Корисничко _име:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Лозинка:" #: ../glade/enclosure_handler.ui.h:1 #, fuzzy msgid "Open Enclosure" msgstr "Преглед на наслови" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" #: ../glade/enclosure_handler.ui.h:4 #, fuzzy msgid "_Browse" msgstr "_Прелистувач:" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "" #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "" #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 #, fuzzy msgid "_Password" msgstr "_Лозинка:" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 #, fuzzy msgid "View Headlines" msgstr "Читај вести со" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 #, fuzzy msgid "Headlines" msgstr "Наслов" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "/_Обележи сè како прочитанo" #: ../glade/mark_read_dialog.ui.h:2 #, fuzzy msgid "Mark all as read" msgstr "/_Обележи сè како прочитанo" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Нова папка" #: ../glade/new_folder.ui.h:2 #, fuzzy msgid "_Folder name:" msgstr "Папка:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Адреса" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Тип на правило:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_Адреса" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Команда" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 #, fuzzy msgid "_Local File" msgstr "_Датотека" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Избери датотека..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 #, fuzzy msgid "_Source:" msgstr "Извор:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 #, fuzzy msgid "Use conversion _filter" msgstr "Користи филтер за конверзија" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Лајфри може да користи надворешни филтри за пристап кон вести во неподдржан " "формат. Прочитајте ја документацијата за повеќе информации." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 #, fuzzy msgid "Convert _using:" msgstr "Конвертирај со:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "" #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" #: ../glade/opml_source.ui.h:3 #, fuzzy msgid "_Location" msgstr "/_Копирај ја локацијата на врската" #: ../glade/opml_source.ui.h:4 #, fuzzy msgid "_Select File" msgstr "Избери д_атотека..." #: ../glade/prefs.ui.h:1 #, fuzzy msgid "Liferea Preferences" msgstr "Параметри на Лајфри" #: ../glade/prefs.ui.h:2 #, fuzzy msgid "Feed Cache Handling" msgstr "Работа со вести" #: ../glade/prefs.ui.h:3 #, fuzzy msgid "Default _number of items per feed to save:" msgstr "Стандарден број на предмети од вестите за трајно паметење:" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "Feed Update Settings" msgstr "Кеш за вести" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 #, fuzzy msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Забелешка: Ве молам внесете разумна вредност на интервалот. Не е добро да " "се ажурираат вестите на секои 15 минути. Наместете 0 минути доколку не " "сакате автоматско ажурирање." #: ../glade/prefs.ui.h:8 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Додај нова претплата." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Стандарден _интервал за ажурирање на вестите:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 #, fuzzy msgid "Feeds" msgstr "_Вести" #: ../glade/prefs.ui.h:12 #, fuzzy msgid "Folder Display Settings" msgstr "Подесувања за ажурирање на вестите" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "" #: ../glade/prefs.ui.h:14 #, fuzzy msgid "_Hide read items." msgstr "_Следна непрочитана вест" #: ../glade/prefs.ui.h:15 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Подесувања за вчитување на вестите" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "_Update all favicons now" msgstr "Ажурирај ги сите вести" #: ../glade/prefs.ui.h:17 #, fuzzy msgid "Folders" msgstr "В-папка" #: ../glade/prefs.ui.h:18 #, fuzzy msgid "Reading Headlines" msgstr "Наслов" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "_Skim through articles with:" msgstr "Шетај низ вестите со " #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:21 #, fuzzy msgid "Web Integration" msgstr "Автентикација" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "" #: ../glade/prefs.ui.h:24 #, fuzzy msgid "Internal Browser Settings" msgstr "Подесувања за надворешниот прелистувач" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Ги отвора _прозорците во Лајфри." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "" #: ../glade/prefs.ui.h:27 #, fuzzy msgid "_Enable browser plugins." msgstr "Подесувања за надворешниот прелистувач" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "External Browser Settings" msgstr "Подесувања за надворешниот прелистувач" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Прелистувач:" #: ../glade/prefs.ui.h:30 #, fuzzy msgid "_Manual:" msgstr "Рачно" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Browser" msgstr "_Прелистувач:" #: ../glade/prefs.ui.h:34 #, fuzzy msgid "Toolbar Settings" msgstr "Подесувања за ажурирање на вестите" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "" #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "" #: ../glade/prefs.ui.h:42 #, fuzzy msgid "_No Proxy" msgstr "Прокси порта" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Адреса на прокси:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "Порта на _прокси:" #: ../glade/prefs.ui.h:46 #, fuzzy msgid "Use Proxy Au_thentication" msgstr "Користи прокси _автентикација" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Корисничко _име на прокси:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "_Лозинка на прокси:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Прокси порта" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Подесувања за ажурирање на вестите" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 #, fuzzy msgid "Downloading Enclosures" msgstr "Преглед на наслови" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 #, fuzzy msgid "Opening Enclosures" msgstr "Преглед на наслови" #: ../glade/prefs.ui.h:59 #, fuzzy msgid "Enclosures" msgstr "Преглед на наслови" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Својства на претплати" #: ../glade/properties.ui.h:2 #, fuzzy msgid "Feed Name" msgstr "Наслов на _вестите:" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "Наслов на _вестите:" #: ../glade/properties.ui.h:4 #, fuzzy msgid "Update Interval" msgstr "/_Ажурирај" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Користи го стандардниот интервал за ажурирање." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_Интервалот за ажурирање на овие вести е" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Не ги ажурирај автоматски овие вести" #: ../glade/properties.ui.h:10 #, fuzzy, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Опслужувачот на овие вести сугерира време на ажурирање од %d секунди." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Општо" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Лајфри може да користи надворешни филтри за пристап кон вести во неподдржан " "формат. Прочитајте ја документацијата за повеќе информации." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Подесувањата за кешот контролираат дали содржината на вестите ќе биде " "зачувана при излез од Лајфри. Означените ставки се секогаш снимени во кешот." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "_Стандардни подесувања за кешот" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "О_невозможи кеширање" #: ../glade/properties.ui.h:26 #, fuzzy msgid "_Unlimited cache" msgstr "_Неограничено кеширање" #: ../glade/properties.ui.h:27 #, fuzzy msgid "_Number of items to save:" msgstr "Стандарден број на предмети од вестите за трајно паметење:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Користи HTTP _автентикација" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "" #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" #: ../glade/properties.ui.h:37 #, fuzzy msgid "Ignore _comment feeds for this subscription." msgstr "Го отвора дијалогот за параметри на означените вести." #: ../glade/properties.ui.h:38 #, fuzzy msgid "_Mark downloaded items as read." msgstr "/_Обележи сè како прочитанo" #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "" #: ../glade/rename_node.ui.h:1 #, fuzzy msgid "Rename" msgstr "Преименувај папка" #: ../glade/rename_node.ui.h:2 #, fuzzy msgid "_New Name:" msgstr "Наслов на _вестите:" #: ../glade/search_folder.ui.h:1 #, fuzzy msgid "Search Folder Properties" msgstr "Својства на В-папката" #: ../glade/search_folder.ui.h:2 #, fuzzy msgid "Search _Name:" msgstr "Наслов на _вестите:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "" #: ../glade/search.ui.h:1 #, fuzzy msgid "Advanced Search" msgstr "Пребарување со Feedster" #: ../glade/search.ui.h:2 #, fuzzy msgid "_Search Folder..." msgstr "/_Преименувај папка..." #: ../glade/simple_search.ui.h:1 #, fuzzy msgid "Search All Feeds" msgstr "Барај во сите вести." #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "" #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" #: ../glade/simple_search.ui.h:4 #, fuzzy msgid "_Search for:" msgstr "Барај за" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "" #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "" #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "" #: ../glade/ttrss_source.ui.h:3 #, fuzzy msgid "_Server URL" msgstr "Грешка на опслужувачот" #: ../glade/ttrss_source.ui.h:5 #, fuzzy msgid "_Username" msgstr "Корисничко _име:" #: ../glade/update_monitor.ui.h:1 #, fuzzy msgid "Update Monitor" msgstr "/_Ажурирај" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "_Ажурирај ги сите" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "" #, fuzzy #~ msgid "_Subscriptions" #~ msgstr "Нова претплата" #~ msgid "Update _All" #~ msgstr "_Ажурирај ги сите" #, fuzzy #~ msgid "Updates all subscriptions." #~ msgstr "Додај нова претплата." #, fuzzy #~ msgid "Mark All As _Read" #~ msgstr "/_Обележи сè како прочитанo" #~ msgid "_Import Feed List..." #~ msgstr "_Увези листа на вести..." #~ msgid "Imports an OPML feed list." #~ msgstr "Увезува OPML листа на вести." #~ msgid "_Export Feed List..." #~ msgstr "_Извези листа на вести..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Ја извезува листата на вести како OPML." #, fuzzy #~ msgid "_Quit" #~ msgstr "/_Излез" #, fuzzy #~ msgid "_Feed" #~ msgstr "_Вести" #, fuzzy #~ msgid "Remove _All Items" #~ msgstr "Отстрани ги сите" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Ги отстранува сите предмети од тековните вести." #, fuzzy #~ msgid "_Item" #~ msgstr "_Предмети" #, fuzzy #~ msgid "Next Item" #~ msgstr "_Следна непрочитана вест" #~ msgid "_Next Unread Item" #~ msgstr "_Следна непрочитана вест" #~ msgid "_View" #~ msgstr "_Поглед" #~ msgid "Increases the text size of the item view." #~ msgstr "Го зголемуива текстот во делот за читање на вестите." #~ msgid "Decreases the text size of the item view." #~ msgstr "Го намалува текстот во делот за читање на вестите." #, fuzzy #~ msgid "_Update Monitor" #~ msgstr "/_Ажурирај" #, fuzzy #~ msgid "_Preferences" #~ msgstr "Параметри" #, fuzzy #~ msgid "Edit Preferences." #~ msgstr "Уреди ги параметрите." #, fuzzy #~ msgid "S_earch" #~ msgstr "Пребарувај" #, fuzzy #~ msgid "Search All Feeds..." #~ msgstr "Барај во сите вести." #, fuzzy #~ msgid "Show the search dialog." #~ msgstr "Ја покажува или сокрива лентата за барање." #~ msgid "_Help" #~ msgstr "_Помош" #, fuzzy #~ msgid "_Quick Reference" #~ msgstr "Уреди ги параметрите." #, fuzzy #~ msgid "_About" #~ msgstr "За" #~ msgid "Shows an about dialog." #~ msgstr "Го покажува дијалогот за заслуги." #, fuzzy #~ msgid "_Wide View" #~ msgstr "_Поглед" #, fuzzy #~ msgid "_Combined View" #~ msgstr "Промени _компактност на преглед" #, fuzzy #~ msgid "Hide feeds with no unread items." #~ msgstr "Ако е активно, сите вести со прочитани ставки се скриени." #~ msgid "_New Subscription..." #~ msgstr "_Нова претплата..." #, fuzzy #~ msgid "Adds a subscription to the feed list." #~ msgstr "Додај нова претплата." #, fuzzy #~ msgid "New _Source..." #~ msgstr "_Нова папка..." #, fuzzy #~ msgid "Adds a new news bin." #~ msgstr "Додај нова претплата." #, fuzzy #~ msgid "_Mark Items Read" #~ msgstr "_Обележи како прочитано" #, fuzzy #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Означи ги сите вести во означената ставка како прочитани или сите вести " #~ "во означената папка." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "Ги ажурира означените ставки или сите ставки во означената папка." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Го отвора дијалогот за параметри на означените вести." #, fuzzy #~ msgid "_Remove" #~ msgstr "Отстрани ги сите" #~ msgid "Removes the selected subscription." #~ msgstr "Отстранува вести, односно нивното ажурирање." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Го менува статусот на прочитано на означениот предмет." #, fuzzy #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Го менува статусот на прочитано на означениот предмет." #, fuzzy #~ msgid "R_emove" #~ msgstr "/Отстрани го предметот" #~ msgid "Removes the selected item." #~ msgstr "Ја отстранува избраната ставка" #, fuzzy #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Ја отвора врската на предметот во наместениот веб прелистувач." #, fuzzy #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Ја отвора врската на предметот во наместениот веб прелистувач." #, fuzzy #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Ја отвора врската на предметот во наместениот веб прелистувач." #, fuzzy #~ msgid "_Work Offline" #~ msgstr "Работете офлајн" #, fuzzy #~ msgid "_Update All" #~ msgstr "/_Ажурирај ги сите" #, fuzzy #~ msgid "_Show Liferea" #~ msgstr "Помош за Лајфри" #, fuzzy #~ msgid "InoReader" #~ msgstr "Кеш за вести" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Забелешка: Корисничкото име и лозинката ќе бидат зачувани во " #~ "датотеката за листата на вести без енкрипција." #, fuzzy #~ msgid "_Open Link In Browser" #~ msgstr "/_Отвори во прелистувач" #, fuzzy #~ msgid "_Open Link In External Browser" #~ msgstr "/_Отвори во прелистувач" #~ msgid " " #~ msgstr " " #~ msgid "enter any search string you want" #~ msgstr "внеси некој текст за барање" #, fuzzy #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "Максимален број на резултати" #, fuzzy #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Note: Лајфри will generate a feed subscription which is used to query the " #~ "Feedster results for the specified search string. You can keep this feed " #~ "permanently and update it like any other subscription. " #~ msgid "Liferea is now online" #~ msgstr "Лајфри e поврзана." #, fuzzy #~ msgid "Work Offline" #~ msgstr "Работете офлајн" #~ msgid "Liferea is now offline" #~ msgstr "Лајфри е исклучена" #, fuzzy #~ msgid "Work Online" #~ msgstr "Работете офлајн" #~ msgid "Browser default" #~ msgstr "Стандардни од прелистувачот" #~ msgid "Existing window" #~ msgstr "Тековниот прозорец" #~ msgid "New window" #~ msgstr "Нов прозорец" #~ msgid "New tab" #~ msgstr "Ново јазиче" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Кеш за вести" #~ msgid "_Open link in:" #~ msgstr "_Отвори ја врската во:" #, fuzzy #~ msgid "No comments yet." #~ msgstr "коментари" #, fuzzy #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d нов предмет!" #~ msgstr[1] "%d нови предмети!" #~ msgstr[2] "%d нови предмети!" #, fuzzy #~ msgid "No new items" #~ msgstr "Нема нови предмети." #, fuzzy #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "%d нов предмет!" #~ msgstr[1] "%d нови предмети!" #~ msgstr[2] "%d нови предмети!" #, fuzzy #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "%d нов предмет!" #, fuzzy #~ msgid "This feed does not exist anymore!" #~ msgstr "Предметот нема означено врска!" #, fuzzy #~ msgid "Feed Update" #~ msgstr "Кеш за вести" #, fuzzy #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "Го отвора дијалогот за параметри на означените вести." #, fuzzy #~ msgid "Notification Settings" #~ msgstr "Подесувања за известување" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Покажи мал _прозорец со новите наслови." #, fuzzy #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "" #~ "Покажи икона за статус во местото за известување \n" #~ "(познато како „фиока“)." #, fuzzy #~ msgid "Launch Item In _Tab" #~ msgstr "/_Отвори ја ставката во прелистувач" #, fuzzy #~ msgid "_Launch Item In Browser" #~ msgstr "/_Отвори ја ставката во прелистувач" #~ msgid "comments" #~ msgstr "коментари" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Рачно:\n" #~ "(%s за адреса)" #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Прескокни до следниот непрочитан предмет. По потреба, се преминува на " #~ "следните вести со непрочитани предмети." #, fuzzy #~ msgid "Liferea Sync %s@%s" #~ msgstr "Вести за Лајфри на Сорсфорџ" #, fuzzy #~ msgid "Print debugging messages for the plugin loading" #~ msgstr " --debug-cache Print debugging messages for the cache handling" #, fuzzy #~ msgid "Update status" #~ msgstr "Статус (не)прочитано" #, fuzzy #~ msgid "was updated" #~ msgstr "\"%s\" ажурирано..." #, fuzzy #~ msgid "was not updated" #~ msgstr "содржината е ажурирана" #, fuzzy #~ msgid "reference_en.html" #~ msgstr "Параметри" #, fuzzy #~ msgid "faq_en.html" #~ msgstr "Параметри" #, fuzzy #~ msgid "Search With ..." #~ msgstr "Барај со Feedster..." # src/ui_search.c:69 #, c-format #, fuzzy #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "Пребарување за \"%s\"" #~ msgstr[1] "Пребарување за \"%s\"" #~ msgstr[2] "Пребарување за \"%s\"" #, fuzzy #~ msgid "Count" #~ msgstr "За" #~ msgid "You have to select a feed entry" #~ msgstr "Мора да одзберете вест!" #~ msgid "(empty)" #~ msgstr "(празно)" #~ msgid "_Properties..." #~ msgstr "_Својства..." #, fuzzy #~ msgid "Update out-dated feeds" #~ msgstr "Ажурирај ги сите вести" #, fuzzy #~ msgid "Force update of all feeds" #~ msgstr "Ажурирај ги сите вести" #, fuzzy #~ msgid "startup" #~ msgstr "На _почеток:" #, fuzzy #~ msgid "feed added" #~ msgstr "Кеш за вести" #, fuzzy #~ msgid "item selected" #~ msgstr "_Ажурирај вест" #, fuzzy #~ msgid "feed selected" #~ msgstr "_Избриши вест" #, fuzzy #~ msgid "item unselected" #~ msgstr "Нема означени ставки!" #, fuzzy #~ msgid "feed unselected" #~ msgstr "_Избриши вест" #, fuzzy #~ msgid "Sorry, no scripting support available!" #~ msgstr "Нема достапен опис." #, fuzzy #~ msgid "No script selected!" #~ msgstr "Нема означени ставки!" #, fuzzy #~ msgid "Create a new search feed." #~ msgstr "Креира вест за пребарување со Feedster." #~ msgid "feedlist.opml" #~ msgstr "feedlist.opml" #~ msgid " " #~ msgstr " " #, fuzzy #~ msgid " " #~ msgstr " " #, fuzzy #~ msgid " " #~ msgstr " " #~ msgid "Feed Source" #~ msgstr "Адреса" #, fuzzy #~ msgid "Registered Scripts" #~ msgstr "Адреса" #~ msgid "Feed Cache Handling" #~ msgstr "Подесувања за работа со кеширање" #~ msgid "Feed Name" #~ msgstr "Наслов на вестите" #~ msgid "Feed Update Settings" #~ msgstr "Подесувања за ажурирање на вестите" #~ msgid "HTTP Proxy Server" #~ msgstr "HTTP сервер за прокси" #, fuzzy #~ msgid "Opening Enclosures" #~ msgstr "Преглед на наслови" #, fuzzy #~ msgid "Reading Headlines" #~ msgstr "Преглед на наслови" #, fuzzy #~ msgid "Toolbar Settings" #~ msgstr "Подесувања за менито" #~ msgid "Update Interval" #~ msgstr "Интервал за ажурирање" #, fuzzy #~ msgid "Web Integration" #~ msgstr "Интервал за ажурирање" #~ msgid "At _startup:" #~ msgstr "На _почеток:" #, fuzzy #~ msgid "Attention Profile" #~ msgstr "Автентификацијата не успеа" #, fuzzy #~ msgid "Create new script" #~ msgstr "Додај нова претплата." #, fuzzy #~ msgid "Exec Command" #~ msgstr "_Команда" #, fuzzy #~ msgid "http://lzone.de/liferea/" #~ msgstr "http://lzone.de/liferea/help/help" #~ msgid "internal error! time conversion error! mktime failed!\n" #~ msgstr "грешка при конверзија на времето! mktime е неуспешно!\n" #~ msgid "Invalid ISO8601 date format! Ignoring information!\n" #~ msgstr "Invalid ISO8601 date format! Ignoring information!\n" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #, fuzzy #~ msgid "" #~ "

        Could not determine the feed type. Please check that it is valid and in a supported format.

        " #~ msgstr "" #~ "

        Не можам да го одредам типот на веста. Ве молам проверете дали е правилен и дали форматот е поддржан.

        " #~ msgid "" #~ "Error while reading cache file \"%s\" ! Cache file could not be loaded!" #~ msgstr "" #~ "Грешка при читање на кеш датотеката \"%s\" ! Кеш датотеката не е вчитана!" #~ msgid "" #~ "

        XML error while parsing cache file! Feed cache file \"%s\" could not " #~ "be loaded!

        " #~ msgstr "" #~ "

        XML error while parsing cache file! Feed cache file \"%s\" could not " #~ "be loaded!

        " #~ msgid "

        \"%s\" is no valid cache file! Cannot read cache file!

        " #~ msgstr "

        \"%s\" is no valid cache file! Cannot read cache file!

        " #~ msgid "There were errors while parsing cache file \"%s\"" #~ msgstr "There were errors while parsing cache file \"%s\"!" #~ msgid "user defined command" #~ msgstr "кориснички дефинирана команда" #~ msgid "Access Forbidden" #~ msgstr "Забранет пристап" #~ msgid "URL is invalid" #~ msgstr "Адресата е невалидна" #~ msgid "Hostname could not be found" #~ msgstr "Не можам да ја најдам адресата" #~ msgid "Network connection was refused by the remote host" #~ msgstr "Одбиена е врската со адресата" #~ msgid "Remote host did not finish sending data" #~ msgstr "Серверот не успеа да заврши со праќање на податоците" #~ msgid "Too many HTTP redirects were encountered" #~ msgstr "Премногу пренасочувања на ХТТП се забележани" #~ msgid "Remote host sent an invalid response" #~ msgstr "Оддалечениот хост испрати неправилен одговор!" #~ msgid "Webserver's authentication method incompatible with Liferea" #~ msgstr "Начинот на автентикација на серверот е некомпатибилен со Лајфри" #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "Автоматското откривање на вестите е неуспешно." #~ msgid "_Program" #~ msgstr "_Апликација" #~ msgid "Updates all subscriptions. This does not update OCS directories." #~ msgstr "Веднаш ажурирај ги сите вести (без папките)." #~ msgid "" #~ "Marks all items of the current selected subscription or all of " #~ "subscriptions of the selected folder as read." #~ msgstr "" #~ "Означи ги сите наслови за означените вести како прочитани или сите вести " #~ "во означената папка." #, fuzzy #~ msgid "New _VFolder..." #~ msgstr "_Нова папка..." #~ msgid "Toggles the item flag." #~ msgstr "Го менува знаменцето на предметот." #, fuzzy #~ msgid "Remove _Selected" #~ msgstr "Отстрани ја избраната" #~ msgid "Toggles the item list mode between condensed and normal mode." #~ msgstr "" #~ "Го менува режимот на подредување на ставките помеѓу нормален и минимален." #~ msgid "_Search" #~ msgstr "_Пребарај" #~ msgid "single item view" #~ msgstr "единечна листа на предмети" #~ msgid "label133" #~ msgstr "label133" #~ msgid "_Limit cache to" #~ msgstr "О_граничи го кешот на" #~ msgid "items." #~ msgstr "предмети." #~ msgid "Feed Loading Settings" #~ msgstr "Подесувања за вчитување на вестите" #~ msgid "Date Column Settings" #~ msgstr "Подесувања за колоната за датум" #~ msgid "Display only time" #~ msgstr "Прикажи само време" #~ msgid "Display date and time" #~ msgstr "Прикажи датум и време" #~ msgid "User defined format:" #~ msgstr "Кориснички дефиниран формат:" #~ msgid "" #~ "for expert users: specify a time format string, consult the strftime() " #~ "manpage for the format codes" #~ msgstr "" #~ "за напредни корисници: наведете формат на времето, погледнете ја " #~ "strftime() manpage за кодови на форматот" #, fuzzy #~ msgid " " #~ msgstr " " #, fuzzy #~ msgid "Lower Right" #~ msgstr "авторски права" #, fuzzy #~ msgid "Upper Right" #~ msgstr "авторски права" #, fuzzy #~ msgid "Lower Left" #~ msgstr "Стандардни од прелистувачот" #~ msgid "Show Menu _And Toolbar" #~ msgstr "Прикажи Мени и _Алатник" #~ msgid "Show _Menu Only" #~ msgstr "Прикажи само _Мени" #~ msgid "Show _Toolbar Only" #~ msgstr "Прикажи само А_латник" #, fuzzy #~ msgid "" #~ "Liferea reuses the GNOME proxy settings. If you use GNOME you can " #~ "change these settings in the GNOME Control Center." #~ msgstr "" #~ "Лајфри ги користи подесувањата на Гном за прокси. Ако користите Гном може " #~ "да ги промените овие подесувања во Контролен центар на Гном. Забелешка: " #~ "промената на овие подесувања ќе влијае врз други апликации! Овој дијалог " #~ "е примарно за корисници без Гном кои сакаат да ја користат Лајфри преку " #~ "прокси." #~ msgid "_Enable Proxy" #~ msgstr "Овозможи _Proxy" #, fuzzy #~ msgid "Browse" #~ msgstr "_Прелистувач:" #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2005\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgstr "" #~ "Авторски права (c) 2003-2004 \n" #~ "Lars Lindner и \n" #~ "Nathan J. Conrad \n" #, fuzzy #~ msgid "" #~ "Code, Patches, Debugging\n" #~ "\n" #~ "James Doherty <...>\n" #~ "Jeremy Messenger \n" #~ "John McKnight <...>\n" #~ "Tomasz Maka \n" #~ "Karl Soderstrom \t\n" #~ "Christophe Barbe \n" #~ "Juho Snellman \n" #~ "Roshan Revankar \n" #~ "Oliver Feiler \n" #~ "Niklas Morberg \n" #~ "Johannes Schlueter \n" #~ "Pierre Phaneuf \n" #~ "ahmed el-helw \n" #~ "James Bowes \n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary \n" #~ "Christoph Hohmann \n" #~ "Raphael Slinckx \n" #~ "and many more...\n" #~ "\n" #~ "Code from other projects\n" #~ "\n" #~ "Anders Carlsson (tray icon support)\n" #~ "Philippe Martin, Brion Vibber (favicon support)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)" #~ msgstr "" #~ "Code, Patches, Debugging\n" #~ "\n" #~ "James Doherty <...>\n" #~ "Jeremy Messenger \n" #~ "John McKnight <...>\n" #~ "Tomasz Maka \n" #~ "Karl Soderstrom \t\n" #~ "Christophe Barbe \n" #~ "Juho Snellman \n" #~ "Roshan Revankar \n" #~ "Oliver Feiler \n" #~ "Niklas Morberg \n" #~ "Johannes Schlueter \n" #~ "Pierre Phaneuf \n" #~ "ahmed el-helw \n" #~ "\n" #~ "Код од други проекти\n" #~ "\n" #~ "Anders Carlsson (tray icon support)\n" #~ "Philippe Martin, Brion Vibber (favicon support)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)" #~ msgid "Contributors" #~ msgstr "Соработници" #~ msgid "Translation" #~ msgstr "Превод" #~ msgid "Name" #~ msgstr "Наслов" #~ msgid "" #~ "Note: Items are added to the vfolder if at least one additive rule\n" #~ "matches. They are removed if at least one removing rule matches." #~ msgstr "" #~ "Забелешка: ставките се додадени во в-папката доколку барем едно адитивно\n" #~ "правило се совпаѓа, а се отстранети доколку барем субтрактивно правило се " #~ "совпаѓа." #~ msgid "Rules" #~ msgstr "Правила" #~ msgid "Search for" #~ msgstr "Барај за" #, fuzzy #~ msgid "Saves this search as a VFolder, which will appear in the feed list." #~ msgstr "saves this search as a VFolder, which will appear in the feed list" #~ msgid "Item:" #~ msgstr "Предмети:" #, fuzzy #~ msgid "date" #~ msgstr "Датум" #, fuzzy #~ msgid " --help Print this help and exit" #~ msgstr " --help Покажи ја оваа порака и излези" #, fuzzy #~ msgid "The --mainwindow-state argument must be given a parameter.\n" #~ msgstr "Аргументот --session мора да има барем еден параметар.\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "Аргументот --session мора да има барем еден параметар.\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "Лајфри наиде на непознат аргумент: %s\n" #, fuzzy #~ msgid "" #~ "Another copy of Liferea was found to be running. Please use it instead. " #~ "If there is no other copy of Liferea running, please delete the \"~/." #~ "liferea/lock\" lock file." #~ msgstr "" #~ "Друга копија на Лајфри е пронајдена. Ве молам користете ја истата. " #~ "Доколку не постои друга копија, избришете ја датотеката \"~/.liferea/lock" #~ "\"." #~ msgid "feed generator" #~ msgstr "генератор на вести" #~ msgid "contributors" #~ msgstr "заслуги" #~ msgid "language" #~ msgstr "јазик" #~ msgid "feed published on" #~ msgstr "веста е објавена во" #~ msgid "managing editor" #~ msgstr "managing editor" #~ msgid "webmaster" #~ msgstr "webmaster" #~ msgid "report errors to" #~ msgstr "пријавете грешка на" #~ msgid "original source" #~ msgstr "оригинален извор" #~ msgid "original time" #~ msgstr "оригинално време" #~ msgid "license" #~ msgstr "лиценца" #~ msgid "type" #~ msgstr "вид" #~ msgid "format" #~ msgstr "формат" #~ msgid "identifier" #~ msgstr "идентификувач" #~ msgid "source" #~ msgstr "извор" #~ msgid "coverage" #~ msgstr "coverage" #~ msgid "internal OCS namespace parsing error!" #~ msgstr "internal OCS namespace parsing error!" #~ msgid "no namespace handler for <%s:%s>!\n" #~ msgstr "нема namespace handler за <%s:%s>!\n" #~ msgid "

        Could not find RDF header!

        " #~ msgstr "

        Не постои RDF хедер!

        " #~ msgid "

        Could not find OPML header!

        " #~ msgstr "

        Не постои OPML хедер!

        " #~ msgid "

        Could not find Atom/Echo/PIE header!

        " #~ msgstr "

        Не можам да најдам Atom/Echo/PIE хедер!

        " #~ msgid "

        Could not find RDF/RSS header!

        " #~ msgstr "

        Could not find RDF/RSS header!

        " #~ msgid "does match" #~ msgstr "се совпаѓа" #~ msgid "does not match" #~ msgstr "не се совпаѓа" #~ msgid "Note: Using the subscriptions filter disables drag & drop" #~ msgstr "" #~ "Забелешка: Користењето на филтерот ја оневозможува можноста „влечи и " #~ "пушти“" #~ msgid "You must select a feed entry" #~ msgstr "Мора да одзберете вест!" #~ msgid "You must select a feed entry." #~ msgstr "Мора да одберете вест!" #~ msgid "A folder must be selected." #~ msgstr "Папката мора да е празна за да ја избришете!" #~ msgid "" #~ "internal error! unknown entry type! cannot display appropriate icon!\n" #~ msgstr "" #~ "internal error! unknown entry type! cannot display appropriate icon!\n" #~ msgid "" #~ "\n" #~ "Trying to load the Mozilla browser module... Note that this\n" #~ "might not work with every Mozilla version. If you have problems\n" #~ "and Liferea does not start, try to set MOZILLA_FIVE_HOME to\n" #~ "another Mozilla installation or delete the gconf configuration\n" #~ "key /apps/liferea/browser-module!\n" #~ "\n" #~ msgstr "" #~ "\n" #~ "Се обидувам да го вчитам Мозила модулот... Ова може\n" #~ "да не работи со сите верзии на Мозила. If you have problems\n" #~ "and лајфри does not start try to set MOZILLA_FIVE_HOME to\n" #~ "another Mozilla installation or\tdelete the gconf configuration\n" #~ "key /apps/liferea/browser-module!\n" #~ "\n" #~ msgid "" #~ "Failed to open HTML widget module (%s) specified in configuration!\n" #~ "%s\n" #~ msgstr "" #~ "Не можам да го отворам модулот за HTML (%s) кој е наведен во " #~ "конфигурацијата!\n" #~ "%s\n" #~ msgid "Htmlview API mismatch!" #~ msgstr "Грешка во Htmlview API!" #~ msgid "Detected module is not a valid htmlview module!" #~ msgstr "Најдениот модул не е валиден htmlview модул!" #~ msgid "Cannot load HTML widget module (%s)!" #~ msgstr "Не можам да го вчитам HTML модулот (%s)!" #~ msgid "Available browser modules (%s):\n" #~ msgstr "Достапни модули на прелистувачи (%s):\n" #~ msgid "Loading configured browser module (%s)!\n" #~ msgstr "Се вчитува модулот за прелистувач (%s)!\n" #~ msgid "No browser module configured!\n" #~ msgstr "Не е конфигуриран модулот за прелистувач!\n" #~ msgid "trying to load browser module %s (%s)\n" #~ msgstr "се вчитува модулот за прелистувач %s (%s)\n" #~ msgid "" #~ "Sorry, I was not able to load any installed browser modules! Try the --" #~ "debug-all option to get debug information!" #~ msgstr "" #~ "Sorry, I was not able to load any installed browser modules! Try the --" #~ "debug-all option to get debug information!" #~ msgid "New Feed" #~ msgstr "Нова вест" #~ msgid "Next Unread" #~ msgstr "Следно непрочитано" #~ msgid "Mark As Read" #~ msgstr "Обележи како прочитани" #~ msgid "Update All" #~ msgstr "Ажурирај ги сите" #, fuzzy #~ msgid "" #~ "

        Welcome to Liferea

        The left pane contains the feed list where " #~ "you can add new subscriptions and select subscriptions to read their " #~ "headlines. The right side either displays a list of the headlines of the " #~ "selected subscription and a pane to view the selected headline or all " #~ "headlines at once if condensed mode is selected.

        Basic Actions
        • Add Subscription - Creates a new subscription in the " #~ "selected folder. To create a new subscription enter the feed URL or if " #~ "you don't know it the URL of the website which provides the feed.

        • Update Subscription - This will update the subscription " #~ "you selected. You may want to do this if you want to immediately check a " #~ "subscription for updates. Usually it is adequate to rely on the auto " #~ "updating according to the update interval of the subscription.

        • Update All - This will update all your subscriptions at " #~ "once. Again usually it is adequate to rely on the auto updating.

        • Edit Subscription Properties - Sometimes you might want " #~ "to change the update interval, title, authentication or caching " #~ "properties of a subscription.

        To learn more about Liferea " #~ "you should read the documentation provided in the help feed or in the FAQ available at the project homepage.

        " #~ msgstr "" #~ "

        Добродојдовте во Лајфри

        Левиот панел ја содржи листата каде " #~ "што можете да додавате вести или да ги означитете истите за читање на " #~ "насловите. На десната страна се покажани насловите на вестите и приказ на " #~ "содржината зависно од подесениот режим на преглед.

        Основни " #~ "дејствија

        • Додај вести - Креира нова ставка за вести " #~ "во означената папка. За да додадете нови вести внесете ја адресата до " #~ "вестите или пак адресата до веб страната за вестите..

        • Ажурирај ги вестите - Ги ажурира означените вести. " #~ "Искористете ја оваа опција доколку сакате веднаш да се ажурираат вестите. " #~ "Некогаш е доволно да користите автоматско ажурирање во интервалот кој ќе " #~ "го одберите..

        • Ажурирај ги сите - Ги ажурира сите " #~ "вести.

        • Уреди ги параметрите - Можност за промена на " #~ "интервалот за ажурирање, насловот, методот на автентикација или " #~ "параметрите за кеширање.

        За да дознаете повеќе за Лајфри " #~ "прочитајте ја документацијата во вестите за помош или пак посетете ја " #~ "страната за ЧПП, кои се " #~ "достапни на веб страната на овој " #~ "проект.

        " #~ msgid "Liferea notification" #~ msgstr "Известување за Лајфри" #~ msgid "/_New/New _Subscription..." #~ msgstr "/_Нова/_Нова претплата..." #~ msgid "/_New/New F_older..." #~ msgstr "/_Нова/Нова _папка..." #, fuzzy #~ msgid "/_New/New _VFolder..." #~ msgstr "/_Нова/Нова _папка..." #~ msgid "/_Properties..." #~ msgstr "/_Својства..." #~ msgid "/_Delete Folder" #~ msgstr "/_Избриши папка" #~ msgid "/Toggle _Read Status" #~ msgstr "/Промени статус на _прочитано" #~ msgid "/Toggle Item _Flag" #~ msgstr "/Промени знаменце" #~ msgid "/_Next Unread Item" #~ msgstr "/_Следна непрочитана ставка" #~ msgid "/_Increase Text Size" #~ msgstr "/_Зголеми го текстот" #~ msgid "/_Decrease Text Size" #~ msgstr "/_Намали го текстот" #, fuzzy #~ msgid "/Toggle _Online|Offline" #~ msgstr "/_Работете офлајн" #~ msgid "/_Preferences..." #~ msgstr "/_Параметри..." #~ msgid "/_Show Window" #~ msgstr "/_Покажи го прозорецот" #~ msgid "Update only feeds scheduled for updates" #~ msgstr "Ажурирај ги сите вести што имаат закажано ажурирање" #~ msgid "Reset feed update timers (Update no feeds)" #~ msgstr "Ресетирај го времето на ажурирање (не ажурирај)" #~ msgid "Please do a search first!" #~ msgstr "Ве молам направете пребарување!" #, fuzzy #~ msgid "New VFolder" #~ msgstr "Нова папка" #, fuzzy #~ msgid "URL" #~ msgstr "_Адреса" #~ msgid "" #~ "The included HTML tag is not supported with GtkHTML2.\n" #~ "Included Plugins might not be displayed." #~ msgstr "" #~ "Вклучениот HTML збор не е поддржан од GtkHTML2.\n" #~ "Вклучените додатоци може да не се прикажат." #~ msgid "Toggle Search Box" #~ msgstr "Покажи лента за барање" #, fuzzy #~ msgid " --iconify Start the program iconified" #~ msgstr " --iconify Отвори ја програмата минимизирана" #~ msgid "http://lzone.de/liferea/help/help" #~ msgstr "http://lzone.de/liferea/help/help" #~ msgid ".rdf" #~ msgstr ".rdf" #~ msgid "There were errors while parsing a feed" #~ msgstr "Се појавивија грешки при парсирање на вестите!" #~ msgid "" #~ "There were errors while parsing this feed. The following error occurred:" #~ "
        %s" #~ msgstr "" #~ "Се појавивија грешки при парсирање на вестите. Следнава грешка беше " #~ "генерирана:
        %s" #, fuzzy #~ msgid "" #~ "There were errors while filtering this feed. The following error occurred:" #~ "
        %s
        " #~ msgstr "" #~ "Се појавивија грешки при парсирање на вестите. Следнава грешка беше " #~ "генерирана:
        %s" #~ msgid "" #~ "Starts a search for all items that do match the given search string " #~ "either in title or content." #~ msgstr "" #~ "Започнува пребарување за сите предмети кои се сложуваат со низата за " #~ "пребарување во нивниот наслов или содржина." #~ msgid "Close search" #~ msgstr "Затвори го пребарувачот" #, fuzzy #~ msgid "" #~ "_Load feeds from disk when needed. Searching can \n" #~ "be slow if you have a lot of feeds." #~ msgstr "" #~ "_Прочитај ги вестите од дискот ако е потребно. Пребарувањето може \n" #~ "да биде бавно ако имате голем број на вести," #~ msgid "" #~ "_Keep all feeds loaded. This may improve speed \n" #~ "(especially when searching) but can cause a \n" #~ "significant memory footprint if you have a lot \n" #~ "of feeds!" #~ msgstr "" #~ "_Чувај ги сите вести вчитани. Ова може да ја подобри брзината \n" #~ "(посебно при пребарување), но може да да предизвика \n" #~ "значително трошење на меморијата доколку \n" #~ "имате многу вести!" #~ msgid "" #~ "Liferea displays feeds' content using various HTML renderers. Depending " #~ "on which renderers are installed on your computer, different options will " #~ "be available. Restart Liferea for changes to take effect." #~ msgstr "" #~ "Лајфри ја покажува содржината на вестите со помош на ХТМЛ модули. Во " #~ "зависност од тоа кој модул е инсталиран во Вашиот систем, различни опции " #~ "се достапни. Отворете ја Лајфри повторно за новите промени да бидат " #~ "ефективни." #~ msgid "enclosed file: %s" #~ msgstr "прикачена датотека: %s" #~ msgid "Invalid RFC822 date format! Ignoring date information!\n" #~ msgstr "Невалиден RFC822 формат на датумот! Игнорирам податоци !\n" #~ msgid "URL points to permanent redirect, updating with new location..." #~ msgstr "" #~ "URL покажува кон постојано пренасочување, се ажурира новата локација..." #~ msgid "Filter Feeds Without Unread Headlines" #~ msgstr "Филтрирај ги вестите со прочитани наслови." #~ msgid "Headline Display" #~ msgstr "Приказ на насловот" #~ msgid "ERROR: zlib_uncompress: %d %s\n" #~ msgstr "ГРЕШКА: zlib_uncompress: %d %s\n" #~ msgid "ERROR: No output during decompression" #~ msgstr "ГРЕШКА: No output during decompression" #~ msgid "ERROR: Invalid magic bytes for GZIP data" #~ msgstr "ГРЕШКА: Invalid magic bytes for GZIP data" #~ msgid "ERROR: Compression method is not deflate" #~ msgstr "ГРЕШКА: Compression method is not deflate" #~ msgid "ERROR: Unsupported flags %d\n" #~ msgstr "ГРЕШКА: Unsupported flags %d\n" #~ msgid "Liferea 0.6.1" #~ msgstr "Лајфри 0.6.1" #~ msgid "" #~ "
        When Liferea starts for the first time it loads a localized default " #~ "feed list. There are already default lists for English, French, German " #~ "and Spanish. If you think you know a good set of default feeds for your " #~ "language please post them (maybe as OPML) on the mailing list and it will be included in " #~ "the next release!
        " #~ msgstr "" #~ "
        При првото извршување на Лајфри, се вчитува стандардна локализирана " #~ "листа на вести. Веќе постојат стандардни листи за англиски, француски, " #~ "германски и шпански јазик. Доколку знаете добра листа на вести за Вашиот " #~ "јазик, Ве молам пратете ја (можеби како ОПМЛ) на мејлинг листата и истата ќе биде " #~ "додадена во следното издание!
        " #~ msgid "RSS namespace %s not yet configured! Activating...\n" #~ msgstr "RSS namespace %s not yet configured! Активирам...\n" #~ msgid "Online Help Feed" #~ msgstr "Вести за помош" #~ msgid "Conversion Filter" #~ msgstr "Филтер за конверзија" #~ msgid "" #~ "Takeshi AIHANA \n" #~ "Dario Conigliaro \n" #~ "Carlos Fenollosa \n" #~ "Enrico Genauck \n" #~ "Park Ji-In \n" #~ "Stephane Jourdan \n" #~ "Juraj Kubelka \n" #~ "Vincent Lefevre \n" #~ "Tomislav Markovski \n" #~ "Jose Maria Mateos \n" #~ "Vladimir Petkov \n" #~ "Rex Tsai \n" #~ "Alekseev Vladimir \n" #~ "Antoine REVERSAT \n" #~ "Tibor Pittich \n" #~ msgstr "" #~ "Takeshi AIHANA \n" #~ "Dario Conigliaro \n" #~ "Carlos Fenollosa \n" #~ "Enrico Genauck \n" #~ "Park Ji-In \n" #~ "Stephane Jourdan \n" #~ "Juraj Kubelka \n" #~ "Vincent Lefevre \n" #~ "Томислав Марковски \n" #~ "Jose Maria Mateos \n" #~ "Vladimir Petkov \n" #~ "Rex Tsai \n" #~ "Alekseev Vladimir \n" #~ "Antoine REVERSAT \n" #~ "Tibor Pittich \n" #~ msgid "internal error! could not get feed tree view selection!\n" #~ msgstr "интерна грешка! could not get feed tree view selection!\n" liferea-1.12.7/po/nl.po000066400000000000000000002561121352135647700146240ustar00rootroot00000000000000# Dutch translation of Liferea. # Copyright (C) 2009, 2010, 2011, 2012, 2013 # This file is distributed under the same license as the liferea package. # Patrick Bos , 2006. # Erwin Poeze , 2009, 2010, 2011, 2013 # # msgid "" msgstr "" "Project-Id-Version: liferea 1.10-rc4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2013-06-14 08:11+0100\n" "Last-Translator: Erwin Poeze \n" "Language-Team: Dutch \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: Poedit 1.5.4\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Feedlezer" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Liferea is offline" #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "Met nabije hosts synchroniseren" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "Met nabije hosts synchroniseren" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "Met nabije hosts synchroniseren" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "Met nabije hosts synchroniseren" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 #, fuzzy msgid "Play Podcasts" msgstr "Podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Feedlezer" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea Feed Reader" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Nieuwsfeeds en blogs lezen" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Deze feed is gestopt en niet langer beschikbaar. Liferea zal hem niet meer " "bijwerken, maar de opgeslagen koppen zijn nog wel te bekijken." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "De laatste keer bijwerken van dit abonnement is mislukt!
        HTTP-" "foutcode : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Ontleden van deze feed is mislukt!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Foutinformatie ontleden" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Details" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "Overweeg de auteur of webmaster van deze feed hierover te informeren!" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Filteren van deze feed is mislukt!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Foutinformatie filteren" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Feed:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Bron:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Uitgever" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Copyright" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "submappen met" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "koppen als ongelezen markeren" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Map:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Bron" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Feed" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Opgeslagen onder" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Auteur" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Gedeeld met" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Via" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Verwant" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Ook gepubliceerd in" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Producent" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Commentaren" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Bijwerken..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Sectie" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Afdeling" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Nieuwsbak:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Voeg items aan de nieuwsbak toe met \"Kopieer naar nieuwsbak\" uit het " "snelmenu." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Zoeken in map:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Browseropdracht is mislukt: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Openen: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Aanmeldfout" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Buffergeheugenmap \"%s\" kan niet worden aangemaakt!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Vandaag %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Gisteren %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d %b %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" is geen geldig configuratiebestand voor dit soort bijlagen!" #: ../src/enclosure.c:292 #, fuzzy msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Er is nog geen downloadprogramma geconfigureerd. U kunt dit doen in het " "tabblad 'Bijlagen' onder Extra/Voorkeuren." #: ../src/enclosure.c:311 #, fuzzy, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Opdracht is mislukt: \n" "\n" "%s\n" "\n" "Controleer of het opgegeven downloadprogramma geïnstalleerd is en " "functioneert. U kunt dit aanpassen in het tabblad Bijlagen on Extra/" "Voorkeuren." #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Hernoemen van %s naar %s is mislukt\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "XML-fout bij het lezen van OPML-bestand! \"%s\" kon niet worden geïmporteerd!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Leeg document! OPML-document \"%s\" mag bij het importeren niet leeg zijn." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" is geen geldig OPML-document! Liferea kan dit bestand niet importeren!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Lijst van geïmporteerde feeds" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Feedlijst importeren" #: ../src/export.c:481 msgid "Import" msgstr "Importeren" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "OPML-bestanden" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Exporteren feedlijst is mislukt!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Feedlijst geëxporteerd!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Feedlijst exporteren" #: ../src/export.c:498 msgid "Export" msgstr "Exporteren" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        Het soort feed kan niet worden vastgesteld! Controleer of er wel naar een " "door Liferea ondersteunde feedstructuur wordt verwezen!

        XML Parser-" "uitvoer:
        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" is bijgewerkt..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" is niet beschikbaar" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "

        De als abonnement opgegeven URL, wijst naar een webpagina en Liferea " "heeft op deze pagina geen feeds gevonden. Misschien ondersteunt de pagina " "geen automatische detectie van feeds.

        " #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "" "XML-fout tijdens het lezen van een feed! Feed \"%s\" kan niet worden geladen!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Leeg document!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Ongeldige XML!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Bron verwijst naar HTML-document." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Kan het soort feed niet bepalen." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Er zijn geen ongelezen items " #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Liferea starten met het hoofdvenster in STATUS. STATUS kan `shown', " "`iconified' of `hidden' zijn" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "STATUS" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Versieinformatie tonen en stoppen" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Nieuw abonnement toevoegen" #: ../src/liferea_application.c:284 msgid "uri" msgstr "uri" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Alle soorten foutmeldingen tonen" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Foutmeldingen over het gebruik van buffergeheugen tonen" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Foutmeldingen over de configuratieafhandeling tonen" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Foutmeldingen over de databaseafhandeling tonen" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Foutmeldingen over alle GUI-functies tonen" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Foutopsporing HTML-opmaak inschakelen. Iedere keer dat Liferea HTML-uitvoer " "opmaakt, zal het deze ook wegschrijven naar ~/.cache/liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Foutmeldingen over alle netwerkactiviteiten tonen" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Foutmeldingen over alle inleesfuncties tonen" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "Foutmeldingen tonen als een functie er te lang over doet" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Foutmeldingen over het starten en stoppen van functies tonen" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Foutmeldingen over het bijwerken van feeds tonen" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "Foutmeldingen over overeenkomsten van de zoekmap tonen" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Uitgebreide foutmeldingen tonen" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Foutmeldingen over het opgegeven onderwerp tonen" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Het verzoek tot bijwerken is geannuleerd" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Kan hostnaam van bestemming niet bepalen" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Kan hostnaam van proxy niet bepalen" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Verbinding met remote host is mislukt" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Kan niet met proxy verbinden" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "Er is een netwerkfout opgetreden of de andere kant heeft de verbinding " "plotseling verbroken" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "De bron is permanent naar een nieuwe locatie verplaatst" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "U heeft geen toestemming om deze feed te downloaden. Voer de juiste " "gebruikersnaam en het wachtwoord in bij het eigenschappenvenster van de feed" #: ../src/net.c:476 msgid "Payment required" msgstr "Betaling vereist" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "U heeft geen toegang tot deze bron" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Bron niet gevonden" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Niet-toegestane methode" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Niet aanvaardbaar" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Aanmelding bij proxy vereist" #: ../src/net.c:482 msgid "Request timed out" msgstr "Wachttijd verzoek overschreden" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Verdwenen; bron bestaat niet meer. Meld u af!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Er is een interne fout opgetreden tijdens het bijwerken" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Feed niet bereikbaar: niet-ondersteunde omleiding aangevraagd door server!" #: ../src/net.c:492 msgid "Client Error" msgstr "Clientfout" #: ../src/net.c:494 msgid "Server Error" msgstr "Serverfout" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Een onbekende netwerkfout!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Item" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "bevat" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "bevat niet" #: ../src/rule.c:175 msgid "Item title" msgstr "Itemtitel" #: ../src/rule.c:176 msgid "Item body" msgstr "Iteminhoud" #: ../src/rule.c:177 msgid "Read status" msgstr "Gelezen?" #: ../src/rule.c:177 msgid "is unread" msgstr "niet gelezen" #: ../src/rule.c:177 msgid "is read" msgstr "gelezen" #: ../src/rule.c:178 msgid "Flag status" msgstr "Markering?" #: ../src/rule.c:178 msgid "is flagged" msgstr "gemarkeerd" #: ../src/rule.c:178 msgid "is unflagged" msgstr "niet gemarkeerd" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "inbegrepen" #: ../src/rule.c:179 msgid "not included" msgstr "niet inbegrepen" #: ../src/rule.c:180 msgid "Category" msgstr "Categorie" #: ../src/rule.c:180 msgid "is set" msgstr "ingesteld" #: ../src/rule.c:180 msgid "is not set" msgstr "is niet ingesteld" #: ../src/rule.c:181 msgid "Feed title" msgstr "Feedtitel" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Abonnement \"%s\" wordt al bijgewerkt!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "Abonnement \"%s\" is gestopt. Liferea zal het niet meer bijwerken!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Favicon van \"%s\" bijwerken" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Er is een probleem met het lezen van dit abonnement. Controleer de URL en de " "console-uitvoer." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "De URL van \"%s\" is permanent veranderd en bijgewerkt" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" is er mee opgehouden. Liferea zal het niet meer bijwerken!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" is niet veranderd sinds de laatste update" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Bijwerken \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "" "Fout bij het openen van tijdelijk bestand %s dat gebruikt moet worden voor " "filteren!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s afgesloten met status %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Fout: openen pipe \"%s\" is mislukt" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Fout: openen bestand \"%s\" is mislukt" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Fout: bestand \"%s\" bestaat niet" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Nieuwe zoekmap" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Er zijn meer fouten. Uitvoer is afgekapt!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "xml-parser: kan document niet ontleden:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Bijlagen" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " bytes" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d bijlage" msgstr[1] "%d bijlagen" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Bladeren" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Bestandsextensie .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Pixmap-bestand niet gevonden: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d nieuw)" msgstr[1] " (%d nieuwe)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d ongelezen%s" msgstr[1] "%d ongelezen%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Hulponderwerpen" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Sneltoetsen" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "Vaak gestelde vragen" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Uitgebreid zoeken" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Voer gebruikersnaam en wachtwoord in voor \"%s\" (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Onbekende bron" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "_Alles annuleren" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Alle bestanden" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea staat in offline-modus. Bijwerken is niet mogelijk." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Alle feeds doorzoeken" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Alles als gelezen markeren" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Weet u zeker dat u \"%s\" wilt verwijderen?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Dit item heeft geen koppeling!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Geen titel ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Kop" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Datum" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Selecteer een feed om zijn items te verwijderen!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Er is geen item geselecteerd" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "In _tabblad openen" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "In browser _openen" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "In _externe browser openen" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Kopieer naar nieuwsbak" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "Blad_wijzer toevoegen bij %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "Itemlocatie _kopiëren" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Item _gelezen aan/uit" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Item _markering aan/uit" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "Item v_erwijderen" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Bijlage openen..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Opslaan als..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "URL _kopiëren" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Bijwerken" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "Map _bijwerken" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Nieuw _abonnement..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Nieuwe _map..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Nieuwe _zoekmap..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Nieuwe _bron..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Nieuwe nieu_wsbak..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Nieuw" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Feeds sorteren" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "Alle items als gelezen _markeren" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "_Herbouwen" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Verwijderen" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Eigenschappen" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Naar lokale abonnementen converteren..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "GNOME-standaard" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Tekst onder pictogrammen" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Tekst naast pictogrammen" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Alleen pictogrammen" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Alleen tekst" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minuten" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "uren" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dagen" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Spatie" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " spatie" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " spatie" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Normaal venster" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Breed venster" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Samengesteld venster" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Standaardbrowser" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Handmatig" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Soort" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Programma" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Leeg)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Herbouwen" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Item verwijderen" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Weet u zeker dat u \"%s\" en zijn inhoud wilt verwijderen?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Weet u zeker dat u \"%s\" wilt verwijderen?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Verwijdering bevestigen" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Verwijdering bevestigen" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "" "De aanbieder van deze feed suggereert een bijwerkinterval van %d minuut." msgstr[1] "" "De aanbieder van deze feed suggereert een bijwerkinterval van %d minuten." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Deze feed specificeert geen standaardbijwerkinterval." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Geen titel" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Website" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nieuw abonnement" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "OPML-bestand selecteren" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Nieuw OPML-abonnement" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Geen bronsoorten van feedlijst gevonden!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Bronsoort" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "Het abonnement '%s' is geconverteerd naar lokale feeds." #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Inloggen Google Reader is mislukt!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 #, fuzzy msgid "Could not parse JSON returned by Reedah API!" msgstr "JSON afkomstig van tt-rss API kan niet worden ontleed." #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 #, fuzzy msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "JSON afkomstig van tt-rss API kan niet worden ontleed." #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Feedlezer" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Koppeling in _tabblad openen" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "Koppeling in browser _openen" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "Koppeling in externe browser _openen" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "Blad_wijzer koppeling toevoegen als %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "Koppeling _kopiëren" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "Afbeelding _opslaan als" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "Afbeeldingslocatie _kopiëren" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "Koppeling _opslaan als" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "Afbeelding _opslaan als" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Abonneren..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "Tekst ver_groten" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "Tekst ver_kleinen" #: ../glade/about.ui.h:1 msgid "About" msgstr "Info" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea is een nieuwsverzamelaar voor GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Liferea-startpagina" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Aanmelding" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Gebruikersnaam:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Wachtwoord:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Bijlage openen" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Bijlage openen van type:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Wat moet er met deze bijlage gebeuren? Voer hieronder de opdracht in die u " "wilt uitvoeren. Het URL van de bijlage zal als argument aan de opdracht " "worden meegegeven:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Bladeren" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "Voortaan deze actie automatisch voor dit soort bijlagen uitvoeren." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Google Reader-account toevoegen" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Voer uw accountinstellingen van Google Reader in." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Wachtwoord" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_Gebruikersnaam (e-mail)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Koppen _bekijken" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Koppen" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Alles als gelezen markeren" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Alles als gelezen markeren" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Nieuwe map" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "_Mapnaam:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Nieuwsbak aanmaken" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Naam nieuwsbak:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Feed-bron" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Brontype:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_Url" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Opdracht" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Lokaal bestand" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Bladeren..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Bron:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Download / Nabewerken" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "Proxy niet voor _downloaden gebruiken" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Gebruik conversie_filter" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea kan van externe filterextensies gebruik maken om niet-ondersteunde " "feeds en mappen te lezen. Zie de documentatie voor meer informatie." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Converteren _met:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Bronselectie" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Brontype selecteren die toegevoegd moet worden..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "OPML/Planet toevoegen" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "Geef een lokaal bestand op of een URL naar een geldige OPML-feedlijst" #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "Locatie" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "Bestand _selecteren" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Liferea-voorkeuren" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Verwerker feed-buffer" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "Standaard _aantal items die per feed moeten worden bewaard:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Feed-bijwerkinstellingen" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Stel het bijwerkinterval in op een redelijke waarde. Het is vaak niet " "zinvol om feeds vaker dan ieder uur te verversen." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "Alle abonnementen _bijwerken bij het opstarten." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Standaard_interval bijwerken feed:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Feeds" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Mappenweergaveinstellingen" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "Laat items van _alle afgeleide feeds zien als een map is geselecteerd." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "Gelezen items _verbergen." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Feedpictogrammen (Favicons)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "Alle _favicons nu bijwerken" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Mappen" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Koppen lezen" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Door artikelen _bladeren met:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "Standaardmodus _weergave:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Webintegratie" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Bladwijzers doorsturen naar" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Interne browserinstellingen" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Koppelingen in _venster openen." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "Javascript _uitschakelen." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "Browser_plug-in inschakelen" #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Externe browserinstellingen" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Browser:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Handmatig:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s voor URL)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Browser" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Werkbalkinstellingen" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "Werkbalk _verbergen" #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Labels werkbalkknoppen:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "HTTP-proxy-server" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Automatisch detecteren (GNOME of omgeving)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Geen proxy" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Handmatige instelling:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "Proxy _host:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "Proxy _poort:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Proxy-authenticatie gebruiken" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Proxy _gebruikersnaam:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Proxy _wachtwoord:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Mappenweergaveinstellingen" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Bijlagen downloaden" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Downloaden met" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Bijlagen openen" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Bijlagen" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Abonnementeigenschappen" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Feed-naam" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "Feed_naam:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Bijwerkinterval" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "Standaardinterval _gebruiken." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_Voor deze feed een interval van" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Deze feed niet automatisch bijwerken." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "De aanbieder van deze feed suggereert een bijwerkinterval van %d minuten." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Algemeen" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea kan van externe filterextensies gebruik maken om niet-ondersteunde " "feeds en mappen te lezen. Zie de documentatie voor meer informatie." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "De buffergeheugeninstelling bepaalt of de inhoud van de feeds bewaard wordt " "bij het afsluiten van Liferea. Gemarkeerde items worden altijd in het " "buffergeheugen bewaard." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "_Standaardinstellingen buffergeheugen" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "Buffergeheugen _uitschakelen" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Onbeperkt buffergeheugen" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "_Aantal items per feed die moet worden bewaard:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Archief" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "HTTP-_aanmelding gebruiken" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Downloaden" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_Automatisch alle bijlagen van deze feed downloaden." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Koppeling bij selecteren van artikelen automatisch _laden in opgegeven " "browser." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Commentaarfeeds van dit abonnement negeren." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "Gedownloade items als gelezen markeren." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Uitgebreid" #: ../glade/reedah_source.ui.h:1 #, fuzzy msgid "Add Reedah Account" msgstr "Google Reader-account toevoegen" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Voer uw accountinstellingen van Google Reader in." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Hernoemen" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Nieuwe naam:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Eigenschappen zoekmap" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "Zoek_naam:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Zoek items die aan de volgende voorwaarden voldoen" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "_Elke regel voldoet" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "_Alle regels moeten voldoen" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Uitgebreid zoeken" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "Map doorzoeken..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Alle feeds doorzoeken" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Uitgebreid..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "De zoekopdracht naar de ingevoerde tekst in alle feeds starten. Het " "resultaat verschijnt in de itemlijst." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Zoeken naar:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Voer zoektermen in die moeten voorkomen in de titel of de inhoud van een " "item." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Uitgebreid..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Geef een websiteadres om te zoeken naar feeds of als u het weet, het exacte " "adres van de feed." #: ../glade/theoldreader_source.ui.h:1 #, fuzzy msgid "Add TheOldReader Account" msgstr "Google Reader-account toevoegen" #: ../glade/theoldreader_source.ui.h:2 #, fuzzy msgid "Please enter your TheOldReader account settings." msgstr "Voer uw accountinstellingen van Google Reader in." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Tiny Tiny RSS-account toevoegen" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "Voer uw accountinstellingen van tt-rss in." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "_Server-url" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Gebruikersnaam" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Bijwerkoverzicht" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "_Alles annuleren" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Wachtrij verzoeken" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Bijwerken" #~ msgid "_Subscriptions" #~ msgstr "_Abonnementen" #~ msgid "Update _All" #~ msgstr "_Alles bijwerken" #~ msgid "Updates all subscriptions." #~ msgstr "Alle abonnementen bijwerken." #~ msgid "Mark All As _Read" #~ msgstr "Alles als ge_lezen markeren" #~ msgid "Marks read every item of every subscription." #~ msgstr "Elk item van ieder feed als gelezen markeren." #~ msgid "_Import Feed List..." #~ msgstr "Feedlijst _importeren..." #~ msgid "Imports an OPML feed list." #~ msgstr "Een OPML-feedlijst importeren." #~ msgid "_Export Feed List..." #~ msgstr "Feedlijst e_xporteren..." #~ msgid "Exports the feed list as OPML." #~ msgstr "De feedlijst als OPML exporteren." #~ msgid "_Quit" #~ msgstr "_Afsluiten" #~ msgid "_Feed" #~ msgstr "_Feed" #~ msgid "Remove _All Items" #~ msgstr "_Alle items verwijderen" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Alle items van de geselecteerde feed verwijderen." #~ msgid "_Item" #~ msgstr "_Item" #~ msgid "Previous Item" #~ msgstr "Vorig item" #~ msgid "Next Item" #~ msgstr "Volgend item" #~ msgid "_Next Unread Item" #~ msgstr "_Volgend ongelezen item" #~ msgid "_View" #~ msgstr "_Beeld" #~ msgid "Increases the text size of the item view." #~ msgstr "De tekst van de items vergroten." #~ msgid "Decreases the text size of the item view." #~ msgstr "De tekst van de items verkleinen." #~ msgid "_Tools" #~ msgstr "_Extra" #~ msgid "_Update Monitor" #~ msgstr "_Bijwerkoverzicht" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "" #~ "Een lijst tonen met alle feeds die klaar staan om bijgewerkt te worden" #~ msgid "_Preferences" #~ msgstr "_Voorkeuren" #~ msgid "Edit Preferences." #~ msgstr "Voorkeuren bewerken." #~ msgid "S_earch" #~ msgstr "_Zoeken" #~ msgid "Search All Feeds..." #~ msgstr "Alle feeds doorzoeken..." #~ msgid "Show the search dialog." #~ msgstr "Zoekscherm tonen" #~ msgid "_Help" #~ msgstr "_Hulp" #~ msgid "_Contents" #~ msgstr "_Inhoud" #~ msgid "View help for this application." #~ msgstr "De hulptekst van dit programma bekijken." #~ msgid "_Quick Reference" #~ msgstr "_Snelgids" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Een lijst met Lifereasneltoetsen bekijken." #~ msgid "_FAQ" #~ msgstr "_FAQ" #~ msgid "View the FAQ for this application." #~ msgstr "De FAQ (meest gestelde vragen) van dit programma bekijken." #~ msgid "_About" #~ msgstr "_Info" #~ msgid "Shows an about dialog." #~ msgstr "Info over het programma en de makers." #~ msgid "_Normal View" #~ msgstr "_Normaal venster" #~ msgid "Set view mode to mail client mode." #~ msgstr "Weergavemodus omstellen naar mail-client-modus." #~ msgid "_Wide View" #~ msgstr "_Breed venster" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Weergavemodus met drie vertikale vensters instellen." #~ msgid "_Combined View" #~ msgstr "_Samengesteld venster" #~ msgid "Set view mode to two pane mode." #~ msgstr "Weergavemodus met twee vensters instellen." #~ msgid "_Reduced Feed List" #~ msgstr "Feedlijst _reduceren" #~ msgid "Hide feeds with no unread items." #~ msgstr "Feeds zonder ongelezen berichten verbergen." #~ msgid "_New Subscription..." #~ msgstr "_Nieuw abonnement..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Een abonnement aan de feedlijst toevoegen." #~ msgid "Adds a folder to the feed list." #~ msgstr "Een map aan de feedlijst toevoegen." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Een nieuwe zoekmap aan de feedlijst toevoegen." #~ msgid "New _Source..." #~ msgstr "Nieuwe _bron..." #~ msgid "Adds a new feed list source." #~ msgstr "Een feedlijstbron toevoegen." #~ msgid "Adds a new news bin." #~ msgstr "Voegt een nieuwe nieuwsbak toe." #~ msgid "_Mark Items Read" #~ msgstr "Als gelezen _markeren" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Alle items van de geselecteerde feedlijst of in de itemlijst als gelezen " #~ "markeren." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "De geselecteerde of alle feeds in de geselecteerde map bijwerken." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Het eigenschappenvenster van de geselecteerde feed openen." #~ msgid "_Remove" #~ msgstr "_Verwijderen" #~ msgid "Removes the selected subscription." #~ msgstr "Het geselecteerde abonnement verwijderen." #~ msgid "Toggles the read status of the selected item." #~ msgstr "" #~ "Schakelt de leesstatus van het geselecteerde item tussen gelezen en " #~ "ongelezen." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "" #~ "Schakelt de markering van het geselecteerde item om (wel of geen " #~ "vlaggetje)." #~ msgid "R_emove" #~ msgstr "V_erwijderen" #~ msgid "Removes the selected item." #~ msgstr "Het geselecteerde item verwijderen." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "De koppeling in een nieuw browsertabblad openen." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "De koppeling in Liferea venster tonen." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "De koppeling in de externe browser openen." #~ msgid "_Fullscreen" #~ msgstr "_Volledige scherm" #~ msgid "Browse at full screen" #~ msgstr "Met volledig scherm bladeren" #~ msgid "_Work Offline" #~ msgstr "_Offline-modus" #~ msgid "_Update All" #~ msgstr "Alle feeds _bijwerken" #~ msgid "_Show Liferea" #~ msgstr "Liferea _tonen" #, fuzzy #~ msgid "InoReader" #~ msgstr "Google Reader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "De gebruikersnaam en het wachtwoord zullen in uw Liferea-" #~ "feedlijstbestand worden opgeslagen zonder versleuteling." #, fuzzy #~ msgid "Add InoReader Account" #~ msgstr "Google Reader-account toevoegen" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "Voer uw accountinstellingen van Google Reader in." #~ msgid "Plugins" #~ msgstr "Plugins" #~ msgid "normal view" #~ msgstr "normale weergave" #~ msgid "wide view" #~ msgstr "brede weergave" #~ msgid "combined view" #~ msgstr "samengestelde weergave" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, Linux Feed Reader" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "Meer informatie vindt u op https://lzone.de/liferea/" #~ msgid "_Open Link In Browser" #~ msgstr "Koppeling in browser _openen" #~ msgid "_Open Link In External Browser" #~ msgstr "Koppeling in externe browser _openen" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Zoekmachinefeed aanmaken" #~ msgid "enter any search string you want" #~ msgstr "voer zoektermen in" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "Maximum aantal resultaten:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "N.B.: Liferea zal een feed toevoegen die gebruikt wordt om de zoekmachine " #~ "naar de ingevoerde zoektermen te laten zoeken. U kunt deze feed behouden " #~ "en bijwerken net als ieder ander abonnement." #~ msgid "Liferea is now online" #~ msgstr "Liferea is online" #~ msgid "Work Offline" #~ msgstr "Offline-modus" #~ msgid "Liferea is now offline" #~ msgstr "Liferea is offline" #~ msgid "Work Online" #~ msgstr "Online-modus" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Deze optie schakelt het bijwerken van abonnementen uit." #~ msgid "Browser default" #~ msgstr "Browserstandaard" #~ msgid "Existing window" #~ msgstr "Geopend venster" #~ msgid "New window" #~ msgstr "Nieuw venster" #~ msgid "New tab" #~ msgstr "Nieuwe tabblad" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Feedlezer" #~ msgid "Online/Offline Button" #~ msgstr "Knop online/offline" #~ msgid "_Open link in:" #~ msgstr "Koppeling _openen in:" #~ msgid "No comments yet." #~ msgstr "Commentaar ontbreekt nog." #~ msgid "Refresh" #~ msgstr "Bijwerken" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - Linux Feed Reader" #~ msgid "" #~ "

        Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

        You can add new subscriptions

        • From main menu " #~ "'Subscription' -> 'New Subscription'
        • By dropping feed links " #~ "into the subscription list
        • By right clicking links and choosing " #~ "'Subscribe' within Liferea

        " #~ msgstr "" #~ "

        Welkom bij Liferea, een desktop nieuwsverzamelaar voor online-" #~ "nieuwsfeeds.

        U kunt nieuwe abonnementen toevoegen:

        • vanuit " #~ "hoofdmenu 'Abonnementen' -> 'Nieuw abonnement'
        • door feed-" #~ "koppelingen naar de abonnementenlijst te slepen
        • door " #~ "rechtsklikken op koppelingen en 'Abonneren' binnen Liferea te selecteren

        " #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "In systeemvak opnemen (indicator)" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Afsluiten in plaats van minimaliseren naar systeemvak" #~ msgid "Start minimized to the messaging menu" #~ msgstr "Geminimaliseerd in systeemvak starten" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d nieuw item" #~ msgstr[1] "%d nieuwe items" #~ msgid "No new items" #~ msgstr "Geen nieuwe items" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d ongelezen item" #~ msgstr[1] "" #~ "%s\n" #~ "%d ongelezen items" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Geen ongelezen items" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Ongeldige Atom-feed: auteur onbekend" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "De feedlijst van uw Google Reader-account integreren. Liferea toont uw " #~ "Google Reader-abonnementen en zal uw feedlijst en leeslijsten " #~ "synchroniseren." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Blogrolls of Planes in uw feedlijst integreren. Liferea zal automatisch " #~ "feeds toevoegen en verwijderen volgens de veranderingen in het bron-OPML-" #~ "document" #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "De feedlijst van uw Tiny Tiny RSS 1.5+-account integreren. Liferea toont " #~ "uw tt-rss-abonnementen en zal uw feedlijst en leeslijsten synchroniseren." #~ msgid "This feed does not exist anymore!" #~ msgstr "Deze feed bestaat niet meer!" #~ msgid "This news entry has no headline" #~ msgstr "Dit nieuwsitem heeft geen kop" #~ msgid "Visit" #~ msgstr "Bezoek" #~ msgid "Open feed" #~ msgstr "Open feed" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "%s heeft %d nieuw bericht" #~ msgstr[1] "%s heeft %d nieuwe berichten" #~ msgid "Feed Update" #~ msgstr "Feed bijwerken" #~ msgid "Show details" #~ msgstr "Details tonen" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "Pop-upmeldingen voor dit abonnement tonen." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "Voor dit abonnement geen pop-upmeldingen tonen" #~ msgid "Notification Settings" #~ msgstr "Meldingeninstellingen" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Een _pop-upvenster tonen met nieuwe koppen." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Een statuspictogram in het mededelingengebied (systeemvak) tonen." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Aantal _nieuwe items in het systeemvak tonen" #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "_Afsluiten in plaats van minimaliseren naar systeemvak." #~ msgid "_Start in tray icon." #~ msgstr "In systeemvak _starten" #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Copyright (c) 2003-2012\n" #~ "Het Liferea team\n" #~ msgid "Download and view feeds" #~ msgstr "Feeds downloaden en bekijken" #~ msgid "You may want to validate the feed using" #~ msgstr "Mogelijk wilt u de geldigheid van de feed vaststellen met" #~ msgid "bookmark" #~ msgstr "bladwijzer" #~ msgid "comments" #~ msgstr "commentaar" #~ msgid "flag" #~ msgstr "vlag" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Downloaden bijlage is MISLUKT: \"%s\"" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Downloaden bijlage afgerond: \"%s\"" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Deze versie van Liferea gebruikt een nieuwe soort buffergeheugen en heeft " #~ "de oude versie overgezet. De opgeslagen inhoud %s is niet automatisch " #~ "verwijderd. Als u er zeker van bent dat de overzetting gelukt is, kunt u " #~ "deze map met de hand verwijderen. " #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Naar het volgende ongelezen item verspringen. Indien nodig de volgende " #~ "feed met ongelezen items selecteren." #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Downloaden is MISLUKT: \"%s\"" #~ msgid "Download finished." #~ msgstr "Downloaden is afgerond." #~ msgid "Launch Item In _Tab" #~ msgstr "Item in _tabblad openen" #~ msgid "_Launch Item In Browser" #~ msgstr "Item in _browser openen" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Item-_url naar klembord kopiëren" #~ msgid "Choose download directory" #~ msgstr "Downloadmap kiezen" #~ msgid "Liferea Sync %s@%s" #~ msgstr "Liferea-sync %s@%s" #~ msgid "Downloading Enclosure" #~ msgstr "Bijlage downloaden" #~ msgid "Sync" #~ msgstr "Sync" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "Lokale _LAN-synchronisatie ingeschakelen" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Handmatig:\n" #~ "(%s = url)" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "Url _doorgeven en geen bijlagen downloaden." #~ msgid "_Save downloads in" #~ msgstr "Downloads op_slaan in" #~ msgid "_Service Name" #~ msgstr "_Servicenaam" #~ msgid "link cosmos" #~ msgstr "link cosmos" #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "Foutmeldingen over het laden van plug-ins" #~ msgid "Liferea seems to be running already!" #~ msgstr "Het lijkt erop dat Liferea al draait!" #~ msgid "Update status" #~ msgstr "Status bijwerken" #~ msgid "was updated" #~ msgstr "is bijgewerkt" #~ msgid "was not updated" #~ msgstr "is niet bijgewerkt" #~ msgid "The orientation of the tray." #~ msgstr "De oriëntatie van de tray" #~ msgid "%s" #~ msgstr "%s" #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_nl.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "_Script Manager" #~ msgstr "_Scriptmanager" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Staat toe om LUA-hook-scripts in te stellen en te bewerken" #~ msgid "Search With ..." #~ msgstr "Zoeken met..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d zoekresultaat voor \"%s\"" #~ msgstr[1] "%d zoekresultaten voor \"%s\"" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d zoekresultaat" #~ msgstr[1] "%d zoekresultaten" #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "De itemlijst bevat nu alle items die aan de zoekcriteria voldoen. Als u " #~ "dit zoekresultaat wilt bewaren, klikt u op de knop \"Zoekmap\" in het " #~ "zoekvenster. Liferea voegt dan een zoekmap aan de feedlijst toe." #~ msgid "Count" #~ msgstr "Aantal" #~ msgid "You have to select a feed entry" #~ msgstr "Selecteer een feeditem" #~ msgid "(empty)" #~ msgstr "(leeg)" #~ msgid "_Properties..." #~ msgstr "_Eigenschappen..." #~ msgid "Update out-dated feeds" #~ msgstr "Verlopen feeds bijwerken" #~ msgid "Force update of all feeds" #~ msgstr "Alle feeds bijwerken" #~ msgid "No feed update at all" #~ msgstr "Geen enkele feed bijwerken" #~ msgid "startup" #~ msgstr "opstarten" #~ msgid "feed updated" #~ msgstr "feed bijgewerkt" #~ msgid "feed added" #~ msgstr "feed toegevoegd" #~ msgid "item selected" #~ msgstr "item geselecteerd" #~ msgid "feed selected" #~ msgstr "feed geselecteerd" #~ msgid "item unselected" #~ msgstr "item gedeselecteerd" #~ msgid "feed unselected" #~ msgstr "feed gedeselecteerd" #~ msgid "shutdown" #~ msgstr "afsluiten" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Helaas, scripting wordt niet ondersteund!" #~ msgid "Script Name" #~ msgstr "Scriptnaam" #~ msgid "No script selected!" #~ msgstr "Geen script geselecteerd!" #~ msgid "Create a new search feed." #~ msgstr "Een nieuwe zoekfeed aanmaken" #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea kan de inhoud van dit item niet weergeven." #~ msgid "

        View this item's content.

        " #~ msgstr "

        De inhoud van dit item tonen.

        " #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "De feedlijst van uw Bloglines-account integreren. Liferea toont uw " #~ "Bloglines-abonnement als een alleen-lezen vertakking in de feedlijst." #~ msgid "feedlist.opml" #~ msgstr "feedlist_nl.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s heeft %d nieuw of bijgewerkte kop\n" #~ msgstr[1] "%s heeft %d nieuwe of bijgewerkte koppen\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Feed Source" #~ msgstr "Feedbron" #~ msgid "Hook" #~ msgstr "Verbinding" #~ msgid "Registered Scripts" #~ msgstr "Geregistreerde scripts" #~ msgid "Script Code" #~ msgstr "Scriptcode" #~ msgid "text/plain" #~ msgstr "text/plain" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Deze optie kan er voor zorgen dat zich flinke vertraging voordoet bij " #~ "het laden van mappen met veel feeds." #~ msgid "Downloading Enclosures" #~ msgstr "Bijlagen downloaden" #~ msgid "Feed Cache Handling" #~ msgstr "Buffergeheugen feeds" #~ msgid "Feed Name" #~ msgstr "Feednaam" #~ msgid "Feed Update Settings" #~ msgstr "Bijwerken feeds" #~ msgid "HTTP Proxy Server" #~ msgstr "HTTP-proxyserver" #~ msgid "Opening Enclosures" #~ msgstr "Bijlagen openen" #~ msgid "Reading Headlines" #~ msgstr "Koppen snellen" #~ msgid "Toolbar Settings" #~ msgstr "Werkbalkinstellingen" #~ msgid "Update Interval" #~ msgstr "Bijwerkinterval" #~ msgid "Web Integration" #~ msgstr "Webintegratie" #~ msgid "Add Script" #~ msgstr "Script toevoegen" #~ msgid "At _startup:" #~ msgstr "Bij op_starten:" #~ msgid "Attention Profile" #~ msgstr "Waarschuwingsprofiel" #~ msgid "Create new script" #~ msgstr "Nieuw script aanmaken" #~ msgid "Exec Command" #~ msgstr "Opdracht" #~ msgid "Reuse existing script" #~ msgstr "Bestaand script opnieuw gebruiken" #~ msgid "Script Manager" #~ msgstr "Scriptmanager" #~ msgid "Search _Link Cosmos with" #~ msgstr "_Link Cosmos doorzoeken met" #~ msgid "_Allow Flash in Feeds." #~ msgstr "Flash in feeds toest_aan." #~ msgid "This item's contents is invalid." #~ msgstr "De inhoud van dit item is ongeldig." #~ msgid "

        Could not find Atom 1.0 header!

        " #~ msgstr "

        Atom 1.0 header niet gevonden!

        " #~ msgid "http://lzone.de/liferea/" #~ msgstr "http://lzone.de/liferea/" #~ msgid "internal error! time conversion error! mktime failed!\n" #~ msgstr "interne fout! fout bij tijdconversie! mktime mislukt!\n" #~ msgid "Invalid ISO8601 date format! Ignoring information!\n" #~ msgstr "" #~ "Ongeldig ISO8601 datum formaat! informatie wordt genegeerd!\n" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "" #~ "Onverwachte end of character tekenreeks of corrupte UTF-8 codering! Een " #~ "aantal tekens zijn weggevallen!" #~ msgid "" #~ "

        Could not determine the feed type. Please check that it is valid and in a supported format.

        " #~ msgstr "" #~ "

        Het feed type kon niet worden bepaald. Controleer of de feed geldig is en een ondersteundformaat heeft." #~ msgid "" #~ "Error while reading cache file \"%s\" ! Cache file could not be loaded!" #~ msgstr "" #~ "Fout bij het lezen van cache bestand \"%s\" ! Cache bestand kon niet " #~ "worden geladen!" #~ msgid "" #~ "

        XML error while parsing cache file! Feed cache file \"%s\" could not " #~ "be loaded!

        " #~ msgstr "" #~ "

        XML fout bij het inlezen van cache bestand! Feed cache bestand \"%s" #~ "\"kon niet worden geladen!

        " #~ msgid "

        \"%s\" is no valid cache file! Cannot read cache file!

        " #~ msgstr "" #~ "

        \"%s\" is geen geldig cache bestand! Kan cache bestand niet lezen!

        " #~ msgid "There were errors while parsing cache file \"%s\"" #~ msgstr "Er zijn fouten opgetreden bij het inlezen van cache bestand \"%s\"" #~ msgid "user defined command" #~ msgstr "door gebruiker gedefinieerd commando" #~ msgid "Access Forbidden" #~ msgstr "Verboden toegang" #~ msgid "URL is invalid" #~ msgstr "URL is ongeldig" #~ msgid "Unsupported network protocol" #~ msgstr "Netwerkprotocol niet ondersteund" #~ msgid "Hostname could not be found" #~ msgstr "Hostnaam kon niet worden gevonden" #~ msgid "Network connection was refused by the remote host" #~ msgstr "Netwerkverbinding is door bron geweigerd" #~ msgid "Remote host did not finish sending data" #~ msgstr "Host heeft het sturen van data niet afgemaakt" #~ msgid "Too many HTTP redirects were encountered" #~ msgstr "Er zijn te veel HTTP redirects aangetroffen" #~ msgid "Remote host sent an invalid response" #~ msgstr "Host heeft een ongeldige reactie gestuurd" #~ msgid "Webserver's authentication method incompatible with Liferea" #~ msgstr "" #~ "Aanmeldingsmethode van webserver wordt niet door Liferea ondersteund" #~ msgid "" #~ "
        You may want to validate the feed using Wellicht is het verstandig de feed te valideren met FeedValidator." #~ msgstr "\">FeedValidator." #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "Automatische feedlinkdetectie mislukt! Geen feedlinks gevonden!" #~ msgid "_Program" #~ msgstr "_Programma" #~ msgid "Updates all subscriptions. This does not update OCS directories." #~ msgstr "Alle feeds updaten. Hiermee worden OCS directories niet geüpdate." #~ msgid "New _VFolder..." #~ msgstr "Nieuwe _VFolder..." #~ msgid "Remove _Selected" #~ msgstr "_Selectie verwijderen" #~ msgid "Toggles the item list mode between condensed and normal mode." #~ msgstr "De item lijst in samengestelde of normale modus zetten." #~ msgid "_Search" #~ msgstr "_Zoeken" #~ msgid "single item view" #~ msgstr "enkele item modus" #~ msgid "label133" #~ msgstr "label133" #~ msgid "_Limit cache to" #~ msgstr "Cache grootte _beperken tot" #~ msgid "items." #~ msgstr "items." #~ msgid "Feed Loading Settings" #~ msgstr "Feeds laden" #~ msgid "Optimize for reduced _memory usage." #~ msgstr "Voor laag _geheugen gebruik optimaliseren." #~ msgid "Optimize for _speed." #~ msgstr "Voor _snelheid optimaliseren." #~ msgid "Date Column Settings" #~ msgstr "Datumkolom" #~ msgid "Display only _time" #~ msgstr "Alleen _tijd weergeven" #~ msgid "Display _date and time" #~ msgstr "_Datum en tijd weergeven" #~ msgid "_User defined format:" #~ msgstr "_Eigen weergave:" #~ msgid "" #~ "for expert users: specify a time format string, consult the strftime() " #~ "manpage for the format codes" #~ msgstr "" #~ "voor gevorderde gebruikers: specificeer een tekenreeks voor de " #~ "tijdweergave; bekijk de strftime() man-pagina voor de te gebruiken codes." #~ msgid "Please restart Liferea for changes to take effect." #~ msgstr "Herstart Liferea om de veranderingen te activeren." #~ msgid " " #~ msgstr " " #~ msgid "Lower Right" #~ msgstr "Rechtsonder" #~ msgid "Upper Right" #~ msgstr "Rechtsboven" #~ msgid "Upper Left" #~ msgstr "Linksboven" #~ msgid "Lower Left" #~ msgstr "Linksonder" #~ msgid "Popup Placement" #~ msgstr "Plaats van de popup" #~ msgid "Show Menu _And Toolbar" #~ msgstr "Menu _en werkbalk tonen." #~ msgid "Show _Menu Only" #~ msgstr "Alleen _menu tonen" #~ msgid "Show _Toolbar Only" #~ msgstr "Alleen _werkbalk tonen" #~ msgid "" #~ "Liferea reuses the GNOME proxy settings. If you use GNOME you can " #~ "change these settings in the GNOME Control Center." #~ msgstr "" #~ "Liferea gebruikt de GNOME-proxyinstellingen. Als je GNOME gebruikt kun " #~ "je deze instellingen aanpassen in het GNOME Control Center." #~ msgid "_Enable Proxy" #~ msgstr "_Proxy inschakelen" #~ msgid "Liferea Homepage" #~ msgstr "Liferea webstek" #~ msgid "" #~ "Copyright (c) 2003-2005\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgstr "" #~ "Copyright (c) 2003-2005\n" #~ "Lars Lindner en \n" #~ "Nathan J. Conrad \n" #~ msgid "" #~ "Code, Patches, Debugging\n" #~ "\n" #~ "James Doherty <...>\n" #~ "Jeremy Messenger \n" #~ "John McKnight <...>\n" #~ "Tomasz Maka \n" #~ "Karl Soderstrom \t\n" #~ "Christophe Barbe \n" #~ "Juho Snellman \n" #~ "Roshan Revankar \n" #~ "Oliver Feiler \n" #~ "Niklas Morberg \n" #~ "Johannes Schlueter \n" #~ "Pierre Phaneuf \n" #~ "ahmed el-helw \n" #~ "James Bowes \n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary \n" #~ "Christoph Hohmann \n" #~ "Raphael Slinckx \n" #~ "Bjorn Monnens \n" #~ "and many more...\n" #~ "\n" #~ "Code from other projects\n" #~ "\n" #~ "Anders Carlsson (tray icon support)\n" #~ "Philippe Martin, Brion Vibber (favicon support)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)" #~ msgstr "" #~ "Code, patches, debuggen\n" #~ "\n" #~ "James Doherty <...>\n" #~ "Jeremy Messenger \n" #~ "John McKnight <...>\n" #~ "Tomasz Maka \n" #~ "Karl Soderstrom \t\n" #~ "Christophe Barbe \n" #~ "Juho Snellman \n" #~ "Roshan Revankar \n" #~ "Oliver Feiler \n" #~ "Niklas Morberg \n" #~ "Johannes Schlueter \n" #~ "Pierre Phaneuf \n" #~ "ahmed el-helw \n" #~ "James Bowes \n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary \n" #~ "Christoph Hohmann \n" #~ "Raphael Slinckx \n" #~ "Bjorn Monnens \n" #~ "en nog veel meer...\n" #~ "\n" #~ "Code van andere projecten\n" #~ "\n" #~ "Anders Carlsson (mededelingengebied)\n" #~ "Philippe Martin, Brion Vibber (favicons)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)" #~ msgid "Contributors" #~ msgstr "Bijdragen" #~ msgid "Translation" #~ msgstr "Vertaling" #~ msgid "Rule" #~ msgstr "Regel" #~ msgid "" #~ "Note: Items are added to the VFolder if at least one additive rule\n" #~ "matches. They are removed if at least one removing rule matches." #~ msgstr "" #~ "N.B.: Items worden toegevoegd aan de VFolder als ze aan tenminste één\n" #~ "\"bevat\" regel voldoen. Ze worden verwijderd als ze aan tenminste één\n" #~ "\"bevat niet\" regel voldoen." #~ msgid "Saves this search as a VFolder, which will appear in the feed list." #~ msgstr "" #~ "Deze zoekopdracht als een VFolder bewaren die in de feedlijst zal " #~ "verschijnen." #~ msgid "Item:" #~ msgstr "Item:" #~ msgid "date" #~ msgstr "datum" #~ msgid " --help Print this help and exit" #~ msgstr " --help Druk deze hulp tekst af en sluit af" #~ msgid " --mainwindow-state=STATE" #~ msgstr " --mainwindow-state=MODUS" #~ msgid " Start Liferea with its main window in STATE." #~ msgstr " Start Liferea met het hoofdscherm in MODUS." #~ msgid "The --mainwindow-state argument must be given a parameter.\n" #~ msgstr "Het --mainwindow-state argument moet een parameter mee krijgen.\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "Het --session argument moet een parameter mee krijgen.\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "Liferea is een onbekend argument tegengekomen: %s\n" #~ msgid "" #~ "Another copy of Liferea was found to be running. Please use it instead. " #~ "If there is no other copy of Liferea running, please delete the \"~/." #~ "liferea/lock\" lock file." #~ msgstr "" #~ "Het lijkt erop dat Liferea al gestart is, dus gebruik die andere. Als " #~ "Liferea niet al gestart is verwijder dan het \"~/.liferea/lock\" lock-" #~ "bestand." #~ msgid "feed generator" #~ msgstr "feed gemaakt met" #~ msgid "contributors" #~ msgstr "bijdragen" #~ msgid "language" #~ msgstr "taal" #~ msgid "feed published on" #~ msgstr "feed gepubliceerd op" #~ msgid "managing editor" #~ msgstr "managing editor" #~ msgid "webmaster" #~ msgstr "webmaestro" #~ msgid "report errors to" #~ msgstr "meld fouten aan" #~ msgid "original source" #~ msgstr "oorspronkelijke bron" #~ msgid "original time" #~ msgstr "oorspronkelijke tijd" #~ msgid "license" #~ msgstr "licentie" #~ msgid "type" #~ msgstr "type" #, fuzzy #~ msgid "format" #~ msgstr "indeling" #~ msgid "identifier" #~ msgstr "identificator" #~ msgid "source" #~ msgstr "bron" #~ msgid "coverage" #~ msgstr "onderwerpen" #~ msgid "Cookie for %s has expired!" #~ msgstr "Cookie voor %s is vervallen!" #~ msgid "internal OCS namespace parsing error!" #~ msgstr "interne OCS indelings fout!" #~ msgid "no namespace handler for <%s:%s>!\n" #~ msgstr "geen namespace handler voor <%s:%s>!\n" #~ msgid "

        Could not find RDF header!

        " #~ msgstr "

        RDF header niet gevonden!

        " #~ msgid "

        Could not find OPML header!

        " #~ msgstr "

        OPML header niet gevonden!

        " #~ msgid "

        Could not find Atom/Echo/PIE header!

        " #~ msgstr "

        Atom/Echo/PIE header niet gevonden!

        " #~ msgid "

        Could not find RDF/RSS header!

        " #~ msgstr "

        RDF/RSS header niet gevonden!

        " #~ msgid "does match" #~ msgstr "bevat" #~ msgid "does not match" #~ msgstr "bevat niet" #~ msgid "Note: Using the subscriptions filter disables drag & drop" #~ msgstr "" #~ "N.B.: Bij gebruik van het feedfilter wordt sleur & pleur uitgeschakeld" #~ msgid "You must select a feed entry" #~ msgstr "Selecteer een feed item" #~ msgid "You must select a feed entry." #~ msgstr "Selecteer een feed item." #~ msgid "A folder must be selected." #~ msgstr "Selecteer een map." #~ msgid "" #~ "internal error! unknown entry type! cannot display appropriate icon!\n" #~ msgstr "" #~ "interne fout! onbekend itemtype! kan het juiste icoon niet afbeelden!\n" #~ msgid "" #~ "\n" #~ "Trying to load the Mozilla browser module... Note that this\n" #~ "might not work with every Mozilla version. If you have problems\n" #~ "and Liferea does not start, try to set MOZILLA_FIVE_HOME to\n" #~ "another Mozilla installation or delete the gconf configuration\n" #~ "key /apps/liferea/browser-module!\n" #~ "\n" #~ msgstr "" #~ "\n" #~ "Bezig met laden van de Mozilla browser module... Dit werkt misschien\n" #~ "niet met elke versie van Mozilla. Als zich problemen voordoen\n" #~ "en Liferea start niet, probeer dan MOZILLA_FIVE_HOME naar een\n" #~ "andere Mozilla installatie te veranderen of verwijden de gconf\n" #~ "configuratie sleutel /apps/liferea/browser-module!\n" #~ "\n" #~ msgid "" #~ "Failed to open HTML widget module (%s) specified in configuration!\n" #~ "%s\n" #~ msgstr "" #~ "Openen van HTML widget module (%s) opgegeven in configuratie\n" #~ "mislukt! %s\n" #~ msgid "Htmlview API mismatch!" #~ msgstr "Htmlview API komt niet overeen!" #~ msgid "Detected module is not a valid htmlview module!" #~ msgstr "Gedetecteerde module is geen geldige htmlview module!" #~ msgid "Cannot load HTML widget module (%s)!" #~ msgstr "HTML widget module (%s) kan niet worden geladen!" #~ msgid "Available browser modules (%s):\n" #~ msgstr "Beschikbare browsermodules (%s):\n" #~ msgid "Loading configured browser module (%s)!\n" #~ msgstr "Bezig met laden van ingestelde browsermodule (%s)!\n" #~ msgid "No browser module configured!\n" #~ msgstr "Geen browsermodule ingesteld!\n" #~ msgid "trying to load browser module %s (%s)\n" #~ msgstr "bezig met laden van browsermodule %s (%s)\n" #~ msgid "" #~ "Sorry, I was not able to load any installed browser modules! Try the --" #~ "debug-all option to get debug information!" #~ msgstr "" #~ "Sorry, het is me niet gelukt een geïnstalleerde browsermodule te laden! " #~ "Probeer de --debug-all optie uit om debuginformatie te krijgen!" #~ msgid "New Feed" #~ msgstr "Nieuwe feed" #~ msgid "Next Unread" #~ msgstr "Volgende ongelezen" #~ msgid "Update All" #~ msgstr "Alle feeds updaten" #~ msgid "Viewing Mode" #~ msgstr "Itemlijst modus" #~ msgid "Switches between 2 and 3 pane mode." #~ msgstr "Tussen de samengestelde en normale itemlijst wisselen." #~ msgid "Liferea notification" #~ msgstr "Liferea notificatie" #~ msgid "/_New/New _Subscription..." #~ msgstr "/_Toevoegen/_Feed..." #~ msgid "/_New/New F_older..." #~ msgstr "/_Toevoegen/_Map..." #~ msgid "/_New/New _VFolder..." #~ msgstr "/_Toevoegen/_VFolder..." #~ msgid "/_Properties..." #~ msgstr "/_Eigenschappen..." #~ msgid "/_Delete Folder" #~ msgstr "/Map _verwijderen" #~ msgid "/Toggle _Read Status" #~ msgstr "/Ge_lezen aan of uit" #~ msgid "/Toggle Item _Flag" #~ msgstr "/Markering aan of uit" #~ msgid "/_Next Unread Item" #~ msgstr "/Volge_nde ongelezen item" #~ msgid "/_Increase Text Size" #~ msgstr "/Tekst ver_groten" #~ msgid "/_Decrease Text Size" #~ msgstr "/Tekst ver_kleinen" #~ msgid "/Toggle _Online|Offline" #~ msgstr "/_Online|offline modus wisselen" #~ msgid "/_Preferences..." #~ msgstr "/_Eigenschappen..." #~ msgid "/_Show Window" #~ msgstr "/Venster _tonen" #, fuzzy #~ msgid "Update only feeds scheduled for updates" #~ msgstr "Alleen feeds die staan ingepland updaten" #~ msgid "Reset feed update timers (Update no feeds)" #~ msgstr "Feedupdate timers resetten (geen feeds updaten)" #~ msgid "Please do a search first!" #~ msgstr "Geef eerst een zoekopdracht!" #~ msgid "New VFolder" #~ msgstr "Nieuwe VFolder" #~ msgid "URL" #~ msgstr "URL" #~ msgid "" #~ "%s\n" #~ "%d unread item%s\n" #~ "%d unread items" #~ msgstr "" #~ "%s\n" #~ "%d ongelezen item%s\n" #~ "%d ongelezen items" #~ msgid "" #~ "The included HTML tag is not supported with GtkHTML2.\n" #~ "Included Plugins might not be displayed." #~ msgstr "" #~ "De HTML tag in het item wordt niet door GtkHTML2 ondersteund.\n" #~ "Plugins op de pagina worden misschien niet weergegeven." liferea-1.12.7/po/pl.po000066400000000000000000002026001352135647700146170ustar00rootroot00000000000000# Polish translation for liferea package. # Copyright (C) 2004, 2005 Jakub W. Jóźwicki # Copyright (C) 2006, 2007 Free Software Foundation # This file is distributed under the same license as the liferea package. # Jakub W. Jozwicki , 2004, 2005. # Bart Kreska , 2006, 2007. # Piotr Sokół , 2013. # msgid "" msgstr "" "Project-Id-Version: liferea 1.10-rc1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2013-05-17 11:55+0200\n" "Last-Translator: Piotr Sokół \n" "Language-Team: Polish \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=((n==1) ? 0 : ((n%10>=2 && n%10<=4 && (n" "%100<10 || n%100>=20)) ? 1 : 2));\n" "X-Generator: Gtranslator 2.91.5\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Czytnik wiadomości" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Program działa w trybie rozłączonym" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 #, fuzzy msgid "Play Podcasts" msgstr "Podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Czytnik wiadomości" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Czytnik wiadomości RSS Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Odczytuje zawartość kanałów wiadomości i blogów" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Subskrypcja tego kanału została zakończona i nie jest już możliwa. Program " "nie będzie go uaktualniać, ale dostęp do pobranych nagłówków pozostanie " "zachowany." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "Ostatnia aktualizacja tej subskrypcji nie powiodła się!
        Kod błędu " "HTTP : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Wystąpiły błędy podczas przetwarzania bieżącej subskrypcji!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Szczegóły błędów parsera" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Szczegóły" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "Można powiadomić o tej sytuacji autora/opiekuna tego kanału!" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Wystąpiły błędy podczas filtrowania bieżącego kanału!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Filtruj szczegóły błędów" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Kanał:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Adres źródłowy:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Wydawca" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Copyright" # Example: 20 children with 12 unread headlines #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "elementów zawierających" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "nieprzeczytanych nagłówków" # -- #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Katalog:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Zasób" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Kanał" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Zaszeregowany w" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Autor" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Udostępnił " #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Za" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Zmień nazwę" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Opublikowane również w" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Autor" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Komentarze" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Uaktualnianie..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Sekcja" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Wydział" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Kosz:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Aby dodać nagłówek do kosza, należy wybrać z menu podręcznego polecenie " "„Skopiuj do kosza”." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Katalog wyników:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Nie udało się wykonać polecenia przeglądarki: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Uruchamianie: „%s”" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Błąd uwierzytelniania" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Nie można utworzyć katalogu pamięci podręcznej „%s”!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" # %l hour ( 1..12) -> %k hour ( 0..23) # %p (AM/PM) is not used in Poland #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Dzisiaj %k:%M" # j.w. #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Wczoraj %k:%M" # j.w. + %a (wto) -> %A (wtorek) #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%A %k:%M" # j.w. %b (sty) -> %B (styczeń) #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d %B %k:%M" # j.w. #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d %B %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "Plik „%s” nie jest prawidłowym plikiem konfiguracyjnym!" #: ../src/enclosure.c:292 #, fuzzy msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Nie skonfigurowano programu służącego do pobierania! Wymagane ustawienia " "można znaleźć na karcie „Pobieranie”, w oknie preferencji programu." #: ../src/enclosure.c:311 #, fuzzy, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Nie udało się wykonać polecenia:\n" "\n" "%s\n" "\n" " Proszę sprawdzić czy zainstalowano i skonfigurowano program służący do " "pobierania! Wymagane ustawienia można znaleźć na karcie „Pobieranie”, w " "oknie preferencji programu." #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Błąd zmieniania nazwy z %s na %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "Błąd XML czytania pliku OPML! Nie można zaimportować pliku „%s”!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "Pusty dokument! Importowany dokument OPML „%s” nie może być pusty." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "Plik „%s” nie jest prawidłowym dokumentem OPML! Nie można zaimportować tego " "pliku!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Lista zaimportowanych subskrypcji" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importuj listę subskrypcji" #: ../src/export.c:481 msgid "Import" msgstr "Zaimportuj" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "Pliki OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Błąd eksportowania listy subskrypcji!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Wyeksportowano listę subskrypcji!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Eksportuj listę subskrypcji" #: ../src/export.c:498 msgid "Export" msgstr "Wyeksportuj" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        Nie można rozpoznać typu subskrypcji! Proszę sprawdzić czy adres źródłowy " "wskazuje na zasób będący w jednym z obsługiwanych formatów subskrypcji!Wydruk z parsera XML:

        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "Uaktualniono „%s”..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "„%s” nie jest dostępne" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "Wprowadzony adres URL wskazuje na witrynę internetową, lecz nie udało się " "wykryć na niej żadnego kanału subskrypcji. Możliwe, że ta witryna nie " "obsługuje automatycznego wykrywania subskrypcji." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "Błąd XML czytania kanału! Nie można wczytać zawartości kanału „%s”!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Pusty dokument!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Nieprawidłowy XML!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Adres źródłowy wskazuje na dokument HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Nie można określić typu subskrypcji." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Brak nieprzeczytanych nagłówków " #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Uruchamia program ustalając STAN jego okna. Parametr STAN może przybierać " "wartość „shown”, „iconified” lub „hidden”." #: ../src/liferea_application.c:282 msgid "STATE" msgstr "STAN" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Wypisuje informacje o wersji i kończy działanie" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Dodaje nową subskrypcję" #: ../src/liferea_application.c:284 msgid "uri" msgstr "URI" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Wypisuje wszystkie komunikaty diagnozowania błędów" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Wypisuje komunikaty diagnozowania błędów pamięci podręcznej" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Wypisuje komunikaty diagnozowania błędów konfiguracji" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Wypisuje komunikaty diagnozowania błędów bazy danych" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Wypisuje komunikaty diagnozowania błędów interfejsu graficznego" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Włącza diagnozowanie błędów renderowania HTML. Za każdym razem kiedy program " "renderuje kod HTML, wygenerowany kod zastanie również zapisany do pliku ~/." "cache/liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Wypisuje komunikaty diagnozowania błędów połączeń sieciowych" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Wypisuje komunikaty diagnozowania błędów funkcji przetwarzania" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Wypisuje komunikaty diagnozowania błędów, jeśli funkcja przetwarzana jest " "zbyt długo" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "" "Wypisuje komunikaty diagnozowania błędów podczas uruchamiania/kończenia " "działania funkcji" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Wypisuje komunikaty diagnozowania błędów uaktualniania kanałów" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "" "Wypisuje komunikaty diagnozowania błędów dopasowywania katalogów wyników" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Wypisuje dodatkowe komunikaty diagnozowania błędów" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Wypisuje informacje diagnozowania błędów na dany temat" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Anulowano żądanie uaktualnienia" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Nie można określić nazwy komputera docelowego" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Nie można określić nazwy komputera pośrednika" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Nie można nawiązać połączenia ze zdalnym komputerem" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Nie można nawiązać połączenia z pośrednikiem" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "Wystąpił błąd sieci lub z innego powodu połączenie zostało niespodziewanie " "przerwane" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Zasób został przeniesiony w inne położenie" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Nie uwierzytelniono dostępu do tego kanału. Proszę uaktualnić nazwę " "użytkownika i hasło w oknie ustawień kanału." #: ../src/net.c:476 msgid "Payment required" msgstr "Wymagane uiszczenie opłaty" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Brak dostępu do tego zasobu" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Zasób nie odnaleziony" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Niedozwolona metoda" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Nieakceptowalne" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Wymagane uwierzytelnienie pośrednika sieciowego (proxy)" #: ../src/net.c:482 msgid "Request timed out" msgstr "Upłynął limit czasu żądania" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Zasób nie istnieje. Proszę usunąć subskrypcję!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Wystąpił wewnętrzny błąd podczas uaktalniania" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Subskrypcja niedostępna: serwer zażądał nieobsługiwanego przekierowania!" #: ../src/net.c:492 msgid "Client Error" msgstr "Błąd klienta" #: ../src/net.c:494 msgid "Server Error" msgstr "Błąd serwera" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Wystąpił nieznany błąd sieciowy!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Nagłówek" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "zawiera" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "nie zawiera" #: ../src/rule.c:175 msgid "Item title" msgstr "Tytuł nagłówka" #: ../src/rule.c:176 msgid "Item body" msgstr "Treść nagłówka" #: ../src/rule.c:177 msgid "Read status" msgstr "Stan przeczytania" #: ../src/rule.c:177 msgid "is unread" msgstr "nieprzeczytany" #: ../src/rule.c:177 msgid "is read" msgstr "przeczytany" #: ../src/rule.c:178 msgid "Flag status" msgstr "Stan wyróżnienia" #: ../src/rule.c:178 msgid "is flagged" msgstr "wyróżniony" #: ../src/rule.c:178 msgid "is unflagged" msgstr "niewyróżniony" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "dołączony" #: ../src/rule.c:179 msgid "not included" msgstr "nie dołączony" #: ../src/rule.c:180 msgid "Category" msgstr "Kategoria" #: ../src/rule.c:180 msgid "is set" msgstr "ustalona" #: ../src/rule.c:180 msgid "is not set" msgstr "nieustalona" #: ../src/rule.c:181 msgid "Feed title" msgstr "Nazwa kanału" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Subskrypcja „%s” jest w trakcie uaktualniania!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "Subskrypcja „%s” została zakończona. Program nie będzie jej więcej " "uaktualniać!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Uaktualnianie ikony dla „%s”" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Wystąpił problem podczas czytania subskrypcji. Proszę sprawdzić poprawność " "adresu URL oraz komunikaty błędów." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "Adres URL „%s” zmienił się i został uaktualniony" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "" "Subskrypcja kanału „%s” została zakończona. Program nie będzie go więcej " "uaktualniać!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "" "Zawartość kanału „%s” nie zmieniła się od czasu ostatniego uaktualniania" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Uaktualnianie „%s”" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Błąd otwierania pliku tymczasowego %s, wymaganego do filtrowania!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s zakończył ze stanem %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Błąd: nie można otworzyć potoku „%s”" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Błąd: nie można otworzyć pliku „%s”" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Błąd: nie ma takiego pliku „%s”" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Nowy katalog wyników" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Wystąpiło więcej błędów. Komunikat został skrócony!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "Parser XML: nie można przetworzyć dokumentu:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Załączniki" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " Bajtów" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d załącznik" msgstr[1] "%d załączniki" msgstr[2] "%d załączników" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Wybór pliku" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Rozszerzenie pliku .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Nie można odnaleźć pliku pixmapy: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] "(%d nowa)" msgstr[1] "(%d nowe)" msgstr[2] "(%d nowych)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d nieprzeczytana%s" msgstr[1] "%d nieprzeczytane%s" msgstr[2] "%d nieprzeczytanych%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Tematy pomocy" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Streszczenie" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "Najczęściej zadawane pytania" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Zaawansowane" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Proszę wprowadzić nazwę użytkownika i hasło dla „%s” (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Nieznany zasób" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "Anuluj _wszystkie" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Wszystkie pliki" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Program działa w trybie rozłączonym. Uaktualnienia nie są możliwe." # Skrócone (toolbar) #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Wyszukiwanie" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Oznacz wszystkie jako przeczytane" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Usunąć „%s”?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Ten nagłówek nie posiada przypisanego odnośnika!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Bez tytułu ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Nagłówek" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Należy zaznaczyć kanał, aby usunąć jego nagłówki!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Nie zanzaczono żadnego nagłówka" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Otwórz w nowej _karcie" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "_Otwórz w panelu" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Otwórz w p_rzeglądarce internetowej" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Skopiuj do kosza" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "_Opublikuj na %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "Skopiuj adres _nagłówka" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Przełącz oznaczenie p_rzeczytania" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Przełącz _wyróżnienie" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "_Usuń nagłówek" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Otwórz załącznik..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Zapisz jako..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Skopiuj adres odnośnika" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Uaktualnij" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Uaktualnij katalog" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Nowa _subskrypcja..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Nowy _katalog..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Nowy katalog _wyników..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Nowy _zasób..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Nowy _kosz..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Nowy" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Posortuj kanały" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_Oznacz wszystkie jako przeczytane" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "_Wczytaj ponownie" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Właściwości..." #: ../src/ui/popup_menu.c:343 #, fuzzy msgid "Convert To Local Subscriptions..." msgstr "_Nowa subskrypcja..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "Domyślne ustawienia GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Etykiety poniżej ikon" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Etykiety obok ikon" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Tylko ikony" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Tylko etykiety" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minut" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "godzin" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dni" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Spacja" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Spacja" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Spacja" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Zwykły" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Szeroki" # Skrocone (toolbar) #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Połączony" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Domyślna przeglądarka" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Własne polecenie" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Typ" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Pusty)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Ponowne wczytywanie zawartości" # WTF? #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Usuwanie nagłówka" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Usunąć „%s” wraz z całą zawartością?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Usunąć „%s”?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Potwierdzenie usuwania" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Potwierdzenie usuwania" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "Zalecana częstość uaktualniania kanału wynosi %d minutę." msgstr[1] "Zalecana częstość uaktualniania kanału wynosi %d minuty." msgstr[2] "Zalecana częstość uaktualniania kanału wynosi %d minut." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Kanał nie posiada domyślnej częstości uaktualniania." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Nieograniczony" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Witryna internetowa" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%B %d %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nowa subskrypcja" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planety, Blogrolle, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Wybór pliku OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Nowa subskrypcja OPML" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Nie znaleziono typu źródła subskrypcji!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Rodzaj źródła:" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Nie udało się zalogować do konta Google Reader!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 #, fuzzy msgid "Could not parse JSON returned by Reedah API!" msgstr "Nie można przetworzyć danych JSON zwróconych przez API tt-rss!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 #, fuzzy msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "Nie można przetworzyć danych JSON zwróconych przez API tt-rss!" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Czytnik wiadomości" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Otwórz odnośnik w _karcie" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "_Otwórz odnośnik" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "_Otwórz odnośnik w przeglądarce" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_Opublikuj odnośnik na %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Skopiuj adres odnośnika" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "Z_apisz obraz jako" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "_Skopiuj adres obrazu" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "_Zapisz odnośnik jako..." #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "Z_apisz obraz jako" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Subskrybuj..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "Z_większ rozmiar tekstu" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "Z_mniejsz rozmiar tekstu" #: ../glade/about.ui.h:1 msgid "About" msgstr "O Programie" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Odczytuje zawartość kanałów wiadomości, wykorzystując interfejs GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Strona główna programu" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Uwierzytelnianie" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Nazwa użytkownika:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Hasło:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Otwieranie załącznika" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Pobieranie załącznika typu:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Co zrobić z tym załącznikiem? Proszę wprowadzić polecenie do wykonania. " "Adres URL pliku zostanie przekazany jako parametr:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "Prze_glądaj" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Wykonywanie tej czynności automatycznie dla tego typu plików" #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Dodawanie konta Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Proszę wprowadzić dane konta Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Hasło:" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_Nazwa użytkownika (adres e-mail)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Pokaż nagłówki" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Nagłówki" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Oznacz wszystkie jako przeczytane" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Oznacz wszystkie jako przeczytane" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Nowy katalog" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "Na_zwa katalogu:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Tworzenie nowego kosza" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Nazwa kosza:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Zasób subskrypcji" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Rodzaj:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "Adres _URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Polecenie" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "P_lik lokalny" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Wskaż plik..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Adres źródłowy:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Pobieranie / przetwarzanie" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "Pobieranie _bez użycia pośrednika" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Używanie _filtra konwertującego" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Program może używać zewnętrznych wtyczek filtrujących, aby uzyskać dostęp do " "subskrypcji i katalogów w nieobsługiwanych formatach. Więcej informacji na " "ten temat można znaleźć w dokumentacji programu." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "_Konwertowanie za pomocą:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Wybór zasobu" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Proszę wybrać rodzaj dodawanego zasobu..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Dodawanie OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Proszę wprowadzić ścieżkę pliku lokalnego lub adres URL subskrypcji OPML." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Położenie:" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Wskaż plik..." #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Preferencje Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Pamięć podręczna" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "Domyślna _ilość przechowywanych nagłówków:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Uaktualnianie" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Uwaga: proszę wprowadzić rozsądną wartość. Uaktualnianie subskrypcji " "częściej niż co godzinę, zwykle niepotrzebnie obciąża łącze." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "_Uaktualnianie wszystkich subskrypcji podczas uruchamiania" #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Domyślna _częstość uaktualnień subskrypcji:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Kanały" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Wyświetlanie" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "_Wyświetlanie wszystkich nagłówków subskrypcji zaznaczonego katalogu" #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "_Ukrywanie przeczytanych nagłówków" #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Ikony kanałów" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Uaktualnij wszystkie ikony" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Katalogi" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Czytanie" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "_Skrót klawiszowy służący do przełączania artykułów:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "_Domyślny widok:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Integracja z usługami sieciowymi" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Publikowanie odnośników:" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Wbudowana przeglądarka" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Otwieranie odnośników w _oknie programu" #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "Wyłączenie Java_script" #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_Włączenie wtyczek" #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Zewnętrzna przeglądarka" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Przeglądarka:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Własne polecenie:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(parametr %s zostanie zastąpiony adresem URL)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Przeglądarka" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Pasek narzędziowy" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Ukrywanie" #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Etykiety p_rzycisków:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Interfejs" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "Serwer pośrednika sieciowego" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Automatyczne wykrywanie (GNOME)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Brak" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Ręczne ustawienia:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Pośrednik:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Port:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "_Uwierzytelnianie pośrednika" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "_Nazwa użytkownika:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "_Hasło:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Pośrednik" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Wyświetlanie" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Pobieranie" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "Po_bieranie za pomocą programu:" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Otwieranie" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Załączniki" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Właściwości subskrypcji" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Nazwa kanału" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Nazwa:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Częstość uaktualniania" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Używanie domyślnych wartości globalnych" #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_Określenie indywidualnej częstości uaktualniania:" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Pomijanie automatycznego uaktualniania" #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Dostawca tego kanału zaleca jego uaktualnianie co %d minut." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Ogólne" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Program może używać zewnętrznych wtyczek filtrujących, aby uzyskać dostęp do " "subskrypcji i katalogów w nieobsługiwanych formatach. Więcej informacji na " "ten temat można znaleźć w dokumentacji programu." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Konfiguracja pamięci podręcznej określa czy zawartości kanałów są zapisywane " "podczas kończenia działania programu. Zaznaczone nagłówki są zawsze " "przechowywane w pamięci podręcznej." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "_Domyślne ustawienia pamięci podręcznej" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Wyłączenie pamięci podręcznej" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Nieograniczony rozmiar pamięci podręcznej" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "Domyślna _ilość przechowywanych nagłówków:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Archiwizowanie" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Używanie _uwierzytelniania HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Pobieranie" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_Automatyczne pobieranie załączników" #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Automatyczne _otwieranie zaznaczonych nagłówków w przeglądarce internetowej" #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorowanie kanałów _komentarzy" #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "O_znaczanie pobranych nagłówków jako przeczytane" #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Zaawansowane" #: ../glade/reedah_source.ui.h:1 #, fuzzy msgid "Add Reedah Account" msgstr "Dodawanie konta Google Reader" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Proszę wprowadzić dane konta Google Reader." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Zmiana nazwy" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Nowa nazwa:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Właściwości katalogu wyników" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "_Nazwa wyszukiwania:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Wyszukanie nagłówków spełniających następujące kryteria" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Dopasowanie j_akiejkolwiek reguły" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "Dopasowanie _wszystkich reguł" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Zaawansowane" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "Utwórz _katalog wyników" # Skrócone (toolbar) #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Wyszukiwanie" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Zaawansowane..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Rozpoczyna wyszukiwanie tekstu we wszystkich subskrypcjach. Wyniki pojawią " "się na liście nagłówków." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Wyszukiwanie tekstu:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Wprowadza wyrażenie do wyszukania w tytułach nagłówków lub w ich zawartości" #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Zaawansowane..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Proszę wprowadzić adres URL witryny internetowej, aby automatycznie wykryć " "dostępne subskrypcje lub znany, bezpośredni adres subskrypcji." #: ../glade/theoldreader_source.ui.h:1 #, fuzzy msgid "Add TheOldReader Account" msgstr "Dodawanie konta Google Reader" #: ../glade/theoldreader_source.ui.h:2 #, fuzzy msgid "Please enter your TheOldReader account settings." msgstr "Proszę wprowadzić dane konta Google Reader." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Dodawanie konta Tiny Tiny RSS" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "Proszę wprowadzić ustawienia konta tt-rss." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "Adres URL _serwera:" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Nazwa użytkownika:" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Monitor uaktualniania" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "Anuluj _wszystkie" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Oczekujące" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Pobierane" #~ msgid "_Subscriptions" #~ msgstr "_Subskrypcje" # Skrócone (toolbar) #~ msgid "Update _All" #~ msgstr "Uaktualnij _wszystkie" #~ msgid "Updates all subscriptions." #~ msgstr "Uaktualnia wszystkie subskrypcje" #~ msgid "Mark All As _Read" #~ msgstr "_Oznacz wszystkie jako przeczytane" #~ msgid "Marks read every item of every subscription." #~ msgstr "Oznacza wszystkie nagłówki każdej subskrypcji jako przeczytane" #~ msgid "_Import Feed List..." #~ msgstr "_Importuj listę subskrypcji..." #~ msgid "Imports an OPML feed list." #~ msgstr "Importuje listę kanałów z pliku w formacie OPML" #~ msgid "_Export Feed List..." #~ msgstr "_Eksportuj listę subskrypcji..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Eksportuje listę kanałów do pliku w formacie OPML" #~ msgid "_Quit" #~ msgstr "Za_kończ" #~ msgid "_Feed" #~ msgstr "_Kanał" #~ msgid "Remove _All Items" #~ msgstr "Usuń _wszystkie nagłówki" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Usuwa wszystkie nagłówki z zaznaczonego kanału" # Subskypcje, Wiadomości, Nagłówki - l. mnoga #~ msgid "_Item" #~ msgstr "_Nagłówek" #~ msgid "Previous Item" #~ msgstr "Poprzedni" # Skrócone (toolbar) #~ msgid "Next Item" #~ msgstr "Następny" # Skrócone (toolbar) #~ msgid "_Next Unread Item" #~ msgstr "_Następny nieprzeczytany" #~ msgid "_View" #~ msgstr "_Widok" #~ msgid "Increases the text size of the item view." #~ msgstr "Zwiększa rozmiar tekstu wyświetlanego artykułu" #~ msgid "Decreases the text size of the item view." #~ msgstr "Zmniejsza rozmiar tekstu wyświetlanego artykułu" #~ msgid "_Tools" #~ msgstr "_Narzędzia" #~ msgid "_Update Monitor" #~ msgstr "_Monitor uaktualniania" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Wyświetla listę kanałów oczekujących na uaktualnienie" #~ msgid "_Preferences" #~ msgstr "P_referencje" #~ msgid "Edit Preferences." #~ msgstr "Konfiguruje ustawienia programu" #~ msgid "S_earch" #~ msgstr "_Wyszukiwanie" # Skrocone (toolbar) #~ msgid "Search All Feeds..." #~ msgstr "Wyszukaj..." #~ msgid "Show the search dialog." #~ msgstr "Wyświetla okno wyszukiwania" #~ msgid "_Help" #~ msgstr "Pomo_c" #~ msgid "_Contents" #~ msgstr "_Spis treści" #~ msgid "View help for this application." #~ msgstr "Wyświetla zawartość podręcznika użytkownika programu" #~ msgid "_Quick Reference" #~ msgstr "_Streszczenie" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Wyświetla listę skrótów klawiszowych programu" #~ msgid "_FAQ" #~ msgstr "_Najczęściej zadawane pytania" #~ msgid "View the FAQ for this application." #~ msgstr "" #~ "Wyświetla najczęściej zadawane pytania i odpowiedzi związane z programem" #~ msgid "_About" #~ msgstr "_O programie" #~ msgid "Shows an about dialog." #~ msgstr "Wyświetla informacje o programie" #~ msgid "_Normal View" #~ msgstr "_Zwykły" #~ msgid "Set view mode to mail client mode." #~ msgstr "Przełącza typ widoku znany z programów pocztowych" #~ msgid "_Wide View" #~ msgstr "_Szeroki" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "" #~ "Przełącza typ widoku wyświetlający zawartość w trzech pionowych panelach" # Skrocone (toolbar) #~ msgid "_Combined View" #~ msgstr "_Połączony" #~ msgid "Set view mode to two pane mode." #~ msgstr "Przełącza typ widoku wyświetlający zawartość w dwóch panelach" #~ msgid "_Reduced Feed List" #~ msgstr "_Skrócona lista subskrypcji" #~ msgid "Hide feeds with no unread items." #~ msgstr "Ukrywa na liście kanały nie zawierające nieprzeczytanych nagłówków" #~ msgid "_New Subscription..." #~ msgstr "_Nowa subskrypcja..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Dodaje do listy kanałów nową subskrypcję" #~ msgid "Adds a folder to the feed list." #~ msgstr "Tworzy nowy katalog na liście kanałów" #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Tworzy nowy katalog wyszukiwania na liście subskrypcji" #~ msgid "New _Source..." #~ msgstr "Nowy _zasób..." #~ msgid "Adds a new feed list source." #~ msgstr "Dodaje nowy zasób do listy kanałów" #~ msgid "Adds a new news bin." #~ msgstr "Tworzy nowy kosz wiadomości" #~ msgid "_Mark Items Read" #~ msgstr "_Oznacz jako przeczytane" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Oznacza wszystkie nagłówki zaznaczonej subskrypcji lub cały zaznaczony " #~ "katalog jako przeczytane." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Uaktualnia zaznaczoną subskrypcję lub wszystkie subskrypcje w zaznaczonym " #~ "katalogu" #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Otwiera okno właściwości zaznaczonej subskrypcji" #~ msgid "_Remove" #~ msgstr "_Usuń" #~ msgid "Removes the selected subscription." #~ msgstr "Usuwa zaznaczone subskrypcje" #~ msgid "Toggles the read status of the selected item." #~ msgstr "Przełącza oznaczenie przeczytania zaznaczonego nagłówka" #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Przełącza wyróżnienie zaznaczonego nagłówka" #~ msgid "R_emove" #~ msgstr "_Usuń" #~ msgid "Removes the selected item." #~ msgstr "Usuwa zaznaczony nagłówek" #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Otwiera odnośnik nagłówka w nowej karcie programu" #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Otwiera odnośnik nagłówka w panelu programu" #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Otwiera odnośnik nagłówka w zewnętrznej przeglądarce internetowej" #~ msgid "_Fullscreen" #~ msgstr "_Pełny ekran" #~ msgid "Browse at full screen" #~ msgstr "Wyświetla zawartość na pełnym ekranie" #~ msgid "_Work Offline" #~ msgstr "_Tryb rozłączony" #~ msgid "_Update All" #~ msgstr "_Uaktualnij wszystkie" #~ msgid "_Show Liferea" #~ msgstr "_Wyświetlanie okna programu" #, fuzzy #~ msgid "InoReader" #~ msgstr "Google Reader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Uwaga: nazwa użytkownika i hasło zostaną zapisane w pliku subskrypcji " #~ "w postaci niezaszyfrowanej." #, fuzzy #~ msgid "Add InoReader Account" #~ msgstr "Dodawanie konta Google Reader" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "Proszę wprowadzić dane konta Google Reader." #~ msgid "Plugins" #~ msgstr "Wtyczki" #~ msgid "normal view" #~ msgstr "widok zwykły" #~ msgid "wide view" #~ msgstr "widok szeroki" #~ msgid "combined view" #~ msgstr "widok połączony" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, czytnik wiadomości dla systemu Linux" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "" #~ "Więcej informacji można znaleźć na stronie https://lzone.de/liferea/" #~ msgid "_Open Link In Browser" #~ msgstr "_Otwórz odnośnik" #~ msgid "_Open Link In External Browser" #~ msgstr "_Otwórz odnośnik w przeglądarce" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Utwórz kanał modułu wyszukiwania" #~ msgid "enter any search string you want" #~ msgstr "wpisz frazę do wyszukania" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "_Maksymalna ilość nagłówków w wynikach:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Informacja: Liferea wygeneruje subskrypcję, która jest używana do " #~ "odpytywania wyszukiwarek o zadaną frazę. Możesz ją subskrybować na stałe " #~ "i uaktualniać tak jak inne subskrypcje. " #~ msgid "Liferea is now online" #~ msgstr "Program działa w trybie połączonym" #~ msgid "Work Offline" #~ msgstr "Przełącza w tryb rozłączony" #~ msgid "Liferea is now offline" #~ msgstr "Program działa w trybie rozłączonym" #~ msgid "Work Online" #~ msgstr "Przełącza w tryb połączony" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Blokuje uaktualnianie subskrypcji" # Otworz odnosnik w: -> #~ msgid "Browser default" #~ msgstr "Domyślne zachowanie" #~ msgid "Existing window" #~ msgstr "W bieżącym oknie" #~ msgid "New window" #~ msgstr "W nowym oknie" #~ msgid "New tab" #~ msgstr "W nowej karcie" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Czytnik wiadomości" #~ msgid "Online/Offline Button" #~ msgstr "Przycisk Online/Offline" #~ msgid "_Open link in:" #~ msgstr "_Otwieranie odnośników:" #~ msgid "No comments yet." #~ msgstr "Brak komentarzy." #~ msgid "Refresh" #~ msgstr "Wczytaj ponownie" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - czytnik wiadomości dla systemu Linux" #~ msgid "" #~ "

        Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

        You can add new subscriptions

        • From main menu " #~ "'Subscription' -> 'New Subscription'
        • By dropping feed links " #~ "into the subscription list
        • By right clicking links and choosing " #~ "'Subscribe' within Liferea

        " #~ msgstr "" #~ "

        Witamy w programie Liferea, czytniku wiadomości sieciowych.

        Po lewej stronie okna znajduje się lista kanałów. Nową subskrypcję " #~ "można utworzyć na kilka sposobów:

        • wybierając polecenie „Nowa " #~ "subskrypcja” z menu „Subskrypcje”,
        • przeciągnąć odnośnik kanału na " #~ "listę subskrypcji,
        • wybierając polecenie „Subskrybuj” z menu " #~ "podręcznego odnośnika.

        " #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "Zintegrowanie z menu wiadomości" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Kończenie programu zamiast minimalizowania do menu wiadomości" #~ msgid "Start minimized to the messaging menu" #~ msgstr "Uruchamia" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d nowy nagłówek" #~ msgstr[1] "%d nowe nagłówki" #~ msgstr[2] "%d nowych nagłówków" #~ msgid "No new items" #~ msgstr "Brak nowych nagłówków" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d nieprzeczytany nagłówek" #~ msgstr[1] "" #~ "%s\n" #~ "%d nieprzeczytane nagłówki" #~ msgstr[2] "" #~ "%s\n" #~ "%d nieprzeczytanych nagłówków" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Brak nieprzeczytanych nagłówków" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Nieprawidłowy kanał Atom: nieznany autor" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Dołącza listę kanałów konta Google Reader. Program wyświetli subskrypcje " #~ "Google Reader i będzie synchronizować listy kanałów oraz czytania." # Blogrolle -> Blogrole? #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Dołącza listy kanałów Blogroll i Planet. Program będzie automatycznie " #~ "dodawał i usuwał kanały zgodnie ze zmianami źródłowego dokumentu OPML." #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Dołącza listy kanałów konta Tiny Tiny RSS 1.5+. Program wyświetli " #~ "subskrypcje tt-rss i będzie synchronizować listy kanałów oraz czytania." #~ msgid "This feed does not exist anymore!" #~ msgstr "Ten kanał już nie istnieje!" #~ msgid "This news entry has no headline" #~ msgstr "Ta wiadomość nie posiada nagłówka" #~ msgid "Visit" #~ msgstr "Odwiedź" #~ msgid "Open feed" #~ msgstr "Otwórz kanał" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "%s posiada %d uaktualnienie" #~ msgstr[1] "%s posiada %d uaktualnienia" #~ msgstr[2] "%s posiada %d uaktualnień" #~ msgid "Feed Update" #~ msgstr "Uaktualnienie kanału" #~ msgid "Show details" #~ msgstr "Wyświetl szczegóły" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "_Wymuszenie wyświetlania podręcznych powiadomień" #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_Pomijanie wyświetlania podręcznych powiadomień" #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Copyright (c) 2003-2012\n" #~ "Zespół Liferea\n" #~ msgid "Notification Settings" #~ msgstr "Powiadamianie" #~ msgid "Show a _popup window with new headlines." #~ msgstr "_Okno podręczne z nowymi nagłówkami" #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "_Ikona stanu w obszarze powiadamiania" #~ msgid "Show _number of new items in the tray icon." #~ msgstr "I_lość nowych nagłówków wyświetlana w ikonie" #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "_Kończenie programu zamiast minimalizowania do ikony" #~ msgid "_Start in tray icon." #~ msgstr "_Minimalizowanie do ikony podczas uruchamiania" liferea-1.12.7/po/pt.po000066400000000000000000002444211352135647700146360ustar00rootroot00000000000000# Portuguese translation of liferea. # Copyright (C) 2005 Free Software Foundation, Inc. # # # # António Lima , 2007, 2009. msgid "" msgstr "" "Project-Id-Version: liferea\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2009-06-04 01:08+0000\n" "Last-Translator: António Lima \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Leitor de Fontes" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Liferea está desligado" #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "Sincronizado com Máquinas Próximas" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "Sincronizado com Máquinas Próximas" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "Sincronizado com Máquinas Próximas" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "Sincronizado com Máquinas Próximas" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 #, fuzzy msgid "Play Podcasts" msgstr "Podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Leitor de Fontes" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Leitor de Fontes Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Esta fonte foi interrompida, e não se encontra disponível. O Liferea não a " "actualizará mais, mas poderá ainda aceder aos títulos em cache." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "A última actualização desta subscrição falhou!
        Código de erro HTTP " ": " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Foram encontrados alguns erros ao processar esta fonte!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Detalhes dos Erros do Analisador" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Detalhes" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Foram encontrados alguns erros ao filtrar esta fonte!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Detalhes dos Erros do Filtro" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Fonte:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Fontes:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Editores" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Copyright" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "filhos com" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "títulos não lidos" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Pasta:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Fonte" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Fonte" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Arquivado sob" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Autor" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Partilhado por" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Via" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Relacionado" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Também publicado em" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Criador" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Comentários" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "A Actualizar..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Secção" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Departamento" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Recipiente de Notícias:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Adicione itens a este recipiente de notícias seleccionando \"Copiar para o " "Recipiente de Notícias\" da lista de itens no menu de contexto." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Pasta de Procura:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Falha ao iniciar o navegador: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "A iniciar: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Erro de Autorização" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Não foi possível criar o directório de cache \"%s\"!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Hoje %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Ontem %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d de %b %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d de %b %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "" "\"%s\" não é um tipo de ficheiro válido de configuração de componentes!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Erro ao renomear %s para %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "Erro de XML ao ler o ficheiro OPML! Não foi possível importar \"%s\"!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Documento vazio! O documento OPML \"%s\" não deve estar vazio ao importar." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" não é um documento OPML válido! O Liferea não pode importar este " "ficheiro!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Lista de fontes importadas" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importar Lista de Fontes" #: ../src/export.c:481 msgid "Import" msgstr "Importar" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 #, fuzzy msgid "OPML Files" msgstr "Escolher Ficheiro OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Erro ao exportar a lista de fontes!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Lista de fontes exportada!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Exportar Lista de Fontes" #: ../src/export.c:498 msgid "Export" msgstr "Exportar" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        Não foi possível detectar o tipo desta fonte! Por favor, verifique se a " "fonte realmente aponta para um recurso fornecido num dos formatos de " "subscrição suportados!

        Saída do Analisador de XML:
        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" actualizado..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" não está disponível" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "O URL que deseja subscrever com o Liferea aponta para uma página web mas a " "pesquisa automática não encontrou nenhuma fonte nesta página. Talvez esta " "página web não suporte a pesquisa automática de fontes." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "Erro de XML ao ler a fonte! Não foi possível carregar a fonte \"%s\"!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Documento vazio!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "XML inválido!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Fonte aponta para um documento em HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Não foi possível determinar o tipo de fonte." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 #, fuzzy msgid "There are no unread items" msgstr "Não há artigos não lidos " #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Iniciar o Liferea com a sua janela principal em ESTADO. ESTADO pode ser " "`apresentada', `iconificada', ou `oculta'" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "ESTADO" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Apresentar informações de versão e sair" #: ../src/liferea_application.c:284 #, fuzzy msgid "Add a new subscription" msgstr "Nova Subscrição" #: ../src/liferea_application.c:284 msgid "uri" msgstr "" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Imprimir mensagens de depuração de todos os tipos" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Imprimir mensagens de depuração para a gestão de cache" #: ../src/liferea_application.c:292 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "Imprimir mensagens de depuração da gestão de configuração" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Imprimir mensagens de depuração da gestão de bases de dados" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Imprimir mensagens de depuração de todas as funções de IGU" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Activa a depuração de renderização HTML. Todas as vezes que o Liferea " "renderiza HTML de saída irá também despejar o HTML gerado para ~/.cache/" "liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Imprimir mensagens de depuração de toda a actividade de rede" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Imprimir mensagens de depuração de todas as funções de parseamento" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Imprimir mensagens de depuração quando uma função demora demasiado a " "processar" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Imprimir mensagens de depuração ao carregar/sair de funções" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Imprimir mensagens de depuração do processo de actualização da fonte" #: ../src/liferea_application.c:301 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "Imprimir mensagens de depuração para a gestão de cache" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Imprimir mensagens de depuração verbosas" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Imprimir mensagens de depuração para o tópico dado" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "O pedido de actualização foi cancelado" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Incapaz de resolver o nome de máquina de destino" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Incapaz de resolver o nome de máquina proxy" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Incapaz de ligar à máquina remota" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Incapaz de ligar ao proxy" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "Ocorreu um erro de rede, ou o outro lado terminou a ligação inesperadamente" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "O recurso foi movido permanentemente para uma nova localização" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Não está autorizado a transferir esta fonte. Por favor, actualize o seu nome " "de utilizador e senha na caixa de diálogo de propriedades da fonte." #: ../src/net.c:476 msgid "Payment required" msgstr "Pagamento necessário" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Não tem autorização para aceder a este recurso" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Recurso Não Encontrado" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Método Não Permitido" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Não Aceitável" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Autenticação proxy requerida" #: ../src/net.c:482 msgid "Request timed out" msgstr "Tempo Esgotado" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Esta fonte não existe. Por favor, remova a sua subscrição!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Ocorreu um erro interno no processo de actualização" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Fonte não disponível: O Servidor solicitou um redireccionamento não " "suportado!" #: ../src/net.c:492 msgid "Client Error" msgstr "Erro do Cliente" #: ../src/net.c:494 msgid "Server Error" msgstr "Erro do Servidor" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Ocorreu um erro desconhecido de rede!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Item" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "contém" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "não contém" #: ../src/rule.c:175 msgid "Item title" msgstr "Título do item" #: ../src/rule.c:176 msgid "Item body" msgstr "Corpo do item" #: ../src/rule.c:177 msgid "Read status" msgstr "Estado de leitura" #: ../src/rule.c:177 msgid "is unread" msgstr "não lido" #: ../src/rule.c:177 msgid "is read" msgstr "lido" #: ../src/rule.c:178 msgid "Flag status" msgstr "Marcador de Estado" #: ../src/rule.c:178 msgid "is flagged" msgstr "sinalizado" #: ../src/rule.c:178 msgid "is unflagged" msgstr "não sinalizado" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "incluído" #: ../src/rule.c:179 msgid "not included" msgstr "não incluído" #: ../src/rule.c:180 msgid "Category" msgstr "Categoria" #: ../src/rule.c:180 msgid "is set" msgstr "está definido" #: ../src/rule.c:180 msgid "is not set" msgstr "não está definido" #: ../src/rule.c:181 msgid "Feed title" msgstr "Título do item" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "A subscrição \"%s\" já está a ser actualizada!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "A fonte \"%s\" foi descontinuada e não será mais actualizada pelo Liferea!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "A actualizar o ícone da fonte \"%s\"" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Foi encontrado um problema ao ler esta subscrição. Por favor, verifique o " "URL e a saída da consola." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "O URL de \"%s\" mudou permanentemente e foi actualizado" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" foi interrompido e não será mais actualizado pelo Liferea!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" não foi modificado desde a última actualização" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "A Actualizar \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Erro ao abrir ficheiro temporário %s para usar na filtragem!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s saiu com estado %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Erro: Não foi possível abrir a linha de processamento \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Erro: Não foi possível abrir o ficheiro \"%s\"" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Erro: O ficheiro \"%s\" não existe" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Nova Pasta de Procura" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Houveram mais erros. A saída foi truncada!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "Analisador XML: Não foi possível analisar o documento:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Anexos" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr "Bytes" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "KB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d anexo" msgstr[1] "%d anexos" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Escolher Ficheiro" #: ../src/ui/enclosure_list_view.c:444 #, fuzzy, c-format msgid "File Extension .%s" msgstr "Extensão de Ficheiro .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Não foi possível localizar o ficheiro de imagem: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] "(%d novo)" msgstr[1] "(%d novos)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d não lido%s" msgstr[1] "%d não lidos%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Tópicos de Ajuda" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Referência Rápida" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "FAQ" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Procura Avançada" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Digite o nome de utilizador e senha para \"%s\" (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Fonte desconhecida" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "C_ancelar Todos" #: ../src/ui/ui_common.c:211 #, fuzzy msgid "All Files" msgstr "Ficheiro _Local" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "O Liferea está em modo desligado. Não é possível actualizar." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Procurar em Todas as Fontes" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Ma_rcar todos como lidos" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Tem a certeza que deseja apagar \"%s\"?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Este item não possui um link especificado!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Sem título ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Títulos" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Seleccione um fonte para apagar os seus itens!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Nenhum item foi selecionado" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "" #: ../src/ui/popup_menu.c:111 #, fuzzy msgid "_Open In Browser" msgstr "_Abrir No Navegador" #: ../src/ui/popup_menu.c:115 #, fuzzy msgid "Open In _External Browser" msgstr "Configurações do Navegador Externo" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Copiar para o Recipiente de Notícias" #: ../src/ui/popup_menu.c:147 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "_Marcar Link em %s" #: ../src/ui/popup_menu.c:153 #, fuzzy msgid "Copy Item _Location" msgstr "_Copiar Localização do Link" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Alte_rnar para Lido ou Não Lido" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Alternar Sinalizador do Item" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "R_emover Item" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Abrir Componente..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Guardar Como..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Copiar Localização do Link" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Actualizar" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "Act_ualizar Pasta" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "_Nova Subscrição..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Nova _Pasta..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Nova Pasta de Procura..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Nova Fo_nte..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "_Novo Recipiente de Notícias..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Nova" #: ../src/ui/popup_menu.c:312 #, fuzzy msgid "Sort Feeds" msgstr "Importar Lista de Fontes" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_Marcar Todas Como Lidas" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Apagar" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Propriedades" #: ../src/ui/popup_menu.c:343 #, fuzzy msgid "Convert To Local Subscriptions..." msgstr "_Nova Subscrição..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "Por Omissão do GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Texto abaixo dos ícones" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Texto ao lado dos ícones" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Apenas ícones" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Apenas texto" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minutos" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "horas" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dias" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Espaço" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Espaço" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Espaço" #: ../src/ui/preferences_dialog.c:112 #, fuzzy msgid "Normal View" msgstr "Visualização _Normal" #: ../src/ui/preferences_dialog.c:113 #, fuzzy msgid "Wide View" msgstr "Visualização Alargada" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Combined View" msgstr "Visualização _Combinada" #: ../src/ui/preferences_dialog.c:476 #, fuzzy msgid "Default Browser" msgstr "Navegador por Omissão do GNOME" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Tipo" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Programa" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "A apagar entrada" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Tem a certeza que deseja apagar \"%s\" e todo o seu conteúdo?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Tem a certeza que deseja apagar \"%s\"?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Confirmar Exclusão" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Confirmar Exclusão" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "" "O fornecedor desta fonte sugere um intervalo de actualização de %d minuto." msgstr[1] "" "O fornecedor desta fonte sugere um intervalo de actualização de %d minutos." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Esta fonte não possui um intervalo de actualização por omissão." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d de %b %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nova Subscrição" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planeta, BlogRoll (lista de blogs), OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Escolher Ficheiro OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Nova Subscrição OPML" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Nenhum tipo de lista de fontes encontrado!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Tipo de Fonte" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Falha ao efectuar aceder ao Google Reader!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Leitor de Fontes" #: ../src/webkit/liferea_web_view.c:175 #, fuzzy msgid "Open Link In _Tab" msgstr "Abrir Link Em _Separador" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "_Abrir Link No Navegador" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "_Abrir Link No Navegador" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_Marcar Link em %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Copiar Localização do Link" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "_Ver" #: ../src/webkit/liferea_web_view.c:194 #, fuzzy msgid "_Copy Image Location" msgstr "_Copiar Localização do Link" #: ../src/webkit/liferea_web_view.c:197 #, fuzzy msgid "S_ave Link As" msgstr "Guardar Como..." #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Subscrever..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "_Aumentar Tamanho do Texto" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Diminuir Tamanho do Texto" #: ../glade/about.ui.h:1 msgid "About" msgstr "Sobre" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "O Liferea é um agregador de notícias para GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Página Web do Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autenticação" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "Nome de utilizador:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Senha:" #: ../glade/enclosure_handler.ui.h:1 #, fuzzy msgid "Open Enclosure" msgstr "Abrir Componente..." #: ../glade/enclosure_handler.ui.h:2 #, fuzzy msgid "Open an enclosure of type:" msgstr "A transferir um componente do tipo:" #: ../glade/enclosure_handler.ui.h:3 #, fuzzy msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "O que deve fazer o Liferea com este componente? Por favor, digite abaixo o " "comando a ser executado. Os componentes transferidos serão usados como um " "argumento para este comando:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Navegar" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "" "_Fazer isso automaticamente para componentes como este de agora em diante." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Adicionar Conta do Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Por favor insira a configuração de sua conta do Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Senha" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "Nome de _Utilizador (E-mail)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Ver Títulos" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Títulos" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Ma_rcar todos como lidos" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Ma_rcar todos como lidos" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Nova Pasta" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "N_ome da pasta:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Criar Recipiente de Notícias" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Nome do Recipiente de Notícias:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Fonte" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Tipo de Fonte:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Comando" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "Ficheiro _Local" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Seleccionar Ficheiro..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Fonte:" #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Transferência / Pós-Processamento" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "Não usar proxy para _transferir" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Usar _filtro de conversão" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "O Liferea pode usar plug-ins de filtros externos para aceder a fontes e " "directórios com formatos não suportados. Leia a documentação para mais " "informações." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "_Converter _usando:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Selecção de Fonte" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Seleccione o tipo de fonte que deseja adicionar..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Adicionar OPML/Planeta" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Por favor especifique um arquivo local ou URL apontando para uma lista " "válida de fonte OPML." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Localização" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Seleccionar Ficheiro" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Preferências do Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_Número por omissão de itens por fonte para guardar:" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "Feed Update Settings" msgstr "Actualização de Fonte" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Nota: Lembre-se de definir um intervalo de actualização razoável. " "Geralmente é um desperdício de tráfego actualizar fontes com uma frequência " "maior que uma vez por hora." #: ../glade/prefs.ui.h:8 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Actualizar todas as subscrições." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "_Intervalo Por Omissão de Actualização de Fontes:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Fontes" #: ../glade/prefs.ui.h:12 #, fuzzy msgid "Folder Display Settings" msgstr "Configurações de Exibição de Pastas" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "Mostrar os itens de todas as fontes quando uma pasta é _seleccionada." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "O_cultar itens já lidos." #: ../glade/prefs.ui.h:15 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Ícones das Fontes (Favicons)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "At_ualizar todos os favicons agora." #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Pastas" #: ../glade/prefs.ui.h:18 #, fuzzy msgid "Reading Headlines" msgstr "títulos não lidos" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Avançar pelos artigo_s rapidamente com:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:21 #, fuzzy msgid "Web Integration" msgstr "Orientação" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Publicar Marcadores em" #: ../glade/prefs.ui.h:24 #, fuzzy msgid "Internal Browser Settings" msgstr "Configurações do Navegador Interno" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Abrir links na _janela do Liferea." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Desactivar Javascript." #: ../glade/prefs.ui.h:27 #, fuzzy msgid "_Enable browser plugins." msgstr "Configurações do Navegador Externo" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "External Browser Settings" msgstr "Configurações do Navegador Externo" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Navegador:" #: ../glade/prefs.ui.h:30 #, fuzzy msgid "_Manual:" msgstr "Manual" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Navegador" #: ../glade/prefs.ui.h:34 #, fuzzy msgid "Toolbar Settings" msgstr "Etiquetas dos botões da barra de ferramentas:" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Ocultar barra de ferramentas." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Etiquetas dos botões da barra de ferramentas:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Interface Gráfica" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "Detectar _Automaticamente (GNOME ou ambiente)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "Sem Proxy" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "Configuração _Manual:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Servidor Proxy:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Porta do Proxy:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Usar Au_tenticação de Proxy" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "_Utilizador Proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Se_nha do Proxy:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Configurações de Exibição de Pastas" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 #, fuzzy msgid "Downloading Enclosures" msgstr "A Transferir Componente" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Transferir usando" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 #, fuzzy msgid "Opening Enclosures" msgstr "Abrir Componente..." #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Componentes" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Propriedades da Subscrição" #: ../glade/properties.ui.h:2 #, fuzzy msgid "Feed Name" msgstr "_Nome da Fonte:" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Nome da Fonte:" #: ../glade/properties.ui.h:4 #, fuzzy msgid "Update Interval" msgstr "Monitor de Actualização" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Usar o intervalo padrão de actualização." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_Intervalo de actualização específico de fonte de" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Não actualizar esta fonte de automaticamente." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Esta fonte sugere um intervalo de actualização de %d minutos." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Geral" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "O Liferea pode usar plug-ins de filtros externos para aceder a fontes e " "directórios com formatos não suportados. Leia a documentação para mais " "informações." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "As configurações do cache controlam se o conteúdo das fontes é guardado " "quando o Liferea encerrar. Os itens marcados são sempre guardados em cache." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "Configuração pa_drão da cache" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "De_sabilitar Cache" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "Cache _Ilimitada" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "_Número de itens a guardar:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Arquivo" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Usar _autenticação HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Transferência" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "Transferência _automática de todos componentes desta fonte." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Carregar automaticamente o _link do item no navegador configurado ao " "seleccionar artigos." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorar fontes de _comentários para esta subscrição." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Marcar itens transferidos com lidos." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Avançado" #: ../glade/reedah_source.ui.h:1 #, fuzzy msgid "Add Reedah Account" msgstr "Adicionar Conta do Google Reader" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Por favor insira a configuração de sua conta do Google Reader." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Renomear" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Novo Nome:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Propriedades da Pasta Virtual" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "Procurar _Nome:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 #, fuzzy msgid "Find Items that meet the following criteria" msgstr "Procurar itens que correspondam ao seguinte critério" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "_Qualquer Regra Coincidente" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "_Todas as Regras Coincidem" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Procura Avançada" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "Pasta de _Procura..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Procurar em Todas as Fontes" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Avançado..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Procura o texto especificado em todas as fontes. O resultado da procura irá " "ser exibido na lista de itens." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "Pesqui_sar por:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Digite o termo que o Liferea deve procurar nos títulos de itens ou nos seus " "conteúdos." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Avançado..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Digite o endereço de website a usar na pesquisa automática ou, caso conheça, " "o endereço exacto da fonte." #: ../glade/theoldreader_source.ui.h:1 #, fuzzy msgid "Add TheOldReader Account" msgstr "Adicionar Conta do Google Reader" #: ../glade/theoldreader_source.ui.h:2 #, fuzzy msgid "Please enter your TheOldReader account settings." msgstr "Por favor insira a configuração de sua conta do Google Reader." #: ../glade/ttrss_source.ui.h:1 #, fuzzy msgid "Add Tiny Tiny RSS Account" msgstr "Adicionar Conta do Bloglines" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "Por favor insira a configuração de sua conta do Bloglines." #: ../glade/ttrss_source.ui.h:3 #, fuzzy msgid "_Server URL" msgstr "Erro do Servidor" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "Nome de _Utilizador" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Monitor de Actualização" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "C_ancelar Todos" #: ../glade/update_monitor.ui.h:3 #, fuzzy msgid "Pending Requests" msgstr "Pedidos Pendentes" #: ../glade/update_monitor.ui.h:4 #, fuzzy msgid "Downloading Now" msgstr "A Transferir Agora" #~ msgid "_Subscriptions" #~ msgstr "_Subscrições" #~ msgid "Update _All" #~ msgstr "Ac_tualizar Todas" #~ msgid "Updates all subscriptions." #~ msgstr "Actualizar todas as subscrições." #~ msgid "Mark All As _Read" #~ msgstr "Ma_rcar Todos Como Lidos" #~ msgid "Marks read every item of every subscription." #~ msgstr "Marca todos itens de todas as subscrições como lidos." #~ msgid "_Import Feed List..." #~ msgstr "_Importar Lista de Fontes..." #~ msgid "Imports an OPML feed list." #~ msgstr "Importa uma lista OPML de fontes." #~ msgid "_Export Feed List..." #~ msgstr "_Exportar Lista de Fontes.." #~ msgid "Exports the feed list as OPML." #~ msgstr "Exporta a lista de fontes como OPML." #~ msgid "_Quit" #~ msgstr "_Sair" #~ msgid "_Feed" #~ msgstr "_Fonte" #~ msgid "Remove _All Items" #~ msgstr "Remover _Todos Itens" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Remove todos os item seleccionados da fonte actual." #~ msgid "_Item" #~ msgstr "_Itens" #, fuzzy #~ msgid "Next Item" #~ msgstr "_Avançar Para Item Não Lido" #~ msgid "_Next Unread Item" #~ msgstr "_Avançar Para Item Não Lido" #~ msgid "_View" #~ msgstr "_Ver" #~ msgid "Increases the text size of the item view." #~ msgstr "Aumenta o tamanho do texto de exibição do item." #~ msgid "Decreases the text size of the item view." #~ msgstr "Diminui o tamanho do texto de exibição do item." #~ msgid "_Tools" #~ msgstr "Ferramentas" #~ msgid "_Update Monitor" #~ msgstr "Monitor de Actualização" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Exibe uma lista de todas as fontes na fila de actualização" #~ msgid "_Preferences" #~ msgstr "_Preferências" #~ msgid "Edit Preferences." #~ msgstr "Editar Preferências." #~ msgid "S_earch" #~ msgstr "_Procurar" #~ msgid "Search All Feeds..." #~ msgstr "Procurar em Todas as Fontes..." #~ msgid "Show the search dialog." #~ msgstr "Exibe o diálogo de procura." #~ msgid "_Help" #~ msgstr "_Ajuda" #~ msgid "_Contents" #~ msgstr "_Índice" #~ msgid "View help for this application." #~ msgstr "Veja a ajuda para esta aplicação." #~ msgid "_Quick Reference" #~ msgstr "R_eferência Rápida" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Exibir uma lista de atalhos do Liferea." #~ msgid "_FAQ" #~ msgstr "_FAQ" #~ msgid "View the FAQ for this application." #~ msgstr "Exibir as FAQ desta aplicação." #~ msgid "_About" #~ msgstr "_Sobre" #~ msgid "Shows an about dialog." #~ msgstr "Mostra o diálogo 'sobre'." #~ msgid "_Normal View" #~ msgstr "Visualização _Normal" #~ msgid "Set view mode to mail client mode." #~ msgstr "Define o modo de visualização para o modo de cliente de e-mail." #~ msgid "_Wide View" #~ msgstr "Visualização Alargada" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Define o modo de visualização para usar três painéis verticais." #~ msgid "_Combined View" #~ msgstr "Visualização _Combinada" #~ msgid "Set view mode to two pane mode." #~ msgstr "Define o modo de visualização para um modo com dois painéis." #~ msgid "_Reduced Feed List" #~ msgstr "Lista de Fontes _Reduzida" #~ msgid "Hide feeds with no unread items." #~ msgstr "Ocultar fontes sem artigos não lidos " #~ msgid "_New Subscription..." #~ msgstr "_Nova Subscrição..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Adiciona uma nova subscrição à lista de fontes." #~ msgid "Adds a folder to the feed list." #~ msgstr "Adiciona uma pasta à lista de fontes." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Adicionar uma nova pasta de procura à lista de fontes." #~ msgid "New _Source..." #~ msgstr "Nova Fo_nte..." #~ msgid "Adds a new feed list source." #~ msgstr "Adicionar uma nova fonte de lista de fontes." #~ msgid "Adds a new news bin." #~ msgstr "Adiciona um novo recipiente de notícias." #~ msgid "_Mark Items Read" #~ msgstr "_Marcar Itens Como Lidos" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Marca todos os itens do nó da lista de subscrição seleccionada / na lista " #~ "de itens como lidos." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Actualiza a subscrição seleccionada ou todas subscrições da pasta " #~ "seleccionada. " #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Abre o diálogo de propriedades para a subscrição seleccionada." #~ msgid "_Remove" #~ msgstr "_Remover" #~ msgid "Removes the selected subscription." #~ msgstr "Remove as subscrições seleccionadas." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Alterna o estado de leitura do item seleccionado." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Alterna o sinalizador de estado do item seleccionado." #~ msgid "R_emove" #~ msgstr "R_emover" #~ msgid "Removes the selected item." #~ msgstr "Remove os itens seleccionados." #, fuzzy #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Abre o link do item no navegador configurado." #, fuzzy #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Abre o link do item no navegador configurado." #, fuzzy #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Abre o link do item no navegador configurado." #~ msgid "_Work Offline" #~ msgstr "T_rabalhar Offline" #~ msgid "_Update All" #~ msgstr "Act_ualizar Tudo" #~ msgid "_Show Liferea" #~ msgstr "_Apresentar o Liferea" #, fuzzy #~ msgid "InoReader" #~ msgstr "Google Reader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Nota: O nome de utilizador e senha serão guardados no seu ficheiro de " #~ "subscrições sem encriptação." #, fuzzy #~ msgid "Add InoReader Account" #~ msgstr "Adicionar Conta do Google Reader" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "Por favor insira a configuração de sua conta do Google Reader." #~ msgid "normal view" #~ msgstr "visualização normal" #~ msgid "wide view" #~ msgstr "visualização alargada" #~ msgid "combined view" #~ msgstr "visualização combinada" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, o Leitor de Fontes para Linux" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "Para mais informações, por favor visite https://lzone.de/liferea/" #, fuzzy #~ msgid "_Open Link In Browser" #~ msgstr "_Abrir Link No Navegador" #, fuzzy #~ msgid "_Open Link In External Browser" #~ msgstr "_Abrir Link No Navegador" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Criar Subscrição de Motor de Busca" #~ msgid "enter any search string you want" #~ msgstr "digite qualquer termo para procurar" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "_Número Máximo de Itens por Resultado:" #, fuzzy #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Nota: O Liferea criará uma subscrição de fonte que poderá ser usada para " #~ "consultar os resultados dos motores de busca pela frase específica. " #~ "Poderá manter esta fonte em definitivo e actualizá-la como qualquer outra " #~ "subscrição. " #~ msgid "Liferea is now online" #~ msgstr "Liferea está ligado" #~ msgid "Work Offline" #~ msgstr "Trabalhar Desligado" #~ msgid "Liferea is now offline" #~ msgstr "Liferea está desligado" #~ msgid "Work Online" #~ msgstr "Trabalhar Ligado" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Esta opção permite desactivar a actualização de subscrições." #~ msgid "Browser default" #~ msgstr "Navegador por omissão" #~ msgid "Existing window" #~ msgstr "Janela existente" #~ msgid "New window" #~ msgstr "Nova Janela" #~ msgid "New tab" #~ msgstr "Novo separador" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Leitor de Fontes" #~ msgid "Online/Offline Button" #~ msgstr "Botão Online/Offline" #~ msgid "_Open link in:" #~ msgstr "_Abrir link em:" #~ msgid "No comments yet." #~ msgstr "Ainda sem comentários." #~ msgid "Refresh" #~ msgstr "Actualizar" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - Leitor de Fontes do Linux" #, fuzzy #~ msgid "" #~ "

        Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

        You can add new subscriptions

        • From main menu " #~ "'Subscription' -> 'New Subscription'
        • By dropping feed links " #~ "into the subscription list
        • By right clicking links and choosing " #~ "'Subscribe' within Liferea

        " #~ msgstr "" #~ "

        Bem-vindo ao Liferea, um agregador de fontes de notícias online " #~ "para o ambiente de trabalho

        O painel esquerdo contém uma lista das " #~ "suas subscrições. Para adicionar uma subscrição, seleccione Fontes -> " #~ "Nova Subscrição. Para navegar pelos títulos de uma fonte,seleccione-a na " #~ "lista e os títulos serão carregados no painel direito.

        " #, fuzzy #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Terminar em vez de minimizar para o ícone da band_eja" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d novo item" #~ msgstr[1] "%d novos itens" #~ msgid "No new items" #~ msgstr "Não há novos itens" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d item não lido" #~ msgstr[1] "" #~ "%s\n" #~ "%d itens não lidos" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Nenhum item não lido" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Fonte em formato Atom inválido: autor desconhecido" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Integrar a lista de fontes da sua conta do Google Reader. O Liferea irá " #~ "apresentar as suas subscrições do Google Reader, e irá sincronizar a sua " #~ "lista de fontes e listas de leitura." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Integrar blogrolls (lista de blogs) ou Planetas na sua lista de fontesO " #~ "Liferea irá adicionar ou remover fontes automaticamente de acordo com as " #~ "actualizações na fonte do documento OPML" #, fuzzy #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Integrar a lista de fontes da sua conta do Google Reader. O Liferea irá " #~ "apresentar as suas subscrições do Google Reader, e irá sincronizar a sua " #~ "lista de fontes e listas de leitura." #~ msgid "This feed does not exist anymore!" #~ msgstr "Esta fonte já não existe!" #~ msgid "This news entry has no headline" #~ msgstr "Esta entrada de notícias não possui título" #~ msgid "Visit" #~ msgstr "Visita" #~ msgid "Open feed" #~ msgstr "Abrir fonte" #~ msgid "Feed Update" #~ msgstr "Actualização de Fonte" #~ msgid "Show details" #~ msgstr "Mostrar detalhes" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "_Forçar notificação popup para esta subscrição." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_Nunca utilizar notificações popup para esta subscrição." #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Copyright (c) 2003-2009\n" #~ "A Equipa do Liferea\n" #, fuzzy #~ msgid "Notification Settings" #~ msgstr "Configuração das Notificações" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Mostra uma janela de _popup com novos títulos." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Mostra um _ícone na área de notificação (bandeja do sistema)." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Mostrar _número de novos itens no ícone da bandeja." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "Terminar em vez de minimizar para o ícone da band_eja" #~ msgid "_Start in tray icon." #~ msgstr "_Iniciar no ícone da área de notificação." #~ msgid "Download and view feeds" #~ msgstr "Transferir e exibir fontes" #~ msgid "You may want to validate the feed using" #~ msgstr "Poderá querer validar a fonte usando" #~ msgid "Launch Item In _Tab" #~ msgstr "Abrir Item Em _Separador" #~ msgid "_Launch Item In Browser" #~ msgstr "_Abrir Item No Navegador" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Copiar _URL do Item para a Área de Transferência" #~ msgid "flag" #~ msgstr "marcar" #~ msgid "bookmark" #~ msgstr "marcador" #~ msgid "comments" #~ msgstr "comentários" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Transferência do componente FALHOU \"%s\"" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Transferência do componente completa: \"%s\"" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Esta versão do Lifera utiliza um novo formato de cache e migrou o seu " #~ "cache de fontes. O conteúdo do cache de %s não foi removido " #~ "automaticamente. Por favor, remova este directório manualmente quando " #~ "tiver a certeza que a actualização foi feita com sucesso!" #, fuzzy #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Transferência do componente FALHOU \"%s\"" #, fuzzy #~ msgid "Download finished." #~ msgstr "_Transferir usando" #~ msgid "Choose download directory" #~ msgstr "Escolha o directório de transferência" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Manual:\n" #~ "(%s para URL)" #~ msgid "_Save downloads in" #~ msgstr "_Guardar transferências em" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "_Activar Sincronização de Rede Local" #~ msgid "_Service Name" #~ msgstr "Nome _Serviço" #~ msgid "Sync" #~ msgstr "Sincronizar" #~ msgid "Downloading Enclosure" #~ msgstr "A Transferir Componente" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "_Passar URL e não transferir componente." #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Avança para o próximo item não lido. Se for necessário, selecciona a " #~ "próxima fonte com itens ainda não lidos." #~ msgid "Liferea Sync %s@%s" #~ msgstr "Sincronização do Liferea %s@%s" #~ msgid "link cosmos" #~ msgstr "ligação cosmos" #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "Imprimir mensagens de depuração para o carregamento de plugins" #~ msgid "Liferea seems to be running already!" #~ msgstr "O Liferea já está em execução!" #~ msgid "Update status" #~ msgstr "Actualizar estado" #~ msgid "was updated" #~ msgstr "foi actualizado" #~ msgid "was not updated" #~ msgstr "não foi atualizado" #~ msgid "The orientation of the tray." #~ msgstr "A orientação da bandeja." #~ msgid "%s" #~ msgstr "%s" #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "_Script Manager" #~ msgstr "Gestor de _Scripts" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Permite configurar e editar ganchos de scripts LUA" #~ msgid "Search With ..." #~ msgstr "Procurar Com..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d Resultado da Procura por \"%s\"" #~ msgstr[1] "%d Resultados da Procura por \"%s\"" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d Resultado da Procura" #~ msgstr[1] "%d Resultados da Procura" #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "A lista de itens agora contém todos os itens que coincidem com o " #~ "resultado da Procura. Se quiser guardar este resultado permanentemente, " #~ "clique no botão \"Pasta de Procura\" no diálogo da procura e o Liferea " #~ "irá adicionar uma Pasta de Procura na sua lista de fontes." #~ msgid "Count" #~ msgstr "Contagem" #~ msgid "You have to select a feed entry" #~ msgstr "Deve seleccionar uma entrada de fonte" #~ msgid "(empty)" #~ msgstr "(vazio)" #~ msgid "_Properties..." #~ msgstr "_Propriedades..." #~ msgid "Update out-dated feeds" #~ msgstr "Actualizar fontes desactualizadas" #~ msgid "Force update of all feeds" #~ msgstr "Forçar actualização de todas as fontes" #~ msgid "No feed update at all" #~ msgstr "Nenhuma actualização da fonte" #~ msgid "startup" #~ msgstr "inicialização" #~ msgid "feed updated" #~ msgstr "fonte actualizada" #~ msgid "feed added" #~ msgstr "fontes adicionada" #~ msgid "item selected" #~ msgstr "item selecionado" #~ msgid "feed selected" #~ msgstr "fonte seleccionada" #~ msgid "item unselected" #~ msgstr "item não selecionado" #~ msgid "feed unselected" #~ msgstr "fonte não seleccionada" #~ msgid "shutdown" #~ msgstr "desligar" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Desculpe, mas não há suporte para scripts disponível!" #~ msgid "Script Name" #~ msgstr "Nome do Script" #~ msgid "No script selected!" #~ msgstr "Nenhum script seleccionado!" #~ msgid "Create a new search feed." #~ msgstr "Criar uma nova de fonte de procura." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea não foi capaz de exibir o conteúdo deste item." #~ msgid "

        View this item's content.

        " #~ msgstr "

        Exibir o conteúdo deste item.

        " #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "Integrar a lista de fontes da sua conta do Bloglines. O Liferea " #~ "apresentará a sua subscrição do Bloglines como uma árvore secundária na " #~ "lista de fontes." #~ msgid "feedlist.opml" #~ msgstr "feedlist_pt.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s possui %d novo / título actualizado\n" #~ msgstr[1] "%s possui %d novos / títulos actualizados\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Hook" #~ msgstr "Gancho" #~ msgid "Registered Scripts" #~ msgstr "Scripts Registados" #~ msgid "Script Code" #~ msgstr "Código de Script" #~ msgid "text/plain" #~ msgstr "texto/plano" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Esta opção pode causar atrasos significativos no carregamento de " #~ "pastas contendo muitas fontes." #~ msgid "Downloading Enclosures" #~ msgstr "A Transferir Componentes" #~ msgid "Feed Cache Handling" #~ msgstr "Manipulação do Cache da Fonte" #~ msgid "Feed Name" #~ msgstr "Nome da Fonte" #~ msgid "Feed Update Settings" #~ msgstr "" #~ "Configurações de Actualização de Fontes" #~ msgid "HTTP Proxy Server" #~ msgstr "Servidor de Proxy HTTP" #~ msgid "Opening Enclosures" #~ msgstr "A Abrir Componentes" #~ msgid "Reading Headlines" #~ msgstr "A Ler Títulos" #~ msgid "Toolbar Settings" #~ msgstr "Configurações da Barra de Ferramentas" #~ msgid "Update Interval" #~ msgstr "Intervalo de Actualização" #~ msgid "Web Integration" #~ msgstr "Integração Web" #~ msgid "Add Script" #~ msgstr "Adicionar Script" #~ msgid "At _startup:" #~ msgstr "Ao _iniciar:" #~ msgid "Attention Profile" #~ msgstr "Perfil de Atenção" #~ msgid "Create new script" #~ msgstr "Criar um novo script" #~ msgid "Exec Command" #~ msgstr "Exec Comando" #~ msgid "Reuse existing script" #~ msgstr "Reutilizar script existente" #~ msgid "Script Manager" #~ msgstr "Gestor de Script" #~ msgid "Search _Link Cosmos with" #~ msgstr "Procurar _Link Cosmos com" #~ msgid "_Allow Flash in Feeds." #~ msgstr "_Permitir Flash nas Fontes." #~ msgid "Presents statistics on your most read categories" #~ msgstr "Apresenta estatísticas das suas categorias mais lidas" #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2009\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgstr "" #~ "Copyright (c) 2003-2007 \n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgid "/_Bookmark Link at %s" #~ msgstr "/_Marcar Link em %s" #~ msgid "/Toggle _Read Status" #~ msgstr "/Alte_rnar Estado de Leitura" #~ msgid "/Toggle Item _Flag" #~ msgstr "/Alternar Sinalizador do Item" #~ msgid "/_Preferences" #~ msgstr "/_Preferências" #~ msgid "/_Quit" #~ msgstr "/_Sair" #, fuzzy #~ msgid "/Copy Link Location" #~ msgstr "/_Copiar Localização do Link" #~ msgid "/_Update" #~ msgstr "/_Actualizar" #~ msgid "/_New/New _Subscription..." #~ msgstr "/_Nova/_Nova _Subscrição..." #~ msgid "/_New/New _Folder..." #~ msgstr "/_Nova/Nova Pasta..." #~ msgid "/_New/New S_earch Folder..." #~ msgstr "/_Nova/Nova Pasta de Procura..." #~ msgid "/_New/New S_ource..." #~ msgstr "/_Nova/Nova F_onte..." #~ msgid "/_New/New _News Bin..." #~ msgstr "/_Nova/Novo Recipiente de _Notícias..." #~ msgid "Access Forbidden" #~ msgstr "Acesso Proibido" #~ msgid " --help Print this help and exit" #~ msgstr " --help Exibe esta ajuda e sai" #~ msgid " --mainwindow-state=STATE" #~ msgstr " --mainwindow-state=ESTADO" #~ msgid " Start Liferea with its main window in STATE." #~ msgstr "" #~ " Inicia o Liferea com a janela principal no ESTADO." #~ msgid " Possible topics are: all,cache,conf,db,gui,html" #~ msgstr "" #~ " Tópicos disponíveis são: all,cache,conf,db,gui,html" #~ msgid " net,parsing,plugins,trace,update,verbose" #~ msgstr " net,parsing,plugins,trace,update,verbose" #~ msgid "The --mainwindow-state argument must be given a parameter.\n" #~ msgstr "É necessário dar um parâmetro ao argumento --mainwindow-state.\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "É necessário dar um parâmetro ao argumento --session.\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "O Liferea encontrou um argumento desconhecido: %s\n" #~ msgid "Cookie for %s has expired!" #~ msgstr "Cookie de %s expirou!" #~ msgid "_Limit cache to" #~ msgstr "_Limitar cache para" #~ msgid "items." #~ msgstr "itens." #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "" #~ "A pesquisa automática por links de fontes falhou! Nenhum link de fontes " #~ "foi encontrado!" #~ msgid "Could not download \"%s\". Will retry in %d seconds." #~ msgstr "" #~ "Não foi possível transferir \"%s\". Uma nova tentativa será " #~ "efectuadadentro de %d segundos." #~ msgid "http://lzone.de/liferea/" #~ msgstr "http://lzone.de/liferea/" #~ msgid "Show Menu _And Toolbar" #~ msgstr "Mostra Menu e B_arra de Ferramentas" #~ msgid "Show _Menu Only" #~ msgstr "Mostra Somente o _Menu" #~ msgid "Show _Toolbar Only" #~ msgstr "Mostra Apena_s a Barra de Ferramentas" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "" #~ "Fim inesperado da sequência de caracteres ou codificação UTF-8 " #~ "corrompida! Alguns caracteres foram perdidos!" #~ msgid "" #~ "Sorry, I was not able to load any installed browser plugin! Try the --" #~ "debug-plugins option to get debug information!" #~ msgstr "" #~ "Lamento, não foi possível carregar nenhum dos plugins instalados do " #~ "navegador! Tente a opção --debug-plugins para obter informações de " #~ "depuração!" #~ msgid "This item does not have a link assigned!" #~ msgstr "Este item não possui um link designado!" #~ msgid "No link selected!" #~ msgstr "Nenhum link seleccionado!" #~ msgid "/_Increase Text Size" #~ msgstr "/_Aumentar o Tamanho do Texto" #~ msgid "/_Decrease Text Size" #~ msgstr "/_Diminuir o Tamanho do Texto" #~ msgid "/Toggle _Online|Offline" #~ msgstr "/Alternar _Ligado|Desligado" #~ msgid "/_Show|Hide Window" #~ msgstr "/Mo_strar|Ocultar Janela" #~ msgid "" #~ "Saves this search as a search folder, which will appear in the feed list." #~ msgstr "" #~ "Guarda esta procura como uma pasta de procura, que aparecerá na lista de " #~ "fontes." #~ msgid "search" #~ msgstr "procurar" #~ msgid "does match" #~ msgstr "coincide" #~ msgid "does not match" #~ msgstr "não coincide" #~ msgid "Updates all subscriptions. This does not update OCS directories." #~ msgstr "Actualiza todas subscrições. Não actualiza directórios OCS." #~ msgid "Rule" #~ msgstr "Regra" #~ msgid "Liferea Homepage" #~ msgstr "" #~ "Página Web do Liferea" #~ msgid "" #~ "Code, Patches, Debugging\n" #~ "\n" #~ "James Doherty\n" #~ "Jeremy Messenger\n" #~ "John McKnight\n" #~ "Tomasz Maka\n" #~ "Karl Soderstrom\n" #~ "Christophe Barbe\n" #~ "Juho Snellman\n" #~ "Roshan Revankar\n" #~ "Oliver Feiler\n" #~ "Niklas Morberg\n" #~ "Johannes Schlueter\n" #~ "Pierre Phaneuf\n" #~ "ahmed el-helw\n" #~ "James Bowes\n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary\n" #~ "Christoph Hohmann\n" #~ "Raphael Slinckx\n" #~ "Bjorn Monnens\n" #~ "Thomas de Grenier de Latour\n" #~ "Aristotle Pagaltzis\n" #~ "Norman Jonas\n" #~ "Sebastian Droege\n" #~ "Daniel Gryniewicz\n" #~ "Remi Cardona\n" #~ "Frederic Peters\n" #~ "Don Malcolm\n" #~ "Ed Catmur\n" #~ "Chris Pirillo\n" #~ "Eric Anderson\n" #~ "and many more...\n" #~ "\n" #~ "Code from other projects\n" #~ "\n" #~ "Anders Carlsson (tray icon support)\n" #~ "Philippe Martin, Brion Vibber (favicon support)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Included Software\n" #~ "\n" #~ "Liferea uses the XSPF Web Music Player to \n" #~ "allow direct podcast playback. This player was \n" #~ "written by Fabricio Zuardi and can be found \n" #~ "at http://musicplayer.sourceforge.net" #~ msgstr "" #~ "Código, Patches, Depuração\n" #~ "\n" #~ "James Doherty\n" #~ "Jeremy Messenger\n" #~ "John McKnight\n" #~ "Tomasz Maka\n" #~ "Karl Soderstrom\n" #~ "Christophe Barbe\n" #~ "Juho Snellman\n" #~ "Roshan Revankar\n" #~ "Oliver Feiler\n" #~ "Niklas Morberg\n" #~ "Johannes Schlueter\n" #~ "Pierre Phaneuf\n" #~ "ahmed el-helw\n" #~ "James Bowes\n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary\n" #~ "Christoph Hohmann\n" #~ "Raphael Slinckx\n" #~ "Bjorn Monnens\n" #~ "Thomas de Grenier de Latour\n" #~ "Aristotle Pagaltzis\n" #~ "Norman Jonas\n" #~ "Sebastian Droege\n" #~ "Daniel Gryniewicz\n" #~ "Remi Cardona\n" #~ "Frederic Peters\n" #~ "Don Malcolm\n" #~ "Ed Catmur\n" #~ "Chris Pirillo\n" #~ "Eric Anderson\n" #~ "e muitos mais...\n" #~ "\n" #~ "Código de outros projectos\n" #~ "\n" #~ "Anders Carlsson (suporte para ícone de bandeja)\n" #~ "Philippe Martin, Brion Vibber (suporte para favicon)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Software Incluído\n" #~ "\n" #~ "O Liferea usa o Reprodutor de Música para Web XSPF para \n" #~ "permitir reprodução directa de podcast. Este reprodutor foi escrito por " #~ "Fabricio Zuardi e pode ser encontrado \n" #~ "em http://musicplayer.sourceforge.net" #~ msgid "Contributors" #~ msgstr "Contribuidores" #~ msgid "" #~ "Note: Items are added to the search folder if at least one additive rule\n" #~ "matches. They are removed if at least one removing rule matches." #~ msgstr "" #~ "Nota: Itens serão adicionados à pasta de procura se pelo menos ums regra\n" #~ "aditiva coincidir. Serão removidos se, no mínimo, uma regra de remoção " #~ "for correspondida." #~ msgid "Translation" #~ msgstr "Tradução" #~ msgid "_Name:" #~ msgstr "_Nome" #~ msgid "" #~ "minutes\n" #~ "hours\n" #~ "days" #~ msgstr "" #~ "minutos\n" #~ "horas\n" #~ "dias" #~ msgid "URL is invalid" #~ msgstr "URL inválido" #~ msgid "Unsupported network protocol" #~ msgstr "Protocolo de rede não suportado" #~ msgid "Hostname could not be found" #~ msgstr "O servidor não pôde ser encontrado" #~ msgid "Network connection was refused by the remote host" #~ msgstr "Ligação de rede recusada pelo servidor remoto" #~ msgid "Remote host did not finish sending data" #~ msgstr "O Servidor remoto não terminou de enviar os dados" #~ msgid "Too many HTTP redirects were encountered" #~ msgstr "Encontrados muitos redireccionamentos de HTTP" #~ msgid "Remote host sent an invalid response" #~ msgstr "O Servidor remoto enviou uma resposta inválida" #~ msgid "Webserver's authentication method incompatible with Liferea" #~ msgstr "" #~ "O Método de autenticação do servidor de web é incompatível com o Liferea" #~ msgid "" #~ "The provider of this feed suggests an update interval of %d minute.The " #~ "provider of this feed suggests an update interval of %d minutes." #~ msgstr "" #~ "O fornecedor desta fonte sugere um intervalo de actualização de %d minuto." #~ "O fornecedor desta fonte sugere um intervalo de actualização de %d " #~ "minutos." #~ msgid "" #~ "%s\n" #~ "%d unread item%s\n" #~ "%d unread items" #~ msgstr "" #~ "%s\n" #~ "%d item não lido%s\n" #~ "%d itens não lidos" #, fuzzy #~ msgid "gtk-properties" #~ msgstr "_Propriedades..." #~ msgid "" #~ "GNOME default\n" #~ "Text below icons\n" #~ "Text beside icons\n" #~ "Icons only\n" #~ "Text only" #~ msgstr "" #~ "Padrão do GNOME\n" #~ "Texto abaixo dos ícones\n" #~ "Texto ao lado dos ícones\n" #~ "Somente ícones\n" #~ "Somente texto" #~ msgid "" #~ "Space\n" #~ " Space\n" #~ " Space" #~ msgstr "" #~ "Espaço\n" #~ " Espaço\n" #~ " Espaço" #~ msgid "" #~ "Update out-dated feeds\n" #~ "Force update of all feeds\n" #~ "No feed update at all" #~ msgstr "" #~ "Atualizar fontes de notícias desatualizadas\n" #~ "Forçar atualização de todas as fontes de notícias\n" #~ "Não atualize" liferea-1.12.7/po/pt_BR.po000066400000000000000000002470231352135647700152220ustar00rootroot00000000000000# Brazilian Portuguese translation of liferea. # Copyright (C) 2013 Free Software Foundation, Inc. # This file is distributed under the same license as the liferea package. # Fernando Ike , 2005. # Og Maciel , 2007, 2009. # Leon Nardella , 2009. # Rafael Ferreira , 2013. # msgid "" msgstr "" "Project-Id-Version: liferea 1.10-rc4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2013-12-13 11:14-0200\n" "Last-Translator: Rafael Ferreira \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Poedit 1.5.7\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Leitor de Fontes de Notícias" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Liferea está offline" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 #, fuzzy msgid "Play Podcasts" msgstr "Podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Leitor de Fontes de Notícias" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Agregador de Notícias Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Leia fontes de notícias e blogs" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Esta fonte de notícias foi interrompida, e não está mais disponível. Liferea " "não a atualizará mais, mas você poderá ainda acessar as manchetes no cache." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "A última atualização desta assinatura falhou!
        Código de erro HTTP " ": " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Alguns erros foram encontrados ao processar esta fonte de notícias!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Detalhes de Erro do Analisador" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Detalhes" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "Você pode querer contatar o autor/webmaster da fonte sobre isso!" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Alguns erros foram encontrados ao filtrar esta fonte de notícias!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Detalhes de Erros do Filtro" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Fontes de Notícias:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Fontes:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Editores" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Copyright" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "crianças com" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "manchetes não lidas" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Pasta:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Fonte" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Fontes de Notícias" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Arquivado sob" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Autor" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Compartilhado por" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Via" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Relacionados" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Também publicado em" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Criador" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "comentários" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Atualizando..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Seção" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Departamento" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Recipiente de Notícias:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Adicione itens a este recipiente de notícias selecionando \"Copiar para o " "Recipiente de Notícias\" da lista de itens no menu de contexto." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Pasta Virtual:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Falha ao iniciar o navegador: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Iniciando: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Erro de Autorização" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Não foi possível criar o diretório de cache \"%s\"!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Hoje %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Ontem %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d de %b %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d de %b %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" não é um tipo de arquivo válido de configuração de componentes!" #: ../src/enclosure.c:292 #, fuzzy msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Você não configurou uma ferramenta de download ainda! Por favor, faça isso " "na aba \"Download\" de Ferramentas/Preferências." #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Comando falhou: \n" "\n" "%s\n" "\n" " Por favor, verifique se a ferramenta de download configurada está instalada " "e funcionando corretamente! Você pode alterá-la na aba \"Download\" de " "Ferramentas/Preferências." #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Erro ao renomear %s para %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "Erro de XML ao ler arquivo OPML! Não foi possível importar \"%s\"!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Documento vazio! O documento OPML \"%s\" não deve estar vazio ao importar." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" não é um documento OPML válido! Liferea não pode importar este " "arquivo!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Lista de fontes de notícias importadas" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importar Lista de Notícias" #: ../src/export.c:481 msgid "Import" msgstr "Importar" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "Arquivos OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Erro ao exportar a lista de fontes de notícias!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Lista de fontes de notícias exportada!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Exportar lista de fontes de notícias" #: ../src/export.c:498 msgid "Export" msgstr "Exportar" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        Não foi possível detectar o tipo desta fonte de notícias! Por favor, " "verifique se a fonte realmente aponta para um recurso fornecido em um dos " "formatos de sindicato suportados!

        Saída do Analisador de XML:
        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" atualizado..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" não está disponível" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "O URL que você deseja assinar pelo Liferea aponta para uma página de web e o " "pesquisador automático não encontrou nenhuma fonte de notícias nesta página. " "Talvez esta página de web não tenha suporte à pesquisa automática de fontes " "de notícias." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "" "Erro de XML ao ler fonte de notícias! Não foi possível carregar a fonte de " "notícias \"%s\"!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Documento vazio!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "XML inválido!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Fonte aponta para um documento em HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Não foi possível determinar o tipo de fonte de notícias." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Não há itens não lidos" #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Inicia o Liferea com a sua janela principal em ESTADO. ESTADO pode ser " "\"exibido\", \"iconificado\", ou \"oculto\"" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "ESTADO" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Mostra informações da versão e sair" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Adiciona uma nova assinatura" #: ../src/liferea_application.c:284 msgid "uri" msgstr "uri" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Mostra mensagens de depuração de todos os tipos" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Mostra mensagens de depuração do manuseio de cache" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Mostra mensagens de depuração para o manuseio de configurações" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Mostra mensagens de depuração do manuseio do bando de dados" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Mostra mensagens de depuração para todas as funções de GUI" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Habilita a depuração de renderização de HTML. Sempre que o Liferea " "renderizar saída HTML ele também vai despejar o HTML gerado em ~/.cache/" "liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Mostra mensagens de depuração para toda a atividade de rede" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Mostra mensagens de depuração para todas as funções de análise" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Mostra mensagens de depuração quando uma função demorar muito para ser " "processada" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Mostra mensagens de depuração ao entrar e sair de funções" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "" "Mostra mensagens de depuração do processamento das atualizações de notícias" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "Mostra mensagens de depuração da pasta de pesquisa correspondente" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Mostra mensagens de depuração detalhadas" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Mostra mensagens de depuração para o tópico dado" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "O pedido de atualização foi cancelado" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Não foi possível definir o host name de destino" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Não foi possível definir o host name proxy" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Não foi possível conectar ao servidor remoto" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Não foi possível conectar ao proxy" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "Ocorreu um erro na rede ou a outra extremidade encerrou a conexão " "inesperadamente" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "O recurso foi movido permanentemente para uma nova localização" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Você não tem autorização para baixar essa fonte de notícias. Por favor, " "atualize seu nome de usuário e senha na janela de propriedades dessa fonte " "de notícias" #: ../src/net.c:476 msgid "Payment required" msgstr "Pagamento necessário" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Você não ter permissão para acessar esse recurso" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Recurso Não Encontrado" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Método Não Permitido" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Não Aceito" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Autenticação de proxy necessária" #: ../src/net.c:482 msgid "Request timed out" msgstr "Tempo esgotado" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Esse fonte não existe. Por favor, remova a assinatura!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Ocorreu um erro interno no processo de atualização" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Fonte de notícias não disponível: Servidor solicitou um redirecionamento não " "suportado!" #: ../src/net.c:492 msgid "Client Error" msgstr "Erro do Cliente" #: ../src/net.c:494 msgid "Server Error" msgstr "Erro do Servidor" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Ocorreu um erro de rede desconhecido!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Item" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "contém" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "não contém" #: ../src/rule.c:175 msgid "Item title" msgstr "Título do item" #: ../src/rule.c:176 msgid "Item body" msgstr "Corpo do item" #: ../src/rule.c:177 msgid "Read status" msgstr "Status de leitura" #: ../src/rule.c:177 msgid "is unread" msgstr "não lido" #: ../src/rule.c:177 msgid "is read" msgstr "lido" #: ../src/rule.c:178 msgid "Flag status" msgstr "Sinalizador de status" #: ../src/rule.c:178 msgid "is flagged" msgstr "sinalizado" #: ../src/rule.c:178 msgid "is unflagged" msgstr "não sinalizado" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "incluído" #: ../src/rule.c:179 msgid "not included" msgstr "não incluído" #: ../src/rule.c:180 msgid "Category" msgstr "Categoria" #: ../src/rule.c:180 msgid "is set" msgstr "está configurado" #: ../src/rule.c:180 msgid "is not set" msgstr "não está configurado" #: ../src/rule.c:181 msgid "Feed title" msgstr "Título do item" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "A fonte de notícias \"%s\" já está sendo atualizada!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "A fonte de notícias \"%s\" foi interrompida e não será mais atualizada pelo " "Liferea!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Atualizando o ícone da fonte de notícias \"%s\"" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Foi encontrado um problema ao ler esta assinatura. Por favor, verifique o " "URL e a saída no console." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "O URL de \"%s\" mudou permanentemente e foi atualizado" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" foi interrompido e não será mais atualizado pelo Liferea!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" não foi modificado desde a última atualização" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Atualizando \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Erro ao abrir arquivo temporário %s para usar no filtro!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s saiu com status %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Erro: Não foi possível abrir a linha de processamento \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Erro: Não foi possível abrir o arquivo \"%s\"" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Erro: Não há arquivo: \"%s\"" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Nova Pasta Virtual" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Houve. A saída foi truncada!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "Analisador XML: Não foi possível analisar o documento:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Anexos" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " Bytes" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d anexo" msgstr[1] "%d anexos" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Escolher Arquivo" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Extensão de Arquivo .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Não foi possível localizar o arquivo de imagem: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d novo)" msgstr[1] " (%d novos)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d não lido%s" msgstr[1] "%d não lidos%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Tópicos de Ajuda" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Referência Rápida" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "FAQ" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Pesquisa Avançada" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Digite o nome de usuário e senha para \"%s\" (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Fonte desconhecida" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "C_ancelar Todos" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Todos Arquivo" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea está em modo offline. Não é possível atualizar." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Procurar em Todas as Fontes de Notícias" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Marcar todos como lidos" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Você realmente deseja excluir \"%s\"?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Este item não possui um link específico" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Sem título ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Manchetes" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Selecione uma fonte para excluir seus itens!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Nenhum item foi selecionado" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Abrir Em Uma A_ba" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "_Abrir No Navegador" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Abrir Em Um Navegador _Externo" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Copiar para o Recipiente de Notícias" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "_Salvar em %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "_Copiar Localização do item" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Alte_rar para Lido ou Não Lido" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "A_lternar Sinalizador do Item" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "R_emover Item" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Abrir Componente..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Salvar Como..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Copiar Localização do Link" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Atualizar" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "At_ualizar Pasta" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Nova _Assinatura..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Nova _Pasta..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Nova Pasta _Virtual..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Nova Fo_nte..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "_Novo Recipiente de Notícias..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Nova" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Ordenar Fontes" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_Marcar Todos Como Lidos" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "_Recriar" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Excluir" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Propriedades" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Converter para Assinaturas Locais..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "GNOME padrão" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Texto abaixo dos ícones" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Texto ao lado dos ícones" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Somente ícones" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Somente texto" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minutos" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "horas" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dias" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Espaço" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Espaço" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Espaço" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Visualização Normal" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Visualização Ampla" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Visualização Combinada" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Navegador Padrão" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Tipo" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Programa" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Vazio)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Recriando" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Apagando entrada" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Você realmente deseja excluir \"%s\" e seu conteúdo?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Você realmente deseja excluir \"%s\"?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Confirmar Exclusão" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Confirmar Exclusão" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "" "O fornecedor desta fonte de notícias sugere um intervalo de atualização de " "%d minuto." msgstr[1] "" "O fornecedor desta fonte de notícias sugere um intervalo de atualização de " "%d minutos." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "" "Esta fonte de notícias não possui um intervalo de atualização definido." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Sem título" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Site" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d de %b %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nova Assinatura" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planeta, BlogRoll (lista de blogs), OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Escolher Arquivo OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Nova Assinatura OPML" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Nenhum tipo de lista de fonte de notícias encontrado!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Tipo de Fonte" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "A assinatura \"%s\" foi convertida com sucesso para fontes locais!" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Falha ao efetuar login no Google Reader!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 #, fuzzy msgid "Could not parse JSON returned by Reedah API!" msgstr "Não foi possível analisar o JSON retornado pela API tt-rss!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 #, fuzzy msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "Não foi possível analisar o JSON retornado pela API tt-rss!" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Leitor de Fontes de Notícias" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Abrir Link Em _Aba" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "_Abrir Link No Navegador" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "_Abrir Link No Navegador Externo" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_Salvar Link em %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Copiar Localização do Link" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "S_alvar Imagem Como" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "_Copiar Localização da Imagem" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "S_alvar Link Como" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "S_alvar Imagem Como" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Assinar..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "_Aumentar Tamanho do Texto" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Diminuir Tamanho do Texto" #: ../glade/about.ui.h:1 msgid "About" msgstr "Sobre" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea é um agregador de notícias para o GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Liferea Homepage" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autenticação" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Nome de usuário:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Senha:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Abrir Componente" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Abrir um componente do tipo:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "O que o Liferea deve fazer com esse componente? Por favor, insira abaixo o " "comando que você deseja que seja executado. As URLs dos componentes serão " "fornecidos como argumentos para esse comando:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Navegar" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Faça isso automaticamente para arquivos assim de agora em diante." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Adicionar Conta do Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Por favor digite a configuração de sua conta no Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Senha" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "Nome de _Usuário (E-mail)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Ver Manchetes" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Manchetes" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Marcar todos como lidos" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Marcar todos como lidos" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Nova Pasta" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "N_ome da pasta:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Criar Recipiente de Notícias" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Nome do Recipiente de Notícias:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Fonte" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Tipo de Fonte:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Comando" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "Arquivo _Local" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Selecionar Arquivo..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Fonte:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Download / Processamento" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "Não usar proxy para fazer _download" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Usar _filtro de conversão" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea pode usar plug-ins de filtros externos para acessar fontes de " "notícias e diretórios com formatos não suportados. Leia a documentação para " "maiores informações." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Converter _usando:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Seleção de Fonte" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Selecione o tipo de fonte que você deseja adicionar..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Adicionar OPML/Planeta" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Por favor especifique um arquivo local ou URL apontando para uma lista " "válida de fontes OPML." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Localização" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Selecionar Arquivo" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Preferências do Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Manipulação do Cache de Fontes de Notícias" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_Número padrão de itens por fonte de notícias para salvar:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Configurações de Atualização de Fonte de Notícias" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Nota: Lembre-se de definir um intervalo de atualização razoável. " "Geralmente é um desperdício de banda atualizar fontes de notícias com uma " "frequência maior que uma vez por hora." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "_Atualizar todas as assinaturas na inicialização." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "_Intervalo Padrão de Atualização de Fontes de Notícias:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Fontes de Notícias" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Configurações de Exibição de Pastas" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "" "Exibir os itens de todas as fontes de notícias quando uma pasta é " "_selecionada." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "O_cultar itens já lidos." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Ícones das Fontes de Notícias (Favicons)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "At_ualizar todos favicons agora" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Pastas" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Leitura de Manchetes" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Avançar pelos artigo_s rapidamente com:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "Modo de _Visualização Padrão:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Integração Web" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Publicar Favoritos em" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Configurações do Navegador Interno" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Abrir links na _janela do Liferea." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Desabilitar Javascript." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_Habilitar plug-ins do navegador." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Configurações do Navegador Externo" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Navegador:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Manual:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s para URL)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Navegador" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Configurações da barra de ferramentas" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Ocultar a barra de ferramentas." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Rótulos dos _botões da barra de ferramentas:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Interface Gráfica" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "Servidor Proxy HTTP" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "Detectar _Automaticamente (GNOME ou ambiente)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "S_em Proxy" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "Configuração _Manual:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Servidor Proxy:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Porta do Proxy:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Usar Au_tenticação de Proxy" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "_Usuário Proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Se_nha do Proxy:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Configurações de Exibição de Pastas" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Baixar Componentes" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Download usando" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Abrir Componente" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Componentes" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Propriedades da Assinatura" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Nome da Fonte" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Nome da Fonte de Notícias:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Intervalo de Atualização" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Usar intervalo padrão de atualização." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_Intervalo de atualização específico de fonte de notícias de" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Não atualize esta fonte de notícias automaticamente." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "Esta fonte de notícias sugere um intervalo de atualização de %d minutos." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Geral" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea pode usar plug-ins de filtros externos para acessar fontes de " "notícias e diretórios com formatos não suportados. Leia a documentação para " "maiores informações." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "As configurações de controle do cache se o conteúdo das fontes de notícias " "forem salvos quando Liferea fechar. Os itens marcados são sempre salvos no " "cache." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "Configuração pa_drão do cache" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "De_sabilitar Cache" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "Cache _Ilimitado" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "_Número de itens para salvar:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Pacote Comprimido" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Usar _autenticação HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Download" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "Download _automático de todos componentes desta fonte de notícias." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Carregar automaticamente o _link do item no navegador configurado quando " "selecionando artigos." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorar fontes de _comentários para essa assinatura." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Marcar itens baixados como lidos." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Avançado" #: ../glade/reedah_source.ui.h:1 #, fuzzy msgid "Add Reedah Account" msgstr "Adicionar Conta do Google Reader" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Por favor digite a configuração de sua conta no Google Reader." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Renomear" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Novo Nome:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Propriedades da Pasta Virtual" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "_Nome da Pesquisa:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Encontre itens que atendam aos seguintes critérios" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "_Quaisquer regras correspondentes" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "_Todas as regras devem ser satisfeitas" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Pesquisa Avançada" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "Pa_sta de Pesquisa..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Procurar em Todas as Fontes de Notícias" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Avançado..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Procura o texto especificado em todas as fontes de notícias. O resultado da " "busca aparecerá na lista de itens." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "Pesqui_sar por:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Digite o termo que o Liferea deve pesquisar nos títulos de itens ou seus " "conteúdos." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Avançado..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Digite o endereço de website para usar na pesquisa automática ou caso você " "conheça, o endereço exato da fonte de notícias." #: ../glade/theoldreader_source.ui.h:1 #, fuzzy msgid "Add TheOldReader Account" msgstr "Adicionar Conta do Google Reader" #: ../glade/theoldreader_source.ui.h:2 #, fuzzy msgid "Please enter your TheOldReader account settings." msgstr "Por favor digite a configuração de sua conta no Google Reader." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Adicionar Conta do Tiny Tiny RSS" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "Por favor digite a configuração de sua conta no tt-rss." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "URL do _Servidor" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "Nome de _Usuário" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Atualizar Monitor" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "C_ancelar Todos" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Requisições Pendentes" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Baixando Agora" #~ msgid "_Subscriptions" #~ msgstr "A_ssinaturas" #~ msgid "Update _All" #~ msgstr "A_tualizar Todos" #~ msgid "Updates all subscriptions." #~ msgstr "Atualizar todas as assinaturas." #~ msgid "Mark All As _Read" #~ msgstr "Ma_rcar Todos Como Lido" #~ msgid "Marks read every item of every subscription." #~ msgstr "Marca todos itens de todas assinaturas como lido." #~ msgid "_Import Feed List..." #~ msgstr "_Importar Lista de Fontes de Notícias..." #~ msgid "Imports an OPML feed list." #~ msgstr "Importa uma lista OPML de fonte de notícias." #~ msgid "_Export Feed List..." #~ msgstr "_Exportar Lista de Notícias..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Exporta a lista de fonte de notícias como OPML." #~ msgid "_Quit" #~ msgstr "_Sair" #~ msgid "_Feed" #~ msgstr "Fonte de _Notícias" #~ msgid "Remove _All Items" #~ msgstr "Remover _Todos Itens" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Remove todos os item selecionados da fonte de notícias atual." #~ msgid "_Item" #~ msgstr "_Itens" #~ msgid "Previous Item" #~ msgstr "Item anterior" #~ msgid "Next Item" #~ msgstr "Próximo item" #~ msgid "_Next Unread Item" #~ msgstr "_Avançar Para Item Não Lido" #~ msgid "_View" #~ msgstr "_Ver" #~ msgid "Increases the text size of the item view." #~ msgstr "Aumenta o tamanho do texto de exibição do item." #~ msgid "Decreases the text size of the item view." #~ msgstr "Diminui o tamanho do texto de exibição do item." #~ msgid "_Tools" #~ msgstr "_Ferramentas" #~ msgid "_Update Monitor" #~ msgstr "Monitor de At_ualização" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "" #~ "Exibe uma lista de todas as fontes de notícias na fila de atualização" #~ msgid "_Preferences" #~ msgstr "_Preferências" #~ msgid "Edit Preferences." #~ msgstr "Editar Preferências." #~ msgid "S_earch" #~ msgstr "Pesqui_sar" #~ msgid "Search All Feeds..." #~ msgstr "Procurar em Todas as Fontes..." #~ msgid "Show the search dialog." #~ msgstr "Exibe o diálogo de pesquisa." #~ msgid "_Help" #~ msgstr "_Ajuda" #~ msgid "_Contents" #~ msgstr "Índ_ice" #~ msgid "View help for this application." #~ msgstr "Veja ajuda para esta aplicação." #~ msgid "_Quick Reference" #~ msgstr "R_eferência Rápida" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Exibir uma lista de atalhos do Liferea." #~ msgid "_FAQ" #~ msgstr "_FAQ" #~ msgid "View the FAQ for this application." #~ msgstr "Exibir o FAQ desta aplicação." #~ msgid "_About" #~ msgstr "_Sobre" #~ msgid "Shows an about dialog." #~ msgstr "Exibe o diálogo sobre esta aplicação." #~ msgid "_Normal View" #~ msgstr "Visualização _Normal" #~ msgid "Set view mode to mail client mode." #~ msgstr "Define o modo de visualização para o modo de cliente de e-mail." #~ msgid "_Wide View" #~ msgstr "Visualização _Ampla" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Define o modo de visualização para usar três painéis verticais." #~ msgid "_Combined View" #~ msgstr "Visualização _Combinada" #~ msgid "Set view mode to two pane mode." #~ msgstr "Define o modo de visualização para um modo com dois painéis." #~ msgid "_Reduced Feed List" #~ msgstr "Lista de Fontes de Notícias _Reduzida" #~ msgid "Hide feeds with no unread items." #~ msgstr "Ocultar fontes de notícias sem itens não-lidos." #~ msgid "_New Subscription..." #~ msgstr "_Novas Assinaturas..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Adiciona uma nova assinatura à lista de fontes de notícias." #~ msgid "Adds a folder to the feed list." #~ msgstr "Adiciona uma pasta à lista de fontes de notícias." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Adicionar uma nova pasta virtual à lista de fontes de notícias." #~ msgid "New _Source..." #~ msgstr "Nova Fo_nte..." #~ msgid "Adds a new feed list source." #~ msgstr "Adicionar uma nova fonte de lista de fontes de notícias." #~ msgid "Adds a new news bin." #~ msgstr "Adiciona um novo recipiente de notícias." #~ msgid "_Mark Items Read" #~ msgstr "_Marcar Itens Como Lidos" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "Marca todos os itens do nó selecionado como lidos." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Atualiza a assinatura selecionada ou todas assinaturas da pasta " #~ "selecionada. " #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Abre o diálogo de propriedades para a assinatura selecionada." #~ msgid "_Remove" #~ msgstr "_Remover" #~ msgid "Removes the selected subscription." #~ msgstr "Remove as assinaturas selecionadas." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Alterna o status de leitura do item selecionado." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Alterna o sinalizador de status do item selecionado." #~ msgid "R_emove" #~ msgstr "R_emover" #~ msgid "Removes the selected item." #~ msgstr "Remove os itens selecionados." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Abre o link do item em uma nova aba do navegador do Liferea." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Abre o link do item no painel de itens do Liferea." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Abre o link do item no navegador externo configurado." #~ msgid "_Fullscreen" #~ msgstr "_Tela Cheia" #~ msgid "Browse at full screen" #~ msgstr "Navega em tela cheia" #~ msgid "_Work Offline" #~ msgstr "T_rabalhar Offline" #~ msgid "_Update All" #~ msgstr "At_ualizar Todos" #~ msgid "_Show Liferea" #~ msgstr "_Exibir Liferea" #, fuzzy #~ msgid "InoReader" #~ msgstr "Google Reader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Nota: O nome do usuário e senha serão salvos em seu arquivo de lista " #~ "de fonte de notícias sem criptografia." #, fuzzy #~ msgid "Add InoReader Account" #~ msgstr "Adicionar Conta do Google Reader" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "Por favor digite a configuração de sua conta no Google Reader." #~ msgid "Plugins" #~ msgstr "Plug-ins" #~ msgid "normal view" #~ msgstr "visualização normal" #~ msgid "wide view" #~ msgstr "visualização ampla" #~ msgid "combined view" #~ msgstr "visualização combinada" #~ msgid "No comments yet." #~ msgstr "Sem comentários." #~ msgid "Refresh" #~ msgstr "Atualizar" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, o Leitor de Notícias para Linux" #~ msgid "For more information, please visit http://lzone.de/liferea/" #~ msgstr "Para mais informações, por favor acesse http://lzone.de/liferea/" #~ msgid "Liferea is now online" #~ msgstr "Liferea está online" #~ msgid "Work Offline" #~ msgstr "Trabalhar Offline" #~ msgid "Work Online" #~ msgstr "Trabalhar Online" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Esta opção permite desabilitar a atualização de assinaturas." #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - Leitor de Fontes de Notícias do Linux" #~ msgid "" #~ "

        Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

        You can add new subscriptions

        • From main menu " #~ "'Subscription' -> 'New Subscription'
        • By dropping feed links " #~ "into the subscription list
        • By right clicking links and choosing " #~ "'Subscribe' within Liferea

        " #~ msgstr "" #~ "

        Seja bem-vindo ao Liferea, um agregador de fontes de notícias " #~ "online para a área de trabalho.

        Você pode adicionar novas " #~ "assinaturas

        • pelo menu pirncipal \"Assinaturas\" -> Nova " #~ "Assinatura
        • Arrastando os links de fontes para a lista de " #~ "assinaturas
        • Clicando com o botão direito nos links e escolhendo " #~ "\"Assinar\" no Liferea

        " #~ msgid "Browser default" #~ msgstr "Navegador padrão" #~ msgid "Existing window" #~ msgstr "Janela existente" #~ msgid "New window" #~ msgstr "Nova Janela" #~ msgid "New tab" #~ msgstr "Nova aba" # O termo "área de notificação" foi discutido e padronizado pela equipe LDPBR #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "Integrar com a área de notificação (indicador)" # O termo "área de notificação" foi discutido e padronizado pela equipe LDPBR #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Finalizar ao invés de minimizar para a área de notificação" # O termo "área de notificação" foi discutido e padronizado pela equipe LDPBR #~ msgid "Start minimized to the messaging menu" #~ msgstr "Começar minimizado na área de notificação" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d novo item" #~ msgstr[1] "%d novos itens" #~ msgid "No new items" #~ msgstr "Não há novos itens" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d item não lido" #~ msgstr[1] "" #~ "%s\n" #~ "%d itens não lidos" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Nenhum item não lido" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Fonte de notícias em formato Atom inválido: autor desconhecido" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Integre a lista de fontes de notícias da sua conta no Google Reader. O " #~ "Liferea vai apresentar as suas assinaturas do Google Reader e vai " #~ "sincronizar a sua lista de fontes e suas listas de leitura." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Integrar blogrolls (lista de blogs) ou Planetas em sua lista de fontes de " #~ "notícias. Liferea adicionará ou removerá fontes de notícias " #~ "automaticamente de acordo com as atualizações na fonte do documento OPML" #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Integre a lista de fontes de notícias da sua conta no Tiny Tiny RSS 1.5+. " #~ "O Liferea vai apresentar as suas assinaturas do tt-rss e vai sincronizar " #~ "a sua lista de fontes e suas listas de leitura." #~ msgid "This feed does not exist anymore!" #~ msgstr "Esta fonte de notícias não existe mais!" #~ msgid "This news entry has no headline" #~ msgstr "Esta entrada de notícias não possui manchete" #~ msgid "Visit" #~ msgstr "Visita" #~ msgid "Open feed" #~ msgstr "Abrir fonte de notícias" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "%s tem %d atualização" #~ msgstr[1] "%s tem %d atualizações" #~ msgid "Feed Update" #~ msgstr "Atualização de Fonte de Notícias" #~ msgid "Show details" #~ msgstr "Mostrar detalhes" #~ msgid "Online/Offline Button" #~ msgstr "Botão Online/Offline" #~ msgid " " #~ msgstr " " #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "_Forçar notificações pop-up para essa assinatura." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_Nunca fazer uma notificação pop-up para essa assinatura." #~ msgid "Create Search Engine Feed" #~ msgstr "Criar Fonte de Notícias de Motor de Pesquisas" #~ msgid "enter any search string you want" #~ msgstr "digite qualquer frase para pesquisar" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "_Número Máximo de Itens por Resultado:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Nota: O Liferea criará uma assinatura de fonte de notícias que poderá ser " #~ "usado para consultar os resultados dos motores de busca pela frase " #~ "específica. Você poderá manter esta fonte de notícias em definitivo e " #~ "atualizá-la como qualquer outra assinatura." #~ msgid "_Open link in:" #~ msgstr "_Abrir link em:" #~ msgid "Notification Settings" #~ msgstr "Configuração de Notificações" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Exibe uma janela ins_tantânea com novas manchetes." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Ex_ibe um ícone na área de notificação." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Exibir _número de novos itens na área de notificação." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "Finalizar invés de minimizar para o ár_ea de notificação." #~ msgid "_Start in tray icon." #~ msgstr "Ícone para _iniciar na área de notificação." #~ msgid "Download and view feeds" #~ msgstr "Download e exibir fontes de notícias" #~ msgid "You may want to validate the feed using" #~ msgstr "Talvez você queira validar a fonte de notícias usando" #~ msgid "bookmark" #~ msgstr "favorito" #~ msgid "comments" #~ msgstr "comentários" #~ msgid "flag" #~ msgstr "sinalizar" #~ msgid "link cosmos" #~ msgstr "link cosmos" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Download do componente FALHOU: \"%s\"" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Download do componente completo: \"%s\"" #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "Imprimir mensagens de depuração do carregamento de plugins" #~ msgid "Liferea seems to be running already!" #~ msgstr "Parece que o Liferea já está em execução!" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Essa versão do Liferea usa um novo formato de cache e migrou o seu cache " #~ "de fontes de notícias. O conteúdo do cache em %s não foi apagado " #~ "automaticamente. Por favor, remove esse diretório quando você tiver " #~ "certeza de que a migração foi bem-sucedida!" #~ msgid "Update status" #~ msgstr "Atualizar status" #~ msgid "was updated" #~ msgstr "foi atualizado" #~ msgid "was not updated" #~ msgstr "não foi atualizado" #~ msgid "The orientation of the tray." #~ msgstr "A orientação da bandeja." #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Avança para o próximo item não lido. Se for necessário, seleciona a " #~ "próxima fonte de notícias com itens ainda não lidos." #~ msgid "_Script Manager" #~ msgstr "Gerenciador de _Script" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Permite configurar e editar ganchos de script LUA" #~ msgid "Search With ..." #~ msgstr "Pesquisar Com..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d Resultado da Pesquisa por \"%s\"" #~ msgstr[1] "%d Resultados da Pesquisa por \"%s\"" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d Resultado da Pesquisa" #~ msgstr[1] "%d Resultados da Pesquisa" #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "A lista de itens agora contém todos os itens que combinam com o resultado " #~ "da pesquisa. Se você quiser salvar este resultado permanentemente, clique " #~ "no botão \"Pasta Virtual\" no diálogo da pesquisa e o Liferea adicionará " #~ "uma Pasta Virtual na sua lista de fontes de notícias." #~ msgid "Count" #~ msgstr "Contagem" #~ msgid "You have to select a feed entry" #~ msgstr "Você deve selecionar uma fonte de notícias" #~ msgid "(empty)" #~ msgstr "(vazio)" #~ msgid "Launch Item In _Tab" #~ msgstr "Abrir Item Em _Aba" #~ msgid "_Launch Item In Browser" #~ msgstr "A_brir Item No Navegador" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Copiar _URL do Item para a Área de Transferência" #~ msgid "_Properties..." #~ msgstr "_Propriedades..." #~ msgid "Update out-dated feeds" #~ msgstr "Atualizar fontes de notícias desatualizadas" #~ msgid "Force update of all feeds" #~ msgstr "Forçar a atualização de todas as fontes de notícias" #~ msgid "No feed update at all" #~ msgstr "Nenhuma atualização de fontes de notícias" #~ msgid "Choose download directory" #~ msgstr "Escolha o diretório de download" #~ msgid "startup" #~ msgstr "inicialização" #~ msgid "feed updated" #~ msgstr "fonte de notícias atualizada" #~ msgid "feed added" #~ msgstr "fontes de notícias adicionada" #~ msgid "item selected" #~ msgstr "item selecionado" #~ msgid "feed selected" #~ msgstr "fonte de notícias selecionado" #~ msgid "item unselected" #~ msgstr "item não selecionado" #~ msgid "feed unselected" #~ msgstr "fonte de notícias não selecionada" #~ msgid "shutdown" #~ msgstr "desligar" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Sinto muito, mas não há suporte para script disponível!" #~ msgid "Script Name" #~ msgstr "Nome do Script" #~ msgid "No script selected!" #~ msgstr "Nenhum script selecionado!" #~ msgid "Create a new search feed." #~ msgstr "Criar uma nova pesquisa de fontes de notícias." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea não foi capaz de exibir o índice deste item." #~ msgid "

        View this item's content.

        " #~ msgstr "

        Exibir o índice deste item.

        " #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "Integrar a lista de fonte de notícias de sua conta no Bloglines. Liferea " #~ "apresentará sua assinatura do Bloglines como uma árvore secundária " #~ "(somente com permissão de leitura) na lista de fontes de notícias." #~ msgid "feedlist.opml" #~ msgstr "feedlist_pt_BR.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s possui %d nova / atualizada manchete\n" #~ msgstr[1] "%s possui %d novas / atualizadas manchetes\n" #~ msgid "Liferea Sync %s@%s" #~ msgstr "Liferea Sync %s@%s" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Hook" #~ msgstr "Gancho" #~ msgid "Registered Scripts" #~ msgstr "Scripts Registrados" #~ msgid "Script Code" #~ msgstr "Código em Script" #~ msgid "text/plain" #~ msgstr "text/plain" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Esta opção pode causar atrasos significantes no carregamento de pastas " #~ "contendo muitas fontes de notícias." #~ msgid "Downloading Enclosures" #~ msgstr "Baixando Componentes" #~ msgid "Feed Cache Handling" #~ msgstr "" #~ "Manipulação do Cache da Fonte de Notícias" #~ msgid "Feed Name" #~ msgstr "Nome da Fonte de Notícias" #~ msgid "Feed Update Settings" #~ msgstr "" #~ "Configurações de Atualização de Fontes de Notícias" #~ msgid "HTTP Proxy Server" #~ msgstr "Servidor de Proxy HTTP" #~ msgid "Opening Enclosures" #~ msgstr "Abrindo Componentes" #~ msgid "Reading Headlines" #~ msgstr "Lendo Manchetes" #~ msgid "Synchronized with Nearby Hosts" #~ msgstr "Sincronizado com Servidores Próximos" #~ msgid "Toolbar Settings" #~ msgstr "Configurações da Barra de Ferramentas" #~ msgid "Update Interval" #~ msgstr "Intervalo de Atualizações" #~ msgid "Web Integration" #~ msgstr "Integração Web" #~ msgid "Add Script" #~ msgstr "Adicionar Script" #~ msgid "At _startup:" #~ msgstr "Ao _iniciar:" #~ msgid "Attention Profile" #~ msgstr "Perfil de Atenção" #~ msgid "" #~ "Copyright (c) 2003-2009\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Copyright (c) 2003-2009\n" #~ "The Liferea Team\n" #~ msgid "Create new script" #~ msgstr "Criar um novo script" #~ msgid "Exec Command" #~ msgstr "Exec Comando" #~ msgid "Reuse existing script" #~ msgstr "Reusar script existente" #~ msgid "Script Manager" #~ msgstr "Gerenciador de Script" #~ msgid "Search _Link Cosmos with" #~ msgstr "Pesquisar no _Link Cosmos com" #~ msgid "Sync" #~ msgstr "Sincronizar" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "_Habilitar Sincronização de Rede Local" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Manual:\n" #~ "(%s para URL)" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "_Passar a URL e não baixar o componente." #~ msgid "_Save downloads in" #~ msgstr "_Salvar downloads em" #~ msgid "_Service Name" #~ msgstr "Nome do _Serviço:" #~ msgid "%s" #~ msgstr "%s" #~ msgid "_Allow Flash in Feeds." #~ msgstr "_Permitir Flash nas fontes de notícias" #, fuzzy #~ msgid "FAILED to download enclosure: \"%s\"" #~ msgstr "Download do componente completo: \"%s\"" #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2009\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgstr "" #~ "Copyright (c) 2003-2007 \n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgid "/_Bookmark Link at %s" #~ msgstr "/_Salvar Link em %s" #~ msgid "/Toggle _Read Status" #~ msgstr "/Alte_rnar Status de Leitura" #~ msgid "/Toggle Item _Flag" #~ msgstr "/Alternar Sinalizador do Item" #, fuzzy #~ msgid "/_Preferences" #~ msgstr "_Preferências" #~ msgid "/_Quit" #~ msgstr "/_Sair" #, fuzzy #~ msgid "/Copy Link Location" #~ msgstr "/_Copiar Localização do Link" #~ msgid "/_Update" #~ msgstr "/_Atualizar" #~ msgid "/_New/New _Subscription..." #~ msgstr "/_Nova/_Nova A_ssinatura..." #~ msgid "/_New/New _Folder..." #~ msgstr "/_Nova/Nova Pasta..." #~ msgid "/_New/New S_earch Folder..." #~ msgstr "/_Nova/Nova Pasta Virtual..." #~ msgid "/_New/New S_ource..." #~ msgstr "/_Nova/Nova F_onte..." #~ msgid "/_New/New _News Bin..." #~ msgstr "/_Nova/Novo Recipiente de _Notícias..." #~ msgid "Rule" #~ msgstr "Regra" #~ msgid "Liferea Homepage" #~ msgstr "" #~ "Página Web do Liferea" #~ msgid "" #~ "Code, Patches, Debugging\n" #~ "\n" #~ "James Doherty\n" #~ "Jeremy Messenger\n" #~ "John McKnight\n" #~ "Tomasz Maka\n" #~ "Karl Soderstrom\n" #~ "Christophe Barbe\n" #~ "Juho Snellman\n" #~ "Roshan Revankar\n" #~ "Oliver Feiler\n" #~ "Niklas Morberg\n" #~ "Johannes Schlueter\n" #~ "Pierre Phaneuf\n" #~ "ahmed el-helw\n" #~ "James Bowes\n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary\n" #~ "Christoph Hohmann\n" #~ "Raphael Slinckx\n" #~ "Bjorn Monnens\n" #~ "Thomas de Grenier de Latour\n" #~ "Aristotle Pagaltzis\n" #~ "Norman Jonas\n" #~ "Sebastian Droege\n" #~ "Daniel Gryniewicz\n" #~ "Remi Cardona\n" #~ "Frederic Peters\n" #~ "Don Malcolm\n" #~ "Ed Catmur\n" #~ "Chris Pirillo\n" #~ "Eric Anderson\n" #~ "and many more...\n" #~ "\n" #~ "Code from other projects\n" #~ "\n" #~ "Anders Carlsson (tray icon support)\n" #~ "Philippe Martin, Brion Vibber (favicon support)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Included Software\n" #~ "\n" #~ "Liferea uses the XSPF Web Music Player to \n" #~ "allow direct podcast playback. This player was \n" #~ "written by Fabricio Zuardi and can be found \n" #~ "at http://musicplayer.sourceforge.net" #~ msgstr "" #~ "Código, Patches, Depuração\n" #~ "\n" #~ "James Doherty\n" #~ "Jeremy Messenger\n" #~ "John McKnight\n" #~ "Tomasz Maka\n" #~ "Karl Soderstrom\n" #~ "Christophe Barbe\n" #~ "Juho Snellman\n" #~ "Roshan Revankar\n" #~ "Oliver Feiler\n" #~ "Niklas Morberg\n" #~ "Johannes Schlueter\n" #~ "Pierre Phaneuf\n" #~ "ahmed el-helw\n" #~ "James Bowes\n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary\n" #~ "Christoph Hohmann\n" #~ "Raphael Slinckx\n" #~ "Bjorn Monnens\n" #~ "Thomas de Grenier de Latour\n" #~ "Aristotle Pagaltzis\n" #~ "Norman Jonas\n" #~ "Sebastian Droege\n" #~ "Daniel Gryniewicz\n" #~ "Remi Cardona\n" #~ "Frederic Peters\n" #~ "Don Malcolm\n" #~ "Ed Catmur\n" #~ "Chris Pirillo\n" #~ "Eric Anderson\n" #~ "e muitos mais...\n" #~ "\n" #~ "Código de outros projetos\n" #~ "\n" #~ "Anders Carlsson (suporte para ícone de bandeja)\n" #~ "Philippe Martin, Brion Vibber (suporte para favicon)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Software Incluído\n" #~ "\n" #~ "Liferea usa o Reprodutor de Música para Web XSPF para \n" #~ "permitir reprodução direta de podcast. Este reprodutor foi escrto por " #~ "Fabricio Zuardi e pode ser encontrado \n" #~ "em http://musicplayer.sourceforge.net" #~ msgid "Contributors" #~ msgstr "Contribuidores" #~ msgid "" #~ "Note: Items are added to the search folder if at least one additive rule\n" #~ "matches. They are removed if at least one removing rule matches." #~ msgstr "" #~ "Nota: Itens serão adicionados à pasta virtual se coincidir com pelo " #~ "menos\n" #~ "uma regra aditiva. Eles serão removidos se ao menos uma regra de remoção " #~ "coincidir." #~ msgid "" #~ "Saves this search as a search folder, which will appear in the feed list." #~ msgstr "" #~ "Salva esta pesquisa como uma pasta virtual, a qual aparecerá na lista de " #~ "fontes de notícias." #~ msgid "Show Menu _And Toolbar" #~ msgstr "Exibe Menu e B_arra de Ferramentas" #~ msgid "Show _Menu Only" #~ msgstr "Exibe Somente o _Menu" #~ msgid "Show _Toolbar Only" #~ msgstr "Exibe Apena_s a Barra de Ferramentas" #~ msgid "Translation" #~ msgstr "Tradução" #~ msgid "_Limit cache to" #~ msgstr "_Limitar cache para" #~ msgid "_Name:" #~ msgstr "_Nome" #~ msgid "items." #~ msgstr "itens." #~ msgid "" #~ "minutes\n" #~ "hours\n" #~ "days" #~ msgstr "" #~ "minutos\n" #~ "horas\n" #~ "dias" #~ msgid "search" #~ msgstr "pesquisar" #~ msgid "Access Forbidden" #~ msgstr "Acesso Proibido" #~ msgid "URL is invalid" #~ msgstr "URL inválida" #~ msgid "Unsupported network protocol" #~ msgstr "Protocolo de rede não suportado" #~ msgid "Hostname could not be found" #~ msgstr "O servidor não pôde ser encontrado" #~ msgid "Network connection was refused by the remote host" #~ msgstr "Conexão de rede recusada pelo servidor remoto" #~ msgid "Remote host did not finish sending data" #~ msgstr "Servidor remoto não terminou de enviar os dados" #~ msgid "Too many HTTP redirects were encountered" #~ msgstr "Encontrados muitos redirecionamentos de HTTP" #~ msgid "Remote host sent an invalid response" #~ msgstr "O Servidor remoto enviou uma resposta inválida" #~ msgid "Webserver's authentication method incompatible with Liferea" #~ msgstr "" #~ "Métdodo de autentição do servidor de web é incompatível com o Liferea" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "" #~ "Fim inesperado da sequência de caracteres ou codificação UTF-8 " #~ "corrompida! Alguns caracteres foram perdidos!" #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "" #~ "A pesquisa automática por links de fontes de notícias falhou! Nenhum link " #~ "de fonte de notícias foi encontrado!" #~ msgid " --help Print this help and exit" #~ msgstr " --help Exibe ajuda e sai" #~ msgid " --mainwindow-state=STATE" #~ msgstr " --mainwindow-state=ESTADO" #~ msgid " Start Liferea with its main window in STATE." #~ msgstr "" #~ " Inicia o liferea com a janela principal no ESTADO." #~ msgid " Possible topics are: all,cache,conf,db,gui,html" #~ msgstr "" #~ " Tópicos disponíveis são: all,cache,conf,db,gui,html" #~ msgid " net,parsing,plugins,trace,update,verbose" #~ msgstr " net,parsing,plugins,trace,update,verbose" #~ msgid "The --mainwindow-state argument must be given a parameter.\n" #~ msgstr "" #~ "É necessário passar um argumento para o parâmetro --mainwindow-state.\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "É necessário passar um argumento para o parâmetro --session.\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "Liferea encontrou um argumento desconhecido: %s\n" #~ msgid "does match" #~ msgstr "combina" #~ msgid "does not match" #~ msgstr "não combina" #~ msgid "Could not download \"%s\". Will retry in %d seconds." #~ msgstr "Não foi possível baixar \"%s\". Tentando novamente em %d segundos." #~ msgid "" #~ "Sorry, I was not able to load any installed browser plugin! Try the --" #~ "debug-plugins option to get debug information!" #~ msgstr "" #~ "Desculpe, não foi possível carregar nenhum dos plug-ins instalados do " #~ "navegador! Tente a opção --debug-plugins para obter informações de " #~ "depuração!" #~ msgid "This item does not have a link assigned!" #~ msgstr "Este item não possui um link designado!" #~ msgid "No link selected!" #~ msgstr "Nenhum link selecionado!" #~ msgid "http://lzone.de/liferea/" #~ msgstr "http://lzone.de/liferea/" #~ msgid "Updates all subscriptions. This does not update OCS directories." #~ msgstr "Atualiza todas assinaturas. Isto não atualiza diretórios OCS." #~ msgid "/_Increase Text Size" #~ msgstr "/_Aumentar o Tamanho do Texto" #~ msgid "/_Decrease Text Size" #~ msgstr "/_Diminuir o Tamanho do Texto" #~ msgid "/Toggle _Online|Offline" #~ msgstr "/Alternar _Online|Offline" #~ msgid "/_Preferences..." #~ msgstr "/_Preferências..." #~ msgid "/_Show|Hide Window" #~ msgstr "/Mo_strar|Ocultar Janela" #~ msgid "Cookie for %s has expired!" #~ msgstr "Cookie de %s expirou!" #, fuzzy #~ msgid "gtk-properties" #~ msgstr "_Propriedades..." #~ msgid "" #~ "GNOME default\n" #~ "Text below icons\n" #~ "Text beside icons\n" #~ "Icons only\n" #~ "Text only" #~ msgstr "" #~ "Padrão do GNOME\n" #~ "Texto abaixo dos ícones\n" #~ "Texto ao lado dos ícones\n" #~ "Somente ícones\n" #~ "Somente texto" #~ msgid "" #~ "Space\n" #~ " Space\n" #~ " Space" #~ msgstr "" #~ "Espaço\n" #~ " Espaço\n" #~ " Espaço" #~ msgid "" #~ "Update out-dated feeds\n" #~ "Force update of all feeds\n" #~ "No feed update at all" #~ msgstr "" #~ "Atualizar fontes de notícias desatualizadas\n" #~ "Forçar atualização de todas as fontes de notícias\n" #~ "Não atualize" liferea-1.12.7/po/ro.po000066400000000000000000002545401352135647700146360ustar00rootroot00000000000000# Romanian translation for liferea # This file is distributed under the same license as the liferea package. # Adi Roiban , 2009. # msgid "" msgstr "" "Project-Id-Version: liferea 1.6.0-rc6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2009-10-06 19:11+0200\n" "Last-Translator: Adi Roiban \n" "Language-Team: Romanian \n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 " "== 0) && (n != 0))) ? 2: 1));\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Cititor fluxuri" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Liferea este conectat" #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "Sincronizat cu calculatoare din apropiere" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "Sincronizat cu calculatoare din apropiere" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "Sincronizat cu calculatoare din apropiere" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "Sincronizat cu calculatoare din apropiere" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 #, fuzzy msgid "Play Podcasts" msgstr "Podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Cititor fluxuri" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Cititor fluxuri Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Fluxul a fost întrerupt. Nu mai este disponibil. Liferea nu îl va mai " "actualiza dar puteți accesa titlurile din cache." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "Ultima actualizare a acestui abonament a eșuat!
        Codul de eroare HTTP " ": " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Au fost erori în timp ce se analiza acest flux!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Detalii eroare analizare" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Detalii" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Au fost erori în timp ce se filtra acest flux!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Detalii eroare filtru" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Flux:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Sursă:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Publicat de" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Drepturi de autor" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "copil cu" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "titluri necitite" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Dosar:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Sursă" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Flux" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Clasat sub" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Autor" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Partajat de" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Via" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Asociat" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Postat și în" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Realizat de" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Comentarii" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "În curs de actualizare..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Secțiune" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Departament" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Colecție știri:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Adăugați elemente la această colecție de știri prin alegerea opțiunii " "„Copiază în colecție de știri” din meniul contextual." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Dosare căutare:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Comanda de navigare a eșuat: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Se pornește: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Eroare autorizare" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Nu s-a putut creat dosar cache „%s”!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Astăzi %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Ieri %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%b %d %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%b %d %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "„%s” nu este un fișier valid de configurare pentru atașamente!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Eroare la redenumirea %s în %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "Eroare XML la citirea fișierului OPML! Nu s-a putut importa „%s”!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Document gol! Documentul OPML „%s” nu trebuie să fie gol când se importă." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "„%s” nu este un fișier OPML valid! Liferea nu poate importa acest fișier!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Listă flux importat" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importă listă flux" #: ../src/export.c:481 msgid "Import" msgstr "Importă" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 #, fuzzy msgid "OPML Files" msgstr "Alege fișier OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Eroare la exportarea listei de fluxuri!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Lista de flux a fost exportată!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Exportă listă flux" #: ../src/export.c:498 msgid "Export" msgstr "Exportă" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        Nu s-a putut determina tipul fluxului! Verificați dacă sursa duce la o " "resursă în unul dintre formatele suportate!

        Rezultat analizator XML:
        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "„%s” actualizat..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "„%s” nu este disponibil" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "URL-ul la care doriți să vă abonați duce la o pagină web iar funcția de " "autodescoperire nu a găsit nici un flux pe acetă pagină. Este posibil ca " "acestă pagină să nu suporte autodescoperirea." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "Eroare XML la citirea fluxului! Fluxul „%s” nu poate fi încărcat!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Document gol!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "XML nevalid!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Sursa duce la un document HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Nu s-a putut determina tipul fluxului." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 #, fuzzy msgid "There are no unread items" msgstr "Nu există elemente necitite " #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Pornește Liferea cu fereastră principală în STAREA. STAREA poate să fie " "„shown”, „iconified” sau „hidden”" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "STARE" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Arată informația despre versiune și ieși" #: ../src/liferea_application.c:284 #, fuzzy msgid "Add a new subscription" msgstr "Înscriere nouă" #: ../src/liferea_application.c:284 msgid "uri" msgstr "" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Afișează mesaje de notificare de toate tipurile" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Afișează mesaje de depanare pentru gestionarea cacheului" #: ../src/liferea_application.c:292 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "Afișează mesaje de depanare pentru gestionarea configurației" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Afișează mesaje de depanare pentru gestionarea bazei de date" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "" "Afișează mesaje de depanare pentru toate funcțiile interfeței cu utilizator" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Activează depanarea randării HTMLL. De fiecare dată când Liferea randează " "HTML va copia HTML-ul generat în ~/.cache/liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Afișează mesaje de depanare pentru toată activitatea de rețea" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Afișează mesaje de depanare pentru toate funcțiile de analizare" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Afișează mesaje de depanare atunci când procesarea unei funcții durează prea " "mult" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Afișează mesaje de depanare la intrarea și ieșirea din funcții" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "" "Afișează mesaje de depanare pentru procesul de actualizare a fluxurilor" #: ../src/liferea_application.c:301 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "Afișează mesaje de depanare pentru gestionarea cacheului" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Afișează mesaje de depanare detaliate" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Afișează mesaje de depanare pentru subiectul specificat" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Cererea de actualizare a fost anulată" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Nu s-a putut rezolva numele destinație" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Nu s-a putut rezolva numele proxyului" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Nu s-a putut conecta la calculatorul la distanță" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Nu s-a putut conecta la proxy" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "S-a produs o eroare de rețea, sau cealaltă parte a conexiunii a fost închisă " "neașteptat" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Resursa a fost mutată permanent la o nouă locație" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Nu aveți permisiunea de a descărca acest flux. Actualizați numele de " "utilizator și parola din dialogul de proprietăți a fluxului." #: ../src/net.c:476 msgid "Payment required" msgstr "Necesită plată" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Nu aveți permisiunea de a accesa această resursă" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Nu au fost găsite resursele" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Metoda nu este acceptată" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Nu este acceptabil" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Autentificare proxy necesară" #: ../src/net.c:482 msgid "Request timed out" msgstr "Cererea a expirat" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Dus. Resursa nu există. Vă rugăm să vă dezabonați!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "S-a produs o eroare internă în procesul de actualizare" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Fluxul nu este disponibil: Redirecționare nesuportată cerută de server!" #: ../src/net.c:492 msgid "Client Error" msgstr "Eroare la client" #: ../src/net.c:494 msgid "Server Error" msgstr "Eroare la server" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "S-a produs o eroare necunoscută de rețea!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Element" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "conține" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "nu conține" #: ../src/rule.c:175 msgid "Item title" msgstr "Titlu element" #: ../src/rule.c:176 msgid "Item body" msgstr "Corp element" #: ../src/rule.c:177 msgid "Read status" msgstr "Starea de citit" #: ../src/rule.c:177 msgid "is unread" msgstr "este necitit" #: ../src/rule.c:177 msgid "is read" msgstr "este citit" #: ../src/rule.c:178 msgid "Flag status" msgstr "Stare fanion" #: ../src/rule.c:178 msgid "is flagged" msgstr "este marcat" #: ../src/rule.c:178 msgid "is unflagged" msgstr "este nemarcat" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "inclus" #: ../src/rule.c:179 msgid "not included" msgstr "neinclus" #: ../src/rule.c:180 msgid "Category" msgstr "Categorie" #: ../src/rule.c:180 msgid "is set" msgstr "este definit" #: ../src/rule.c:180 msgid "is not set" msgstr "nu este definit" #: ../src/rule.c:181 msgid "Feed title" msgstr "Titlu flux" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Abonamentul „%s” deja se actualizează!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "Abonamentul „%s” a fost deconectat. Liferea nu îl va mai actualiza!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Se actualizeaza favicon pentru „%s”" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "A apărut o problemă la citirea abonamentului. Verificați URL-ul și ieșirea " "consolei." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "URL-ul „%s„ s-a modificat permanent și a fost actualizat" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "„%s” este întrerupt. Liferea nu îl va mai actualiza!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "„%s” a fost modificat de la ultima actualizare." #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Se actualizează „%s”" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "" "Eroare la deschidere fișierului temporar %s pentru a fi folosit la filtrare!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s a ieșit în starea %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Eroare: Nu s-a putut face legătura „%s”" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Eroare: Nu s-a putut deschide fișierul „%s”!" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Eroare: Nu este nici un fișier „%s”" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Dosar nou de căutare" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Au existat mai multe erori. Ieșirea a fost trunchiată!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "Analizator XML: Nu s-a putut analiza documentul:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Atașamente" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " Octeți" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kO" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MO" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GO" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d atașament" msgstr[1] "%d atașamente" msgstr[2] "%d de atașamente" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Alegere fișier" #: ../src/ui/enclosure_list_view.c:444 #, fuzzy, c-format msgid "File Extension .%s" msgstr "Extensie fișier .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Nu s-a putut găsi fișierul imagine: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d nou)" msgstr[1] " (%d noi)" msgstr[2] " (%d noi)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d necitit%s" msgstr[1] "%d necitite%s" msgstr[2] "%d necitite%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Sumar pentru ajutor" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Referință rapidă" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "Întrebări frecvente" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Căutare avansată" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Introduceți numele de utilizator și parola pentru „%s” (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Sursă necunoscută" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "_Anulează tot" #: ../src/ui/ui_common.c:211 #, fuzzy msgid "All Files" msgstr "Fișier _local" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea este în modul deconectat. Nu se pot face actualizări." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Caută în toate feedurile." #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Marchează toate ca citite" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Doriți să ștergeți %s?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Acest element nu are specificată o legătură!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Fără titlu ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Titlul" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Trebuie să alegeți un flux pentru ai șterge elementele!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Nu a fost selectat nici un element" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "" #: ../src/ui/popup_menu.c:111 #, fuzzy msgid "_Open In Browser" msgstr "_Lansează în navigator" #: ../src/ui/popup_menu.c:115 #, fuzzy msgid "Open In _External Browser" msgstr "Preferințe navigatorului extern" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Copiază în colecție știri" #: ../src/ui/popup_menu.c:147 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "_Memorează legătura la %s" #: ../src/ui/popup_menu.c:153 #, fuzzy msgid "Copy Item _Location" msgstr "_Copiază locația legăturii" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Comută starea de _citire" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Comută _fanion element" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "_Elimină element" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Deschide atașament..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Salvează ca..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Copiază locația legăturii" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "Act_ualizează" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "Act_ualizare dosar" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "A_bonament nou..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "_Dosar nou..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Dosar de cău_tare nou..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Sursă n_ouă..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "_Colecție știri nouă..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Nou" #: ../src/ui/popup_menu.c:312 #, fuzzy msgid "Sort Feeds" msgstr "Importă listă flux" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_Marchează tot ca citit" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "Șt_erge" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Proprietăți" #: ../src/ui/popup_menu.c:343 #, fuzzy msgid "Convert To Local Subscriptions..." msgstr "Abonament _nou..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "Implicit GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Text sub iconițe" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Text lângă iconițe" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Doar iconițe" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Doar text" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minute" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "ore" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "zile" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Spațiu" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Spațiu" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Spațiu" #: ../src/ui/preferences_dialog.c:112 #, fuzzy msgid "Normal View" msgstr "Vizualizare _normală" #: ../src/ui/preferences_dialog.c:113 #, fuzzy msgid "Wide View" msgstr "Vizualizare _lată" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Combined View" msgstr "Vizualizare _combinată" #: ../src/ui/preferences_dialog.c:476 #, fuzzy msgid "Default Browser" msgstr "Navigator implicit GNOME" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Tip" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Se șterge intrarea" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Doriți să ștergeți %s și conținutul lui?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Doriți să ștergeți %s?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Confirmare ștergere" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Confirmare ștergere" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "" "Furnizorul acestui flux sugerează un interval de actualizare de %d minut." msgstr[1] "" "Furnizorul acestui flux sugerează un interval de actualizare de %d minute." msgstr[2] "" "Furnizorul acestui flux sugerează un interval de actualizare de %d de minute." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Acest flux nu are nici un interval implicit de actualizare." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Fără titlu" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Abonament nou" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Alege fișier OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Abonament OPML nou" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Nu s-a găsit tipul listei de fluxuri!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Tip sursă" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Autentificare Google Reader eșuată!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Cititor fluxuri" #: ../src/webkit/liferea_web_view.c:175 #, fuzzy msgid "Open Link In _Tab" msgstr "Deschide legătură în _tab" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "Deschide _legătură în navigator" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "Deschide _legătură în navigator" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_Memorează legătura la %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Copiază locația legăturii" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "_Vizualizare" #: ../src/webkit/liferea_web_view.c:194 #, fuzzy msgid "_Copy Image Location" msgstr "_Copiază locația legăturii" #: ../src/webkit/liferea_web_view.c:197 #, fuzzy msgid "S_ave Link As" msgstr "Salvează ca..." #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Abonare..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "Crește măr_imea textului" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "Sca_de mărimea textului" #: ../glade/about.ui.h:1 msgid "About" msgstr "Despre" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea este un agregator de fluxuri pentru GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Pagina web Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autentificare" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Nume utilizator:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Parolă:" #: ../glade/enclosure_handler.ui.h:1 #, fuzzy msgid "Open Enclosure" msgstr "Deschide atașament..." #: ../glade/enclosure_handler.ui.h:2 #, fuzzy msgid "Open an enclosure of type:" msgstr "Descărcare atașament de tipul:" #: ../glade/enclosure_handler.ui.h:3 #, fuzzy msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Ce ar trebui să facă Liferea cu acest atașament? Introduceți mai jos o " "comandă care doriți să fie pornită. Atașamentele descărcate vor fi date ca " "un argument pentru această comandă:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Navighează" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "_De acum încolo fă asta automat pentru atașamente de acest timp." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Adaugă cont Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Introduceți configurările contului Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Parolă" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "N_ume utilizator (email)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Vizualizare titluri" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Titluri" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Marchează toate ca citite" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Marchează toate ca citite" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Dosar nou" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "Nume _dosar:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Crează colecție știri" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Nume colecție știri:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Sursa feedului" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Tip sursă:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Comandă" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "Fișier _local" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Alegere fișier..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Sursă:" #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Descărcare / Postprocesare" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "Nu folosi proxy pentru _descărcări" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Folosește _filtrul de conversie" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea poate folosi module externe pentru a accesa fluxuri și directoarele " "pentru formate nesuportate. Pentru mai multe informații consulați " "documentația." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Con_vertește folosind:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Alegere sursă" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Alegeți tipul sursei pe care doriți să o adăugați" #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Adaugă OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Specificați un fișier local sau un URL care să conțină o listă validă de " "flux OPML." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Locație" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "Ale_gere fișier" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Preferințe Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_Numărul implicit de elemente per flux care să fie salvate:" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "Feed Update Settings" msgstr "Actualizare flux" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Note: Nu uitați să configurați un interval rezonabil pentru actualizare. " "În general actualizarea la un interval mai mic de o oră este o risipă de " "bandă." #: ../glade/prefs.ui.h:8 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Actualizează toate abonamentele." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "_Intervalul implicit de actualizare flux:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Fluxuri" #: ../glade/prefs.ui.h:12 #, fuzzy msgid "Folder Display Settings" msgstr "Preferințe afișare dosar" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "Arată elementele unui flux când este _selectat un dosar." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "Ascun_de elementele citite." #: ../glade/prefs.ui.h:15 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Iconițe fluxuri (Favicons)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "Act_ualizează acum toate faviconurile" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Dosare" #: ../glade/prefs.ui.h:18 #, fuzzy msgid "Reading Headlines" msgstr "titluri necitite" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Ră_sfoiește articolele cu:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:21 #, fuzzy msgid "Web Integration" msgstr "Orientare" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Pune semne de carte la" #: ../glade/prefs.ui.h:24 #, fuzzy msgid "Internal Browser Settings" msgstr "Preferințele navigatorului intern" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Deschide legăturile în _fereastra din Liferea" #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Dezactivare JavaScript." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "Activ_ează modulele navigatorului." #: ../glade/prefs.ui.h:28 #, fuzzy msgid "External Browser Settings" msgstr "Preferințe navigatorului extern" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Navigator:" #: ../glade/prefs.ui.h:30 #, fuzzy msgid "_Manual:" msgstr "Manual" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Navigator" #: ../glade/prefs.ui.h:34 #, fuzzy msgid "Toolbar Settings" msgstr "Etichete _butoane bară de unelte:" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Ascunde bara de instrumente." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Etichete _butoane bară de unelte:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Auto detectare (GNOME sau mediu de lucru)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "Fără _proxy" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "Configurări _manuale:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Gazdă proxy:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Port proxy:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Folosește au_tentificare proxy" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "N_ume utilizator proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Parolă pro_xy:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Preferințe afișare dosar" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 #, fuzzy msgid "Downloading Enclosures" msgstr "Descărcare atașament" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Descarcă folosind" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 #, fuzzy msgid "Opening Enclosures" msgstr "Deschide atașament..." #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Atașamente" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Proprietăți abonamente" #: ../glade/properties.ui.h:2 #, fuzzy msgid "Feed Name" msgstr "_Nume flux:" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Nume flux:" #: ../glade/properties.ui.h:4 #, fuzzy msgid "Update Interval" msgstr "Monitor actualizări" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "Folosește interval global de act_ualizare." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "Interval actualizare specific _flux de" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Nu actualiza automat acest flux." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Sursa acestui flux sugerează un interval de actualizare de %d minute." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Generale" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea poate folosi module externe pentru a accesa fluxuri și directoarele " "pentru formate nesuportate. Pentru mai multe informații consulați " "documentația." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Configurările pentru controlul cacheului dacă conținutul fluxurilor sunt " "salvate când se închide Liferea. Elementele marcate sunt întotdeauna salvate " "în cache." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "Configurări _implicite cache" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "De_zactivare cache" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "Cache _nelimitat" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "_Număr elemente salvate:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Arhivă" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Folosește _autenficare HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Descarcă" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "Descarcă _automat toate atașamentele acestui flux." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "La selectarea elementelor, încarcă automat _legătura elementului în " "navigatorul configurat." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Ignoră _comentariile fluxului pentru acest abonament." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Marchează elementele descărcate ca citite." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Avansat" #: ../glade/reedah_source.ui.h:1 #, fuzzy msgid "Add Reedah Account" msgstr "Adaugă cont Google Reader" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Introduceți configurările contului Google Reader." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Redenumește" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "Nume _nou:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Proprietăți dosar de căutare" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "_Nume căutare:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 #, fuzzy msgid "Find Items that meet the following criteria" msgstr "Caută elemente ce îndeplinesc următoarele criterii" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "_Orice regulă se potrivește" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "To_ate regulile se potrivesc" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Căutare avansată" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "_Dosar căutare..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Caută în toate fluxurile" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Avansat..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Pornește căutarea pentru textul specificat în toate fluxurile. Rezultatul " "căutării va apărea în lista de elemente." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Caută după:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Introduceți un șir de căutarea pentru care Liferea ar trebui să caute în " "titlurile elementelor cât și în conținutul acestora." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Avansat..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Introduceți adresa paginii web pentru a folosi autodescoperirea fluxului sau " "în cazul în care o știți exact, introduceți adresa fluxului." #: ../glade/theoldreader_source.ui.h:1 #, fuzzy msgid "Add TheOldReader Account" msgstr "Adaugă cont Google Reader" #: ../glade/theoldreader_source.ui.h:2 #, fuzzy msgid "Please enter your TheOldReader account settings." msgstr "Introduceți configurările contului Google Reader." #: ../glade/ttrss_source.ui.h:1 #, fuzzy msgid "Add Tiny Tiny RSS Account" msgstr "Adaugă cont Bloglines" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "Introduceți configurările contului Bloglines" #: ../glade/ttrss_source.ui.h:3 #, fuzzy msgid "_Server URL" msgstr "Eroare la server" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "N_ume utilizator" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Monitor actualizări" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "_Anulează tot" #: ../glade/update_monitor.ui.h:3 #, fuzzy msgid "Pending Requests" msgstr "Cereri în așteptare" #: ../glade/update_monitor.ui.h:4 #, fuzzy msgid "Downloading Now" msgstr "Se descarcă acum" #~ msgid "_Subscriptions" #~ msgstr "_Abonamente" #~ msgid "Update _All" #~ msgstr "_Actualizează toate" #~ msgid "Updates all subscriptions." #~ msgstr "Actualizează toate abonamentele." #~ msgid "Mark All As _Read" #~ msgstr "Ma_rchează toate ca citite" #~ msgid "Marks read every item of every subscription." #~ msgstr "Marchează ca citite toate elementele din toate abonamentele." #~ msgid "_Import Feed List..." #~ msgstr "_Import listă flux..." #~ msgid "Imports an OPML feed list." #~ msgstr "Importă o lista flux OPML." #~ msgid "_Export Feed List..." #~ msgstr "_Export listă flux..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Exportă lista de fluxuri ca OPML." #~ msgid "_Quit" #~ msgstr "_Ieșire" #~ msgid "_Feed" #~ msgstr "_Flux" #~ msgid "Remove _All Items" #~ msgstr "Elimină to_ate elementele" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Elimină toate elementele din fluxul selectat curent." #~ msgid "_Item" #~ msgstr "_Element" #, fuzzy #~ msgid "Next Item" #~ msgstr "_Următorul element necitit" #~ msgid "_Next Unread Item" #~ msgstr "_Următorul element necitit" #~ msgid "_View" #~ msgstr "_Vizualizare" #~ msgid "Increases the text size of the item view." #~ msgstr "Crește mărimea textului din elementul vizualizat." #~ msgid "Decreases the text size of the item view." #~ msgstr "Scade mărimea textului din elementul vizualizat." #~ msgid "_Tools" #~ msgstr "Ins_trumente" #~ msgid "_Update Monitor" #~ msgstr "Monitor act_ualizare" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "" #~ "Afișează o lista a tuturor fluxurilor în coada de actualizări curente" #~ msgid "_Preferences" #~ msgstr "_Preferințe" #~ msgid "Edit Preferences." #~ msgstr "Editare preferințe." #~ msgid "S_earch" #~ msgstr "_Căutare" #~ msgid "Search All Feeds..." #~ msgstr "Căută toate fluxurile..." #~ msgid "Show the search dialog." #~ msgstr "Afișează dialogul de căutare." #~ msgid "_Help" #~ msgstr "_Help" #~ msgid "_Contents" #~ msgstr "_Conținut" #~ msgid "View help for this application." #~ msgstr "Vizualizare ajutor pentru această aplicație." #~ msgid "_Quick Reference" #~ msgstr "Referință ra_pidă" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Vizualizează o listă a tuturor scurtăturilor din Liferea." #~ msgid "_FAQ" #~ msgstr "Întrebări _frecvente" #~ msgid "View the FAQ for this application." #~ msgstr "Vizualizează întrebările frecvente ale acestei aplicații" #~ msgid "_About" #~ msgstr "_Despre" #~ msgid "Shows an about dialog." #~ msgstr "Afișează dialogul despre." #~ msgid "_Normal View" #~ msgstr "Vizualizare _normală" #~ msgid "Set view mode to mail client mode." #~ msgstr "" #~ "Definește modul de vizualizare la modul de vizualizare client email." #~ msgid "_Wide View" #~ msgstr "Vizualizare _lată" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "" #~ "Definește modul de vizualizare pentru a folosi trei panouri verticale" #~ msgid "_Combined View" #~ msgstr "Vizualizare _combinată" #~ msgid "Set view mode to two pane mode." #~ msgstr "Definește mod vizualizare în modul cu 2 panouri." #~ msgid "_Reduced Feed List" #~ msgstr "Listă _redusă fluxuri" #~ msgid "Hide feeds with no unread items." #~ msgstr "Ascunde fluxurile fără elemente necitite." #~ msgid "_New Subscription..." #~ msgstr "Abonament _nou..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Adaugă un abonament la lista de flux." #~ msgid "Adds a folder to the feed list." #~ msgstr "Adaugă un dosar la lista de flux." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Adaugă un nou dosar de căutare la lista de flux." #~ msgid "New _Source..." #~ msgstr "_Sursă nouă..." #~ msgid "Adds a new feed list source." #~ msgstr "Adaugă o nouă sursă de liste fluxuri." #~ msgid "Adds a new news bin." #~ msgstr "Adaugă o colecție de știri nouă." #~ msgid "_Mark Items Read" #~ msgstr "_Marchează elementele ca citite" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Marchează ca citite toate elementele din fluxul selectat sau în lista de " #~ "elemente." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Actualizează abonamentele selectate sau toate abonamentele din dosarul " #~ "selectat." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Deschide dialogul de proprietăți pentru abonamentul selectat." #~ msgid "_Remove" #~ msgstr "Ște_rge" #~ msgid "Removes the selected subscription." #~ msgstr "Șterge abonamentul selectat." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Comută starea de citire pentru elementele selectate." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Comută starea de citire pentru elementele selectate." #~ msgid "R_emove" #~ msgstr "_Elimină" #~ msgid "Removes the selected item." #~ msgstr "Elimină elementul selectat." #, fuzzy #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Deschide legăturile din elemente în navigatorul configurat." #, fuzzy #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Deschide legăturile din elemente în navigatorul configurat." #, fuzzy #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Deschide legăturile din elemente în navigatorul configurat." #~ msgid "_Work Offline" #~ msgstr "_Mod deconectat" #~ msgid "_Update All" #~ msgstr "Act_ualizează tot" #~ msgid "_Show Liferea" #~ msgstr "_Afișează Liferea" #, fuzzy #~ msgid "InoReader" #~ msgstr "Google Reader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Notă:Numele de utilizator și parola vor fi salvate în lista de fluxuri " #~ "fără a se folosi vreo metodă de criptare." #, fuzzy #~ msgid "Add InoReader Account" #~ msgstr "Adaugă cont Google Reader" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "Introduceți configurările contului Google Reader." #~ msgid "normal view" #~ msgstr "vizualizare normală" #~ msgid "wide view" #~ msgstr "vizualizare lată" #~ msgid "combined view" #~ msgstr "vizualizare combinată" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, cititor de fluxuri" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "Pentru mai multe informații vizitați https://lzone.de/liferea/" #, fuzzy #~ msgid "_Open Link In Browser" #~ msgstr "Deschide _legătură în navigator" #, fuzzy #~ msgid "_Open Link In External Browser" #~ msgstr "Deschide _legătură în navigator" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Crează flux motor de căutare" #~ msgid "enter any search string you want" #~ msgstr "introduceți orice șir doriți" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "_Numărul maxim de elemente în rezultat:" #, fuzzy #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Notă: Liferea v-a genera un abonament la flux care va fi folosit pentru a " #~ "interoga rezultatele motorului de căutare pentru textul specificat. " #~ "Puteți păstra permanent acest flux și să îl actualizați ca oricare alt " #~ "abonament. " #~ msgid "Liferea is now online" #~ msgstr "Liferea este conectat" #~ msgid "Work Offline" #~ msgstr "Lucru conectat" #~ msgid "Liferea is now offline" #~ msgstr "Liferea este conectat" #~ msgid "Work Online" #~ msgstr "Lucru conectat" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "" #~ "Această opțiune vă permite să dezactivați actualizarea abonamentelor." #~ msgid "Browser default" #~ msgstr "Navigatorul implicit" #~ msgid "Existing window" #~ msgstr "Fereastră existentă" #~ msgid "New window" #~ msgstr "Fereastră nouă" #~ msgid "New tab" #~ msgstr "Tab nou" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Cititor fluxuri" #~ msgid "Online/Offline Button" #~ msgstr "Buton conectat/deconectat" #~ msgid "_Open link in:" #~ msgstr "_Deschide legăturile în:" #~ msgid "No comments yet." #~ msgstr "Nici un comentariu până acum." #~ msgid "Refresh" #~ msgstr "Actualizează" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - Cititor fluxuri Linux" #, fuzzy #~ msgid "" #~ "

        Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

        You can add new subscriptions

        • From main menu " #~ "'Subscription' -> 'New Subscription'
        • By dropping feed links " #~ "into the subscription list
        • By right clicking links and choosing " #~ "'Subscribe' within Liferea

        " #~ msgstr "" #~ "

        Bun venit la Liferea, o aplicație de agregare a fluxurilor de " #~ "știri online.

        Panoul din stânga conține lista abonamentelor. Pentru " #~ "a adăuga un abonament, alegeți Abonamente -> Abonament nou. Pentru a " #~ "naviga titlurile unui flux , selectați-l iar lista titlurilor va apărea " #~ "în panoul din dreapta.

        " #, fuzzy #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Închid_e în loc de minimizare în zona de notificare" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d element nou" #~ msgstr[1] "%d elemente noi" #~ msgstr[2] "%d de elemente noi" #~ msgid "No new items" #~ msgstr "Nu sunt elemente noi" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d element necitit" #~ msgstr[1] "" #~ "%s\n" #~ "%d elemente necitite" #~ msgstr[2] "" #~ "%s\n" #~ "%d de elemente necitite" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Nici un element necitit" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Flux atom nevalid: autor necunoscut" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Integrează lista de fluxuri din contul dumneavoastră Google Reader. " #~ "Liferea va afișa abonamentele Google Reader și va sincroniza lista de " #~ "fluxuri și starea de citire." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Integrează agregări de bloguri sau de Planet-uri în lista de fluxuri. " #~ "Liferea va adăuga sau va scoate automat fluxuri conform modificărilor din " #~ "documentul OPML sursă." #, fuzzy #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Integrează lista de fluxuri din contul dumneavoastră Google Reader. " #~ "Liferea va afișa abonamentele Google Reader și va sincroniza lista de " #~ "fluxuri și starea de citire." #~ msgid "This feed does not exist anymore!" #~ msgstr "Acest flux nu mai există!" #~ msgid "This news entry has no headline" #~ msgstr "Această intrare de știre nu are subiect" #~ msgid "Visit" #~ msgstr "Vizitează" #~ msgid "Open feed" #~ msgstr "Deschide flux" #~ msgid "Feed Update" #~ msgstr "Actualizare flux" #~ msgid "Show details" #~ msgstr "Arată detalii" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "Forț_ează notificări pentru acest abonament." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_Nu afișa niciodată notificări pentru acest abonament." #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Drepturi de autor (c) 2003-2009\n" #~ "Echipa Liferea\n" #, fuzzy #~ msgid "Notification Settings" #~ msgstr "Preferințe notificare" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Afișează o fereastră _proeminentă cu noile titluri." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Afișează o _iconiță de stare în zona de notificare." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Afișează _numărul elementelor noi în iconița din zona de notificare" #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "Închid_e în loc de minimizare în zona de notificare" #~ msgid "_Start in tray icon." #~ msgstr "_Pornește ca iconiță în zona de notificare." #~ msgid "Download and view feeds" #~ msgstr "Descarcă și vizualizează fluxuri" #~ msgid "You may want to validate the feed using" #~ msgstr "Poate doriți să validați fluxul folosind" #~ msgid "Launch Item In _Tab" #~ msgstr "Deschide elementul în _tab" #~ msgid "_Launch Item In Browser" #~ msgstr "Deschide e_lementul în navigator" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Copiază _URL-ul elementului în memorie" #~ msgid "flag" #~ msgstr "marcaj" #~ msgid "bookmark" #~ msgstr "favorit" #~ msgid "comments" #~ msgstr "comentarii" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Descărcare atașament eșuată: „%s”" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Descărcare atașament terminată: „%s”" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Această versiune de Liferea folosește un nou format de cache iar " #~ "fluxurile au fost migrate. Conținutul din %s nu a fost șters automat. " #~ "După ce vă asigurați că migrarea a avut loc cu succes puteți șterge " #~ "manual dosarul." #, fuzzy #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Descărcare atașament eșuată: „%s”" #, fuzzy #~ msgid "Download finished." #~ msgstr "_Descarcă folosind" #~ msgid "Choose download directory" #~ msgstr "Alegeți dosarul pentru descărcare" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Manual:\n" #~ "(%s pentru URL)" #~ msgid "_Save downloads in" #~ msgstr "_Salvează descărcările în" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "Activ_ează sincronizarea în rețeaua locală" #~ msgid "_Service Name" #~ msgstr "Nume _serviciu" #~ msgid "Sync" #~ msgstr "Sincronizare" #~ msgid "Downloading Enclosure" #~ msgstr "Descărcare atașament" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "_Oferă URL și nu descărca atașamentul." #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Sari la următorul element necitit. Dacă este necesar selectează fluxul " #~ "următor cu elemente necitite." #~ msgid "Liferea Sync %s@%s" #~ msgstr "Sincronizare Liferea %s@%s" #~ msgid "link cosmos" #~ msgstr "cosmos legătură" #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "Afișează mesaje de depanare pentru încărcarea modulelor" #~ msgid "Liferea seems to be running already!" #~ msgstr "Se pară ca Liferea deja rulează!" #~ msgid "Update status" #~ msgstr "Actualizare stare" #~ msgid "was updated" #~ msgstr "a fost actualizat" #~ msgid "was not updated" #~ msgstr "nu a fost actualizat" #~ msgid "The orientation of the tray." #~ msgstr "Orientarea zonei de notificare." #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "_Script Manager" #~ msgstr "Administrator _script" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Permite configurarea și modificare scripturilor LUA" #~ msgid "Search With ..." #~ msgstr "Caută cu..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d rezultat de căutare pentru „%s”" #~ msgstr[1] "%d rezultate de căutare pentru „%s”" #~ msgstr[2] "%d de rezultate de căutare pentru „%s”" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d rezultat căutare" #~ msgstr[1] "%d rezultate căutare" #~ msgstr[2] "%d de rezultate căutare" #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "Lista de elemente conține acum toate elementele ce se potrivesc cu " #~ "șablonul de căutare. Dacă doriți să salvați permanent acest rezultat al " #~ "căutarii puteți face clic pe butonul „Dosar de căutare” din dialogul de " #~ "căutare iar Liferea va adăuga un dosar de căutare pentru acest flux." #~ msgid "Count" #~ msgstr "Contor" #~ msgid "You have to select a feed entry" #~ msgstr "Trebuie să selectați o intrare de flux" #~ msgid "(empty)" #~ msgstr "(gol)" #~ msgid "_Properties..." #~ msgstr "_Proprietăți..." #~ msgid "Update out-dated feeds" #~ msgstr "Actualizare fluxuri învechite" #~ msgid "Force update of all feeds" #~ msgstr "Forțează actualizarea tuturor fluxurilor" #~ msgid "No feed update at all" #~ msgstr "Nici un flux actualizat" #~ msgid "startup" #~ msgstr "pornire" #~ msgid "feed updated" #~ msgstr "flux actualizat" #~ msgid "feed added" #~ msgstr "flux adăugat" #~ msgid "item selected" #~ msgstr "element selectat" #~ msgid "feed selected" #~ msgstr "flux selectat" #~ msgid "item unselected" #~ msgstr "element deselectat" #~ msgid "feed unselected" #~ msgstr "flux deselectat" #~ msgid "shutdown" #~ msgstr "închidere" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Nu este disponibil suportul pentru scripting!" #~ msgid "Script Name" #~ msgstr "Nume script" #~ msgid "No script selected!" #~ msgstr "Nici un script selectat" #~ msgid "Create a new search feed." #~ msgstr "Crează flux de căutare nou." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea nu poate afișa conținutul acestui element." #~ msgid "

        View this item's content.

        " #~ msgstr "

        Vizualizează conținutul acestui element.

        " #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "Integrează lista de fluxuri din contul dumneavoastră Bloglines. Liferea " #~ "va afișa abonamentele Bloglines ca o listă ce poate fi doar citită." #~ msgid "feedlist.opml" #~ msgstr "feedlist.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s are %d titlu nou / actualizat\n" #~ msgstr[1] "%s are %d titluri noi / actualizate\n" #~ msgstr[2] "%s are %d de titluri noi / actualizate\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Feed Source" #~ msgstr "Sursă flux" #~ msgid "Hook" #~ msgstr "Hook" #~ msgid "Registered Scripts" #~ msgstr "Scripturi înregistrate" #~ msgid "Script Code" #~ msgstr "Cod script" #~ msgid "text/plain" #~ msgstr "text/plain" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Această opțiune cauzează întârzieri importante când sunt încărcate " #~ "dosare cu multe fluxuri!" #~ msgid "Downloading Enclosures" #~ msgstr "Descărcare atașamente" #~ msgid "Feed Cache Handling" #~ msgstr "Gestionare cache flux" #~ msgid "Feed Name" #~ msgstr "Nume flux" #~ msgid "Feed Update Settings" #~ msgstr "Preferințe actualizare flux" #~ msgid "HTTP Proxy Server" #~ msgstr "Server Proxy HTTP" #~ msgid "Opening Enclosures" #~ msgstr "Deschidere atașamentele" #~ msgid "Reading Headlines" #~ msgstr "Citire titluri" #~ msgid "Toolbar Settings" #~ msgstr "Preferințe bară de instrumente" #~ msgid "Update Interval" #~ msgstr "Interval actualizare" #~ msgid "Web Integration" #~ msgstr "Integrare web" #~ msgid "Add Script" #~ msgstr "Adaugă script" #~ msgid "At _startup:" #~ msgstr "La _pornire:" #~ msgid "Attention Profile" #~ msgstr "Profile Attention" #~ msgid "Create new script" #~ msgstr "Crează script nou" #~ msgid "Exec Command" #~ msgstr "Execută comandă" #~ msgid "Reuse existing script" #~ msgstr "Reutilizează script existent" #~ msgid "Script Manager" #~ msgstr "Administrator scripturi" #~ msgid "Search _Link Cosmos with" #~ msgstr "Caută cosmosul _legăturii cu" #~ msgid "items." #~ msgstr "articole." #~ msgid "Access Forbidden" #~ msgstr "Acces interzis" #~ msgid "/_Decrease Text Size" #~ msgstr "/_Micșorați mărimea textului" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "Argumentul sesiunii trebuie să aibă un paramentru.\n" #~ msgid "http://lzone.de/liferea/" #~ msgstr "http://lzone.de/liferea/" #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "" #~ "Descoperire automată la feed eșuată! Nu s-a putut găsi nici un feed!" #~ msgid "%s" #~ msgstr "%s" #~ msgid "Network connection was refused by the remote host" #~ msgstr "Conexiunea a fost refuzată de gazda de la distanță" #~ msgid "Show Menu _And Toolbar" #~ msgstr "Afișează meniul și bara de unelte" #~ msgid "Remote host sent an invalid response" #~ msgstr "Gazda de la distanță a trimis un răspuns invalid" #~ msgid "URL is invalid" #~ msgstr "URL este invalid" #~ msgid "Cookie for %s has expired!" #~ msgstr "Cookie pentru %s a expirat!" #~ msgid "Contributors" #~ msgstr "Contribuitori" #~ msgid "/_Increase Text Size" #~ msgstr "/_Măriți mărimea textului" #~ msgid "/_Properties..." #~ msgstr "/_Proprietăți..." #~ msgid "Show _Menu Only" #~ msgstr "Afișează numai meniul" #~ msgid " --help Print this help and exit" #~ msgstr " --help Afișează acest mesaj și iasă" #~ msgid "Liferea Homepage" #~ msgstr "Pagina Liferea" #~ msgid "Translation" #~ msgstr "Traducători" #~ msgid "Show _Toolbar Only" #~ msgstr "Afișează numai bara de unelte" #~ msgid "/_New/New _Subscription..." #~ msgstr "/_Nou/Înscriere _nouă..." #~ msgid "_Limit cache to" #~ msgstr "_Limitează cache-ul la" #~ msgid "/Toggle Item _Flag" #~ msgstr "/Activează _flag-ul articolului" #~ msgid "Hostname could not be found" #~ msgstr "Nu s-a putut găsi numele gazdei" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "Liferea a întâlnit un argument necunoscut: %s\n" #~ msgid "Webserver's authentication method incompatible with Liferea" #~ msgstr "Identificarea cerută de serverul web incompatibilă cu Liferea" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "" #~ "Sfârșit de caracter greșit sau o encodare UTF-8 greșită! Anumite " #~ "caractere nu au fost încărcate!" #~ msgid "does match" #~ msgstr "se potrivește" #~ msgid "/_Preferences..." #~ msgstr "/_Preferințe..." #~ msgid "does not match" #~ msgstr "nu se potrivește" #~ msgid "Remote host did not finish sending data" #~ msgstr "Gazda de la distanță nu a terminat de trimis date" #~ msgid "_Search" #~ msgstr "_Caută" #~ msgid "Too many HTTP redirects were encountered" #~ msgstr "Prea multe redirectări HTTP s-au întămpinat" #~ msgid "internal error! time conversion error! mktime failed!\n" #~ msgstr "eroare internă! eroare la conversia timpului! mktime a eșuat!\n" #~ msgid "Invalid ISO8601 date format! Ignoring information!\n" #~ msgstr "Format ISO8601 invalid! Informațiile se ignoră!\n" #~ msgid "" #~ "

        Could not determine the feed type. Please check that it is valid and in a supported format.

        " #~ msgstr "" #~ "

        Nu s-a putut determina tipul feedul. Verificați dacă este valid și este printre formatele " #~ "suportate.

        " #~ msgid "" #~ "Error while reading cache file \"%s\" ! Cache file could not be loaded!" #~ msgstr "" #~ "Eroare în timp ce se încărca fișierul \"%s\" ! Fișierul nu a putut fi " #~ "încărcat!" #~ msgid "" #~ "

        XML error while parsing cache file! Feed cache file \"%s\" could not " #~ "be loaded!

        " #~ msgstr "" #~ "

        eroare XML în timp ce se parcurgea fișierul cache! Feedul \"%s\" nu s-" #~ "a putut încărca!

        " #~ msgid "

        \"%s\" is no valid cache file! Cannot read cache file!

        " #~ msgstr "" #~ "

        \"%s\" nu este un fișier cache valid! Nu s-a putut citi fișierul cache!" #~ "

        " #~ msgid "There were errors while parsing cache file \"%s\"" #~ msgstr "Au fost erori la parcurgerea fișierului cache \"%s\"" #~ msgid "user defined command" #~ msgstr "comandă definită de utilizator" #~ msgid "" #~ "
        You may want to validate the feed using Poate doriți să validați acest feed utilizând FeedValidator." #~ msgstr "\">FeedValidator." #~ msgid "_Program" #~ msgstr "_Program" #~ msgid "" #~ "Marks all items of the current selected subscription or all of " #~ "subscriptions of the selected folder as read." #~ msgstr "" #~ "Marchează toate articolele înscrierii curente sau toate înscrierele din " #~ "directorul selectat ca citite." #~ msgid "New _VFolder..." #~ msgstr "Director _virtual nou..." #~ msgid "Toggles the item flag." #~ msgstr "Comută steagul articolului." #~ msgid "Toggles the item list mode between condensed and normal mode." #~ msgstr "Schimbă modurile dintre vedere condensată si vedere normală." #~ msgid "single item view" #~ msgstr "vedere singulară a articolelor" #~ msgid "label133" #~ msgstr "label133" #~ msgid "Feed Loading Settings" #~ msgstr "Setările pentru încărcarea feedului" #~ msgid "Optimize for _memory usage." #~ msgstr "Optimizează pentru reducerea _memoriei." #~ msgid "Optimize for _speed." #~ msgstr "Optimizează pentru _viteză" #~ msgid "Date Column Settings" #~ msgstr "Setările columnei cu data" #~ msgid "Display only time" #~ msgstr "Afișează numai timpul" #~ msgid "Display date and time" #~ msgstr "Afișează data și ora" #~ msgid "User defined format:" #~ msgstr "Definiți propriul format:" #~ msgid "" #~ "for expert users: specify a time format string, consult the strftime() " #~ "manpage for the format codes" #~ msgstr "" #~ "pentru utilizatorii experimentați: specificați un format de timp, " #~ "consultați strftime() manpage pentru codurile de format" #~ msgid "Please restart Liferea for changes to take effect." #~ msgstr "Restartați Liferea ca schimbările să aibă efect." #~ msgid " " #~ msgstr " " #~ msgid "Lower Right" #~ msgstr "Jos dreapta" #~ msgid "Upper Right" #~ msgstr "Sus dreapta" #~ msgid "Upper Left" #~ msgstr "Sus stânga" #~ msgid "Lower Left" #~ msgstr "Jos stânga" #~ msgid "Popup Placement" #~ msgstr "Amplasare Popup" #~ msgid "" #~ "Liferea reuses the GNOME proxy settings. If you use GNOME you can " #~ "change these settings in the GNOME Control Center." #~ msgstr "" #~ "Liferea refolosește setările GNOME pentru proxy. Dacă folosiți GNOME " #~ "puteți schimba aceste setări din centrul de control al GNOME ." #~ msgid "_Enable Proxy" #~ msgstr "_Activați Proxy-ului" #~ msgid "Browse" #~ msgstr "Navighează" #~ msgid "" #~ "Copyright (c) 2003-2005\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgstr "" #~ "Copyright (c) 2003-2005 \n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgid "Name" #~ msgstr "Nume" #~ msgid "" #~ "Note: Items are added to the vfolder if at least one additive rule\n" #~ "matches. They are removed if at least one removing rule matches." #~ msgstr "" #~ "Notă: Articolele sunt adăugate în directorul virtual dacă cel puțin o " #~ "regulă\n" #~ "se potrivește. Ele sunt șterse dacă nu se potrivește nici o regulă." #~ msgid "Rules" #~ msgstr "Reguli" #~ msgid "Search for" #~ msgstr "Caută după" #~ msgid "Saves this search as a VFolder, which will appear in the feed list." #~ msgstr "" #~ "Salvează această căutare într-un director virtual, care va apărea în " #~ "lista de feeduri." #~ msgid "Item:" #~ msgstr "Articol:" #~ msgid "date" #~ msgstr "data" #~ msgid "" #~ "Another copy of Liferea was found to be running. Please use it instead. " #~ "If there is no other copy of Liferea running, please delete the \"~/." #~ "liferea/lock\" lock file." #~ msgstr "" #~ "O altă copie a Liferea rulează în sistem. Vă rog folosiți această " #~ "instanță. Dacă nu rulează alt Liferea vă rog să ștergeți fișierul \"~/." #~ "liferea/lock\"." #~ msgid "feed generator" #~ msgstr "generator de feeduri" #~ msgid "contributors" #~ msgstr "contribuitori" #~ msgid "language" #~ msgstr "limba" #~ msgid "feed published on" #~ msgstr "feed publicat în" #~ msgid "managing editor" #~ msgstr "editorul" #~ msgid "webmaster" #~ msgstr "webmaster" #~ msgid "report errors to" #~ msgstr "raportează erorile la" #~ msgid "original source" #~ msgstr "sursa originală" #~ msgid "original time" #~ msgstr "timpul original" #~ msgid "license" #~ msgstr "licență" #~ msgid "type" #~ msgstr "tip" #~ msgid "format" #~ msgstr "format" #~ msgid "identifier" #~ msgstr "identificator" #~ msgid "source" #~ msgstr "sursa" #~ msgid "coverage" #~ msgstr "acoperire" #~ msgid "internal OCS namespace parsing error!" #~ msgstr "eroare internă la parcurgerea OCS!" #~ msgid "no namespace handler for <%s:%s>!\n" #~ msgstr "nici un namespace handler pentru <%s:%s>!\n" #~ msgid "

        Could not find RDF header!

        " #~ msgstr "

        Nu s-a putut găsi capătul RDF-ului!

        " #~ msgid "

        Could not find OPML header!

        " #~ msgstr "

        Nu s-a putut găsi capătul OPML-ului !

        " #~ msgid "

        Could not find Atom/Echo/PIE header!

        " #~ msgstr "

        Nu s-a putut găsi capătul Atom/Echo/PIE -ului!

        " #~ msgid "

        Could not find RDF/RSS header!

        " #~ msgstr "

        Nu s-a putut găsi capetele RDF/RSS-urilor !

        " #~ msgid "Note: Using the subscriptions filter disables drag & drop" #~ msgstr "Notă: Dacă se folosește filtrarea se dezactivează drag&drop-ul" #~ msgid "You must select a feed entry" #~ msgstr "Trebuie să selectați o intrare a feedului" #~ msgid "You must select a feed entry." #~ msgstr "Trebuie să selectați o intrare a feedului" #~ msgid "A folder must be selected." #~ msgstr "Un director trebuie să fie selectat." #~ msgid "" #~ "internal error! unknown entry type! cannot display appropriate icon!\n" #~ msgstr "" #~ "eroare internă! tipul feedului necunoscut! nu se poate afișa nici un " #~ "icon!\n" #~ msgid "" #~ "\n" #~ "Trying to load the Mozilla browser module... Note that this\n" #~ "might not work with every Mozilla version. If you have problems\n" #~ "and Liferea does not start, try to set MOZILLA_FIVE_HOME to\n" #~ "another Mozilla installation or delete the gconf configuration\n" #~ "key /apps/liferea/browser-module!\n" #~ "\n" #~ msgstr "" #~ "\n" #~ "Se incearcă încărcarea modulului Mozilla... S-ar putea să nu\n" #~ "meargă cu toate versiunile de Mozilla. Dacă aveți probleme\n" #~ "și Liferea nu pornește setați MOZILLA_FIVE_HOME pentru\n" #~ "altă instalare de Mozilla sau șterge în configurația gconf\n" #~ "cheia /apps/liferea/browser-module!\n" #~ "\n" #~ msgid "" #~ "Failed to open HTML widget module (%s) specified in configuration!\n" #~ "%s\n" #~ msgstr "" #~ "Nu s-a putut deschide modulul HTML (%s) specificat în configurația !\n" #~ "%s\n" #~ msgid "Htmlview API mismatch!" #~ msgstr "Htmlview API greșit!" #~ msgid "Detected module is not a valid htmlview module!" #~ msgstr "Modulul detectat nu este un modul HTML valid!" #~ msgid "Cannot load HTML widget module (%s)!" #~ msgstr "Nu se poate încărca modulul HTML (%s)!" #~ msgid "Available browser modules (%s):\n" #~ msgstr "Modulele disponibile pentru randare (%s):\n" #~ msgid "Loading configured browser module (%s)!\n" #~ msgstr "Se încarcă modulul browser configurat (%s)!\n" #~ msgid "No browser module configured!\n" #~ msgstr "Nu a fost configurat nici un modul de browser!\n" #~ msgid "trying to load browser module %s (%s)\n" #~ msgstr "se incearcă încărcarea modulului de browser %s (%s)\n" #~ msgid "" #~ "Sorry, I was not able to load any installed browser modules! Try the --" #~ "debug-all option to get debug information!" #~ msgstr "" #~ "Scuze, nu s-a putut încărca nici un modul de browser! Incercați opțiunea " #~ "--debug-all pentru a vedea informații de debug!" #~ msgid "New Feed" #~ msgstr "Feed Nou" #~ msgid "Next Unread" #~ msgstr "Următorul necitit" #~ msgid "Update All" #~ msgstr "Updatează toate" #~ msgid "Liferea notification" #~ msgstr "Notificare pentru Liferea" #~ msgid "/_New/New F_older..." #~ msgstr "/_Nou/D_irector _nou..." #~ msgid "/_New/New _VFolder..." #~ msgstr "/_Nou/Director _virtual nou..." #~ msgid "/_Delete Folder" #~ msgstr "/_Ștergeți directorul" #~ msgid "/Toggle _Read Status" #~ msgstr "/Activează statutul de _citire" #~ msgid "/_Next Unread Item" #~ msgstr "/_Următorul articol necitit" #~ msgid "/_Show Window" #~ msgstr "/_Arată fereastra" #~ msgid "Update only feeds scheduled for updates" #~ msgstr "Updatează numai feedurile programate pentru update" #~ msgid "Reset feed update timers (Update no feeds)" #~ msgstr "" #~ "Resetează timpul updatării feedurilor (Nu se updatează nici un feed)" #~ msgid "Please do a search first!" #~ msgstr "Efectuați o căutare înainte!" #~ msgid "New VFolder" #~ msgstr "Director virtual nou" #~ msgid "URL" #~ msgstr "URL" #~ msgid "" #~ "The included HTML tag is not supported with GtkHTML2.\n" #~ "Included Plugins might not be displayed." #~ msgstr "" #~ "Tagul HTML inclus nu este suportat de GtkHTML2.\n" #~ "Pluginurile incluse nu pot fi afișate." #~ msgid "Toggle Search Box" #~ msgstr "Comută bara de căutare" #~ msgid " --iconify Start the program iconified" #~ msgstr " --iconify Pornește programul iconificat" #~ msgid "http://lzone.de/liferea/help/help" #~ msgstr "http://lzone.de/liferea/help/help" #~ msgid ".rdf" #~ msgstr ".rdf" #~ msgid "" #~ "%s\n" #~ "%d unread item%s\n" #~ "%d unread items" #~ msgstr "" #~ "%s\n" #~ "%d articol necitit%s\n" #~ "%d articole necitite" liferea-1.12.7/po/ru.po000066400000000000000000002167461352135647700146520ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # omsoft , 2007. # Justin Forest , 2009. # Sergey Rudchenko , 2009. # Leonid Selivanov , 2013. # ned , 2015. # msgid "" msgstr "" "Project-Id-Version: liferea 1.7.x\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2015-06-24 16:34+0300\n" "Last-Translator: ned \n" "Language-Team: \n" "Language: ru_RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Poedit-SourceCharset: utf-8\n" "X-Generator: Poedit 1.5.4\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Приложение для чтения новостей" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" "Liferea — сокращение слов Linux Feed Reader. Она поддерживает ленты " "большинства форматов, включая RSS/RDF, CDF и Atom. Существует много других " "агрегаторов новостей, но они не работают под Linux или требуют установки " "множества дополнительных библиотек. Liferea пытается восполнить этот пробел, " "оставаясь быстрым, простым в установке и использовании агрегатором новостей " "для GTK/GNOME." #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "Особенности:" #: ../liferea.appdata.xml.in.h:4 msgid "Read articles when offline" msgstr "Чтение в автономном режиме" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "Синхронизация с TheOldReader" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "Синхронизация с TinyTinyRSS" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "Синхронизация с TheOldReader" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "Синхронизация с TheOldReader" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "Постоянное хранение заголовков в ящиках новостей" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "Объединение новостей в папках поиска" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "Воспроизведение подкастов" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Приложение для чтения новостей" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Приложение для чтения новостей Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Читайте ленты новостей и блоги" #: ../net.sourceforge.liferea.desktop.in.h:5 #, fuzzy msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "новости;лента;агрегатор;блог;подкаст;" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Эта лента недоступна. Liferea не может обновить её, но чтение сохранённых " "новостей по-прежнему доступно" #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "Не удалось обновить ленту!
        HTTP : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Произошли ошибки при анализе этой ленты!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Сведения об ошибках парсера" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Сведения" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "Возможно, стоит сообщить об этом автору/веб-мастеру ленты!" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Произошли ошибки при фильтрации этой ленты!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Сведения об ошибке фильтра" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Лента:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Источник:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Издатель" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "вложенных, " #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "не прочитано" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Папка:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Источник" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Лента" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Опубликовано в" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Автор" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Опубликовано" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "С помощью" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Похожие" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Доступно в" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Создал" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Комментарии" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Обновление..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Раздел" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Отдел" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Ящик новостей:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Добавьте новости в этот ящик, выбрав «Копировать в ящик» в контекстном меню " "списка новостей" #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Папка поиска:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Ошибка команды запуска браузера: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Запуск: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Ошибка авторизации" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Не удалось создать папку кэша \"%s\"!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Сегодня %k:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Вчера %k:%M" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d %b %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" — некорректный файл конфигурации типа вложения!" #: ../src/enclosure.c:292 #, fuzzy msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Не задано средство загрузки! Задайте его во вкладке «Вложения» меню " "Инструменты/Настройки" #: ../src/enclosure.c:311 #, fuzzy, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Ошибка выполнения команды: \n" "\n" "%s\n" "\n" " Убедитесь, что заданное средство загрузки установлено и работоспособно! Его " "можно изменить во вкладке «Вложения» меню Инструменты/Настройки" #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Ошибка переименования %s в %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "Ошибка XML при чтении файла OPML! Невозможно импортировать \"%s\"!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "Документ пуст! OPML-документ \"%s\" не должен быть пустым при импорте" #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "Некорректный формат OPML-файла \"%s\", Liferea не может импортировать этот " "файл!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Импортировано" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Импорт списка лент" #: ../src/export.c:481 msgid "Import" msgstr "Импорт" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "Файлы OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Ошибка экспорта списка лент!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Список лент экспортирован!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Экспорт списка лент" #: ../src/export.c:498 msgid "Export" msgstr "Экспорт" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        Не удалось определить тип ленты! Убедитесь, что источник указывает на " "ресурс в поддерживаемом формате!

        Вывод XML-парсера:
        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" обновлена" #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" недоступна" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "Автопоиск не нашёл лент по указанному адресу. Возможно, веб-страница не " "поддерживает автопоиск лент" #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "Ошибка XML при чтении ленты! Невозможно загрузить ленту \"%s\"!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Документ пуст!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Некорректный XML!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Источник является HTML-документом" #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Не удалось определить тип ленты" #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Нет непрочитанных " #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Запуск Liferea с основным окном в РЕЖИМЕ `shown', `iconified' или `hidden'" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "РЕЖИМ" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Сведения о версии и выход" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Добавить подписку" #: ../src/liferea_application.c:284 msgid "uri" msgstr "адрес" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Вывод отладочных сообщений всех типов" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Вывод отладочных сообщений обработки кэша" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Вывод отладочных сообщений обработки конфигурации" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Вывод отладочных сообщений обработки базы данных" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Вывод отладочных сообщений всех функций GUI" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Отладка отрисовки HTML. При отрисовке HTML-вывода Liferea будет сохранять " "создаваемый HTML в ~/.cache/liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Вывод отладочных сообщений всей сетевой активности" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Вывод отладочных сообщений всех функций парсинга" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "Вывод отладочных сообщений длительного выполнения функции" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Вывод отладочных сообщений начала/завершения выполнения функций" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Вывод отладочных сообщений обновления лент" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "Вывод отладочных сообщений формирования папки поиска" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Вывод подробных отладочных сообщений" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Вывод отладочных сообщений для данной темы" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Обновление отменено" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Не найден IP-адрес сервера" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Не найден IP-адрес прокси" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Не удалось соединиться с удалённым узлом" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Не удалось соединиться с прокси" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "Произошла сетевая ошибка или соединение прервано сервером" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Ресурс перемещён" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Требуется авторизация для загрузки ленты. Введите логин и пароль в свойствах " "ленты" #: ../src/net.c:476 msgid "Payment required" msgstr "Требуется оплата" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Нет прав доступа к ресурсу" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Ресурс не найден" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Метод не поддерживается" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Неприемлемо" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Требуется авторизация на прокси" #: ../src/net.c:482 msgid "Request timed out" msgstr "Превышено время ожидания" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Ресурс не существует. Отмените подписку!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "При обновлении произошла внутренняя ошибка" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Лента недоступна: сервер запросил неподдерживаемое перенаправление!" #: ../src/net.c:492 msgid "Client Error" msgstr "Ошибка клиента" #: ../src/net.c:494 msgid "Server Error" msgstr "Ошибка сервера" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Неизвестная сетевая ошибка!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Новость" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "содержит" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "не содержит" #: ../src/rule.c:175 msgid "Item title" msgstr "Заголовок новости" #: ../src/rule.c:176 msgid "Item body" msgstr "Текст новости" #: ../src/rule.c:177 msgid "Read status" msgstr "Прочтение" #: ../src/rule.c:177 msgid "is unread" msgstr "не прочитано" #: ../src/rule.c:177 msgid "is read" msgstr "прочитано" #: ../src/rule.c:178 msgid "Flag status" msgstr "Важность" #: ../src/rule.c:178 msgid "is flagged" msgstr "да" #: ../src/rule.c:178 msgid "is unflagged" msgstr "нет" #: ../src/rule.c:179 msgid "Podcast" msgstr "Подкаст" #: ../src/rule.c:179 msgid "included" msgstr "есть" #: ../src/rule.c:179 msgid "not included" msgstr "нет" #: ../src/rule.c:180 msgid "Category" msgstr "Категория" #: ../src/rule.c:180 msgid "is set" msgstr "есть" #: ../src/rule.c:180 msgid "is not set" msgstr "нет" #: ../src/rule.c:181 msgid "Feed title" msgstr "Название ленты" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Подписка \"%s\" уже обновлена!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "Подписка \"%s\" была прекращена. Liferea не будет больше её обновлять!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Обновление значка \"%s\"" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "При чтении этой подписки возникли проблемы. Проверьте URL и вывод консоли" #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "Адрес \"%s\" изменился и был обновлён" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "Лента \"%s\" отключена. Liferea не будет её обновлять!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" не изменилась с момента последнего обновления" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Обновление \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Ошибка открытия временного файла %s для выполнения фильтрации!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s завершено с кодом %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Ошибка: Не удалось открыть канал \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Ошибка: Не удалось открыть файл \"%s\"" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Ошибка: Файл \"%s\" не существует" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Новая папка поиска" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Было больше ошибок. Вывод был прерван!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "XML-парсер: Не удалось обработать документ:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Вложения" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " Байт" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "КБ" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "МБ" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "ГБ" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d вложение" msgstr[1] "%d вложения" msgstr[2] "%d вложений" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Выберите файл" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Расширение .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Не найден файл с пиксельным изображением: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d новая)" msgstr[1] " (%d новых)" msgstr[2] " (%d новых)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d не прочитана%s" msgstr[1] "%d не прочитано%s" msgstr[2] "%d не прочитано%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Справка" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Руководство" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "FAQ" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Расширенный поиск" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Введите логин и пароль для \"%s\" (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Неизвестный источник" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "_Отменить всё" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Все файлы" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea в автономном режиме. Обновление невозможно" #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Поиск новостей" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Прочитано" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Удалить \"%s\"?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Новость не содержит ссылку!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Без заголовка ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Заголовок" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Дата" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Необходимо выбрать ленту для удаления её записей!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Нет выбранных новостей" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Открыть во вкладк_е" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "_Открыть в браузере" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Во внешнем _браузере" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Копировать в ящик" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "_Закладка в %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "_Копировать URL" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "_Прочитано или нет" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "_Важно или нет" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "_Удалить" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Открыть вложение..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Сохранить как..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Копировать URL" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Обновить" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Обновить папку" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Новая _подписка..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Новая пап_ка..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Новая папка п_оиска..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Новый _источник..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Новый _ящик новостей..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Добавить" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Сортировать ленты" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_Прочитано всё" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "_Обновить" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Свойства" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Преобразовать в локальные..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "Определяется GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Текст под значками" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Текст справа" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Значки" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Текст" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "минут" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "часов" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "дней" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Пробел" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr "Ctrl+Пробел" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr "Alt+Пробел" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Обычный вид" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Широкий вид" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Сводный вид" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Браузер по умолчанию" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Задать вручную" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Тип" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Программа" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Пусто)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Обновление" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Удаление новости" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Удалить \"%s\" и её содержимое?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Удалить \"%s\"?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Удаление" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Удаление" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "Поставщик ленты рекомендует интервал обновления %d минуту" msgstr[1] "Поставщик ленты рекомендует интервал обновления %d минуты" msgstr[2] "Поставщик ленты рекомендует интервал обновления %d минут" #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Для ленты не установлен интервал обновления по умолчанию" #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Без имени" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Веб-сайт" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Новая подписка" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Выберите OPML-файл" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Новая OPML-подписка" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Типы источников лент не найдены!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Тип источника" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "Подписка '%s' преобразована в локальные ленты!" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Ошибка авторизации в Reedah!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "Reedah" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "Не удалось обработать JSON, возвращённый Reedah API!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "Не удалось обработать JSON, возвращённый TinyTinyRSS API!" #: ../src/fl_sources/theoldreader_source.c:329 msgid "TheOldReader" msgstr "TheOldReader" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Открыть ссылку во _вкладке" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "_Открыть ссылку в браузере" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "Открыть ссылку во внешнем _браузере" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_Закладка на %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Копировать URL" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "Сохранить изо_бражение как" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "Копировать URL _изображения" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "_Сохранить как" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "Сохранить изо_бражение как" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Подписаться..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "У_величить шрифт" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "У_меньшить шрифт" #: ../glade/about.ui.h:1 msgid "About" msgstr "О программе" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea — агрегатор новостей для GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Сайт Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Авторизация" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Логин:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Пароль:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Открыть вложение" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Открыть вложение следующего типа:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Введите команду обработки этого вложения. Ссылка на вложение будет передана " "этой команде в качестве аргумента:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Обзор" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Выполнять автоматически для вложений этого типа" #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Подключить Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Введите данные аккаунта Google Reader" #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Пароль" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "Логи_н (Email)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Просмотр заголовков" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Заголовки" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Прочитано" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Прочитано" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Новая папка" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "_Имя папки:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Новый ящик новостей" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Имя ящика:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Источник ленты" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Тип источника:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Команда" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Локальный файл" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Выбрать файл..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Источник:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Загрузка / Обработка" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "_Не использовать прокси" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Использовать _фильтр преобразования" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea может использовать внешние фильтры для работы с лентами " "неподдерживаемых форматов, подробности в справке" #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Преобразовать ис_пользуя:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Выбор источника" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Выберите тип источника для добавления..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Добавить OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "Введите путь к локальному файлу или URL списка лент в формате OPML" #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Расположение" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Выбрать файл" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Настройки Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Хранение новостей" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_Новостей в каждой ленте по умолчанию:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Обновление лент" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Внимание: выберите разумный интервал автообновления, например 1 час. " "Ленты всегда можно обновить вручную. 0 — отключить автообновление" #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "_Обновлять все ленты при запуске" #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "_Интервал обновления по умолчанию:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Ленты" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Отображение папки" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "_Показать новости при выборе папки" #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "_Скрывать прочитанные новости" #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Значки лент (Favicons)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Обновить все значки" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Папки" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Чтение заголовков" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Просмотр в браузере:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "Вид по _умолчанию:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Интеграция с веб-сервисами" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Публиковать закладки в" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Встроенный браузер" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Открывать ссылки во _встроенном браузере" #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "Отключить Java_Script" #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "Использовать _плагины" #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Внешний браузер" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Браузер:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "Задать _вручную:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s для URL)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Браузер" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Панель кнопок" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Скрыть панель" #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Вид кн_опок:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Интерфейс" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr " HTTP-прокси" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Автоопределение (GNOME или окружение)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Не использовать" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "Настроить _вручную:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "А_дрес:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Порт:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Ав_торизация" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "_Логин:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Па_роль:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Прокси" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Отображение папки" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Загрузка вложений" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Использовать" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Открытие вложений" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Вложения" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Свойства подписки" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Имя ленты" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "Имя _ленты:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Интервал обновления" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "Интервал обновления по _умолчанию " #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_Интервал обновления ленты" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Не обновлять автоматически" #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Поставщик ленты рекомендует интервал обновления %d минут" #: ../glade/properties.ui.h:11 msgid "General" msgstr "Основные" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea может использовать внешние фильтры для работы с лентами " "неподдерживаемых форматов, подробности в справке" #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "Настройки хранения новостей. «Важные» новости хранятся всегда" #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "По _умолчанию" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Не сохранять" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Сохранять все" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "Хранить _новостей:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Хранение" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "HTTP-_авторизация" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Загрузка" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_Автозагрузка вложений" #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "Загружать статьи в браузере при выборе заголовка" #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "_Игнорировать комментарии" #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "Отмечать прочитанными загруженные новости" #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Дополнительно" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "Подключить Reedah" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Введите данные аккаунта Reedah" #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Переименование" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Новое имя:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Свойства папки поиска" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "_Имя поиска:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Поиск новостей по заданным условиям" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Совпадение _любого условия" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "Совпадение _всех условий" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Расширенный поиск" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "_Папка поиска..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Поиск новостей" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Расширенный..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Поиск заданного текста во всех лентах. Результаты поиска будут показаны в " "списке новостей" #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Поиск:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "Введите строку для поиска в заголовке или тексте новости" #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Дополнительно..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "Введите адрес сайта для поиска ленты или укажите её точный адрес" #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "Подключить TheOldReader" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "Введите данные аккаунта TheOldReader" #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Подключить Tiny Tiny RSS" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "Введите данные аккаунта InoReader" #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "Адрес _сервера" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Логин" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Монитор обновления" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "_Отменить всё" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Очередь" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Загрузка" #~ msgid "_Subscriptions" #~ msgstr "_Подписки" #~ msgid "Update _All" #~ msgstr "Обновить всё" #~ msgid "Updates all subscriptions." #~ msgstr "Обновить все ленты" #~ msgid "Mark All As _Read" #~ msgstr "_Прочитано всё" #~ msgid "Marks read every item of every subscription." #~ msgstr "Отметить прочитанными все новости во всех лентах" #~ msgid "_Import Feed List..." #~ msgstr "_Импорт списка лент..." #~ msgid "Imports an OPML feed list." #~ msgstr "Импорт списка лент OPML" #~ msgid "_Export Feed List..." #~ msgstr "_Экспорт списка лент..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Экспорт списока лент OPML" #~ msgid "_Quit" #~ msgstr "_Выход" #~ msgid "_Feed" #~ msgstr "_Лента" #~ msgid "Remove _All Items" #~ msgstr "О_чистить" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Удалить все новости выбранной ленты" #~ msgid "_Item" #~ msgstr "_Новость" #~ msgid "Previous Item" #~ msgstr "_Назад" #~ msgid "Next Item" #~ msgstr "Вперёд" #~ msgid "_Next Unread Item" #~ msgstr "_Далее" #~ msgid "_View" #~ msgstr "_Вид" #~ msgid "Increases the text size of the item view." #~ msgstr "Увеличить размер шрифта новости" #~ msgid "Decreases the text size of the item view." #~ msgstr "Уменьшить размер шрифта новости" #~ msgid "_Tools" #~ msgstr "_Инструменты" #~ msgid "_Update Monitor" #~ msgstr "_Монитор обновления" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Список лент, ожидающих обновления" #~ msgid "_Preferences" #~ msgstr "_Настройки" #~ msgid "Edit Preferences." #~ msgstr "Изменить настройки" #~ msgid "S_earch" #~ msgstr "П_оиск" #~ msgid "Search All Feeds..." #~ msgstr "Найти..." #~ msgid "Show the search dialog." #~ msgstr "Диалог поиска" #~ msgid "_Help" #~ msgstr "_Помощь" #~ msgid "_Contents" #~ msgstr "_Справка" #~ msgid "View help for this application." #~ msgstr "Справка этого приложения" #~ msgid "_Quick Reference" #~ msgstr "_Руководство" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Сочетания клавиш Liferea" #~ msgid "_FAQ" #~ msgstr "_FAQ" #~ msgid "View the FAQ for this application." #~ msgstr "Часто задаваемые вопросы" #~ msgid "_About" #~ msgstr "_О программе" #~ msgid "Shows an about dialog." #~ msgstr "Диалог \"О программе\"" #~ msgid "_Normal View" #~ msgstr "_Обычный вид" #~ msgid "Set view mode to mail client mode." #~ msgstr "Вид обычного почтового клиента" #~ msgid "_Wide View" #~ msgstr "_Широкий вид" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Три вертикальных панели" #~ msgid "_Combined View" #~ msgstr "_Сводный вид" #~ msgid "Set view mode to two pane mode." #~ msgstr "Две панели" #~ msgid "_Reduced Feed List" #~ msgstr "_Краткий список лент" #~ msgid "Hide feeds with no unread items." #~ msgstr "Скрыть прочитанные ленты" #~ msgid "_New Subscription..." #~ msgstr "_Добавить..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Добавить подписку на ленту" #~ msgid "Adds a folder to the feed list." #~ msgstr "Добавить папку в список лент" #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Добавить папку поиска в список лент" #~ msgid "New _Source..." #~ msgstr "Новый ис_точник лент..." #~ msgid "Adds a new feed list source." #~ msgstr "Добавить источник списка лент" #~ msgid "Adds a new news bin." #~ msgstr "Добавить ящик новостей" #~ msgid "_Mark Items Read" #~ msgstr "_Прочитано" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "Отметить ленту или папку прочитанными" #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "Обновить выбранные ленты или папки лент" #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Открыть диалог свойств выбранной подписки" #~ msgid "_Remove" #~ msgstr "_Удалить" #~ msgid "Removes the selected subscription." #~ msgstr "Удалить выбранные подписки" #~ msgid "Toggles the read status of the selected item." #~ msgstr "Переключить статус прочтения новости" #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Переключение важности новости" #~ msgid "R_emove" #~ msgstr "_Удалить" #~ msgid "Removes the selected item." #~ msgstr "Удалить выбранную запись" #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Открыть ссылку на новость в новой вкладке браузера Liferea" #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Открыть ссылку на новость в панели новостей Liferea" #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Открыть ссылку на новость в заданном внешнем браузере" #~ msgid "_Fullscreen" #~ msgstr "Во _весь экран" #~ msgid "Browse at full screen" #~ msgstr "Полноэкранный режим просмотра" #~ msgid "_Work Offline" #~ msgstr "_Автономный режим" #~ msgid "_Update All" #~ msgstr "_Обновить всё" #~ msgid "_Show Liferea" #~ msgstr "Показать _Liferea" #~ msgid "InoReader" #~ msgstr "InoReader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Внимание: логин и пароль будут сохранены в файле списка лент Liferea в " #~ "незашифрованном виде" #~ msgid "Add InoReader Account" #~ msgstr "Подключить InoReader" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "Введите данные аккаунта InoReader" #~ msgid "Plugins" #~ msgstr "Плагины" #~ msgid "normal view" #~ msgstr "обычный вид" #~ msgid "wide view" #~ msgstr "широкий вид" #~ msgid "combined view" #~ msgstr "сводный вид" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, Linux-агрегатор новостей" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "Подробнее на https://lzone.de/liferea/" #~ msgid "_Open Link In Browser" #~ msgstr "_Открыть ссылку в браузере" #~ msgid "_Open Link In External Browser" #~ msgstr "Открыть ссылку во внешнем _браузере" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Создать ленту поиска" #~ msgid "enter any search string you want" #~ msgstr "запрос для поиска" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "_Лимит результатов:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Liferea создаст подписку на ленту с результатами поиска по введённому " #~ "запросу. Эту ленту можно сохранить и обновлять как обычные ленты" #~ msgid "Liferea is now online" #~ msgstr "Подключено к сети" #~ msgid "Work Offline" #~ msgstr "Автономный режим" #~ msgid "Liferea is now offline" #~ msgstr "Автономный режим" #~ msgid "Work Online" #~ msgstr "Подключиться" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Отключить обновление подписки" #~ msgid "Browser default" #~ msgstr "Умолчания браузера" #~ msgid "Existing window" #~ msgstr "В текущем окне" #~ msgid "New window" #~ msgstr "В новом окне" #~ msgid "New tab" #~ msgstr "В новой вкладке" #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "Встроить в индикатор сообщений" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Закрыть вместо сворачивания в область уведомлений" #~ msgid "Start minimized to the messaging menu" #~ msgstr "Свернуть в область уведомлений при запуске" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d новая" #~ msgstr[1] "%d новых" #~ msgstr[2] "%d новых" #~ msgid "No new items" #~ msgstr "Нет новых" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d не прочитана" #~ msgstr[1] "" #~ "%s\n" #~ "%d не прочитано" #~ msgstr[2] "" #~ "%s\n" #~ "%d не прочитано" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Все прочитаны" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Неверная Atom-лента: автор не указан" #~ msgid "AOL Reader login failed!" #~ msgstr "Ошибка авторизации в AOL Reader!" #~ msgid "AOL Reader Login" #~ msgstr "Авторизация в AOL Reader" #~ msgid "AOL Reader" #~ msgstr "AOL Reader" #~ msgid "" #~ "Integrate the feed list of your AOL Reader account. Liferea will present " #~ "your AOL Reader subscriptions, and will synchronize your feed list and " #~ "reading lists." #~ msgstr "" #~ "Интеграция с лентами AOL Reader. Liferea будет синхронизировать ваши " #~ "ленты и списки чтения" #~ msgid "InoReader login failed!" #~ msgstr "Ошибка авторизации в InoReader!" #~ msgid "" #~ "Integrate the feed list of your InoReader account. Liferea will present " #~ "your InoReader subscriptions, and will synchronize your feed list and " #~ "reading lists." #~ msgstr "" #~ "Интеграция с лентами InoReader. Liferea будет синхронизировать ваши ленты " #~ "и списки чтения" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Интеграция с лентами Google Reader. Liferea будет синхронизировать ваши " #~ "ленты и списки чтения" #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Интеграция blogrolls или Planets со списком лент. Liferea будет " #~ "автоматически добавлять и удалять ленты, как в исходном OPML" #~ msgid "" #~ "Integrate the feed list of your Reedah account. Liferea will present your " #~ "Reedah subscriptions, and will synchronize your feed list and reading " #~ "lists." #~ msgstr "" #~ "Интеграция с лентами Reedah. Liferea будет синхронизировать ваши ленты и " #~ "списки чтения" #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Интеграция с лентами Tiny Tiny RSS 1.5+. Liferea будет синхронизировать " #~ "ваши ленты и списки чтения" #~ msgid "TheOldReader login failed!" #~ msgstr "Ошибка авторизации в TheOldReader!" #~ msgid "" #~ "Integrate the feed list of your TheOldReader account. Liferea will " #~ "present your TheOldReader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Интеграция с лентами TheOldReader. Liferea будет синхронизировать ваши " #~ "ленты и списки чтения" #~ msgid "This feed does not exist anymore!" #~ msgstr "Эта лента больше не существует!" #~ msgid "This news entry has no headline" #~ msgstr "Заголовок новости отсутствует" #~ msgid "Visit" #~ msgstr "Посетить" #~ msgid "Open feed" #~ msgstr "Открыть ленту" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "%s%d не прочитана" #~ msgstr[1] "%s%d не прочитано" #~ msgstr[2] "%s%d не прочитано" #~ msgid "Feed Update" #~ msgstr "Обновления лент" #~ msgid "Show details" #~ msgstr "Сведения" #~ msgid "Online/Offline Button" #~ msgstr "Кнопка «Подключено к сети»/«Автономная работа»" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "Повысить _приоритет уведомлений" #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_Запретить всплывающие уведомления" #~ msgid "_Open link in:" #~ msgstr "Открывать _ссылки:" #~ msgid "Notification Settings" #~ msgstr "Настройки уведомлений" #~ msgid "Show a _popup window with new headlines." #~ msgstr "_Всплывающее окно с новыми заголовками" #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "З_начок состояния в области уведомлений" #~ msgid "Show _number of new items in the tray icon." #~ msgstr "С_чётчик новостей в области уведомлений" #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "Закрыть в_место сворачивания в область уведомлений" #~ msgid "_Start in tray icon." #~ msgstr "_Свернуть при запуске" #~ msgid "Please enter your tt-rss account settings." #~ msgstr "Введите данные аккаунта tt-rss" liferea-1.12.7/po/sk.po000066400000000000000000002161711352135647700146310ustar00rootroot00000000000000# Slovak translation for liferea. # Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. # This file is distributed under the same license as the liferea package. # Pavol Klačanský , 2008, 2009, 2010. # msgid "" msgstr "" "Project-Id-Version: liferea\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2010-09-11 10:59+0200\n" "Last-Translator: Pavol Klačanský \n" "Language-Team: Slovak \n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Čítačka kanálov" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Liferea je teraz odpojená" #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "Synchronizované s neďalekými hostiteľmi" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "Synchronizované s neďalekými hostiteľmi" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "Synchronizované s neďalekými hostiteľmi" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "Synchronizované s neďalekými hostiteľmi" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 #, fuzzy msgid "Play Podcasts" msgstr "Podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Čítačka kanálov" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea - čítačka kanálov" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Tento kanál je zrušený. Nie je dostupný. Liferea ho nabudúce nebude " "aktualizovať ale môžete stále pristupovať k uloženým článkom." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "Posledná aktualizácia tohto prihlásenia zlyhala!
        HTTP kód chyby : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Počas parsovania tohto kanálu tu boli chyby!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Podrobnosti chyby parsera" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Podrobnosti" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Počas filtrovania tohto kanálu tu boli chyby!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Podrobnosti chyby filtru" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Kanál:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Zdroj:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Vydavateľ" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Autorské právo" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "dieťa s" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "neprečítané články" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Priečinok:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Zdroj" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Kanál" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Zaradené pod" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Autor" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Zdielané cez" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Cez" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Príbuzné" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Tiež poslané v" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Tvorca" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Komentáre" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Aktualizuje sa..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Sekcia" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Odelenie" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Archív:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Pridať články do tohto archívu vybraním položky \"Kopírovať do archívu\" so " "zoznamu kontextovej ponuky." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Priečinok hľadania:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Zlyhal príkaz prehliadača: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Spúšťa sa: \"%s" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Chyba autorizácie" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Nemôže byť vytvorený priečinok cache \"%s\"!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Dnes, %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Včera %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a, %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d. %b, %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d. %b. %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" nie je platný typ prílohy konfiguračného súboru!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Chyba premenovania %s na %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "XML chyba počas čítania OPML súboru! Nemohol byť importovaný \"%s\"!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Prázdny dokument! OPML dokument \"%s\" by nemal byť prázdny keď je " "importovaný." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" nie je platný OPML dokument! Liferea nemôže importovať tento súbor!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Zoznam dôležitých článkov" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importovať zoznam kanálov" #: ../src/export.c:481 msgid "Import" msgstr "Importovať" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 #, fuzzy msgid "OPML Files" msgstr "Zvoľte OPML súbor" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Chyba počas exportovania zoznamu kanálov!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Zoznam kanálov bol exportovaný!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Exportovať zoznam kanálov" #: ../src/export.c:498 msgid "Export" msgstr "Exportovať" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        Nepodarilo sa zistiť typ tohto kanálu! Prosím, skontrolujte, či " "zdrojnaozaj ukazuje na zdroje uvedené v jednom z formátov podporovaných " "konzorciom!

        Výstup XML analyzátora:
        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" aktualizovaný..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" je nedostupný" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "XML chyba počas čítania kanálu! Kanál \"%s\" nemohol byť nahratý!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Prázdny dokument!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Neplatný XML!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Zdroj ukazuje na HTML dokument." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Nepodarilo sa určiť typ kanálu." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 #, fuzzy msgid "There are no unread items" msgstr "Nie sú tu žiadne neprečítané články " #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Spustí program Liferea s hlavným oknom v STAVE. STAV môže byť `shown', " "`iconified', alebo `hidden'" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "STAV" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Vypíše informácie o verzii a skončí" #: ../src/liferea_application.c:284 #, fuzzy msgid "Add a new subscription" msgstr "Nové prihlásenie" #: ../src/liferea_application.c:284 msgid "uri" msgstr "" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Vypíše správy ladenia všetkých typov" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Vypíše správy ladenia pre ovládanie cache" #: ../src/liferea_application.c:292 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "Vypíše správy ladenia ovládania konfigurácie" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Vypíše správy ladenia ovládania databázy" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Vypíše správy ladenia všetkých GUI funkcíí" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Povolí ladenie HTML vykresľovania. Zakaždým ako Liferea vykreslí HTML " "výstup, tak bude tiež generovaný HTML výpis do ~/.cache/liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Vypíše správy ladenia všetkej sieťovej aktivity" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Vypíše správy ladenia všetkých spracúvajúcich funkcií" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "Vypíše správy ladenia keď spracovanie funkcie trvá dlho" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Vypíše správy ladenia keď sa vchádza/vychádza z funkcíí" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Vypíše správy ladenia postupu aktualizácie kanálov" #: ../src/liferea_application.c:301 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "Vypíše správy ladenia pre ovládanie cache" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Vypíše rozsiahle správy ladenia" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Vypíše správy ladenia pre zadanú tému" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Požiadavka na aktualizáciu bolas zrušená" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Nepodarilo sa preložiť názov cieľového hostiteľa" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Nepodarilo sa preložiť názov proxy hostiteľa" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Nepodarilo sa pripojiť k vzdialenému hostiteľovi" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Nepodarilo sa pripojiť k proxy" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "Vyskytla sa chyba siete, alebo druhá strana zavrela neočakávane pripojenie" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Zdroj bol natrvalo presunutý na nové miesto" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Nemáte oprávnenie sťahovať tento kanál. Aktualizujte, prosím, vaše " "prihlasovacie meno a heslo v okne vlastností kanálu." #: ../src/net.c:476 msgid "Payment required" msgstr "Požadovaná platba" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Nemáte povolený prístup k tomuto zdroju" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Zdroj nebol nádjený" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Metóda nie je povolená" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Neprijateľný" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Požadované overenie proxy" #: ../src/net.c:482 msgid "Request timed out" msgstr "Čas požiadavky vypršal" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Beznádejné. Zdroj neexistuje. Odhláste sa, prosím!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Bola tu vnútorná chyba v aktualizačnom procese" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Kanál nie je dostupný: Server požadoval nepodporované presmerovanie!" #: ../src/net.c:492 msgid "Client Error" msgstr "Chyba klienta" #: ../src/net.c:494 msgid "Server Error" msgstr "Chyba serveru" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Nastala neznáma chyba sieťovania!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Článok" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "obsahuje" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "neobsahujes" #: ../src/rule.c:175 msgid "Item title" msgstr "Názov článku" #: ../src/rule.c:176 msgid "Item body" msgstr "Telo článku" #: ../src/rule.c:177 msgid "Read status" msgstr "Stav prečítaný" #: ../src/rule.c:177 msgid "is unread" msgstr "neprečítaný" #: ../src/rule.c:177 msgid "is read" msgstr "prečítaný" #: ../src/rule.c:178 msgid "Flag status" msgstr "Stav emblému" #: ../src/rule.c:178 msgid "is flagged" msgstr "označený" #: ../src/rule.c:178 msgid "is unflagged" msgstr "neoznačený" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "zahrnutý" #: ../src/rule.c:179 msgid "not included" msgstr "nezahrnutý" #: ../src/rule.c:180 msgid "Category" msgstr "Kategória" #: ../src/rule.c:180 msgid "is set" msgstr "je nastavené" #: ../src/rule.c:180 msgid "is not set" msgstr "nie je nastavené" #: ../src/rule.c:181 msgid "Feed title" msgstr "Názov kanálu" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Prihlásenie \"%s\" je už aktualizované!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "Prihlásenie \"%s\" bolo zrušené. Liferea ho nebude nabudúce aktualizovať!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Aktualizuje sa favicon pre \"%s\"" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Bol tu problém počas čítania tohto prihlásenia. Skontrolujte, prosím, URL a " "výstup v konzole." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "URL \"%s\" sa zmenilo natrvalo a bolo aktualizované" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" je zrušený. Liferea ho nebude nabudúce aktualizovať!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" sa nezmenil od poslednej aktualizácie" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Aktualizuje sa \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s skončil so stavom %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Chyba: Nepodarilo sa otvoriť rúru \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Chyba: Nemohol byť otvorený súbor \"%s\"" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Chyba: Nie je tam žiadny súbor \"%s\"" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Nový priečinok hľadania" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Je tu viac chýb. Výstup bol skrátený!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "XML parser: Nemohol byť parsovaný dokument:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Prílohy" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " Bajtov" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d príloh" msgstr[1] "%d príloha" msgstr[2] "%d prílohy" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Zvolte súbor" #: ../src/ui/enclosure_list_view.c:444 #, fuzzy, c-format msgid "File Extension .%s" msgstr "Súbor rozšírenia .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Nemohol byť nájdený súbor pixmap: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d nových)" msgstr[1] " (%d nový)" msgstr[2] " (%d nové)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d neprečítaných%s" msgstr[1] "%d neprečítaný%s" msgstr[2] "%d neprečítané%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Témy pomocníka" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Rýchla príručka" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "Často kladené otázky" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Pokročilé hľadanie" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Zadajte používateľské meno a heslo pre \"%s\" (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Neznámy zdroj" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "Z_rušiť všetko" #: ../src/ui/ui_common.c:211 #, fuzzy msgid "All Files" msgstr "_Miestny súbor" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea je v odpojenom režime. Nie je možná žiadna aktualizácia." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Hľadať vo všetkých článkoch" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Označiť všetko ako prečítané" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Ste si istý, že chcete odstrániť \"%s\"?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Tento článok nemá špecifikovaný odkaz!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Žiadny názov ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Článok" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Dátum" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Musíte vybrať kanál ak chcete odstrániť jeho články!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Neboli vybrané články" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "" #: ../src/ui/popup_menu.c:111 #, fuzzy msgid "_Open In Browser" msgstr "_Zobraziť v prehliadači" #: ../src/ui/popup_menu.c:115 #, fuzzy msgid "Open In _External Browser" msgstr "Nastavenia vonkajšieho prehliadača" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Kopírovať do archívu" #: ../src/ui/popup_menu.c:147 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "_Záložkovať odkaz na %s" #: ../src/ui/popup_menu.c:153 #, fuzzy msgid "Copy Item _Location" msgstr "_Kopírovať umiestnenie odkazu" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Prepnúť stav p_rečítaný" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Prepnúť _emblém článku" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "O_dstrániť článok" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Otvoriť prílohu..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Uložiť ako..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Kopírovať umiestnenie odkazu" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "Akt_ualizovať" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "Akt_ualizovať priečinok" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Nové prihlá_senie..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Nový _priečinok..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Nový priečinok _hľadania..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Nový zdr_oj..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "_Nový archív..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Nový" #: ../src/ui/popup_menu.c:312 #, fuzzy msgid "Sort Feeds" msgstr "Importovať zoznam kanálov" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_Označiť všetko ako prečítané" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "O_dstrániť" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Vlastnosti" #: ../src/ui/popup_menu.c:343 #, fuzzy msgid "Convert To Local Subscriptions..." msgstr "_Nové prihlásenie..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "GNOME predvolené" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Text pod ikonami" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Text vedľa ikon" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Len ikony" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Len text" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minút" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "hodín" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dní" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Medzera" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Medzera" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Medzera" #: ../src/ui/preferences_dialog.c:112 #, fuzzy msgid "Normal View" msgstr "_Normálny pohľad" #: ../src/ui/preferences_dialog.c:113 #, fuzzy msgid "Wide View" msgstr "P_ohľad na šírku" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Combined View" msgstr "_Kombinovaný pohľad" #: ../src/ui/preferences_dialog.c:476 #, fuzzy msgid "Default Browser" msgstr "Predvolený prehliadač GNOME" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Vlastný" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Typ" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Odstraňuje sa položka" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Ste si istý, že chcete odstrániť \"%s\" a jeho obsah?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Ste si istý, že chcete odstrániť \"%s\"?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Potvrdenie odstránenia" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Potvrdenie odstránenia" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "" "Poskytovateľ tohto kanálu odporúča interval aktualizácie každých %d minút." msgstr[1] "" "Poskytovateľ tohto kanálu odporúča interval aktualizácie každú minútu." msgstr[2] "" "Poskytovateľ tohto kanálu odporúča interval aktualizácie každé %d minúty." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Tento kanál nemá určený interval aktualizácie." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d. %b. %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nové prihlásenie" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Zvoľte OPML súbor" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Nové OPML prihlásenie" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Neboli nájdené žiadne typy zdrojov zoznamu kanálov!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Typ zdroja" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Prihlásenie k Google Reader zlyhalo!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Čítačka kanálov" #: ../src/webkit/liferea_web_view.c:175 #, fuzzy msgid "Open Link In _Tab" msgstr "Zobraziť odkaz na _karte" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "_Zobraziť odkaz v prehliadači" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "_Zobraziť odkaz v prehliadači" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_Záložkovať odkaz na %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Kopírovať umiestnenie odkazu" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "_Zobraziť" #: ../src/webkit/liferea_web_view.c:194 #, fuzzy msgid "_Copy Image Location" msgstr "_Kopírovať umiestnenie odkazu" #: ../src/webkit/liferea_web_view.c:197 #, fuzzy msgid "S_ave Link As" msgstr "Uložiť ako..." #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "Prihlá_siť..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "Zväčš_iť veľkosť písma" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "Z_menšiť veľkosť textu" #: ../glade/about.ui.h:1 msgid "About" msgstr "O programe" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea je agregátor správ pre GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Domovská stránka programu Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Overenie" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "Používateľské me_no:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Heslo:" #: ../glade/enclosure_handler.ui.h:1 #, fuzzy msgid "Open Enclosure" msgstr "Otvoriť prílohu..." #: ../glade/enclosure_handler.ui.h:2 #, fuzzy msgid "Open an enclosure of type:" msgstr "Sťaahuje sa príloha typu:" #: ../glade/enclosure_handler.ui.h:3 #, fuzzy msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Čo má robiť Liferea s prílohami? Prosím, zadajte dolu príkaz, ktorý chcete " "aby sa vykonal. Stiahnuté prílohy budú predané ako argument pre tento príkaz." #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "P_rehliadať" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "O_dteraz to robiť automaticky pre prílohy ako táto." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Pridať účet Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Vložte, prosím, vaše nastavenia účtu Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Heslo" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "Po_užívateľské meno (E-mail)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Zobraziť články" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Články" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Označiť všetko ako prečítané" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Označiť všetko ako prečítané" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Nový priečinok" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "_Názov priečinku:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Vytvoriť archív" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Názov archívu:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Zdroj kanálu" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Typ zdroja:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "P_ríkaz" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Miestny súbor" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Vybrať súbor..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "Z_droj:" #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Sťahovanie / Postprocesing" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "Ne_používať na sťahovanie proxy" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Použiť _filter konverzie" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea môže použiť externé filtrovacie doplnky za účelom prístupu ku " "kanálom a adresárom v nepodporovaných formátoch. Pre viac informácií " "pozrite dokumentáciu." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Konvertovať po_užitím:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Výber zdroju" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Vyberte typ zdroju, ktorý chcete pridať..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Pridať OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Určite, prosím, lokálny súbor alebo URL ukazujúce na správny OPML zoznam " "kanálov." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Umiestnenie" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "Vybrať _súbor" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Predvoľby Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "Predvole_ný počet ukladaných článkov na kanál:" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "Feed Update Settings" msgstr "Aktualizácia kanálu" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Poznámka: Nezabudnite, prosím, nastaviť rozumný čas obnovenia. Zvyčajne " "je to mrhanie šírkou pásma obnovovať kanály viac ako každú hodinu." #: ../glade/prefs.ui.h:8 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Aktualizuje všetky prihlásenia." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Predvolený _interval obnovovania kanálu:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Kanály" #: ../glade/prefs.ui.h:12 #, fuzzy msgid "Folder Display Settings" msgstr "Nastavenia zobrazenia priečinkov" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "_Zobraziť články všetkých vnorených kanálov, keď je vybraný priečinok." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "Skryť _prečítané články." #: ../glade/prefs.ui.h:15 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Ikony kanálov (Favicony)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "Akt_ualizovať všetky favicony teraz" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Priečinky" #: ../glade/prefs.ui.h:18 #, fuzzy msgid "Reading Headlines" msgstr "neprečítané články" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Pre_skakovať články pomocou:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:21 #, fuzzy msgid "Web Integration" msgstr "Orientácia" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Posielať záložky do" #: ../glade/prefs.ui.h:24 #, fuzzy msgid "Internal Browser Settings" msgstr "Nastavenia vnútorného prehliadača" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Otvoriť odkazy v ok_ne programu Liferea." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "Za_kázať Javascript." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_Povoliť doplnky prehliadača." #: ../glade/prefs.ui.h:28 #, fuzzy msgid "External Browser Settings" msgstr "Nastavenia vonkajšieho prehliadača" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "P_rehliadač:" #: ../glade/prefs.ui.h:30 #, fuzzy msgid "_Manual:" msgstr "Vlastný" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Prehliadač" #: ../glade/prefs.ui.h:34 #, fuzzy msgid "Toolbar Settings" msgstr "Popisy _tlačidiel v paneli nástrojov:" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Skryť panel nástrojov." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Popisy _tlačidiel v paneli nástrojov:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Automaticky zistiť (GNOME alebo prostredie)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "Žiadne pr_oxy" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Ručné nastavenie:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Hostiteľ proxy:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Port proxy:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Použiť proxy ov_erenie" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Po_užívateľské meno proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "_Heslo proxy:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Nastavenia zobrazenia priečinkov" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 #, fuzzy msgid "Downloading Enclosures" msgstr "Sťahuje sa príloha" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Stiahnuť použitím" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 #, fuzzy msgid "Opening Enclosures" msgstr "Otvoriť prílohu..." #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Prílohy" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Vlastnosti prihlásenia" #: ../glade/properties.ui.h:2 #, fuzzy msgid "Feed Name" msgstr "_Názov kanálu:" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Názov kanálu:" #: ../glade/properties.ui.h:4 #, fuzzy msgid "Update Interval" msgstr "Monitor aktualizácií" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "Po_užiť globálny predvolený interval aktualizácie." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "Š_pecifický interval aktualizácie kanálu" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "Ne_aktualizovať tento kanál automaticky." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "Poskytovateľ tohto kanálu odporúča interval aktualizácie každých %d minút." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Všeobecné" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea môže použiť externé filtrovacie doplnky za účelom prístupu ku " "kanálom a adresárom v nepodporovaných formátoch. Pre viac informácií " "pozrite dokumentáciu." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "Nastavenia cache" #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "Pre_dvolené nastavenia cache" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Zakázať cache" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "Neo_bmedzená cache" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "Počet uklada_ných článkov:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Archivácia" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Použiť HTTP ov_erenie" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Sťahovanie" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_Automaticky stiahnuť všetky prílohy tohto kanálu." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Pri vybratí článku automaticky otvoriť odkaz na č_lánok v nastavenom " "prehliadači." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorovať kanály s _komentármi pre toto prihlásenie." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Označiť stiahnuté články ako prečítané." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Pokročilé" #: ../glade/reedah_source.ui.h:1 #, fuzzy msgid "Add Reedah Account" msgstr "Pridať účet Google Reader" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Vložte, prosím, vaše nastavenia účtu Google Reader." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Premenovať" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Nový názov:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Vlastnosti priečinku hľadania" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "_Názov hľadania:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 #, fuzzy msgid "Find Items that meet the following criteria" msgstr "Nájsť články, ktoré vyhovujú nasledujúcim kritériám" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Akékoľv_ek pravidlo sa musí zhodovať" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "Všet_ky pravidlá sa musia zhodovať" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Pokročilé hľadanie" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "Priečinok _hľadania..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Hľadať vo všetkých článkoch" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Pokročilé..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Začne vyhľadávanie zadaného textu vo všetkých kanáloch. Výsledok hľadania sa " "zobrazí v zozname článkov." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "Vy_hľadávanie:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Zadajte hľadaný reťazec, ktorý by mal program Liferea nájsť v titulku článku " "alebo v jeho obsahu." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Pokročilé..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Pre automatické objavenie kanálu zadajte umiestenie webovej stránky alebo " "zadajte presné umiestnenie kanálu, ak ho poznáte." #: ../glade/theoldreader_source.ui.h:1 #, fuzzy msgid "Add TheOldReader Account" msgstr "Pridať účet Google Reader" #: ../glade/theoldreader_source.ui.h:2 #, fuzzy msgid "Please enter your TheOldReader account settings." msgstr "Vložte, prosím, vaše nastavenia účtu Google Reader." #: ../glade/ttrss_source.ui.h:1 #, fuzzy msgid "Add Tiny Tiny RSS Account" msgstr "Pridať účet Bloglines" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "Vložte, prosím, vaše nastavenia účtu Bloglines." #: ../glade/ttrss_source.ui.h:3 #, fuzzy msgid "_Server URL" msgstr "Chyba serveru" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "Po_užívateľské meno" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Monitor aktualizácií" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "Z_rušiť všetko" #: ../glade/update_monitor.ui.h:3 #, fuzzy msgid "Pending Requests" msgstr "Čakajúce požiadavky" #: ../glade/update_monitor.ui.h:4 #, fuzzy msgid "Downloading Now" msgstr "Prebieha sťahovanie" #~ msgid "_Subscriptions" #~ msgstr "Prihlá_senia" #~ msgid "Update _All" #~ msgstr "Aktualizovať _všetko" #~ msgid "Updates all subscriptions." #~ msgstr "Aktualizuje všetky prihlásenia." #~ msgid "Mark All As _Read" #~ msgstr "Označiť všetko ako p_rečítané" #~ msgid "Marks read every item of every subscription." #~ msgstr "Označí všetky články zo všetkých prihlásení ako prečítané." #~ msgid "_Import Feed List..." #~ msgstr "_Importovať zoznam kanálov..." #~ msgid "Imports an OPML feed list." #~ msgstr "Importuje OPML zoznam kanálov." #~ msgid "_Export Feed List..." #~ msgstr "_Exportovať zoznam kanálov..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Exportuje zoznam kanálov ako OPML." #~ msgid "_Quit" #~ msgstr "_Koniec" #~ msgid "_Feed" #~ msgstr "_Kanál" #~ msgid "Remove _All Items" #~ msgstr "Odstrániť _všetky články" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Odstráni všetky články z práve vybratého kanálu." #~ msgid "_Item" #~ msgstr "Č_lánok" #, fuzzy #~ msgid "Next Item" #~ msgstr "Ďa_lší neprečítaný článok" #~ msgid "_Next Unread Item" #~ msgstr "Ďa_lší neprečítaný článok" #~ msgid "_View" #~ msgstr "_Zobraziť" #~ msgid "Increases the text size of the item view." #~ msgstr "Zväčší veľkosť písma v zobrazenom článku." #~ msgid "Decreases the text size of the item view." #~ msgstr "Zmenší veľkosť písma v zobrazenom článku." #~ msgid "_Tools" #~ msgstr "Nás_troje" #~ msgid "_Update Monitor" #~ msgstr "Monitor akt_ualizácií" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "" #~ "Zobraziť zoznam všetkých kanálov, ktoré sú práve v rade na aktualizáciu" #~ msgid "_Preferences" #~ msgstr "_Predvoľby" #~ msgid "Edit Preferences." #~ msgstr "Upraviť predvoľby." #~ msgid "S_earch" #~ msgstr "_Hľadať" #~ msgid "Search All Feeds..." #~ msgstr "Hľadať vo všetkých článkoch..." #~ msgid "Show the search dialog." #~ msgstr "Zobrazí dialóg hľadania." #~ msgid "_Help" #~ msgstr "_Pomocník" #~ msgid "_Contents" #~ msgstr "Ob_sah" #~ msgid "View help for this application." #~ msgstr "Zobraziť pomocníka pre túto aplikáciu." #~ msgid "_Quick Reference" #~ msgstr "_Rýchla príručka" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Zobraziť zoznam všetkých skratiek programu Liferea." #~ msgid "_FAQ" #~ msgstr "Často k_ladené otázky" #~ msgid "View the FAQ for this application." #~ msgstr "Zobraziť Často kladené otázky pre túto aplikáciu." #~ msgid "_About" #~ msgstr "_O programe" #~ msgid "Shows an about dialog." #~ msgstr "Zobrazí dialóg o programe." #~ msgid "_Normal View" #~ msgstr "_Normálny pohľad" #~ msgid "Set view mode to mail client mode." #~ msgstr "Nastaví režim zobrazenia na režim poštového klienta." #~ msgid "_Wide View" #~ msgstr "P_ohľad na šírku" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Nastaví režim zobrazenia s použitím troch zvislých častí." #~ msgid "_Combined View" #~ msgstr "_Kombinovaný pohľad" #~ msgid "Set view mode to two pane mode." #~ msgstr "Nastaví režim zobrazenia na režim s dvomi časťami." #~ msgid "_Reduced Feed List" #~ msgstr "_Redukovať zoznam kanálov" #~ msgid "Hide feeds with no unread items." #~ msgstr "Skryť kanály, ktoré neobsahujú neprečítané články." #~ msgid "_New Subscription..." #~ msgstr "_Nové prihlásenie..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Pridá prihlásenie do zoznamu kanálov." #~ msgid "Adds a folder to the feed list." #~ msgstr "Pridá priečinok do zoznamu kanálov." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Pridá nový priečinok hľadania do zoznamu kanálov." #~ msgid "New _Source..." #~ msgstr "Nový _zdroj..." #~ msgid "Adds a new feed list source." #~ msgstr "Pridá nový zdroj zoznamu kanálov." #~ msgid "Adds a new news bin." #~ msgstr "Pridá archív." #~ msgid "_Mark Items Read" #~ msgstr "_Označiť články ako prečítané" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Označí všetky články ako prečítané vo vybranom uzli zoznamu kanálov / v " #~ "zozname článkov." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Aktualizuje vybrané prihlásenie alebo všetky prihlásenia vo vybranom " #~ "priečinku." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Otvorí dialóg vlastností pre vybrané prihlásenie." #~ msgid "_Remove" #~ msgstr "O_dstrániť" #~ msgid "Removes the selected subscription." #~ msgstr "Odstráni vybrané prihlásenie." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Prepne stav prečítaný vybraného článku." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Prepne stav emblému vybraného článku." #~ msgid "R_emove" #~ msgstr "O_dstrániť" #~ msgid "Removes the selected item." #~ msgstr "Odstráni vybraný článok." #, fuzzy #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Otvorí odkaz na článok v nastavenom prehliadači." #, fuzzy #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Otvorí odkaz na článok v nastavenom prehliadači." #, fuzzy #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Otvorí odkaz na článok v nastavenom prehliadači." #~ msgid "_Work Offline" #~ msgstr "P_racovať odpojený" #~ msgid "_Update All" #~ msgstr "Akt_ualizovať všetko" #~ msgid "_Show Liferea" #~ msgstr "_Zobraziť program Liferea" #, fuzzy #~ msgid "InoReader" #~ msgstr "Google Reader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Poznámka: Používateľské meno a heslo bude uložené vo vašom Liferea " #~ "súbore so zoznamom kanálov bez použitia šifrovania." #, fuzzy #~ msgid "Add InoReader Account" #~ msgstr "Pridať účet Google Reader" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "Vložte, prosím, vaše nastavenia účtu Google Reader." #~ msgid "normal view" #~ msgstr "normálny pohľad" #~ msgid "wide view" #~ msgstr "pohľad na šírku" #~ msgid "combined view" #~ msgstr "kombinovaný pohľad" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea - čítačka kanálov pre Linux" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "Pre viac informácií navštívte https://lzone.de/liferea/" #, fuzzy #~ msgid "_Open Link In Browser" #~ msgstr "_Zobraziť odkaz v prehliadači" #, fuzzy #~ msgid "_Open Link In External Browser" #~ msgstr "_Zobraziť odkaz v prehliadači" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Vytvoriť kanál vyhľadávača" #~ msgid "enter any search string you want" #~ msgstr "zadajte nejaký reťazec, ktorý chcete hľadať" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "Maximálny počet výsledných článkov:" #~ msgid "Liferea is now online" #~ msgstr "Liferea je teraz pripojená" #~ msgid "Work Offline" #~ msgstr "Pracovať ako odpojený" #~ msgid "Liferea is now offline" #~ msgstr "Liferea je teraz odpojená" #~ msgid "Work Online" #~ msgstr "Pracovať ako pripojený" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Táto voľba vám umožňuje zakázať aktualizáciu prihlásení." #~ msgid "Browser default" #~ msgstr "Predvolený prehliadač" #~ msgid "Existing window" #~ msgstr "Existujúce okno" #~ msgid "New window" #~ msgstr "Nové okno" #~ msgid "New tab" #~ msgstr "Nová karta" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Čítačka kanálov" #~ msgid "Online/Offline Button" #~ msgstr "Tlačidlo pripojený/odpojený" #~ msgid "_Open link in:" #~ msgstr "_Otvoriť odkaz v:" #~ msgid "No comments yet." #~ msgstr "Doteraz žiadne komentáre." #~ msgid "Refresh" #~ msgstr "Obnoviť" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - čítačka kanálov pre Linux" #, fuzzy #~ msgid "" #~ "

        Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

        You can add new subscriptions

        • From main menu " #~ "'Subscription' -> 'New Subscription'
        • By dropping feed links " #~ "into the subscription list
        • By right clicking links and choosing " #~ "'Subscribe' within Liferea

        " #~ msgstr "" #~ "

        Vitajte v programe Liferea, agregátor správ pre internetové " #~ "kanály so správami.

        Lavá časť obsahuje zoznam prihlásení. Pre " #~ "pridanie prihlásenia vyberte Prihlásenia -> Nové prihlásenie. Pre " #~ "prehliadanie článkov kanálu ho vyberte v zozname a článok bude načítaný v " #~ "pravej časti.

        " #, fuzzy #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Ukončiť namies_to minimalizácie do ikony v oblasti upozornení." #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d nových článkov" #~ msgstr[1] "%d nový článok" #~ msgstr[2] "%d nové články" #~ msgid "No new items" #~ msgstr "Žiadne nové články" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d neprečítaných článkov" #~ msgstr[1] "" #~ "%s\n" #~ "%d neprečítaný článok" #~ msgstr[2] "" #~ "%s\n" #~ "%d neprečítané články" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Žiadny neprečítaný článok" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Neplatný Atom kanál: neznámy autor" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Integrovať zoznam kanálov vášho Google Reader účtu. Liferea bude " #~ "poskytovať vaše Google Reader prihlásenie a bude synchronizovať váš " #~ "zoznam kanálov a zoznamy článkov." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Integrovať blogrolls alebo Planets do vášho zoznamu kanálov. Liferea " #~ "automaticky pridá a odstráni kanály podľa zmien v zdrojovom OPML dokumente" #, fuzzy #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Integrovať zoznam kanálov vášho Google Reader účtu. Liferea bude " #~ "poskytovať vaše Google Reader prihlásenie a bude synchronizovať váš " #~ "zoznam kanálov a zoznamy článkov." #~ msgid "This feed does not exist anymore!" #~ msgstr "Tento kanál už viac neexistuje!" #~ msgid "This news entry has no headline" #~ msgstr "Táto novinka nemá titulok" #~ msgid "Visit" #~ msgstr "Navštíviť" #~ msgid "Open feed" #~ msgstr "Otvoriť kanál" #~ msgid "Feed Update" #~ msgstr "Aktualizácia kanálu" #~ msgid "Show details" #~ msgstr "Zobraziť podrobnosti" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "_Vnútiť vyskakovacie upozornenia pre toto prihlásenie." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_Nikdy nezobraziť vyskakovacie oznámenie pre toto prihlásenie." #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Autorské právo (c) 2003-2009\n" #~ "Tím Liferea\n" #, fuzzy #~ msgid "Notification Settings" #~ msgstr "Nastavenia upozorňovania" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Zobraziť _vyskakovacie okno s novými článkami." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Zobraziť stavovú _ikonu v oblasti upozornení." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Zobraziť počet nových článkov v oblasti upozornení." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "Ukončiť namies_to minimalizácie do ikony v oblasti upozornení." #~ msgid "_Start in tray icon." #~ msgstr "_Spustiť v oblasti upozornení." #~ msgid "Download and view feeds" #~ msgstr "Stiahnuť a zobraziť kanály" #~ msgid "You may want to validate the feed using" #~ msgstr "Možno chcete potvrdiť platnosť kanálu použitím" #~ msgid "Launch Item In _Tab" #~ msgstr "Zobraziť článok na _karte" #~ msgid "_Launch Item In Browser" #~ msgstr "_Zobraziť článok v prehliadači" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Kopírovať _URL článku do schránky" #~ msgid "flag" #~ msgstr "emblém" #~ msgid "bookmark" #~ msgstr "záložka" #~ msgid "comments" #~ msgstr "komentáre" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Sťahovanie prílohy ZLYHALO: \"%s\"" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Sťahovanie prílohy dokončené: \"%s\"" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Táto verzia programu Liferea používa nový formát cache a musí premiestniť " #~ "vašu cache kanálov. Obsah cache vo %s nebude automaticky odstránený. " #~ "Odstránte, prosím, tento priečinok ručne akonáhle si budete istý že " #~ "premiestnenie bolo úspešné!" #, fuzzy #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Sťahovanie prílohy ZLYHALO: \"%s\"" #, fuzzy #~ msgid "Download finished." #~ msgstr "_Stiahnuť použitím" #~ msgid "Choose download directory" #~ msgstr "Zvoliť priečinok na sťahovanie" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Vlastný:\n" #~ "(%s pre URL)" #~ msgid "_Save downloads in" #~ msgstr "_Uložiť stiahnuté do" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "_Povoliť lokálnu LAN synchronizáciu" #~ msgid "_Service Name" #~ msgstr "Názov _služby" #~ msgid "Sync" #~ msgstr "Synchronizovať" #~ msgid "Downloading Enclosure" #~ msgstr "Sťahuje sa príloha" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "_Predať URL a nesťahovať prílohu." #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Skočí na ďalší nový neprečítaný článok. Ak je potrebné, vyberie ďalší " #~ "kanál s neprečítanými článkami." #~ msgid "Liferea Sync %s@%s" #~ msgstr "Liferea synchronizácia %s@%s" #~ msgid "link cosmos" #~ msgstr "odkaz cosmos" #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "Vypíše správy ladenia pre načítavanie doplnkov" #~ msgid "Liferea seems to be running already!" #~ msgstr "Zdá sa, že Liferea je už spustená!" #~ msgid "Update status" #~ msgstr "Stav aktualizácie" #~ msgid "was updated" #~ msgstr "aktualizovaný" #~ msgid "was not updated" #~ msgstr "neaktualizovaný" #~ msgid "The orientation of the tray." #~ msgstr "Orientácia oblasti upozornení." #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "_Script Manager" #~ msgstr "Správca _skriptov" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Povolí nastaviť a upraviť LUA hook skripty" #~ msgid "Search With ..." #~ msgstr "Hľadať pomocou..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d výsledkov hľadania pre \"%s\"" #~ msgstr[1] "%d výsledok hľadania pre \"%s\"" #~ msgstr[2] "%d výsledky hľadania pre \"%s\"" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d výsledkov hľadania" #~ msgstr[1] "%d výsledok hľadania" #~ msgstr[2] "%d výsledky hľadania" #~ msgid "Count" #~ msgstr "Počet" #~ msgid "You have to select a feed entry" #~ msgstr "Musíte vybrať položku kanálu" #~ msgid "(empty)" #~ msgstr "(prázdny)" #~ msgid "_Properties..." #~ msgstr "_Vlastnosti..." #~ msgid "Update out-dated feeds" #~ msgstr "Aktualizovať zastaralé kanály" #~ msgid "Force update of all feeds" #~ msgstr "Vnútiť aktualizáciu všetkých kanálov" #~ msgid "No feed update at all" #~ msgstr "Vôbec neaktualizovať kanály" #~ msgid "startup" #~ msgstr "pri spustení" #~ msgid "feed updated" #~ msgstr "pri aktualizovaní kanálu" #~ msgid "feed added" #~ msgstr "kanál pridaný" #~ msgid "item selected" #~ msgstr "pri vybraní článku" #~ msgid "feed selected" #~ msgstr "pri vybraní kanálu" #~ msgid "item unselected" #~ msgstr "pri zrušení vybrania článku" #~ msgid "feed unselected" #~ msgstr "pri zrušení vybrania kanálu" #~ msgid "shutdown" #~ msgstr "pri vypnutí" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Prepáčte, podpora skriptovania nie je dostupná!" #~ msgid "Script Name" #~ msgstr "Názov skriptu" #~ msgid "No script selected!" #~ msgstr "Nevybraný skript!" #~ msgid "Create a new search feed." #~ msgstr "Vytvoriť nové hľadanie kanálu." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Programu Liferea sa nepodarilo zobraziť obsah tohto článku." #~ msgid "

        View this item's content.

        " #~ msgstr "

        Zobraziť obsah tohto článku.

        " #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "Integrovať zoznam kanálov vášho Bloglines účtu. Liferea bude poskytovať " #~ "vaše Bloglines prihlásenie ako substrom (len na čítanie) v zozname " #~ "kanálov." #~ msgid "feedlist.opml" #~ msgstr "feedlist.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s obsahuje %d nových / aktualizovaných článkov\n" #~ msgstr[1] "%s obsahuje %d nový / aktualizovaný článok\n" #~ msgstr[2] "%s obsahuje %d nové / aktualizované články\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Hook" #~ msgstr "Prichytenie" #~ msgid "Registered Scripts" #~ msgstr "Registrované skripty" #~ msgid "Script Code" #~ msgstr "Kód skriptu" #~ msgid "text/plain" #~ msgstr "text/plain" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Táto voľba môže spôsobiť podstatné oneskorenie, keď sa bude načítavať " #~ "priečinok s veľkým obsahom kanálov." #~ msgid "Downloading Enclosures" #~ msgstr "Sťahovanie príloh" #~ msgid "Feed Cache Handling" #~ msgstr "Ovládanie cache kanálov" #~ msgid "Feed Name" #~ msgstr "Názov kanálu" #~ msgid "Feed Update Settings" #~ msgstr "Nastavenie aktualizácie kanálov" #~ msgid "HTTP Proxy Server" #~ msgstr "HTTP proxy server" #~ msgid "Opening Enclosures" #~ msgstr "Otváranie príloh" #~ msgid "Reading Headlines" #~ msgstr "Čítanie článkov" #~ msgid "Toolbar Settings" #~ msgstr "Nastavenia panelu nástrojov" #~ msgid "Update Interval" #~ msgstr "Interval aktualizácie" #~ msgid "Web Integration" #~ msgstr "Webová integrácia" #~ msgid "Add Script" #~ msgstr "Pridať skript" #~ msgid "At _startup:" #~ msgstr "Pri _spustení:" #~ msgid "Attention Profile" #~ msgstr "Profil pozornosti" #~ msgid "Create new script" #~ msgstr "Vytvoriť nový skript" #~ msgid "Exec Command" #~ msgstr "Vykonať príkaz" #~ msgid "Reuse existing script" #~ msgstr "Znovu použiť existujúci skript" #~ msgid "Script Manager" #~ msgstr "Správca skriptov" #~ msgid "Search _Link Cosmos with" #~ msgstr "Hľadať _odkaz Cosmos pomocou" liferea-1.12.7/po/sq.po000066400000000000000000002017331352135647700146350ustar00rootroot00000000000000# Albanian Translation of liferea.pot # Copyright (C) 2009,2012 # This file is distributed under the same license as the Liferea package. # Besnik Bleta , 2009, 2012, 2015, 2016. msgid "" msgstr "" "Project-Id-Version: liferea 1.10-rc4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2016-11-10 20:22+0200\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian \n" "Language: sq\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.6.10\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Lexues Prurjesh" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" "Liferea është një shkurtim për Linux Feed Reader. Është një grumbullues " "lajmesh për prurje lajmesh në internet. Mbulon një numër formatesh prurjeje, " "përfshi RSS/RDF, CDF dhe Atom. Ka mjaft lexues të tjerë lajmesh, por këta " "nuk gjenden për Linux-in ose lypin shumë librari ekstra, pa të instalohen. " "Liferea orvatet ta plotësojë këtë mungesë duke krijuar një grumbullues " "lajmesh për GTK/GNOME, të shpejtë, të lehtë për t’u instaluar dhe përdorur." #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "Veçori Për T’u Përmendur" #: ../liferea.appdata.xml.in.h:4 msgid "Read articles when offline" msgstr "Lexoni artikujt kur jeni i palidhur" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "Njëkohësohet me TheOldReader-in" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "Njëkohësohet me TinyTinyRSS-në" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "Njëkohësohet me InoReader-in" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "Njëkohësohet me with Reedah" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "Ruaji përgjithmonë titujt në kosha lajmesh" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "Gjej përputhje për zëra duke përdorur dosje kërkimi" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "Luaj Podcast-e" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Lexues Prurjesh" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Lexuesi i Prurjeve Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Lexoni blogje dhe prurje lajmesh" #: ../net.sourceforge.liferea.desktop.in.h:5 #, fuzzy msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "lajme;prurje;grumbullues;blog;podcast;" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Kjo prurje është ndërprerë. S’mund të kihet më. Liferea s’do ta përditësojë " "më, por ende mund të hapni titujt e ruajtur në fshehtinë." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "Përditësimi i fundit i këtij pajtimi dështoi!
        Kod gabimi HTTP : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Pati gabime ndërsa përtypej kjo prurje!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Hollësi Gabimi Përtypjeje" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Hollësi" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" "Lidhur me këtë, mund të kontaktoni autorin ose kujdestarin e sajtit të " "prurjes!" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Pati gabime teksa filtrohej kjo prurje!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Hollësi Gabimi Filtri" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Prurje:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Burim:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Botues" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Të drejta kopjimi" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "pjella me" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "tituj të palexuar" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Dosje:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Burim" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Prurje" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Skeduar te" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Autor" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Ndarë me të tjerët nga" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Përmes" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Të afërta" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Postuar edhe te" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Krijues" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Komente" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Po përditësohet…" #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Ndarje" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Degë" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Kosh Lajmesh:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Shtoni, te ky kosh lajmesh, zëra duke përzgjedhur \"Kopjoje te Kosh Lajmesh" "\" prej menuje konteksti liste zërash." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Dosje Kërkimesh:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Urdhri për shfletuesin dështoi: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Po niset: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Gabim Autorizimi" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "S’krijohet dot drejtoria fshehtinë \"%s\"!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Sot më %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Dje më %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%b %d %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%b %d %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" nuk është kartelë e vlefshme formësimi lloji paketimesh!" #: ../src/enclosure.c:292 #, fuzzy msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Ende s’keni të formësuar mjet shkarkimesh! Ju lutemi, bëjeni këtë te skeda " "'Shkarko', te Mjete/Parapëlqime." #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Urdhri dështoi: \n" "\n" "%s\n" "\n" " Ju lutemi, shihni nëse ka të instaluar dhe funksionon në rregull ndonjë " "mjet të formësuar shkarkimesh! Mund ta ndryshoni te skeda 'Shkarkime' te " "Mjete/Parapëlqime." #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Gabim në riemërtimin e %s si %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "Gabim XML ndërsa lexohej kartelë OPML! S’u importua dot \"%s\"!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Dokument i zbrazët! Dokumenti OPML \"%s\" s’duhet të jetë i zbrazët kur " "importohet." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" nuk është një dokument OPML i vlefshëm! Liferea nuk e importon dot " "këtë kartelë!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Listë e importuar prurjesh" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importo Listë Prurjesh" #: ../src/export.c:481 msgid "Import" msgstr "Importo" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "Kartela OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Gabim gjatë eksportimit të listës së prurjeve!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Listë Prurjesh e eksportuar!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Eksporto Listë Prurjesh" #: ../src/export.c:498 msgid "Export" msgstr "Eksporto" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        S’u zbulua dot lloji i kësaj prurje! Ju lutemi, shihni nëse burimi vërtet " "shpie te një burim i dhënë nën një nga formatet e pranuar për prurje!Përgjigje nga Përtypësi i XML-ve:

        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" u përditësua…" #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" nuk është e passhme" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "URL-ja ku doni që t’ju pajtojë Liferea shpie te një faqe web dhe vetëzbulimi " "nuk gjeti prurje te kjo faqe. Ndoshta kjo faqe web thjesht nuk mbulon " "vetëzbulime prurjesh." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "Gabim XML ndërsa lexohej prurje! Prurja \"%s\" s’u ngarkua dot!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Dokument i zbrazët!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "XML e Pavlefshme!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Burimi shpie te dokument HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "S’u përcaktua dot lloji i prurjes." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "S’ka zëra të palexuar" #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Nise Liferea-n me dritaren e tij kryesore në GJENDJEN. GJENDJA mund të jetë " "`e shfaqur', `e ikonizuar' ,ose `e fshehur'" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "GJENDJE" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Shfaq të dhëna versioni dhe dil" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Shtoni pajtim të ri" #: ../src/liferea_application.c:284 msgid "uri" msgstr "uri" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Shtyp mesazhe diagnostikimi të krejt llojeve" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Shtyp mesazhe diagnostikimi gjatë trajtimit të fshehtinës" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Shtyp mesazhe diagnostikimi gjatë trajtimit të formësimit" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Shtyp mesazhe diagnostikimi gjatë trajtimit të bazës së të dhënave" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Shtyp mesazhe diagnostikimi të krejt funksioneve GUI" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Aktivizon diagnostikimin e vizatimit HTML. Sa herë që Liferea vizaton HTML, " "do ta hedhë HTML-në e krijuar edhe te ~/.cache/liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Shtyp mesazhe diagnostikimi për krejt veprimtarinë në rrjet" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Shtyp mesazhe diagnostikimi për krejt funksionet e përtypjes" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Shtyp mesazhe diagnostikimi kur plotësimi i një funksioni zgjatet shumë" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Shtyp mesazhe diagnostikimi për hyrje/dalje në funksione" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Shtyp mesazhe diagnostikimi për procesin e përditësimit të prurjes" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "" "Shtyp mesazhe diagnostikimi gjatë kërkimit të përputhjeve te dosje kërkimesh" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Shtyp mesazhe fjalamane diagnostikimi" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Shtyp mesazhe diagnostikimi për temën e treguar" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Kërkesa për përditësim u anulua" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "I pazoti të zbulojë emrin e strehës për destinacionin" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "I pazoti të zbulojë emrin e strehës për ndërmjetësin" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "I pazoti të lidhet te strehë e largët" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "I pazoti të lidhet te ndërmjetësi" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "Ndodhi një gabim rrjeti, ose ana tjetër e mbylli lidhjen papritmas" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Burimi kaloi përgjithmonë në një vend të ri" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Jeni i paautorizuar të shkarkoni këtë prurje. Ju lutemi, përditësoni emrin " "tuaj të përdoruesit dhe fjalëkalimin përmes kutisë së dialogut te vetitë e " "prurjes" #: ../src/net.c:476 msgid "Payment required" msgstr "Lypset pagesë" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "S’ju lejohet të hyni në këtë burim" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "S’u Gjet Burim" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Metodë e Palejuar" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "I papranueshëm" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Lypset mirëfilltësim ndërmjetësi" #: ../src/net.c:482 msgid "Request timed out" msgstr "Kërkesës i mbaroi koha" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Ka avulluar! Burimi s’ekziston. Ju lutemi, çregjistrohuni!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Pati një gabim të brendshëm te procesi i përditësimit" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Nuk ka prurje: Shërbyesi kërkoi ridrejtim të pambuluar!" #: ../src/net.c:492 msgid "Client Error" msgstr "Gabim Klienti" #: ../src/net.c:494 msgid "Server Error" msgstr "Gabim Shërbyesi" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Ndodhi një gabim i panjohur rrjeti!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Zë" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "përmban" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "nuk përmban" #: ../src/rule.c:175 msgid "Item title" msgstr "Titulli i zërit" #: ../src/rule.c:176 msgid "Item body" msgstr "Lënda e zërit" #: ../src/rule.c:177 msgid "Read status" msgstr "Gjendje leximi" #: ../src/rule.c:177 msgid "is unread" msgstr "është i palexuar" #: ../src/rule.c:177 msgid "is read" msgstr "është lexuar" #: ../src/rule.c:178 msgid "Flag status" msgstr "Gjendje shenje" #: ../src/rule.c:178 msgid "is flagged" msgstr "është me shenjë" #: ../src/rule.c:178 msgid "is unflagged" msgstr "është pa shenjë" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "e përfshirë" #: ../src/rule.c:179 msgid "not included" msgstr "e papërfshirë" #: ../src/rule.c:180 msgid "Category" msgstr "Kategori" #: ../src/rule.c:180 msgid "is set" msgstr "është caktuar" #: ../src/rule.c:180 msgid "is not set" msgstr "s’është caktuar" #: ../src/rule.c:181 msgid "Feed title" msgstr "Titull prurjeje" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Pajtimi \"%s\" po përditësohet tashmë!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "Pajtimi \"%s\" është ndërprerë. Liferea s’do ta përditësojë më!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Po përditësohet favikona për \"%s\"" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Pati një problem gjatë leximit të këtij pajtimit. Ju lutemi, kontrolloni URL-" "në dhe atë çka jep konsola." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "URL-ja e \"%s\" ndryshoi përgjithmonë dhe është përditësuar" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" është ndërprerë. Liferea nuk do ta përditësojë më!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" nuk ka ndryshuar që prej përditësimit të fundit" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Po përditësohet \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "" "Gabim në hapjen e kartelës së përkohshme %s për ta përdorur për filtrim!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s përfundoi me gjendje %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Gabim: S’u hap dot tubi \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Gabim: S’u hap dot kartela \"%s\"" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Gabim: S’ka kartelë \"%s\"" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Dosje e Re Kërkimi" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Pati edhe gabime të tjera. Përgjigja u cungua!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "Përtypësi XML: S’u përtyp dot dokumenti:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Bashkëngjitje" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr "Bajte" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d bashkëngjitje" msgstr[1] "%d bashkëngjitje" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Zgjidhni Kartelë" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Zgjatim Kartele .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "S’u gjet dot kartelë pixmap: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d e re)" msgstr[1] " (%d të reja)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d i palexuar%s" msgstr[1] "%d të palexuar%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Zëra Ndihme" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Referencë e Shpejtë" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "FAQ" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Kërkim i Thelluar" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Jepni emër përdoruesi dhe fjalëkalim për \"%s\" (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Burim i panjohur" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 msgid "_Cancel" msgstr "_Anuloje" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Krejt Kartelat" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea është nën mënyrën jo në linjë. Përditësimi është i pamundur." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Kërkoni Në Tërë Prurjet" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Shënoji të tëra si të lexuara" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Jeni i sigurt se doni të fshihen \"%s\"?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Këtij zëri s’i është caktuar lidhje!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Pa titull ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Titull" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Datë" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Duhet përzgjedhur një prurje, që të mund të fshihen zërat e saj!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "S’është përzgjedhur zë" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Hape Në _Skedë" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "_Hape Në Shfletues" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Hape në Shfletues të J_ashtëm" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Kopjoje te Kosh Lajmesh" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "_Faqeruaje te %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "Kopjo _Vendndodhje Zëri" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Këmbe Gjendje _Leximi" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Këmbe _Shenjë Zëri" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "_Hiqe Zërin" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Hapni Paketimin…" #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Ruajeni Si…" #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "_Kopjo Vendndodhje Lidhjeje" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Përditësoje" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Përditësoje Dosjen" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Pajtim i _Ri…" #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "_Dosje e Re…" #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "_Dosje e Re Kërkimesh…" #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "_Burim i Ri…" #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Kosh i Ri _Lajmesh…" #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "I _ri" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Renditi Prurjet" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_Shënoji Krejt Si të Lexuara" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "_Rikrijoje" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Fshije" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Veti" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Shndërroje Në Pajtime Vendore…" #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "Parazgjedhje GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Tekst nën ikonat" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Tekst në krah të ikonave" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Vetëm ikona" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Vetëm tekst" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minuta" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "orë" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "ditë" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Hapësirë" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Hapësirë" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Hapësirë" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Parje Normale" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Parje Gjerazi" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Pamje e Ndërthurur" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Shfletuesi Parazgjedhje" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Dorazi" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Lloj" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(E zbrazët)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Po rikrijohet" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Po fshihet zëri" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Jeni i sigurt se doni të fshihet \"%s\" dhe lënda e saj?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Jeni i sigurt se doni të fshihen \"%s\"?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Ripohim Fshirjeje" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Ripohim Fshirjeje" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "_Hape" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "" "Furnizuesi i kësaj prurjeje këshillon një interval përditësimi prej %d " "minute." msgstr[1] "" "Furnizuesi i kësaj prurjeje këshillon një interval përditësimi prej %d " "minutash." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Kjo prurje s’ka të përcaktuar interval parazgjedhje përditësimi." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Pa titull" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Sajt" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Pajtim i Ri" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Zgjidhni Kartelë OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Pajtim i Ri OPML" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "S’u gjetën lloje burimi listash prurjesh!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Lloj Burimi" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" "Hyjra për '%s' nuk është plotësuar ende! Ju lutemi, prisni deri sa të bëhet " "hyrja." #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "Pajtimi '%s' u shndërrua me sukses në prurje vendore!" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "Hyrja dështoi!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "Reedah" #: ../src/fl_sources/reedah_source_feed.c:154 #, fuzzy msgid "Could not parse JSON returned by Reedah API!" msgstr "S’përtypi dot JSON-in e kthyer nga API i tt-rss-së!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "Nuk kapet dot API HTTP e TinyTinyRSS-së!" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" "Pajtimi te prurja me TinyTinyRSS-në dështoi! Shihni nëse i dhatë vërte URL " "prurjeje!" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "Shpajtimi nga prurja TinyTinyRSS!" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" "Ky version i TinyTinyRSS-së nuk e mbulon heqjen e prurjeve. Përmirësojeni me " "versionin %s ose të mëvonshëm!" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "Nuk përtypi dot JSON-in e kthyer nga API i TinyTinyRSS-së!" #: ../src/fl_sources/theoldreader_source.c:329 msgid "TheOldReader" msgstr "TheOldReader" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Hape Lidhjen Në _Skedë" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "_Hape Lidhjen Në Shfletues" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "_Hape Lidhjen Në Shfletues të Jashtëm" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_Faqeruaje Lidhjen te %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Kopjo Vendndodhje Lidhjeje" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "_Ruaje Figurën Si" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "_Kopjo Vendndodhje Figure" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "_Ruaje Lidhjen Si" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "_Ruaje Figurën Si" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Pajtohuni…" #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "_Kopjoje" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "_Rrit Madhësi Teksti" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Zvogëlo Madhësi Teksti" #: ../glade/about.ui.h:1 msgid "About" msgstr "Rreth" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea është një grumbullues lajmesh për GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Faqja Hyrëse e Liferea-s" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Mirëfilltësim" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Emër përdoruesi:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Fjalëkalim:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Hapni Paketimin" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Hapni një paketim të llojit:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Çfarë duhet të bëjë Liferea me këtë paketim? Ju lutemi, jepni më poshtë " "urdhrin që doni të përmbushet. URL-ja e paketimeve do të përdoret si " "argument për këtë urdhër:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Shfletoni" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Tani e tutje, bëje këtë vetvetiu për paketime si kjo." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Shtoni Llogari Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Ju lutemi, jepni të dhënat për llogarinë tuaj te Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Fjalëkalim" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_Emër përdoruesi (Email)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Shihni Titujt" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Tituj" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Shënoji të tëra si të lexuara" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Shënoji të tëra si të lexuara" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Dosje e Re" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "_Emër dosjeje:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Krijoni Kosh Lajmesh" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Emër Koshi Lajmesh:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Burim Prurjeje" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Lloj Burimi:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Urdhër" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Kartelë Vendore" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Përzgjidhni Kartelë…" #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Burim:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Shkarkim / Paspërpunim" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "_Mos përdor ndërmjetës për shkarkime" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Përdor _filtër shndërrimi" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea mund të përdorë shtojca filtrimi të jashtme që të mund të hyjë në " "prurje dhe drejtori në formate të pambuluar. Për më tepër të dhëna, shihni " "dokumentimin." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Shndërroje _duke përdorur:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Përzgjedhje Burimi" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Përzgjidhni llojin e burimit që doni të shtohet…" #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Shtoni OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Ju lutemi, tregoni një kartelë vendore ose një URL që shpie te një listë " "OPML prurjesh e vlefshme." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Vendndodhje" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Përzgjidhni Kartelë" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Parapëlqime për Liferea-n" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Trajtim Fshehtine Prurjesh" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_Numër parazgjedhje zërash për prurje për t’u ruajtur:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Rregullime Përditësimi Prurjesh" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Shënim: Ju lutemi, kujtohuni të caktoni një kohë të arsyeshme rifreskimi. " "Zakonisht, vjelja e prurjeve më shpesh se një herë në çdo orë, është " "shpërdorim i bandës." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "_Përditësoji krejt pajtimet gjatë nisjes." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "_Interval Parazgjedhje Rifreskimi Prurjeje:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Prurje" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Rregullime Paraqitjeje Dosjesh" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "_Kur përzgjidhet një dosje, shfaq zërat e tërë prurjeve pjella." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "_Fshihi zërat e lexuar." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Ikona Prurjesh (Favikona)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Përditësoji tërë favikonat tani" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Dosje" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Po lexohen Titujt" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Shihi artikujt për_ciptas me:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "Mënyra Parazgjedhje për Parjet:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Integrim Web" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Postoji Faqerojtësit te" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Rregullime Shfletuesi të Brendshëm" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Lidhjet hapi në dritaren e Liferea-s." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Çaktivizo Javascript-in." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_Aktivizoni shtojca shfletuesi." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Rregullime Shfletuesi të Jashtëm" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Shfletues:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Dorazi:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s për URL)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Shfletues" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Rregullime Paneli" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Fshihe panelin." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "_Etiketa butonash paneli:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "Shërbyes HTTP Ndërmjetës" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Vetëzbuloje (GNOME ose mjedis)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Pa Ndërmjetës" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Rregullim Dorazi:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Strehë Ndërmjetësi:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "_Portë Ndërmjetësi:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Përdor _Mirëfilltësim Përmes Ndërmjetësi" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "_Emër Përdoruesi Ndërmjetësi:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "_Fjalëkalim Ndërmjetësi:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Ndërmjetës" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "Rregullime Paraqitjeje Dosjesh" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Shkarkim Paketimesh" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Shkarkoje duke përdorur" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Hapje Paketimesh" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Paketime" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Veti Pajtimi" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Emër Prurjeje" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Emër Prurjeje:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Interval Përditësimi" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Përdor interval parazgjedhje të përgjithshëm përditësimesh." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_Interval i caktuar përditësimi prurjeje i" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Mos e përditëso këtë prurje vetvetiu." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "Ky furnizues prurjesh këshillon një interval përditësimi prej %d minutash." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Të përgjithshme" #: ../glade/properties.ui.h:20 msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea mund të përdorë shtojca filtrimi të jashtme për të mundur të hyjë në " "prurje dhe drejtori me formate jo të mbuluar." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Rregullimet për fshehtinën kontrollojnë nëse ruhet lënda e prurjeve kur " "mbyllet Liferea. Zërat e shënuar ruhen përherë në fshehtinë." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "Rregullime _parazgjedhje për fshehtinë" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "Çaktivizo fshehtinën" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Fshehtinë e pakufizuar" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "_Numër zërash për t’u ruajtur:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Arkiv" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Përdor mirëfilltësim HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Shkarkoje" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "Shkarko _vetvetiu tërë paketimet e kësaj prurjeje." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Kur përzgjidhen artikuj, _vetëngarko lidhje zëri te shfletuesi i formësuar " "për këtë." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Shpërfilli prurjet e _komenteve për këtë pajtim." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Shënoji zërat e shkarkuar si të lexuar." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Të mëtejshme" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "Shtoni Llogari Reedah" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "Ju lutemi, jepni të dhënat e llogarisë suaj InoReader." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Riemërtoje" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Emër e Ri:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Veti Dosjeje Kërkimesh" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "_Emër Kërkimi:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Gjej Zëra që pajtohen me kushtin vijues" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Përputhje Me _Çfarëdo Rregulli" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "Përputhje Me _Krejt Rregullat" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Kërkim i Thelluar" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "_Dosje Kërkimesh…" #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Kërkoni Në Tërë Prurjet" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "Të _mëtejshme…" #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Fillon të kërkojë nëpër tërë prurjet për tekstin e dhënë. Përfundimi i " "kërkimit do të shfaqet te lista e zërave." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Kërko për:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Jepni varg kërkimi të cilin Liferea do të duhej ta gjente te titulli ose " "lënda e një zëri." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Të mëtejshme…" #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Jepni vendin e sajtit, për të përdorur vetëzbulimin ose, në rast se e dini, " "vendin e saktë të prurjes." #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "Shtoni Llogari TheOldReader" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "Ju lutemi, jepni të dhënat e llogarisë suaj TheOldReader." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Shtoni Llogari Tiny Tiny RSS" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "Ju lutemi, jepni të dhënat e llogarisë suaj TinyTinyRSS." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "URL _Shërbyesi" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Emër përdoruesi" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Përditëso Monitorin" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "Anuloji të _Tëra" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Kërkesa Në Pritje të Shqyrtimit" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Po shkarkohet Tani" #~ msgid "_Subscriptions" #~ msgstr "_Pajtime" #~ msgid "Update _All" #~ msgstr "Përditësoji _Krejt" #~ msgid "Updates all subscriptions." #~ msgstr "Përditëso krejt pajtimet." #~ msgid "Mark All As _Read" #~ msgstr "Shënoji Krejt Si të _Lexuara" #~ msgid "Marks read every item of every subscription." #~ msgstr "Shënon si të lexuar çdo zë të çdo pajtimi." #~ msgid "_Import Feed List..." #~ msgstr "_Importo Listë Prurjesh…" #~ msgid "Imports an OPML feed list." #~ msgstr "Importon një listë prurjesh OPML." #~ msgid "_Export Feed List..." #~ msgstr "_Eksporto Listë Prurjesh…" #~ msgid "Exports the feed list as OPML." #~ msgstr "Eksporton listë prurjesh si OPML." #~ msgid "_Quit" #~ msgstr "_Dil" #~ msgid "_Feed" #~ msgstr "_Prurje" #~ msgid "Remove _All Items" #~ msgstr "Hiqi _Krejt Zërat" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Heq tërë zërat e prurjes së përzgjedhur për çastin." #~ msgid "_Item" #~ msgstr "_Zë" #~ msgid "Previous Item" #~ msgstr "Zëri i Mëparshëm" #~ msgid "Next Item" #~ msgstr "Zëri Pasues" #~ msgid "_Next Unread Item" #~ msgstr "Zëri _Pasues i Palexuar" #~ msgid "_View" #~ msgstr "_Parje" #~ msgid "Increases the text size of the item view." #~ msgstr "Rrit madhësinë e tekstit për parjen e zërit." #~ msgid "Decreases the text size of the item view." #~ msgstr "Zvogëlon madhësinë e tekstit për parjen e zërit." #~ msgid "_Tools" #~ msgstr "_Mjete" #~ msgid "_Update Monitor" #~ msgstr "_Përditëso Monitorin" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Shfaq një listë të tërë prurjeve hëpërhë në radhë për përditësim" #~ msgid "_Preferences" #~ msgstr "_Parapëlqime" #~ msgid "Edit Preferences." #~ msgstr "Përpunoni Parapëlqimet." #~ msgid "S_earch" #~ msgstr "_Kërko" #~ msgid "Search All Feeds..." #~ msgstr "Kërkoni Në Tërë Prurjet…" #~ msgid "Show the search dialog." #~ msgstr "Shfaq dialogun e kërkimeve." #~ msgid "_Help" #~ msgstr "_Ndihmë" #~ msgid "_Contents" #~ msgstr "_Lëndë" #~ msgid "View help for this application." #~ msgstr "Shihni ndihmën për këtë aplikacion." #~ msgid "_Quick Reference" #~ msgstr "_Referencë e Shpejtë" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Shihni një listë të tërë shkurtoreve të Liferea-s." #~ msgid "_FAQ" #~ msgstr "_FAQ" #~ msgid "View the FAQ for this application." #~ msgstr "Shihni FAQ për këtë aplikacion." #~ msgid "_About" #~ msgstr "_Rreth" #~ msgid "Shows an about dialog." #~ msgstr "Shfaq një dialog \"rreth\"." #~ msgid "_Normal View" #~ msgstr "Parje _Normale" #~ msgid "Set view mode to mail client mode." #~ msgstr "Caktoni si mënyrë parjeje mënyrën klient poste." #~ msgid "_Wide View" #~ msgstr "Parje _Gjerazi" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Caktoni si mënyrë parjeje përdorimin e tre kuadrateve horizontalë." #~ msgid "_Combined View" #~ msgstr "Pamje e _Ndërthurur" #~ msgid "Set view mode to two pane mode." #~ msgstr "Caktoni si mënyrë parjeje mënyrën me dy kuadrate." #~ msgid "_Reduced Feed List" #~ msgstr "Listë Prurjesh e _Mpakur" #~ msgid "Hide feeds with no unread items." #~ msgstr "Fshihi prurjet pa zëra të palexuar." #~ msgid "_New Subscription..." #~ msgstr "Pajtim i _Ri…" #~ msgid "Adds a subscription to the feed list." #~ msgstr "Shton te lista e prurjeve një pajtim." #~ msgid "Adds a folder to the feed list." #~ msgstr "Shton dosje te lista e prurjeve." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Shton dosje të re kërkimesh te lista e prurjeve." #~ msgid "New _Source..." #~ msgstr "_Burim i Ri…" #~ msgid "Adds a new feed list source." #~ msgstr "Shton burim të ri liste prurjesh." #~ msgid "Adds a new news bin." #~ msgstr "Shton një kosh të ri lajmesh." #~ msgid "_Mark Items Read" #~ msgstr "_Shënoji Zërat Si të Lexuar" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Shënoji si të lexuar krejt zërat e nyjës së përzgjedhur te lista e " #~ "prurjeve / te pjesa e listës." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Përditëson pajtimin e përzgjedhur ose tërë pajtimet e dosjes së " #~ "përzgjedhur." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Hap dialogun e vetive të pajtimit të përzgjedhur." #~ msgid "_Remove" #~ msgstr "_Hiqe" #~ msgid "Removes the selected subscription." #~ msgstr "Heq pajtimin e përzgjedhur." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Këmben gjendje leximi për zërin e përzgjedhur." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Këmben gjendje shenje për zërin e përzgjedhur." #~ msgid "R_emove" #~ msgstr "_Hiqe" #~ msgid "Removes the selected item." #~ msgstr "Heq zërin e përzgjedhur." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Hap lidhjen e objektit në një skedë të re të shfletuesit Liferea." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Hap lidhjen e objektit në kuadratin e zërave Liferea." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Hap lidhjen e zërit në shfletuesin e jashtëm të përzgjedhur." #~ msgid "_Fullscreen" #~ msgstr "_Sa Krejt Ekrani" #~ msgid "Browse at full screen" #~ msgstr "Shfletoni nën ekran të plotë" #~ msgid "_Work Offline" #~ msgstr "_Puno i Palidhur" #~ msgid "_Update All" #~ msgstr "_Përditësoji Krejt" #~ msgid "_Show Liferea" #~ msgstr "_Shfaq Liferea-n" #~ msgid "InoReader" #~ msgstr "InoReader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Shënim: Emri i përdoruesit dhe fjalëkalimi do të ruhen te kartela juaj " #~ "Liferea feedlist pa përdorur fshehtëzim." #~ msgid "Add InoReader Account" #~ msgstr "Shtoni Llogari InoReader" #~ msgid "Please enter your InoReader account settings." #~ msgstr "Ju lutemi, jepni të dhënat e llogarisë suaj InoReader." #~ msgid "Plugins" #~ msgstr "Shtojca" #~ msgid "normal view" #~ msgstr "parje normale" #~ msgid "wide view" #~ msgstr "parje gjerazi " #~ msgid "combined view" #~ msgstr "pamje e ndërthurur" #~ msgid "No comments yet." #~ msgstr "Ende pa komente." #~ msgid "Refresh" #~ msgstr "Rifreskoje" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea - Lexuesi Linux i Prurjeve" #~ msgid "For more information, please visit http://lzone.de/liferea/" #~ msgstr "Për më tepër të dhëna, vizitoni http://lzone.de/liferea/" #~ msgid "Liferea is now online" #~ msgstr "Liferea tani është e lidhur" #~ msgid "Work Offline" #~ msgstr "Puno i palidhur" #~ msgid "Liferea is now offline" #~ msgstr "Liferea tani është e palidhur" #~ msgid "Work Online" #~ msgstr "Puno Në Linjë" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Kjo mundësi ju lejon të çaktivizoni përditësim pajtimi." #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - Lexues Linux Prurjesh" #~ msgid "" #~ "

        Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

        You can add new subscriptions

        • From main menu " #~ "'Subscription' -> 'New Subscription'
        • By dropping feed links " #~ "into the subscription list
        • By right clicking links and choosing " #~ "'Subscribe' within Liferea

        " #~ msgstr "" #~ "

        Mirë se vini teLiferea, një mbledhës lajmesh për desktop, për " #~ "prurje lajmesh interneti.

        Pajtime të reja mund të shtoni " #~ "

        • Prej menusë kryesore 'Pajtime' -> 'Pajtim i Ri'
        • Duke " #~ "tërhequr lidhje prurjesh deri te lista e pajtimeve
        • Duke " #~ "djathtasklikuar lidhje dhe duke zgjedhur 'Pajtomë' te Liferea
        " #~ msgid "Browser default" #~ msgstr "Parazgjedhje shfletuesi" #~ msgid "Existing window" #~ msgstr "Dritare ekzistuese" #~ msgid "New window" #~ msgstr "Dritare e re" #~ msgid "New tab" #~ msgstr "Skedë e re" #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "Integroje me menunë e mesazheve (indikator)" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Në vend që ta minimizosh si ikonë paneli, përfundoje" #~ msgid "Start minimized to the messaging menu" #~ msgstr "Fillo e minimizuar sa menuja e mesazheve" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d zë i ri" #~ msgstr[1] "%d zëra të rinj" #~ msgid "No new items" #~ msgstr "Pa zëra të rinj" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d zë i palexuar" #~ msgstr[1] "" #~ "%s\n" #~ "%d zëra të palexuar" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Pa zëra të palexuar" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Prurje Atom e pavlefshme: autor i panjohur" #~ msgid "Google Reader login failed!" #~ msgstr "Hyrja në Google Reader dështoi!" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Integroni listën e prurjeve nga llogaria juaj Google Reader. Liferea do " #~ "t’i paraqesë pajtimet tuaja nga Google Reader, si dhe do të njëkohësojë " #~ "listën tuaj të prurjeve dhe listat e leximeve." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Integroni te lista juaj e blogjeve lista blogjesh ose Planets. Liferea " #~ "vetvetiu do të shtojë ose heqë prurje, sipas ndryshimeve te dokumenti " #~ "burim OPML" #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Integroni listën e prurjeve nga llogaria juaj Tiny Tiny RSS 1.5+. Liferea " #~ "do t’i paraqesë pajtimet tuaja tt-rss, si dhe do të njëkohësojë listën " #~ "tuaj të prurjeve dhe listat e leximeve." #~ msgid "This feed does not exist anymore!" #~ msgstr "Kjo prurje s’ekziston më!" #~ msgid "This news entry has no headline" #~ msgstr "Ky zë i ri s’ka titull" #~ msgid "Visit" #~ msgstr "Vizitojeni" #~ msgid "Open feed" #~ msgstr "Hape prurjen" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "%s ka %d përditësim" #~ msgstr[1] "%s ka %d përditësime" #~ msgid "Feed Update" #~ msgstr "Përditësim Prurjeje" #~ msgid "Show details" #~ msgstr "Shfaq hollësi" #~ msgid "Online/Offline Button" #~ msgstr "Buton Në Linjë/Jashtë Linje" #~ msgid " " #~ msgstr " " #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "_Njoftimet flluskë për këtë pajtim bëji të detyrueshme." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_Mos bëj kurrë njoftime flluskë për këtë pajtim." #~ msgid "Create Search Engine Feed" #~ msgstr "Krijo Prurje Motori Kërkimesh" #~ msgid "enter any search string you want" #~ msgstr "jepni çfarëdo varg kërkimi që doni" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "_Numri më i Madh Zërash Përfundim:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Shënim: Liferea do të prodhojë një pajtim prurjeje i cili përdoret për " #~ "kërkim brenda përfundimeve të dhëna nga motori i kërkimeve në lidhje me " #~ "vargun e dhënë të kërkimit. Këtë prurje mund ta mbani përgjithmonë dhe ta " #~ "përditësoni atë si çdo pajtim tjetër." #~ msgid "Please enter your tt-rss account settings." #~ msgstr "Ju lutemi, jepni rregullimet e llogarisë suaj tt-rss." #~ msgid "_Open link in:" #~ msgstr "_Hape lidhjen në:" #~ msgid "Notification Settings" #~ msgstr "Rregullime Njoftimesh" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Me titujt e rinj, shfaq një dritare _flluskë." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Shfaq _ikonë gjendjeje te zona e njoftimeve (shtyllë sistemi)." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Shfaq te ikona e panelit _numrin e zërave të rinj." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "Në vend që ta minimizosh si ikonë paneli, _përfundoje." #~ msgid "_Start in tray icon." #~ msgstr "_Fillo si ikonë paneli." #~ msgid "AOL Reader Login" #~ msgstr "Hyrje te AOL Reader" #~ msgid "AOL Reader" #~ msgstr "AOL Reader" liferea-1.12.7/po/sv.po000066400000000000000000001652021352135647700146420ustar00rootroot00000000000000# Swedish translation of Liferea. # Copyright (C) 2005-2015 Free Software Foundation, Inc. # This file is distributed under the same license as the liferea package. # Sergej Kotliar , 2005, 2006. # Daniel Nylander , 2007, 2009, 2011. # Andreas Rönnquist , 2015. # msgid "" msgstr "" "Project-Id-Version: liferea 1.11.6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2017-05-03 16:56+0200\n" "Last-Translator: Jonatan Nyberg \n" "Language-Team: Swedish \n" "Language: sv\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: Poedit 1.8.11\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Nyhetsläsare" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" "Liferea är en förkortning av Linux Feed Reader. Det är en nyhetsläsare för " "nyhetsflöden på nätet. Det stödjer ett antal olika flödesformat inklusive " "RSS/RDF, CDF och Atom. Det finns många andra nyhetsläsare tillgängliga, men " "dessa andra finns inte tillgängliga för Linux eller kräver många extra " "bibliotek för installation. Liferea försöker att fylla detta tomrum genom " "att skapa en snabb, lättanvänd, lätt installerbar nyhetsläsare för GTK/GNOME." #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "Utmärkande funktioner:" #: ../liferea.appdata.xml.in.h:4 msgid "Read articles when offline" msgstr "Läs artiklar i frånkopplat läge" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "Synkroniserar med TheOldReader" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "Synkroniserar med TinyTinyRSS" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "Synkroniserar med InoReader" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "Synkroniserar med Reedah" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "Spara permanent rubriker i nyhetslådor" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "Matcha artiklar med hjälp av sökmappar" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "Spela poddsändningar" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Nyhetsläsare" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea nyhetsläsare" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Läs nyhetsflöden och bloggar" #: ../net.sourceforge.liferea.desktop.in.h:5 #, fuzzy msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "nyheter;flöde;läsare;blogg;poddsändning;" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Detta flöde är avslutat. Det är inte längre tillgänglig. Liferea kommer inte " "att uppdatera det mer, men du har fortfarande tillgång till de lagrade " "rubrikerna." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "Senaste uppdateringen av denna prenumeration misslyckades!
        HTTP-" "felkod : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Fel inträffade vid tolkning av detta flöde!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Detaljer för tolkningsfel" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Detaljer" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" "Du kanske vill kontakta författaren/webbansvarige för flödet angående detta!" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Det inträffade fel under filtreringen av detta flöde!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Detaljer för filterfel" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Flöde:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Källa:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Utgivare" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Upphovsrätt" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "undermappar med" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "olästa rubriker" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Mapp:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Källa" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Flöde" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Arkiverad under" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Författare" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Delad av" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Via" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Relaterade" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Även postad i" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Skapare" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "Koordinerar" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "Karta" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Kommentarer" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Uppdaterar..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Avsnitt" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Avdelning" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Nyhetskorg:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Lägg till artiklar till den här nyhetskorgen genom att välja \"Kopiera till " "nyhetskorg\" från artikellistans sammanhangsmeny." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Sökmapp:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Webbläsarkommandot misslyckades: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Startar: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Auktoriseringsfel" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Kan inte skapa cachekatalogen \"%s\"!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Idag %H.%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Igår %H.%M" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%A %H.%M" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%e %B %H.%M" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%e %B %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" är inte en giltig konfigurationsfil för bilagetyper!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Du har inte konfigurerat ett hämtningsverktyg ännu! Vänligen gör så i " "'Bilagor'-fliken i Verktyg/Inställningar." #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Kommando misslyckades: \n" "\n" "%s\n" "\n" " Var god kontrollera om det konfigurerade hämtningsverktyget är installerat " "och fungerar korrekt! Du kan ändra det i 'Bilagor'-fliken i Verktyg/" "Inställningar." #: ../src/export.c:188 #, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Fel vid namnbyte från %s till %s: %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "XML-fel under läsning av OPML-filen! Kunde inte importera \"%s\"!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Tomt dokument! OPML-dokumentet \"%s\" får inte vara tomma vid importering." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" är inte ett giltigt OPML-dokument! Liferea kan inte importera denna " "fil!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Importerad flödeslista" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Importera flödeslista" #: ../src/export.c:481 msgid "Import" msgstr "Importera" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "OPML-filer" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Fel under export av flödeslista!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Flödeslistan exporterad!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Exportera flödeslista" #: ../src/export.c:498 msgid "Export" msgstr "Exportera" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        Kunde inte identifiera flödets typ! Kontrollera om källan verkligen pekar " "på en resurs som tillhandahålls i ett av de synkroniseringsformat som stöds!" "

        Utdata från XML-tolkare:
        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" har uppdaterats..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" är inte tillgänglig" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "Webbadressen du vill att Liferea ska prenumerera på pekar på en webbplats " "och den automatiska igenkänningen hittade inga flöden på denna sida. " "Webbplatsen kanske inte har stöd för automatisk igenkänning av flöden." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "XML-fel vid läsning av flöde! Flödet \"%s\" kunde inte läsas in!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Tomt dokument!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Ogiltig XML!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Källa pekar till HTML-dokument." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Kunde inte fastställa flödestypen." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Det finns inga olästa artiklar" #: ../src/liferea_application.c:282 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Starta Liferea med dess huvudfönster i TILLSTÅND. TILLSTÅND kan vara `shown' " "eller `hidden'" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "TILLSTÅND" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Visa versionsinformation och avsluta" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Lägg till en ny prenumeration" #: ../src/liferea_application.c:284 msgid "uri" msgstr "uri" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Skriv ut felsökningsmeddelanden av alla typer" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Skriv ut felsökningsmeddelanden för mellanlagringshantering" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Skriv ut felsökningsmeddelanden för konfigurationshanteringen" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Skriv ut felsökningsmeddelanden för databashantering" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "" "Skriv ut felsökningsmeddelanden för alla grafiska " "användargränssnittsfunktioner" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Aktiverar felsökning av HTML-rendering. Varje gång som Liferea renderar HTML-" "utdata så kommer även den genererade HTML-koden att skrivas i ~/.cache/" "liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Skriv ut felsökningsmeddelanden för all nätverksaktivitet" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Skriv ut felsökningsmeddelanden för alla tolkningsfunktioner" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Skriv ut felsökningsmeddelanden när en funktion tar för lång tid att " "behandlas" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Skriv ut felsökningsmeddelanden när funktioner används" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Skriv ut felsökningsmeddelanden för flödeuppdateringsbearbetningen" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "Skriv ut felsökningsmeddelanden för sökmappsmatchningar" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Skriv ut informativa felsökningsmeddelanden" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Skriv ut felsökningsmeddelanden för angivet ämne" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Uppdateringsbegäran avbröts" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Kunde inte slå upp målets värdnamn" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Kunde inte slå upp proxyns värdnamn" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Kunde inte ansluta till fjärrvärden" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Kunde inte ansluta till proxyn" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "Ett nätverksfel inträffade eller så har andra sidan oväntat stängt " "anslutningen" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Resursen har permanent flyttats till en ny plats" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Du är inte behörig att hämta detta flöde. Uppdatera ditt användarnamn och " "lösenord i flödets egenskapsruta" #: ../src/net.c:476 msgid "Payment required" msgstr "Betalning krävs" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Du tillåts inte att komma åt denna resurs" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Resursen kunde inte hittas" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Metoden inte tillåten" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Inte acceptabelt" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Proxyautentisering krävs" #: ../src/net.c:482 msgid "Request timed out" msgstr "Begäran översteg tidsgränsen" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Borta. Resursen finns inte. Var god och avprenumerera!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Det uppstod ett internt fel i uppdateringsprocessen" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Flödet är inte tillgänglig: Servern begärde en omdirigering som inte stöds!" #: ../src/net.c:492 msgid "Client Error" msgstr "Klientfel" #: ../src/net.c:494 msgid "Server Error" msgstr "Serverfel" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Ett okänt nätverksfel inträffade!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Artikel" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "innehåller" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "innehåller inte" #: ../src/rule.c:175 msgid "Item title" msgstr "Artikelrubrik" #: ../src/rule.c:176 msgid "Item body" msgstr "Artikelinnehåll" #: ../src/rule.c:177 msgid "Read status" msgstr "Lässtatus" #: ../src/rule.c:177 msgid "is unread" msgstr "är oläst" #: ../src/rule.c:177 msgid "is read" msgstr "är läst" #: ../src/rule.c:178 msgid "Flag status" msgstr "Flaggstatus" #: ../src/rule.c:178 msgid "is flagged" msgstr "är flaggad" #: ../src/rule.c:178 msgid "is unflagged" msgstr "är inte flaggad" #: ../src/rule.c:179 msgid "Podcast" msgstr "Poddsändning" #: ../src/rule.c:179 msgid "included" msgstr "inkluderad" #: ../src/rule.c:179 msgid "not included" msgstr "inte inkluderad" #: ../src/rule.c:180 msgid "Category" msgstr "Kategori" #: ../src/rule.c:180 msgid "is set" msgstr "är inställd" #: ../src/rule.c:180 msgid "is not set" msgstr "är inte inställd" #: ../src/rule.c:181 msgid "Feed title" msgstr "Flödesnamn" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Prenumerationen \"%s\" håller redan på att uppdateras!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "Prenumerationen \"%s\" har stängts. Liferea kommer inte att uppdatera den " "mer!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Uppdaterar flödesikonen för \"%s\"" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Ett problem inträffade under läsning av prenumerationen. Kontrollera " "webbadressen och utmatningen i konsolen." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "Webbadressen för \"%s\" har ändrats permanent och blev uppdaterad" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" är stängd. Liferea kommer inte att uppdatera den mer!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" har inte ändrats sedan senaste uppdateringen" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Uppdaterar \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Fel vid öppning av temporärfilen %s för filtrering!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s avslutades med status %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Fel: Kunde inte öppna röret \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Fel: Kunde inte öppna filen \"%s\"" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Fel: Filen \"%s\" finns inte" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Ny sökmapp" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Det fanns ytterligare fel. Utmatningen har kortats ned!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "XML-tolkare: Kunde inte tolka dokumentet:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Bilagor" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " Byte" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d bilaga" msgstr[1] "%d bilagor" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Välj fil" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Filändelse .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Kunde inte hitta bildfilen: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d ny)" msgstr[1] " (%d nya)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d oläst%s" msgstr[1] "%d olästa%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Hjälpämnen" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Snabbreferens" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "Vanliga frågor och svar" #: ../src/ui/search_dialog.c:116 msgid "Saved Search" msgstr "Sparad sökning" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Ange användarnamn och lösenord för \"%s\" (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Okänd källa" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 msgid "_Cancel" msgstr "_Avbryt" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Alla filer" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea är i frånkopplat läge. Inga uppdateringar är möjliga." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Sök i alla flöden" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Märk alla som _lästa" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Är du säker på att du vill ta bort \"%s\"?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Artikeln har ingen angiven länk!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Ingen titel ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Rubrik" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Datum" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Du måste välja ett flöde för att ta bort dess artiklar!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Ingen artikel har valts" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Öppna i _Flik" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "_Öppna i webbläsare" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Öppna i _extern webbläsare" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Kopiera till nyhetskorg" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "_Bokmärk på %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "Kopiera artike_lplats" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Växla _lässtatus" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Växla artikel_flagga" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "_Ta bort artikel" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Öppna bilaga..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Spara som..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Kopiera länkadress" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Uppdatera" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Uppdatera mapp" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Ny p_renumeration..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Ny _mapp..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Ny sö_kmapp..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Ny _källa..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Ny _nyhetskorg..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Ny" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Sortera flöden" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "_Märk alla som lästa" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "Bygg _om" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Ta bort" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Egenskaper" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Konvertera till lokala prenumerationer..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "Standard för GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Text under ikoner" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Text bredvid ikoner" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Endast ikoner" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Endast text" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minuter" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "timmar" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dygn" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Blanksteg" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Blanksteg" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Blanksteg" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Normal vy" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Bred vy" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Kombinerad vy" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Standardwebbläsare" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Manuell" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Typ" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Tom)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Bygger om" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Tar bort post" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Är du säker på att du vill ta bort \"%s\" och dess innehåll?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Är du säker på att du vill ta bort \"%s\"?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Bekräftelse för borttagning" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Bekräftelse för borttagning" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "_Öppna" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "Flödets leverantör föreslår ett uppdateringsintervall på %d minut." msgstr[1] "" "Flödets leverantör föreslår ett uppdateringsintervall på %d minuter." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Detta flöde anger inget standardintervall för uppdatering." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Namnlös" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Webbplats" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%e %B %H.%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Ny prenumeration" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Välj OPML-fil" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Ny OPML-prenumeration" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Inga källtyper för flödeslista hittades!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Källtyp" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" "Inloggning för '%s' har inte blivit klar! Var vänlig vänta tills " "inloggningen är färdig." #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "'%s'-prenumerationen konverterades framgångsrikt till lokala flöden!" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "Inloggning misslyckades!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "Reedah" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "Kunde inte tolka JSON returnerad av Reedah-API:et!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "TinyTinyRSS HTTP-API inte nåbart!" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" "Misslyckades att säga upp prenumeration av TinyTinyRSS-flöde! Kontrollera om " "du verkligen skickade en flödeswebbadress!" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "Misslyckades att säga upp prenumeration av TinyTinyRSS-flöde!" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" "Denna version av TinyTinyRSS stödjer inte att ta bort flöden. Uppgradera " "till version %s eller senare!" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "Kunde inte tolka JSON returnerad av TinyTinyRSS-API:et!" #: ../src/fl_sources/theoldreader_source.c:329 msgid "TheOldReader" msgstr "TheOldReader" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Öppna länk i _flik" #: ../src/webkit/liferea_web_view.c:176 msgid "Open Link In Browser" msgstr "Öppna länk i webbläsare" #: ../src/webkit/liferea_web_view.c:177 msgid "Open Link In External Browser" msgstr "Öppna länk i extern webbläsare" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "_Bokmärk länk på %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Kopiera länkadress" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "Sp_ara bild som" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "_Kopiera bildadress" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "Spara länk so_m" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "Sp_ara bild som" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Prenumerera..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "_Kopiera" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "_Större textstorlek" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "_Mindre textstorlek" #: ../glade/about.ui.h:1 msgid "About" msgstr "Om" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea är en nyhetsläsare för GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Webbplats för Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autentisering" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "Användar_namn:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Lösenord:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Öppna bilaga" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Öppna en bilaga av typen:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Vad ska Liferea göra med denna bilaga? Ange kommandot som du vill köra " "nedan. Hämtade bilagors webbadresser kommer att skickas med som ett argument " "till detta kommando:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Bläddra" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Gör detta automatiskt för bilagor som denna från och med nu." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Lägg till Google Reader-konto" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Ange dina kontoinställningar för Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Lösenord" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "A_nvändarnamn (e-post)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "0" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Visa rubriker" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Rubriker" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Märk alla som _lästa" #: ../glade/mark_read_dialog.ui.h:2 #, fuzzy msgid "Mark all as read" msgstr "Märk alla som _lästa" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Ny mapp" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "_Mappnamn:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Skapa nyhetskorg" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Namn på nyhetskorg:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Plats" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Källtyp:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_Webbadress" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Kommando" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Lokal fil" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Välj fil..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Källa:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Hämtning / Efterbehandling" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "Anvä_nd inte proxy för hämtning" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Använd konverterings_filter" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea kan använda externa filterinstick för att komma åt flöden och " "kataloger i format som inte stöds. Se dokumentationen för mer information." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "_Konvertera med hjälp av:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Källval" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Välj källtypen som du vill lägga till..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Lägg till OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Ange en lokal fil eller en webbadress som pekar på en giltig OPML-" "flödeslista." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Adress" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Välj fil" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Inställningar för Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Hantering av flödescache" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "A_ntal artiklar per flöde att spara som standard:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Inställningar för flödesuppdatering" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Observera: Kom ihåg att ställa in en rimlig uppdateringstid. Vanligtvis " "är det slöseri med bandbredd att kontrollera flöden oftare än en gång i " "timmen." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "_Uppdatera alla prenumerationer vid uppstart." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Standardintervall för _flödesuppdatering:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "1" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Flöden" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Inställningar för mappvisning" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "_Visa artiklarna i alla underflöden när en mapp är vald." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "_Dölj lästa artiklar." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Flödesikoner (Favicons)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Uppdatera alla flödesikoner nu" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Mappar" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Läser rubriker" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "_Bläddra igenom artiklar med:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "_Standardvisningsläge:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Webbintegration" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Posta bokmärken till" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Inställningar för intern webbläsare" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Öppna länkar i Liferea-_fönstret." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Inaktivera Javascript." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_Aktivera webbläsarinstick." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Inställningar för extern webbläsare" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Webbläsare:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Handbok:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s för webbadress)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Webbläsare" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Inställningar för verktygsfält" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "_Dölj verktygsfält." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Etiketter för verktygsfälts_knappar:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Grafiskt användargränssnitt" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "Proxyserver för HTTP" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Identifiera automatiskt (GNOME eller miljö)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Ingen proxyserver" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Manuell inställning:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "_Värd för proxy:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "Port för _proxy:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Använd proxyau_tentisering" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Använda_rnamn för proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "_Lösenord för proxy:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxyserver" #: ../glade/prefs.ui.h:51 msgid "Privacy Settings" msgstr "Integritetsinställningar" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "Informera webbplatser om att jag i_nte vill spåras" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "Integritet" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Hämtar bilagor" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Hämta med" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Öppnar bilagor" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Bilagor" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Egenskaper för prenumeration" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Flödesnamn" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "Flödets _namn:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Uppdateringsintervall" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Använd global standardintervall för uppdatering." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_Flödespecifikt uppdateringsintervall på" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "Uppdatera _inte detta flöde automatiskt." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "Detta flödets leverantör föreslår ett uppdateringsintervall på %d minuter." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Allmänt" #: ../glade/properties.ui.h:20 msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea kan använda externa filterskript för att komma åt flöden och " "kataloger i format som inte stöds." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Cacheinställningen bestämmer om flödenas innehåll ska sparas när Liferea " "avslutas. Märkta artiklar sparas alltid till cachen." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "_Standardinställningar för cache" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Inaktivera cache" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Obegränsad cache" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "A_ntal artiklar att spara:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Arkiv" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Använd HTTP-_autentisering" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Hämta" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "Hämta _automatiskt alla bilagor för detta flöde." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Läs a_utomatiskt in artikellänk i konfigurerad webbläsare när artiklar väljs." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorera _kommentarflöden för denna prenumeration." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "_Märk hämtade artiklar som lästa." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "Extrahera hela innehållet från HTML5 och Google AMP" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Avancerat" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "Lägg till Reedah-konto" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "Ange dina kontoinställningar för Reedah." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Byt namn" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Nytt namn:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Egenskaper för sökmapp" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "Sök_namn:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Hitta artiklar som matchar följande kriterier" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "N_ågon regel matchar" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "_Alla regler måste matcha" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Avancerad sökning" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "_Sökmapp..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Sök i alla flöden" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Avancerat..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Börjar söka efter den angivna texten i alla flöden. Sökträffarna kommer att " "visas i artikellistan." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Sök efter:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Ange en söksträng som Liferea ska söka efter, antingen i en artikeltitel " "eller i dess innehåll." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Avancerat..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Ange en webbadress att använda automatisk flödesidentifiering för eller om " "du vet den exakta flödesadressen." #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "Lägg till TheOldReader-konto" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "Ange dina kontoinställningar för TheOldReader." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Lägg till Tiny Tiny RSS-konto" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "Ange dina kontoinställningar för TinyTinyRSS." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "_Server-webbadress" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "A_nvändarnamn" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Uppdateringsövervakare" #: ../glade/update_monitor.ui.h:2 msgid "Cancel All" msgstr "Avbryt alla" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Väntande förfrågningar" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Hämtar nu" #~ msgid "_Subscriptions" #~ msgstr "_Prenumerationer" #~ msgid "Update _All" #~ msgstr "Uppdatera _alla" #~ msgid "Updates all subscriptions." #~ msgstr "Uppdaterar alla prenumerationer." #~ msgid "Marks read every item of every subscription." #~ msgstr "Märk alla artiklar i alla prenumerationer som lästa." #~ msgid "_Import Feed List..." #~ msgstr "_Importera flödeslista..." #~ msgid "Imports an OPML feed list." #~ msgstr "Importerar en OPML-flödeslista." #~ msgid "_Export Feed List..." #~ msgstr "_Exportera flödeslista..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Exporterar flödeslistan som OPML." #~ msgid "_Quit" #~ msgstr "A_vsluta" #~ msgid "_Feed" #~ msgstr "_Flöde" #~ msgid "Remove _All Items" #~ msgstr "Ta bort _alla artiklar" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Tar bort alla artiklar i det för närvarande valda flödet." #~ msgid "_Item" #~ msgstr "_Artikel" #~ msgid "Previous Item" #~ msgstr "Föregående artikel" #~ msgid "Next Item" #~ msgstr "Nästa artikel" #~ msgid "_Next Unread Item" #~ msgstr "_Nästa olästa artikel" #~ msgid "_View" #~ msgstr "_Visa" #~ msgid "Increases the text size of the item view." #~ msgstr "Ökar textstorleken i artikelvyn." #~ msgid "Decreases the text size of the item view." #~ msgstr "Minskar textstorleken i artikelvyn." #~ msgid "_Tools" #~ msgstr "_Verktyg" #~ msgid "_Update Monitor" #~ msgstr "_Uppdateringsövervakare" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Visa en lista över alla flöden som finns i uppdateringskön" #~ msgid "_Preferences" #~ msgstr "_Inställningar" #~ msgid "Edit Preferences." #~ msgstr "Redigera inställningar." #~ msgid "S_earch" #~ msgstr "S_ök" #~ msgid "Search All Feeds..." #~ msgstr "Sök i alla flöden..." #~ msgid "Show the search dialog." #~ msgstr "Visa sökrutan." #~ msgid "_Help" #~ msgstr "_Hjälp" #~ msgid "_Contents" #~ msgstr "_Innehåll" #~ msgid "View help for this application." #~ msgstr "Visa hjälp för detta program." #~ msgid "_Quick Reference" #~ msgstr "_Snabbreferens" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Visa en lista över alla genvägar i Liferea." #~ msgid "_FAQ" #~ msgstr "_Vanliga frågor och svar" #~ msgid "View the FAQ for this application." #~ msgstr "Visa de vanligast ställda frågorna och svaren." #~ msgid "_About" #~ msgstr "_Om" #~ msgid "Shows an about dialog." #~ msgstr "Visar en \"Om\"-dialog." #~ msgid "_Normal View" #~ msgstr "_Normal vy" #~ msgid "Set view mode to mail client mode." #~ msgstr "Ställ in vyläge till e-postklientläget." #~ msgid "_Wide View" #~ msgstr "_Bred vy" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Ställ in vyläge till att använda tre vertikala paneler." #~ msgid "_Combined View" #~ msgstr "_Kombinerad vy" #~ msgid "Set view mode to two pane mode." #~ msgstr "Ställ in vyläge till tvåpanelsläget." #~ msgid "_Reduced Feed List" #~ msgstr "_Minskad flödeslista" #~ msgid "Hide feeds with no unread items." #~ msgstr "Dölj flöden med inga olästa artiklar." #~ msgid "_New Subscription..." #~ msgstr "_Ny prenumeration..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Lägger till en prenumeration till flödeslistan." #~ msgid "Adds a folder to the feed list." #~ msgstr "Lägger till en mapp till flödeslistan." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Lägger till en ny sökmapp till flödeslistan." #~ msgid "New _Source..." #~ msgstr "Ny _källa..." #~ msgid "Adds a new feed list source." #~ msgstr "Lägger till en ny flödeslistkälla." #~ msgid "Adds a new news bin." #~ msgstr "Lägger till en ny nyhetskorg." #~ msgid "_Mark Items Read" #~ msgstr "_Märk artiklar som lästa" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Märker alla artiklar i den valda flödeslistnoden / i artikellistan som " #~ "lästa." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Uppdaterar den valda prenumerationen eller alla prenumerationer i den " #~ "valda mappen." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Öppnar egenskapsdialogen för den valda prenumerationen." #~ msgid "_Remove" #~ msgstr "_Ta bort" #~ msgid "Removes the selected subscription." #~ msgstr "Tar bort den valda prenumerationen." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Växlar lässtatus för den valda artikeln." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Växlar flaggstatus för den valda artikeln." #~ msgid "R_emove" #~ msgstr "Ta _bort" #~ msgid "Removes the selected item." #~ msgstr "Tar bort den valda artikeln." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Öppnar artikelns länk i en webbläsarflik i Liferea." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Öppnar artikelns länk i Lifereas meddelandefält." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Öppnar artikelns länk i den konfigurerade externa webbläsaren." #~ msgid "_Fullscreen" #~ msgstr "_Helskärm" #~ msgid "Browse at full screen" #~ msgstr "Läs i helskärm" #~ msgid "_Work Offline" #~ msgstr "_Arbeta frånkopplat" #~ msgid "_Update All" #~ msgstr "_Uppdatera alla" #~ msgid "_Show Liferea" #~ msgstr "_Visa Liferea" #~ msgid "InoReader" #~ msgstr "InoReader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Observera: Användarnamnet och lösenordet kommer att sparas till din " #~ "Liferea flödeslistfil utan någon kryptering." #~ msgid "Add InoReader Account" #~ msgstr "Lägg till InoReader-konto" #~ msgid "Please enter your InoReader account settings." #~ msgstr "Ange dina kontoinställningar för InoReader." #~ msgid "Plugins" #~ msgstr "Insticksmoduler" #~ msgid "normal view" #~ msgstr "normal vy" #~ msgid "wide view" #~ msgstr "bred vy" #~ msgid "combined view" #~ msgstr "kombinerad vy" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, nyhetsläsaren för Linux" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "Besök https://lzone.de/liferea/ för mer information" #~ msgid "_Open Link In Browser" #~ msgstr "Öppna länk i _webbläsare" #~ msgid "_Open Link In External Browser" #~ msgstr "Öppna länk i extern _webbläsare" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Skapa sökmotorkanal" #~ msgid "enter any search string you want" #~ msgstr "ange en valfri söksträng" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "_Maximalt antal resulterande artiklar:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Observera: Liferea kommer att generera en kanalprenumeration som används " #~ "för att fråga sökmotorn efter den angivna söksträngen. Du kan behålla " #~ "denna kanalprenumeration och uppdatera den som alla andra prenumerationer." liferea-1.12.7/po/tr.po000066400000000000000000002514171352135647700146430ustar00rootroot00000000000000# Turkish translation for Liferea # Copyright (C) 2007 Mehmet Atif Ergun # This file is distributed under the same license as the Liferea package. # Mehmet Atif Ergun , 2007. # Eren Türkay , 2007. # Emin Tufan Çetin , 2017, 2018. # msgid "" msgstr "" "Project-Id-Version: tr_new\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2018-03-16 14:35+0300\n" "Last-Translator: Emin Tufan Çetin \n" "Language-Team: Türkçe \n" "Language: tr\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: Poedit 2.0.6\n" #: ../liferea.appdata.xml.in.h:1 msgid "RSS feed reader" msgstr "RSS besleme okuyucu" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" "Liferea, Linux Feed Reader'ın bir kısaltmasıdır. Çevrim içi haber " "beslemeleri için bir haber toplayıcısıdır. RSS/RDF, CDF ve Atom gibi çok " "sayıda farklı besleme biçimini destekler. Birçok farklı haber okuyucu vardır " "ancak bunlar Linux'ta kullanılamayabilir ya da yüklenmek için birçok ek " "kütüphane gerektirir. Liferea hızlı, kullanımı kolay ve GTK/GNOME için " "kurulumu kolay haber toplayıcısı olarak bu boşluğu kapatmayı denemektedir." #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "Mükemmel özellikler:" #: ../liferea.appdata.xml.in.h:4 msgid "Read articles when offline" msgstr "Çevrim dışı iken maddeleri oku" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "TheOldReader ile eşzamanlar" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "TinyTinyRSS ile eşzamanlar" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "InoReader ile eşzamanlar" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "Reedah ile eşzamanlar" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "Haber başlıklarını haber sepetlerinde kalıcı olarak sakla" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "Arama klasörlerini kullanarak ögeleri eşleştir" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "Podcastleri Oynat" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Besleme Okuyucu" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea Besleme Okuyucu" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Haber beslemelerini ve blogları oku" #: ../net.sourceforge.liferea.desktop.in.h:5 #, fuzzy msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "haber;besleme;toplayıcı;kaynak;blog;günlük;podcast;ortam akışı;" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Bu besleme sonlanmış. Artık kullanılabilir değil. Liferea artık bunu " "güncellemeyecek ama siz önbellekteki haber başlıklarına hâlâ ulaşabilirsiniz." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "Bu aboneliğin son güncellemesi başarısız oldu!
        HTTP hata kodu : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Bu besleme ayrıştırılırken hatalar oluştu!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Ayrıştırıcı Hata Ayrıntıları" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Ayrıntılar" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" "Bununla ilgili olarak beslemenin yazarı ya da yöneticisiyle iletişime geçmek " "isteyebilirsin!" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Bu besleme süzülürken hatalar oluştu!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Süzgeç Hata Ayrıntıları" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Besleme:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Kaynak:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Yayımcı" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Telif Hakkı" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "alt ile birlikte" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "okunmamış haber başlığı" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Klasör:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Kaynak" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Besleme" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Dosyalandığı yer" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Yazar" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Paylaşan" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Aracılığıyla" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "İlişkili" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Yinelenen yer" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Oluşturan" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "Koordinatlar" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "Harita" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Yorumlar" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Güncelleniyor..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Bölüm" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Şube" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Haber Sepeti:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Öge listesi bağlam menüsünden \"Haber Sepetine Kopyala\" seçeneğini seçerek " "ögeleri bu haber sepetine ekle." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Arama Klasörü:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Tarayıcı komutu başarısız oldu: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Başlıyor: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Doğrulama Hatası" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Önbellek klasörü \"%s\" yaratılamadı!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" "WebKitGTK+ sürümünüz vekil ayarlarını Liferea'dan değiştirmeyi " "desteklemiyor. Sistemin öntanımlı vekil ayarları kullanılacak." #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Bugün %H:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Dün %H:%M" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %H:%M" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d %b %H:%M" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" geçerli bir ek türü ayar dosyası değil!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Henüz bir indirme aracı yapılandırmadınız! Lütfen bunu Araçlar/Seçenekler " "içindeki Ekler sekmesinden yapınız." #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Komut başarısız: \n" "\n" "%s\n" "\n" " Lütfen indirme aracınızın yüklü olduğunu ya da doğru çalıştığını " "denetleyin! Bunu, Araçlar/Seçenekler içindeki 'Ekler' sekemesinden " "değiştirebilirsiniz." #: ../src/export.c:188 #, c-format msgid "Error renaming %s to %s: %s\n" msgstr "%s ögesi %s olarak yeniden adlandırılırken hata: %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "OPML dosyası okunurken XML hatası! \"%s\" içeri aktarılamadı!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "Boş dosya! \"%s\" adlı OPML dosyası içeri aktarılırken boş olmamalı." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" geçerli bir OPML dosyası değil! Liferea bu dosyayı içeri aktaramıyor!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "İçe aktarılan besleme listesi" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Besleme Listesini İçeri Aktar" #: ../src/export.c:481 msgid "Import" msgstr "İçeri Aktar" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "OPML Dosyaları" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Besleme listesi dışarı aktarılırken hata!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Besleme listesi dışarı aktarıldı!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Besleme Listesini Dışarı Aktar" #: ../src/export.c:498 msgid "Export" msgstr "Dışarı Aktar" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        Bu beslemenin türü anlaşılamadı! Lütfen kaynağın desteklenen toplama " "biçimlerinden birinde sağlandığından emin olun!

        XML Ayrıştırıcı Çıktısı:" "
        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" güncellendi..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" uygun değil" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "Liferea'nın abone olmasını istediğiniz adres bir web sayfasını gösteriyor ve " "kendiliğinden keşif bu sayfada hiçbir besleme bulamadı. Belki de bu web " "sayfası beslemelerin kendiliğinden keşfini desteklemiyordur." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "Besleme okunurken XML hatası! \"%s\" beslemesi yüklenemedi." #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Boş belge!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Geçersiz XML!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Kaynak HTML belgesine işaret ediyor" #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Besleme türü belirlenemedi." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Okunmamış öge yok" #: ../src/liferea_application.c:282 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Liferea'nın penceresini DURUM olarak aç. DURUM `shown' (gösterilen) ya da " "`hidden' (saklı) olabilir." #: ../src/liferea_application.c:282 msgid "STATE" msgstr "DURUM" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Sürüm bilgisini göster ve çık" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Yeni bir abonelik ekle" #: ../src/liferea_application.c:284 msgid "uri" msgstr "uri" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Her tür hata ayıklama iletisini göster" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Önbelleğin işlenmesi hakkındaki hata ayıklama iletilerini göster" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Yapılandırmanın işlenmesi hakkındaki hata ayıklama iletilerini göster" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Veri tabanının işlenmesi hakkındaki hata ayıklama iletilerini göster" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Grafik arayüz işlevleri hakkındaki hata ayıklama iletilerini göster" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "HTML canlandırmasının hata ayıklamasını etkinleştirir. Liferea HTML " "çıktısını her canlandırdığında oluşturulan HTML'i ayrıca /.cache/liferea/" "output.xhtml içine yığar" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Tüm ağ etkinliği hakkındaki hata ayıklama iletilerini göster" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Ayrıştırma işlevleri hakkındaki hata ayıklama iletilerini göster" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Bir işlevin işlenmesi çok uzun sürdüğünde hata ayıklama iletilerini göster" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "" "İşlevlere girerken ve işlemlerden çıkarken hata ayıklama iletilerini göster" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Besleme güncellemesi hakkındaki hata ayıklama iletilerini göster" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "Arama klasörü eşleştirme hakkındaki hata ayıklama iletilerini göster" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Gereksiz sözlerle dolu (verbose) hata ayıklama iletilerini göster" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Verilen başlık için hata ayıklama iletisini göster" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Güncelleme isteği iptal edildi" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Hedef ana makine adı çözülemiyor" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Vekil ana makine adı çözülemiyor" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Uzak bilgisayara bağlanılamıyor" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Vekile bağlanılamıyor" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "Bir ağ hatası oluştu ya da diğer taraf bağlantıyı beklenmedik şekilde kapattı" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Kaynak kalıcı olarak yeni bir konuma taşınmış" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Bu beslemeyi indirmeye yetkili değilsiniz. Lütfen kullanıcı adınızı ve " "parolanızı besleme özellikleri iletişim kutusunu kullanarak güncelleyiniz." #: ../src/net.c:476 msgid "Payment required" msgstr "Ödeme gerekli" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Bu kaynağa erişmeye yetkiniz yok" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Kaynak Bulunamadı" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Yönteme İzin Verilmiyor" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Kabul Edilemez" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Vekil sunucu kimlik doğrulaması gerekli" #: ../src/net.c:482 msgid "Request timed out" msgstr "İstek zaman aşımına uğradı" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Yok oldu. Kaynak yok. Lütfen abonelikten çıkınız!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Güncelleme işleminde içsel bir hata oluştu" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Besleme uygun değil: Sunucu, desteklenmeyen yönlendirme istedi!" #: ../src/net.c:492 msgid "Client Error" msgstr "İstemci Hatası" #: ../src/net.c:494 msgid "Server Error" msgstr "Sunucu Hatası" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Bilinmeyen bir ağ hatası oldu!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Öge" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "içeriyor" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "içermiyor" #: ../src/rule.c:175 msgid "Item title" msgstr "Öge başlığı" #: ../src/rule.c:176 msgid "Item body" msgstr "Öge gövdesi" #: ../src/rule.c:177 msgid "Read status" msgstr "Okunma durumu" #: ../src/rule.c:177 msgid "is unread" msgstr "okunmamış" #: ../src/rule.c:177 msgid "is read" msgstr "okunmuş" #: ../src/rule.c:178 msgid "Flag status" msgstr "İm durumu" #: ../src/rule.c:178 msgid "is flagged" msgstr "imli" #: ../src/rule.c:178 msgid "is unflagged" msgstr "imsiz" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "ekli" #: ../src/rule.c:179 msgid "not included" msgstr "ekli değil" #: ../src/rule.c:180 msgid "Category" msgstr "Kategori" #: ../src/rule.c:180 msgid "is set" msgstr "olan" #: ../src/rule.c:180 msgid "is not set" msgstr "olmayan" #: ../src/rule.c:181 msgid "Feed title" msgstr "Besleme başlığı" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "\"%s\" aboneliği zaten güncelleniyor!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "\"%s\" aboneliği sonlanmış. Liferea bunu artık güncellemeyecek!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "\"%s\" için besleme simgesi güncelleniyor" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Bu aboneliği okurken bir sorunla karşılaşıldı. Lütfen adresi ve konsol " "çıktısını denetleyin." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "\"%s\" için adres süresiz değiştirildi ve güncellendi" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" sonlanmış. Liferea bunu artık güncellemeyecek!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" son güncellemeden beri değişmemiş" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "\"%s\" güncelleniyor" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Süzgeçte kullanılacak %s geçici dosyası açılırken hata!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s , %d durumunda çıktı" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Hata: \"%s\" borusu açılamadı" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Hata: \"%s\" dosyası açılamadı" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Hata: \"%s\" dosyası yok" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Yeni Arama Klasörü" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Daha çok hata vardı. Çıktı kısaltılmıştı!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "XML Ayrıştırıcısı: Dosya ayrıştırılamadı:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Ekler" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " Bayt" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d ek" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Dosya Seç" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Dosya Uzantısı .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Pixmap dosyasını bulamadı: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d yeni)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d okunmamış%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Yardım Konuları" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Hızlı Başvuru" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "SSS" #: ../src/ui/search_dialog.c:116 msgid "Saved Search" msgstr "Kaydedilmiş Arama" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "\"%s\" (%s) için kullanıcı adı ve parola giriniz:" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Bilinmeyen kaynak" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 msgid "_Cancel" msgstr "_İptal Et" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Tüm Dosyalar" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea çevrim dışı. Güncelleme olanaksız." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Tüm Beslemeleri Ara" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Hepsini okundu olarak işaretle" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "\"%s\"yi silmek istediğinizden emin misiniz?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Bu öge için belirlenmiş bağlantı yok!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Başlık yok ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr " önemli " #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Haber Başlığı" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Tarih" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Ögelerini silmek için bir besleme seçmelisiniz!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Hiçbir öge seçilmedi" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "_Sekmede Aç" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "Tarayıcıda _Aç" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "_Dış Tarayıcıda Aç" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Haber Sepetine Kopyala" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "%s'de _yer imi olarak ekle" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "Öge _Konumunu Kopyala" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "_Okunma Durumunu Değiştir" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Öge _İmini Değiştir" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "Ögeyi _Sil" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Eki Aç..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Farklı Kaydet..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Bağlantı Konumunu Kopyala" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Güncelle" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "Klasörü _Güncelle" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Yeni _Abonelik..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Yeni _Klasör..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Yeni A_rama Klasörü..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Yeni _Kaynak..." #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Yeni _Haber Sepeti..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Yeni" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Beslemeleri Sırala" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "Tümünü Okundu Olarak _İmle" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "_Yeniden inşa et" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Sil" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Özellikler" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Yerel Aboneliklere Dönüştür..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "GNOME öntanımlısı" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Simgelerin altında yazı" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Simgelerin yanında yazı" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Yalnızca simge" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Yalnızca yazı" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "dakika" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "saat" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "gün" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Boşluk" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Boşluk" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Boşluk" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Olağan Görünüm" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Geniş Görünüm" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Birleşik Görünüm" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Öntanımlı Tarayıcı" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "El İle" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Tür" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Boş)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Yeniden inşa ediliyor" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Girdi siliniyor" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "\"%s\" ve içeriğini silmek istediğinizden emin misiniz?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "\"%s\"yi silmek istediğinizden emin misiniz?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Silme Onayı" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Silme Onayı" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "_Aç" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "Bu beslemenin sunucusu %d dakikalık güncelleme aralığı öneriyor." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Bu beslemenin öntanımlı güncelleme aralığı yok." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Başlıksız" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Ağ sitesi" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Yeni Abonelik" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Okuyucu" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "OPML Dosyası Seç" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Yeni OPML Aboneliği" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Hiçbir besleme listesi türü bulunamadı!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Kaynak Türü" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "'%s' için giriş henüz bitmedi! Lütfen giriş bitene dek bekleyiniz." #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "'%s' aboneliği başarıyla yerel beslemelere dönüştürüldü!" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "Giriş başarısız!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "Reedah" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "Reedah API'ının döndürdüğü JSON ayrıştırılamadı!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "TinyTinyRSS HTTP API'ı erişilebilir değil!" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" "TinyTinyRSS besleme aboneliği başarısız! Gerçekten besleme adresi yazıp " "yazmadığınızı denetleyiniz!" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "TinyTinyRSS besleme aboneliğinin kaldırılması başarısız!" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" "Bu TinyTinyRSS sürümü beslemelerin kaldırılmasını desteklemiyor. %s ya da " "sonraki sürüme yükselt!" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "TinyTinyRSS API'ının döndürdüğü JSON ayrıştırılamadı!" #: ../src/fl_sources/theoldreader_source.c:329 msgid "TheOldReader" msgstr "TheOldReader" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Bağlantıyı _Sekmede Aç" #: ../src/webkit/liferea_web_view.c:176 msgid "Open Link In Browser" msgstr "Bağlantıyı Tarayıcıda Aç" #: ../src/webkit/liferea_web_view.c:177 msgid "Open Link In External Browser" msgstr "Bağlantıyı Dış Tarayıcıda Aç" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "Bağlantıyı %s'de yer imi olarak ekle" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "Bağlantı Konumunu _Kopyala" #: ../src/webkit/liferea_web_view.c:193 msgid "_View Image" msgstr "Resmi _Gör" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "Resim Konumunu _Kopyala" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "Bağlantıyı Farklı K_aydet" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "Resmi F_arklı Kaydet" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Abone Ol..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "_Kopyala" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "Metin Boyutunu _Büyüt" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "Metin Boyutunu _Küçült" #: ../glade/about.ui.h:1 msgid "About" msgstr "Hakkında" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea, GTK+ için bir haber okuyucudur" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Liferea Ana Sayfası" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Doğrulama" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "Kullanıcı _adı:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Parola:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Eki Aç" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Şu tür bir eki aç:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Liferea bu ek ile ne yapmalı? Lütfen çalıştırılacak komutu aşağıda " "belirtiniz. İndirilen dosyanın adresi, bu komutun değişkeni olarak " "kullanılacaktır:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Göz at" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Bu tür ekler için artık bunu kendiliğinden yap." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Google Okuyucu Hesabı Ekle" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Lütfen Google Okuyucu hesap bilgilerini giriniz." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Parola" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_Kullanıcı Adı (E-posta)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "sayfa 1" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "sayfa 2" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "0" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Haber Başlıklarını Görüntüle" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "sayfa 3" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Haber Başlıkları" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Hepsini okundu olarak işaretle" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Hepsini okundu olarak işaretle" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Yeni Klasör" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "_Klasör ismi:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Haber Sepeti Yarat" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Haber Sepetinin Adı:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Besleme Kaynağı" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Kaynak Türü:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_Adres" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Komut" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Yerel Dosya" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Dosya Seç..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Kaynak:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "İndirme / Ardişlem" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "İndirme için vekil sunucu kullan_ma" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Dönüştürme süzgeci _kullan" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea, desteklenmeyen biçim kullanan haber kaynağına ve dizinlere erişmek " "için dış süzgeç eklentileri kullanabilir. Daha çok bilgi için yardım " "belgelerine bakınız." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "_Bunu kullanarak dönüştür:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Kaynak Seçimi" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Eklemek istediğiniz kaynak türünü seçiniz..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "OPML/Planet Ekle" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Lütfen yerel bir dosya ya da geçerli bir OPML besleme listesine yönelten " "adres belirtin." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Konum" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Dosya Seç" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Liferea Tercihleri" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Besleme Önbelleği İşlenmesi" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "Besleme başına saklanacak öntanımlı öge _sayısı:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Besleme Güncelleme Ayarları" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Not: Lütfen güncelleme aralığı için akla yatkın bir değer seçin. " "Genellikle 1 saat aralığından az güncelleme aralığı belirlemek bant " "genişliğinin boşa kullanılması anlamına gelir." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "Başlangıçta tüm abonelikleri _güncelle." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Öntanımlı Besleme Güncelleme _Aralığı:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "1" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Beslemeler" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Klasör Görüntüleme Ayarları" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "Klasör seçildiğinde tüm alt beslemelerin ögelerini _göster." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "_Okunan ögeleri gizle." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Besleme Simgeleri (Simgeler)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Tüm simgeleri şimdi güncelle" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Klasörler" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Haber Başlıklarını Okuma" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "_Makaleleri şu tuş(lar)la gözden geçir:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "_Öntanımlı Görüntüleme Kipi:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Web Tümleşmesi" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Yer imlerini gönder" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "İç Tarayıcı Ayarları" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Bağlantıları Liferea'nın _penceresinde aç." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Javascript'i devreden çıkar." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "Tarayıcı eklentilerini _etkinleştir." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Dış Tarayıcı Ayarları" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Tarayıcı:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_El ile:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(Adres için %s)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Tarayıcı" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Araç Çubuğu Ayarları" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "Araç çubuğunu _gizle." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Araç çubuğu _düğme etiketleri:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Grafik Arayüzü" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "HTTP Vekil Sunucu" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Kendiliğinden Tanı (GNOME veya masaüstü ortamı)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "Vekil Sunucu Yok" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "E_l İle Ayar:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "Vekil Makina _Adı:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "Vekil _Bağlantı Noktası:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Vekil _Kimlik Doğrulaması Kullan" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Vekil _Kullanıcı Adı:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Vekil Par_olası:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" "WebKitGTK+ sürümünüz 2.15.3'ten eskidir. Her bir uygulama için başka vekil " "ayarlarını desteklemez. Sistemin öntanımlı vekil ayarları kullanılacak." #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Vekil" #: ../glade/prefs.ui.h:51 msgid "Privacy Settings" msgstr "Gizlilik Ayarları" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "Sitelere izlenmek iste_mediğimi söyle" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "Gizlilik" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Ekleri İndirme" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "Şunu kullanarak _indir" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Ekleri Açma" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Ekler" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Abonelik Özellikleri" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Besleme Adı" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "Besleme _Adı:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Güncelleme Aralığı" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Evrensel öntanımlı güncelleme aralığını kullan." #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_Beslemeye özel güncelleme aralığı olan" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "Bu beslemeyi kendiliğinden güncelle_me." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Bu beslemenin sunucusu %d dakikalık güncelleme aralığı öneriyor." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Genel" #: ../glade/properties.ui.h:20 msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea, desteklenmeyen biçim kullanan besleme ve dizinlere erişmek için dış " "süzgeç eklentileri kullanabilir." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Önbellek ayarları, Liferea kapatıldığında beslemelerin içeriklerinin " "saklanıp saklanmayacağını denetler. İmli ögeler her zaman önbelleğe alınır." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "_Öntanımlı önbellek ayarları" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "Önbelleği devreden çı_kar" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Sınırsız önbellek" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "Kaydedilecek öge _sayısı:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Arşiv" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "HTTP kimlik doğrulaması _kullan" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "İndir" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_Bu besleme için tüm ekleri kendiliğinden indir." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Ögeleri seçerken öge bağlantısını ayarlanmış tarayıcıda kendiliğinden _yükle." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Bu abonelik için _yorum beslemelerini göz ardı et." #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "İndirilen ögeleri okundu olarak _imle." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "HTML5 ve Google AMP'den tam içeriği ayıkla" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Gelişmiş" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "Reedah Hesabı Ekle" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "Lütfen Reedah hesap bilgilerini giriniz." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Adını değiştir" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Yeni Ad:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Arama Klasörü Özellikleri" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "Arama _Adı:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Aşağıdaki koşula uyan ögeleri bul" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Herha_ngi Bir Kural Eşleşmeli" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "_Tüm Kurallar Eşleşmeli" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Gelişmiş Arama" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "_Arama Klasörü..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Tüm Beslemeleri Ara" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Gelişmiş..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Belirtilen metni tüm beslemelerde aramaya başlar. Arama sonucu öge " "listesinde gözükecek." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Ara:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Liferea'nın, ögenin başlığında ya da içeriğinde bulmasını istediğiniz " "dizgiyi belirtiniz." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Gelişmiş..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Kendiliğinden besleme keşfini kullanmak istediğiniz veya haber kaynağının " "tam yerini bildiğiniz web sitesinin adresini belirtiniz. " #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "TheOldReader Hesabı Ekle" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "Lütfen TheOldReader hesap bilgilerini giriniz." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Tiny Tiny RSS Hesabı Ekle" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "Lütfen TinyTinyRSS hesap ayarlarınızı giriniz." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "_Sunucu URL'si" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Kullanıcı Adı" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Güncelleme Gözlemcisi" #: ../glade/update_monitor.ui.h:2 msgid "Cancel All" msgstr "Tümünü İptal Et" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Beklemedeki İstemler" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Şimdi İndiriliyor" #~ msgid "_Subscriptions" #~ msgstr "A_bonelikler" #~ msgid "Update _All" #~ msgstr "_Tümünü Güncelle" #~ msgid "Updates all subscriptions." #~ msgstr "Tüm abonelikleri günceller." #~ msgid "Mark All As _Read" #~ msgstr "Tümünü _Okundu Olarak İmle" #~ msgid "Marks read every item of every subscription." #~ msgstr "Her aboneliğin her ögesini okundu olarak imler." #~ msgid "_Import Feed List..." #~ msgstr "Besleme Listesini _İçeri Aktar..." #~ msgid "Imports an OPML feed list." #~ msgstr "OPML besleme listesini içeri aktarır." #~ msgid "_Export Feed List..." #~ msgstr "Besleme Listesini _Dışarı Aktar..." #~ msgid "Exports the feed list as OPML." #~ msgstr "Besleme listesini OPML dosyası olarak dışarı aktarır." #~ msgid "_Quit" #~ msgstr "_Çık" #~ msgid "_Feed" #~ msgstr "_Besleme" #~ msgid "Remove _All Items" #~ msgstr "Tüm Ögeleri _Sil" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Seçili beslemedeki tüm ögeleri siler." #~ msgid "_Item" #~ msgstr "_Öge" #~ msgid "Previous Item" #~ msgstr "Önceki Öge" #~ msgid "Next Item" #~ msgstr "Sonraki Öge" #~ msgid "_Next Unread Item" #~ msgstr "_Sonraki Okunmamış Öge" #~ msgid "_View" #~ msgstr "_Görüntüle" #~ msgid "Increases the text size of the item view." #~ msgstr "Öge görünümünün metin boyutunu büyütür." #~ msgid "Decreases the text size of the item view." #~ msgstr "Öge görünümünün metin boyutunu küçültür." #~ msgid "_Tools" #~ msgstr "A_raçlar" #~ msgid "_Update Monitor" #~ msgstr "_Güncelleme Gözlemcisi" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "Güncelleme kuyruğundaki tüm beslemelerin bir listesini göster" #~ msgid "_Preferences" #~ msgstr "_Seçenekler" #~ msgid "Edit Preferences." #~ msgstr "Seçenekleri Düzenle." #~ msgid "S_earch" #~ msgstr "_Ara" #~ msgid "Search All Feeds..." #~ msgstr "Tüm Beslemeleri Ara..." #~ msgid "Show the search dialog." #~ msgstr "Arama penceresini göster." #~ msgid "_Help" #~ msgstr "_Yardım" #~ msgid "_Contents" #~ msgstr "_İçindekiler" #~ msgid "View help for this application." #~ msgstr "Bu uygulamanın yardımını görüntüle." #~ msgid "_Quick Reference" #~ msgstr "_Hızlı Başvuru" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Liferea kısayollarının bir listesini göster." #~ msgid "_FAQ" #~ msgstr "_SSS" #~ msgid "View the FAQ for this application." #~ msgstr "Bu uygulamanın sıkça sorulan sorularını göster" #~ msgid "_About" #~ msgstr "_Hakkında" #~ msgid "Shows an about dialog." #~ msgstr "Hakkında penceresini gösterir." #~ msgid "_Normal View" #~ msgstr "_Olağan Görünüm" #~ msgid "Set view mode to mail client mode." #~ msgstr "Görünüm kipini, posta istemci kipine ayarla." #~ msgid "_Wide View" #~ msgstr "_Geniş Görünüm" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Görünüm kipini, üç dikey pano kullanacak şekilde ayarla." #~ msgid "_Combined View" #~ msgstr "_Birleşik Görünüm" #~ msgid "Set view mode to two pane mode." #~ msgstr "Görünüm kipini, iki pano kipine ayarla." #~ msgid "_Reduced Feed List" #~ msgstr "_Daraltılmış Besleme Listesi" #~ msgid "Hide feeds with no unread items." #~ msgstr "Okunmamış ögesi olmayan beslemeleri gizle." #~ msgid "_New Subscription..." #~ msgstr "_Yeni Abonelik..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "Besleme listesine yeni abonelik ekler." #~ msgid "Adds a folder to the feed list." #~ msgstr "Besleme listesine yeni klasör ekler." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Besleme listesine yeni arama klasörü ekler." #~ msgid "New _Source..." #~ msgstr "Yeni _Kaynak..." #~ msgid "Adds a new feed list source." #~ msgstr "Yeni besleme listesi kaynağı ekler." #~ msgid "Adds a new news bin." #~ msgstr "Yeni haber sepeti ekler." #~ msgid "_Mark Items Read" #~ msgstr "_Ögeleri Okundu Olarak İmle" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Seçili besleme listesi düğümündeki veya öge listesindeki tüm ögeleri " #~ "okundu olarak imle." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Seçili aboneliği ya da seçili klasördeki tüm abonelikleri günceller." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Seçili abonelik için özellikler penceresini açar." #~ msgid "_Remove" #~ msgstr "Kaldı_r" #~ msgid "Removes the selected subscription." #~ msgstr "Seçili aboneliği siler." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Seçili ögenin okunma durumunu değiştirir." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Seçili ögenin imini ekler ya da siler" #~ msgid "R_emove" #~ msgstr "K_aldır" #~ msgid "Removes the selected item." #~ msgstr "Seçili ögeyi siler." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Ögenin bağlantısını yeni Liferea tarayıcı sekmesinde açar." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Ögenin bağlantısını Liferea öge panosunun içinde açar" #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Ögenin bağlantısını yapılandırılmış dış tarayıcıda açar." #~ msgid "_Fullscreen" #~ msgstr "_Tam ekran" #~ msgid "Browse at full screen" #~ msgstr "Tam ekranda göz at" #~ msgid "_Work Offline" #~ msgstr "_Çevrim Dışı Çalış" #~ msgid "_Update All" #~ msgstr "Tümünü _Güncelle" #~ msgid "_Show Liferea" #~ msgstr "Liferea'yi _Göster" #~ msgid "InoReader" #~ msgstr "InoReader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Not: Kullanıcı adı ve parola, Liferea'nın besleme listesi dosyasında " #~ "şifrelemeden saklanacaktır." #~ msgid "Add InoReader Account" #~ msgstr "InoReader Hesabı Ekle" #~ msgid "Please enter your InoReader account settings." #~ msgstr "Lütfen InoReader hesap ayarlarınızı giriniz." #~ msgid "Plugins" #~ msgstr "Eklentiler" #~ msgid "normal view" #~ msgstr "olağan görünüm" #~ msgid "wide view" #~ msgstr "geniş görünüm" #~ msgid "combined view" #~ msgstr "birleşik görünüm" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, Linux Besleme Okuyucusu" #~ msgid "_Open Link In Browser" #~ msgstr "Bağlantıyı Tarayıcıda _Aç" #~ msgid "_Open Link In External Browser" #~ msgstr "Bağlantıyı Harici Tarayıcıda _Aç" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Arama Motoru Haber Kaynağı Yarat" #~ msgid "enter any search string you want" #~ msgstr "istediğiniz anahtar kelimeleri yazınız" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "En Fazla Sonuç _Sayısı" #, fuzzy #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Not: Liferea, belirlenen anahtar kelimeler ile arama motorunu " #~ "sorgulayacak ve yeni bir haber kaynağı oluşturacak. Bu kaynağı " #~ "saklayabilir ve herhangi bir haber kaynağıyla olduğu gibi " #~ "güncelleyebilirsiniz." #~ msgid "Liferea is now online" #~ msgstr "Liferea şimdi çevrimiçi" #~ msgid "Work Offline" #~ msgstr "Çevrimdışı çalış" #~ msgid "Liferea is now offline" #~ msgstr "Liferea şimdi çevrimdışı" #~ msgid "Work Online" #~ msgstr "Çevrimiçi çalış" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "Bu seçenek, abonelik güncellenmesini devreden çıkarmanızı sağlar." #~ msgid "Browser default" #~ msgstr "Tarayıcı öntanımı" #~ msgid "Existing window" #~ msgstr "Varolan pencere" #~ msgid "New window" #~ msgstr "Yeni pencere" #~ msgid "New tab" #~ msgstr "Yeni sekme" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Haber Okuyucusu" #~ msgid "Online/Offline Button" #~ msgstr "Çevrimiçi/Çevrimdışı Dügmesi" #~ msgid "_Open link in:" #~ msgstr "_Linki içinde aç:" #~ msgid "No comments yet." #~ msgstr "Henüz yorum yok" #~ msgid "Refresh" #~ msgstr "Yenile" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - Linux Haber Okuyucusu" #, fuzzy #~ msgid "" #~ "

        Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

        You can add new subscriptions

        • From main menu " #~ "'Subscription' -> 'New Subscription'
        • By dropping feed links " #~ "into the subscription list
        • By right clicking links and choosing " #~ "'Subscribe' within Liferea

        " #~ msgstr "" #~ "

        Çevrimiçi haber kaynakları için bir masaüstü haber toplayıcısı olan " #~ "Liferea'ya hoşgeldiniz.

        Sol panoda abonelik listenizi " #~ "görebilirsiniz. Yeni abonelik eklemek için Haber Kaynakları -> Yeni " #~ "Abonelik girişine tıklayınız. Bir haber kaynağının haber başlıklarını " #~ "gözden geçirmek için haber kaynak listesinde onu seçin. Haber başlıkları " #~ "sağ panoda gözükecektir.

        " #, fuzzy #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Sim_ge durumunda küçültmek yerine programı kapat" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d yeni madde" #~ msgstr[1] "%d yeni madde" #~ msgid "No new items" #~ msgstr "Yeni madde yok" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d okunmamış öğe" #~ msgstr[1] "" #~ "%s\n" #~ "%d Okunmamış madde yok" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Okunmamış madde yok" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Geçersiz Atom haber kaynağı: bilinmeyen yazar" #, fuzzy #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Haber kaynak listenizi Google Okuyucu hesabınızla birleştir. Liferea, " #~ "Google Okuyucu aboneliğinizi, haber kaynağı listesinde salt okunur bir " #~ "altağaç olarak sunacak." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Haber kaynak listenizi blogroll ya da Planetlerle birleştirin. Liferea, " #~ "kaynak OPML dosyasındaki değişikliklere göre otomatik olarak haber " #~ "kaynaklarını ekleyecek ya da çıkaracak" #, fuzzy #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Haber kaynak listenizi Google Okuyucu hesabınızla birleştir. Liferea, " #~ "Google Okuyucu aboneliğinizi, haber kaynağı listesinde salt okunur bir " #~ "altağaç olarak sunacak." #~ msgid "This feed does not exist anymore!" #~ msgstr "Bu haber kaynağı artık yok!" #~ msgid "This news entry has no headline" #~ msgstr "Bu haber girdisi başlığa sahip değil" #~ msgid "Visit" #~ msgstr "Ziyaret Et" #~ msgid "Open feed" #~ msgstr "Haber kaynağı aç" #~ msgid "Feed Update" #~ msgstr "Haber Listesi Güncellemesi" #~ msgid "Show details" #~ msgstr "Detayları Göster" #, fuzzy #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "Seçili abonelik için özellikler penceresini açar." #, fuzzy #~ msgid "Notification Settings" #~ msgstr "Uyarı Ayarları" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Yeni haber başlıklarını gösteren yeni _pencere aç." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Uyarı alanında (sistem çubuğu) durum _simgesini göster." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Sistem ç_ekmecesinde güncellenen haber kaynağı listesini göster" #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "Sim_ge durumunda küçültmek yerine programı kapat" #~ msgid "Download and view feeds" #~ msgstr "Haber kaynaklarını indir ve görüntüle" #~ msgid "You may want to validate the feed using" #~ msgstr "Feed adresini yandaki aracı kullanarak doğrulamak isteyebilirsiniz" #, fuzzy #~ msgid "Launch Item In _Tab" #~ msgstr "/Maddeyi _Sekmede Aç" #, fuzzy #~ msgid "_Launch Item In Browser" #~ msgstr "/Maddeyi _Tarayıcıda Aç" #, fuzzy #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "/_Adresi Geçici Panoya Kopyala" #~ msgid "flag" #~ msgstr "işaret" #~ msgid "bookmark" #~ msgstr "yer imi" #~ msgid "comments" #~ msgstr "yorumlar" #, fuzzy #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Ekin indirilmesi bitti: \"%s\"" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Ekin indirilmesi bitti: \"%s\"" #, fuzzy #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Liferea'nın bu sürümü yeni önbellekleme yapısını kullanıyor ve haber " #~ "kaynağı önbelleğinizi taşıdı. 1.2 sürümündeki ~/.liferea_1.2 dizininde " #~ "bulunan önbellek dosyaları otomatik olarak silinmedi. Lütfen bu dizini " #~ "taşınma işlemi başarıyla bittikten sonra el ile silin." #, fuzzy #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Ekin indirilmesi bitti: \"%s\"" #, fuzzy #~ msgid "Download finished." #~ msgstr "_Kullanarak indir" #~ msgid "Choose download directory" #~ msgstr "İndirilecek klasörü seçiniz" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Elle:\n" #~ "(Adres için %s)" #~ msgid "_Save downloads in" #~ msgstr "_Indirilenleri buraya kaydet" #, fuzzy #~ msgid "_Service Name" #~ msgstr "Senaryo Adı" #~ msgid "Downloading Enclosure" #~ msgstr "Ek İndiriliyor" #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Bir sonraki okunmamış öğeye atlar. Eğer gerekiyorsa, okunmamış öğeleri " #~ "olan bir sonraki haber kaynağını seçer." #, fuzzy #~ msgid "Print debugging messages for the plugin loading" #~ msgstr " --debug- Verilen başlık için hata ayıklama mesajı yaz." #~ msgid "Liferea seems to be running already!" #~ msgstr "Liferea zaten açık gözüküyor!" #~ msgid "Update status" #~ msgstr "Güncelleme durumu" #~ msgid "was updated" #~ msgstr "güncellenmiş" #~ msgid "was not updated" #~ msgstr "güncellenmemiş" #~ msgid "The orientation of the tray." #~ msgstr "Çubuğun yönü" #~ msgid "%s" #~ msgstr "%s" #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "_Script Manager" #~ msgstr "_Senaryo Yöneticisi" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "LUA kanca senaryolarını düzenlemeyi ve ayarlamayı sağlar" #~ msgid "Search With ..." #~ msgstr "Kullanarak Ara..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d arama sonucu. Aranan: \"%s\"" #~ msgstr[1] "%d arama sonucu. Aranan: \"%s\"" #, fuzzy #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d arama sonucu. Aranan: \"%s\"" #~ msgstr[1] "%d arama sonucu. Aranan: \"%s\"" #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "Madde listesi belirtilen arama kriterlerine uyan bütün maddeleri " #~ "içeriyor. Eğer bu arama sonucunu süresiz olarak kaydetmek istiyorsanız, " #~ "arama penceresindeki \"Arama Klasörü\" düğmesini tıklayın. Liferea haber " #~ "kaynak listenize bir arama klasörü ekleyecek." #, fuzzy #~ msgid "Count" #~ msgstr "Yorumlar" #~ msgid "You have to select a feed entry" #~ msgstr "Bir haber kaynağı seçmeniz gerekiyor" #~ msgid "(empty)" #~ msgstr "(boş)" #, fuzzy #~ msgid "_Properties..." #~ msgstr "/_Özellikler..." #~ msgid "Update out-dated feeds" #~ msgstr "Güncel olmayan haber kaynaklarını güncelle" #~ msgid "Force update of all feeds" #~ msgstr "Tüm haber kaynaklarını güncellemeye zorla" #~ msgid "No feed update at all" #~ msgstr "Haber kaynağı güncel, güncellenmiyor." #~ msgid "startup" #~ msgstr "açılış" #~ msgid "feed updated" #~ msgstr "haber kaynağı güncellendi" #~ msgid "feed added" #~ msgstr "haber kaynağı eklendi" #~ msgid "item selected" #~ msgstr "öğe seçildi" #~ msgid "feed selected" #~ msgstr "haber kaynağı seçildi" #~ msgid "item unselected" #~ msgstr "öğe seçimi iptal edildi" #~ msgid "feed unselected" #~ msgstr "haber kaynağı seçimi iptal edildi" #~ msgid "shutdown" #~ msgstr "kapat" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Özür dilerim, senaryo desteği mevcut değil!" #~ msgid "Script Name" #~ msgstr "Senaryo Adı" #~ msgid "No script selected!" #~ msgstr "Hiçbir senaryo seçili değil" #~ msgid "Create a new search feed." #~ msgstr "Yeni bir arama klasörü yarat" #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea, bu maddenin içeriğini gösteremiyor." #~ msgid "

        View this item's content.

        " #~ msgstr "

        Bu maddenin içeriğini görüntüle.

        " #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "Haber kaynak listenizi Bloglines hesabınızla birleştir. Liferea, " #~ "Bloglines aboneliğinizi, haber kaynağı listesinde salt okunur bir altağaç " #~ "olarak sunacak." #~ msgid "feedlist.opml" #~ msgstr "feedlist.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s %d adet yeni güncellenmiş başlık içeriyor\n" #~ msgstr[1] "%s %d adet yeni güncellenmiş başlık içeriyor\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Hook" #~ msgstr "Kanca" #~ msgid "Registered Scripts" #~ msgstr "Kayıtlı Senaryolar" #~ msgid "Script Code" #~ msgstr "Senaryo Kodu" #~ msgid "text/plain" #~ msgstr "metin/düz" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Bu seçenek çok sayıda haber içeren klasörler gösterilirken aşırı " #~ "gecikmelere neden olabilir." #~ msgid "Downloading Enclosures" #~ msgstr "Ekleri Indirmek" #~ msgid "Feed Cache Handling" #~ msgstr "Haber Bellek İşlenmesi" #~ msgid "Feed Name" #~ msgstr "Haber Kaynağı Adı" #~ msgid "Feed Update Settings" #~ msgstr "Haber Kaynağı Güncelleme Ayarları" #~ msgid "HTTP Proxy Server" #~ msgstr "HTTP Vekil Sunucu" #~ msgid "Opening Enclosures" #~ msgstr "Ekleri Açmak" #~ msgid "Reading Headlines" #~ msgstr "Haber Başlıklarını Okumak" #, fuzzy #~ msgid "Toolbar Settings" #~ msgstr "Menü ve Araç Çubuğu Ayarları" #~ msgid "Update Interval" #~ msgstr "Güncelleme Aralığı" #~ msgid "Web Integration" #~ msgstr "Web Entegrasyonu" #~ msgid "Add Script" #~ msgstr "Senaryo Ekle" #~ msgid "At _startup:" #~ msgstr "_Açılışta:" #, fuzzy #~ msgid "Attention Profile" #~ msgstr "kimlik doğrulaması başarısız" #~ msgid "Create new script" #~ msgstr "Yeni senaryo yarat" #~ msgid "Exec Command" #~ msgstr "Komutu Çalıştır" #~ msgid "Reuse existing script" #~ msgstr "Varolan senaryoyu tekrar kullan" #~ msgid "Script Manager" #~ msgstr "Senaryo Yöneticisi" #, fuzzy #~ msgid "Search _Link Cosmos with" #~ msgstr "Linki _ara" #, fuzzy #~ msgid "FAILED to download enclosure: \"%s\"" #~ msgstr "Ekin indirilmesi bitti: \"%s\"" #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2009\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgstr "" #~ "Telif Hakkı (c) 2003-2007\n" #~ "Lars Lindner ve \n" #~ "Nathan J. Conrad \n" #~ msgid "/_Bookmark Link at %s" #~ msgstr "/_Yer İmi Ekle %s" #~ msgid "/Toggle _Read Status" #~ msgstr "/_Okunma Durumunu Değiştir" #~ msgid "/Toggle Item _Flag" #~ msgstr "/Madde _İşaretini Değiştir" #, fuzzy #~ msgid "/_Preferences" #~ msgstr "_Seçenekler" #~ msgid "/_Quit" #~ msgstr "/_Çık" #, fuzzy #~ msgid "/Copy Link Location" #~ msgstr "/Link Adresini _Kopyala" #~ msgid "/_Update" #~ msgstr "/_Güncelle" #~ msgid "/_New/New _Subscription..." #~ msgstr "/_Yeni/Yeni _Abonelik..." #~ msgid "/_New/New _Folder..." #~ msgstr "/_Yeni/Yeni _Klasör..." #~ msgid "/_New/New S_earch Folder..." #~ msgstr "/_Yeni/Yeni A_rama Klasörü..." #~ msgid "/_New/New S_ource..." #~ msgstr "/_Yeni/Yeni K_aynak..." #~ msgid "/_New/New _News Bin..." #~ msgstr "/_Yeni/Yeni _Haber Sepeti..." #~ msgid "Rule" #~ msgstr "Kural" #~ msgid "Liferea Homepage" #~ msgstr "Liferea Anasayfası" #~ msgid "" #~ "Code, Patches, Debugging\n" #~ "\n" #~ "James Doherty\n" #~ "Jeremy Messenger\n" #~ "John McKnight\n" #~ "Tomasz Maka\n" #~ "Karl Soderstrom\n" #~ "Christophe Barbe\n" #~ "Juho Snellman\n" #~ "Roshan Revankar\n" #~ "Oliver Feiler\n" #~ "Niklas Morberg\n" #~ "Johannes Schlueter\n" #~ "Pierre Phaneuf\n" #~ "ahmed el-helw\n" #~ "James Bowes\n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary\n" #~ "Christoph Hohmann\n" #~ "Raphael Slinckx\n" #~ "Bjorn Monnens\n" #~ "Thomas de Grenier de Latour\n" #~ "Aristotle Pagaltzis\n" #~ "Norman Jonas\n" #~ "Sebastian Droege\n" #~ "Daniel Gryniewicz\n" #~ "Remi Cardona\n" #~ "Frederic Peters\n" #~ "Don Malcolm\n" #~ "Ed Catmur\n" #~ "Chris Pirillo\n" #~ "Eric Anderson\n" #~ "and many more...\n" #~ "\n" #~ "Code from other projects\n" #~ "\n" #~ "Anders Carlsson (tray icon support)\n" #~ "Philippe Martin, Brion Vibber (favicon support)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Included Software\n" #~ "\n" #~ "Liferea uses the XSPF Web Music Player to \n" #~ "allow direct podcast playback. This player was \n" #~ "written by Fabricio Zuardi and can be found \n" #~ "at http://musicplayer.sourceforge.net" #~ msgstr "" #~ "Kod, Yamalar, Hata Ayıklaması\n" #~ "\n" #~ "James Doherty\n" #~ "Jeremy Messenger\n" #~ "John McKnight\n" #~ "Tomasz Maka\n" #~ "Karl Soderstrom\n" #~ "Christophe Barbe\n" #~ "Juho Snellman\n" #~ "Roshan Revankar\n" #~ "Oliver Feiler\n" #~ "Niklas Morberg\n" #~ "Johannes Schlueter\n" #~ "Pierre Phaneuf\n" #~ "ahmed el-helw\n" #~ "James Bowes\n" #~ "Marc Deslauriers\n" #~ "Amit D. Chaudhary\n" #~ "Christoph Hohmann\n" #~ "Raphael Slinckx\n" #~ "Bjorn Monnens\n" #~ "Thomas de Grenier de Latour\n" #~ "Aristotle Pagaltzis\n" #~ "Norman Jonas\n" #~ "Sebastian Droege\n" #~ "Daniel Gryniewicz\n" #~ "Remi Cardona\n" #~ "Frederic Peters\n" #~ "Don Malcolm\n" #~ "Ed Catmur\n" #~ "Chris Pirillo\n" #~ "Eric Anderson\n" #~ "and many more...\n" #~ "\n" #~ "Diğer projelerden kodlar\n" #~ "\n" #~ "Anders Carlsson (çubuk simgesi desteği)\n" #~ "Philippe Martin, Brion Vibber (GözdeSimge desteği)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Kapsadığı Programlar\n" #~ "\n" #~ "Liferea, doğrudan podcast dinlemeyi sağlamak için \n" #~ "XSPF Web Müzik Oynatıcısı kullanır. Bu oynatıcı \n" #~ "Fabricio Zuardi tarafından yazılmıştı ve bu adreste \n" #~ "bulunabilir: http://musicplayer.sourceforge.net" #~ msgid "Contributors" #~ msgstr "Katkıda Bulunanlar" #~ msgid "" #~ "Note: Items are added to the search folder if at least one additive rule\n" #~ "matches. They are removed if at least one removing rule matches." #~ msgstr "" #~ "Not: Maddeler arama klasörüne, eğer bir ya da daha çok ekleme kuralı " #~ "uyarsa\n" #~ "eklenir. Eğer bir ya da daha çok çıkarma kuralı uyarsa, klasörden " #~ "çıkarılırlar." #~ msgid "" #~ "Saves this search as a search folder, which will appear in the feed list." #~ msgstr "" #~ "Bu aramayı, haber kaynak listesinde gözükecek bir arama klasörü olarak " #~ "kaydeder." #~ msgid "Show Menu _And Toolbar" #~ msgstr "Menü _ve Araç Çubuğunu Göster" #~ msgid "Show _Menu Only" #~ msgstr "Yalnızca _Menüyü göster" #~ msgid "Show _Toolbar Only" #~ msgstr "Yalnızca _Araç Çubuğunu Göster" #~ msgid "Translation" #~ msgstr "Çeviri" #~ msgid "_Limit cache to" #~ msgstr "_Belleği kısıtla" #~ msgid "_Name:" #~ msgstr "_İsim:" #~ msgid "items." #~ msgstr "öğe." #~ msgid "" #~ "minutes\n" #~ "hours\n" #~ "days" #~ msgstr "" #~ "dakika\n" #~ "saat\n" #~ "gün" #~ msgid "search" #~ msgstr "ara" #~ msgid "Access Forbidden" #~ msgstr "Giriş Yasak" #~ msgid "URL is invalid" #~ msgstr "Adres geçersiz" #~ msgid "Unsupported network protocol" #~ msgstr "Ağ protokolü desteklenmiyor" #~ msgid "Hostname could not be found" #~ msgstr "Bilgisayar adı bulunamadı" #~ msgid "Network connection was refused by the remote host" #~ msgstr "Ağ bağlantısı uzak bilgisayar tarafından reddedildi" #~ msgid "Remote host did not finish sending data" #~ msgstr "Uzak bilgisayar bilgi göndermeyi bitirmedi" #~ msgid "Too many HTTP redirects were encountered" #~ msgstr "Çok fazla HTTP yeniden yönlendirmesiyle karşılaşıldı" #~ msgid "Remote host sent an invalid response" #~ msgstr "Uzak bilgisayar geçersiz cevap verdi" #~ msgid "Webserver's authentication method incompatible with Liferea" #~ msgstr "Sunucunun kimlik doğrulama yöntemi Liferea ile uyumsuz" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "" #~ "Karakter sırası beklenmeyen bir şekilde sonlandı ya da UTF-8 kodlaması " #~ "bozuk! Bazı karakterler alınmadı!" #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "" #~ "Haber linki otomatik keşfi başarısız! Hiçbir haber kaynağı bulunamadı!" #~ msgid " --help Print this help and exit" #~ msgstr " --help Bu yardımı görüntüle ve çık" #~ msgid " --mainwindow-state=STATE" #~ msgstr " --mainwindow-state=STATE" #~ msgid " Start Liferea with its main window in STATE." #~ msgstr " Liferea ana penceresini STATE durumunda aç ." #~ msgid " Possible topics are: all,cache,conf,db,gui,html" #~ msgstr " Muhtemel başlıklar: all,cache,conf,db,gui,html" #~ msgid " net,parsing,plugins,trace,update,verbose" #~ msgstr " net,parsing,plugins,trace,update,verbose" #~ msgid "The --mainwindow-state argument must be given a parameter.\n" #~ msgstr "--mainwindow-state değişkeni için bir parametre gerekli.\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "--session değişkeni için bir parametre gerekli.\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "Liferea, bilinmeyen bir değişkenle karşılaştı: %s\n" #~ msgid "does match" #~ msgstr "uyuyor" #~ msgid "does not match" #~ msgstr "uymuyor" #~ msgid "Could not download \"%s\". Will retry in %d seconds." #~ msgstr "\"%s\" indirilemedi. %d saniye sonra tekrar denenecek." #~ msgid "" #~ "Sorry, I was not able to load any installed browser plugin! Try the --" #~ "debug-plugins option to get debug information!" #~ msgstr "" #~ "Özür dilerim, hiç bir tarayıcı eklentisi yükleyemedim! hata ayıklama " #~ "bilgisi almak için --debug-plugins seçeneğini deneyiniz!" #~ msgid "This item does not have a link assigned!" #~ msgstr "Bu haber için belirlenmiş link yok!" #~ msgid "No link selected!" #~ msgstr "Hiçbir link seçilmedi!" #~ msgid "http://lzone.de/liferea/" #~ msgstr "http://lzone.de/liferea/" #~ msgid "Updates all subscriptions. This does not update OCS directories." #~ msgstr "Bütün abonelikleri günceller. Bu, OCS dizinlerini güncellemez." #~ msgid "/_Increase Text Size" #~ msgstr "/Metin Boyutunu _Büyüt" #~ msgid "/_Decrease Text Size" #~ msgstr "/Metin Boyutunu _Küçült" #~ msgid "/Toggle _Online|Offline" #~ msgstr "/_Çevrimiçi|Çervimdışı Ol" #~ msgid "/_Preferences..." #~ msgstr "/_Seçenekler..." #~ msgid "/_Show|Hide Window" #~ msgstr "/Pencereyi _Gizle|Göster" #~ msgid "Cookie for %s has expired!" #~ msgstr "%s için çerezin (cookie) süresi doldu!" #~ msgid "gtk-properties" #~ msgstr "gtk-özellikleri" #~ msgid "_Program" #~ msgstr "_Program" #~ msgid "Remove _Selected" #~ msgstr "_Seçiliyi Sil" #~ msgid "Update _Selected" #~ msgstr "_Seçiliyi Güncelle" #~ msgid "_Delete Selected" #~ msgstr "_Seçiliyi Sil" #~ msgid "" #~ "Liferea reuses the GNOME proxy settings. If you use GNOME you can " #~ "change these settings in the GNOME Control Center." #~ msgstr "" #~ "Liferea GNOME vekil ayarlarını kullanır. Eğer GNOME kullanıyorsanız, " #~ "bu ayarları GNOME Kontrol Merkezinden değistirebilirsiniz." #~ msgid "_Enable Proxy" #~ msgstr "_Vekil Sunucu Kullan" #~ msgid "Update only feeds scheduled for updates" #~ msgstr "Yalnızca güncellenmeyi bekleyen haber kaynaklarını güncelle" #~ msgid "Reset feed update timers (Update no feeds)" #~ msgstr "" #~ "Haber kaynak güncelleme süreölçerlerini sıfırla (Hiçbir haber kaynağını " #~ "güncelleme)" #~ msgid "Searching for \"%s\"" #~ msgstr "\"%s\" aranıyor" #~ msgid "There were errors while parsing the feed %s!" #~ msgstr "Haber kaynağı %s ayrıştırılırken hatalar oluştu!" #~ msgid "Liferea notification" #~ msgstr "Liferea uyarısı" #~ msgid "item unselect" #~ msgstr "öğe seçimi iptal" #~ msgid "" #~ "Error while reading cache file \"%s\" ! Cache file could not be loaded!" #~ msgstr "\"%s\"bellek dosyasını okurken hata! Bellek dosyası yüklenemedi!" #~ msgid "" #~ "

        XML error while parsing cache file! Feed cache file \"%s\" could not " #~ "be loaded!

        " #~ msgstr "" #~ "

        Bellek dosyasını ayrıştırırken XML hatası! Haber kaynağı bellek " #~ "dosyası \"%s\" yüklenemedi!

        " #~ msgid "

        \"%s\" is no valid cache file! Cannot read cache file!

        " #~ msgstr "" #~ "

        \"%s\" geçerli bir bellek dosyası değil! Bellek dosyası okunamıyor!

        " #~ msgid "There were errors while parsing cache file \"%s\"" #~ msgstr "Bellek dosyası \"%s\" ayrıştırılırken hatalar oluştu" #~ msgid "Feed Loading Settings" #~ msgstr "Haber Yükleme Seçenekleri" #~ msgid "Optimize for reduced _memory usage." #~ msgstr "Daha az _bellek kullanımı için uygun hale getir." #~ msgid "Optimize for _speed." #~ msgstr "Daha fazla _hız için uygun hale getir." #~ msgid "_View Headlines With" #~ msgstr "_Haber başlıklarını gör" #~ msgid "Please restart Liferea for changes to take effect." #~ msgstr "" #~ "Değişikliklerin uygulanması için Lifrerea'yı tekrar başlatın." #~ msgid " " #~ msgstr " " #~ msgid "Lower Right" #~ msgstr "Sağ Alt" #~ msgid "Upper Right" #~ msgstr "Sağ Üst" #~ msgid "Upper Left" #~ msgstr "Sol Üst" #~ msgid "Lower Left" #~ msgstr "Sol Alt" #~ msgid "Popup Placement" #~ msgstr "Pencere Yeri" #~ msgid "" #~ " --debug-html Enable HTML debugging (saving to ~/.liferea_1.2/output." #~ "xhtml)" #~ msgstr "" #~ " --debug-html HTML hata ayıklamasını çalıştır (kaydedildiği yer ~/." #~ "liferea_1.2/output.xhtml)" #~ msgid " --debug-plugins Print debugging messages when loading plugins" #~ msgstr "" #~ " --debug-plugins Eklentileri yüklerken hata ayıklama mesajlarını göster" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "" #~ "Daha çok bilgi için lütfen https://lzone.de/liferea/ adresini ziyaret " #~ "ediniz" #~ msgid "Cancel _All" #~ msgstr "Tümünü _İptal Et" liferea-1.12.7/po/uk.po000066400000000000000000002716051352135647700146360ustar00rootroot00000000000000# Translation of liferea to Ukrainian # Copyright © Free Software Foundation, 2010-2011 # This file is distributed under the same license as the liferea package. # # Yuri Chornoivan , 2010, 2011, 2013, 2017. msgid "" msgstr "" "Project-Id-Version: liferea 1.10-rc4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2017-02-14 22:34+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Lokalize 1.5\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Програма для читання подач" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" "Liferea — абревіатура від Linux Feed Reader (засіб читання подач у Linux). " "Це програма для збирання нових із подач у інтернеті. У програмі передбачено " "підтримку декількох різних форматів подач, зокрема RSS/RDF, CDF та Atom. " "Існує багато інших програм для читання новин, але вони або недоступні у " "Linux, або потребують встановлення багатьох додаткових бібліотек. Liferea є " "спробою заповнити цю прогалину створенням швидкої, простої у користуванні та " "простої у встановленні програми для читання новин із використанням GTK/GNOME." #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "Визначні особливості:" #: ../liferea.appdata.xml.in.h:4 msgid "Read articles when offline" msgstr "Читання статей у автономному режимі." #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "Синхронізація з TheOldReader." #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "Синхронізація з TinyTinyRSS." #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "Синхронізація з InoReader." #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "Синхронізація з Reedah." #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "Зберігання заголовків записів новин." #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "Встановлення відповідності записів з використанням тек пошуку." #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "Відтворення трансляцій." #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Програма для читання подач" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Програма для читання подач Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Читання подач новин та блогів" #: ../net.sourceforge.liferea.desktop.in.h:5 #, fuzzy msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" "новини;подачі;стрічки;агрегатор;блоґ;блог;трансляція;news;feed;aggregator;" "blog;podcast;" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Супровід цієї подачі припинено. Тепер вона є недоступною. Liferea більше не " "оновлюватиме подачі, але ви зможете читати кешовані заголовки подачі." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "Остання спроба оновлення цієї підписки зазнала невдачі!
        Код помилки " "HTTP : " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Під час спроби обробки цієї подачі сталися помилки." #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Дані щодо помилки обробки" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Подробиці" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" "Ймовірно, вам варто повідомити про це автора або вебмайстра, який контролює " "подачу!" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Під час фільтрування цієї подачі сталися помилки." #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Дані щодо помилки фільтрування" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Подача:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Джерело:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Поширювач" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Авторські права" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "дочірня з" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "непрочитані заголовки" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Тека:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Джерело" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Подача" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Додано до теки" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Автор" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Спільно використовується" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Проміжні" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Пов’язано з" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Також оприлюднено у" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Створено у" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "Координати" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "Карта" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Коментарі" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Оновлення…" #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Розділ" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Відділ" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Кошик новин:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Додайте пункти до цього кошика новин за допомогою пункту «Копіювати до " "кошика новин» контекстного меню пункту списку." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Тека пошуку:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Помилка команди переглядача: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Початок: «%s»" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Помилка розпізнавання" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Не вдалося створити каталог кешування «%s»!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Сьогодні %k:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Вчора %k:%M" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %k:%M" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%d %b %k:%M" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%d %b, %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "«%s» не коректним файлом налаштувань типів вкладень." #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Вами ще не налаштовано інструмент звантаження! Будь ласка, налаштуйте його " "за допомогою вкладки «Вкладення» у вікні «Інструменти → Параметри»." #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Не вдалося виконати команду: \n" "\n" "%s\n" "\n" " Будь ласка, переконайтеся, що вказану вами програму для звантаження даних " "встановлено і що ця програма працює належним чином. Змінити параметри " "програми можна за допомогою вкладки «Отримання» у вікні «Інструменти → " "Параметри»." #: ../src/export.c:188 #, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Помилка під час спроби перейменування %s на %s: %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "Помилка у XML під час спроби читання файла OPML. Не вдалося імпортувати «%s»." #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Порожній документ. Документ OPML «%s» не повинен бути порожнім під час " "імпортування." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "«%s» не є коректним документом OPML. Liferea не здатна імпортувати цей файл." #: ../src/export.c:469 msgid "Imported feed list" msgstr "Список імпортованих подач" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Імпортувати список подач" #: ../src/export.c:481 msgid "Import" msgstr "Імпортувати" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "Файли OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Помилка під час спроби експортування списку подач." #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Список подач експортовано." #: ../src/export.c:498 msgid "Export Feed List" msgstr "Експортувати список подач" #: ../src/export.c:498 msgid "Export" msgstr "Експортувати" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        Не вдалося визначити тип цієї подачі. Будь ласка, переконайтеся у тому, " "що адреса джерела є посиланням на ресурс у одному з форматів збирання даних." "

        Виведені інструментом обробки XML дані:
        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "«%s» оновлено…" #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "«%s» недоступна" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "Вказана Liferea адреса для оформлення підписки відповідає веб-сторінці. " "Інструментові автоматичного виявлення подач не вдалося виявити на цій " "сторінці жодної подачі. Можливо, на цій веб-сторінці не передбачено " "автоматичного виявлення подач." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "" "Під час читання подачі було виявлено помилку у XML. Не вдалося завантажити " "подачу «%s»." #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Порожній документ" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Некоректний код XML" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Джерелом є документ HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Не вдалося визначити тип подачі." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Немає непрочитаних пунктів" #: ../src/liferea_application.c:282 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Запустити Liferea з головним вікном у режимі СТАН. СТАН може приймати " "значення «shown» (показ) або «hidden» (приховування)." #: ../src/liferea_application.c:282 msgid "STATE" msgstr "СТАН" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "Показати інформацію про версію і завершити роботу" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Додати нову підписку" #: ../src/liferea_application.c:284 msgid "uri" msgstr "адреса" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Виводити діагностичні повідомлення всіх типів" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Виводити діагностичні повідомлення щодо обробки кешу" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Виводити діагностичні повідомлення щодо обробки налаштувань" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Виводити діагностичні повідомлення щодо обробки бази даних" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Виводити діагностичні повідомлення щодо функцій інтерфейсу" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Увімкнути діагностику обробки HTML. Під час кожного сеансу обробки HTML у " "Liferea програма створюватиме дамп HTML за адресою ~/.cache/liferea/output." "xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "Виводити діагностичні повідомлення для всіх дій, пов’язаних з мережею" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Виводити діагностичні повідомлення щодо функцій обробки" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Виводити діагностичні повідомлення, якщо обробка у функції триває занадто " "довго" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Виводити діагностичні повідомлення під час входу-виходу з функцій" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Виводити діагностичні повідомлення обробки оновлення подач" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "Виводити діагностичні повідомлення щодо пошуку відповідних тек" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Виводити докладні діагностичні повідомлення" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Виводити діагностичні повідомлення з вказаною темою" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Запит щодо оновлення було скасовано" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Не вдалося визначити назву вузла призначення" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Не вдалося визначити назву вузла проксі-сервера" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Не вдалося з’єднатися з віддаленим вузлом" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Не вдалося встановити з’єднання з проксі-сервером" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "Сталася помилка роботи з мережею або з’єднання було несподівано розірвано з " "боку джерела даних" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Ресурс даних було остаточно пересунуто на нове місце" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Ви не маєте прав доступу для звантаження цієї подачі. Будь ласка, оновіть " "дані щодо імені користувача і пароля у діалоговому вікні властивостей подачі." #: ../src/net.c:476 msgid "Payment required" msgstr "Потрібна сплата" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "У вас немає прав доступу до цього ресурсу" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Ресурс не знайдено" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Заборонений метод" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Дані не прийнято" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Потрібно пройти розпізнавання на проксі-сервері" #: ../src/net.c:482 msgid "Request timed out" msgstr "Тайм-аут запиту" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Вилучено. Ресурсу більше не існує. Будь ласка, скасуйте підписку." #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Під час оновлення сталася внутрішня помилка" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Подача недоступна: сервером надіслано запит на непідтримуваний тип " "переспрямування." #: ../src/net.c:492 msgid "Client Error" msgstr "Помилка клієнта" #: ../src/net.c:494 msgid "Server Error" msgstr "Помилка сервера" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Сталася невідома помилка роботи у мережі." #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Елемент" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "містить" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "не містить" #: ../src/rule.c:175 msgid "Item title" msgstr "Заголовок пункту" #: ../src/rule.c:176 msgid "Item body" msgstr "Текст пункту" #: ../src/rule.c:177 msgid "Read status" msgstr "Стан прочитання" #: ../src/rule.c:177 msgid "is unread" msgstr "не прочитано" #: ../src/rule.c:177 msgid "is read" msgstr "прочитано" #: ../src/rule.c:178 msgid "Flag status" msgstr "Стан позначення" #: ../src/rule.c:178 msgid "is flagged" msgstr "позначено" #: ../src/rule.c:178 msgid "is unflagged" msgstr "не позначено" #: ../src/rule.c:179 msgid "Podcast" msgstr "Трансляція" #: ../src/rule.c:179 msgid "included" msgstr "включено" #: ../src/rule.c:179 msgid "not included" msgstr "не включено" #: ../src/rule.c:180 msgid "Category" msgstr "Категорія" #: ../src/rule.c:180 msgid "is set" msgstr "встановлено" #: ../src/rule.c:180 msgid "is not set" msgstr "не встановлено" #: ../src/rule.c:181 msgid "Feed title" msgstr "Заголовок подачі" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Дані підписки «%s» вже оновлюються." #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "Підписка «%s» вже не підтримується авторами. Liferea більше не буде її " "оновлювати." #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Оновлення піктограми «%s»" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Під час спроби читання цієї підписки виникли проблеми. Будь ласка, " "перевірте, чи правильно вказано адресу, і ознайомтеся з даними, виведеними " "до консолі." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "Адресу «%s» було остаточно змінено. Програма оновила дані щодо адреси." #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "" "«%s» вже не підтримується авторами. Liferea більше не буде оновлювати дані." #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "«%s» не змінювалася з часу останнього оновлення" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Оновлення «%s»" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "" "Помилка під час спроби відкриття файла тимчасових даних %s, який " "використовується для фільтрування." #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s завершила роботу з повідомленням про стан %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Помилка: не вдалося відкрити канал «%s»" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Помилка: не вдалося відкрити файл «%s»" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Помилка: файла «%s» не існує" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Нова тека пошуку" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Були і інші помилки. Дані про них обрізано.]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "Обробка XML: не вдалося обробити документ:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Долучення" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " байтів" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "кБ" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "МБ" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "ГБ" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d долучення" msgstr[1] "%d долучення" msgstr[2] "%d долучень" msgstr[3] "%d долучення" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Виберіть файл" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Файли з суфіксом .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Не вдалося знайти файл зображення: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d нова)" msgstr[1] " (%d нові)" msgstr[2] " (%d нових)" msgstr[3] " (%d нова)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d непрочитана%s" msgstr[1] "%d непрочитані%s" msgstr[2] "%d непрочитаних%s" msgstr[3] "%d непрочитана%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Розділи довідки" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Швидке ознайомлення" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "Поширені питання" #: ../src/ui/search_dialog.c:116 msgid "Saved Search" msgstr "Збережений пошук" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Вкажіть ім’я користувача та пароль для доступу до «%s» (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Невідоме джерело" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 msgid "_Cancel" msgstr "_Скасувати" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Всі файли" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea працює у автономному режимі. Оновлення даних неможливе." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Шукати у всіх подачах" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Позначити всі як прочитані" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Ви справді бажаєте вилучити «%s»?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "У цьому пункті не вказано жодного посилання." #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** без заголовка ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Заголовок" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Дата" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Для вилучення пунктів подачі слід вказати якусь з подач." #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Не позначено жодного пункту" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Відкрити у в_кладці" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "Ві_дкрити у переглядачі" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Відкрити у _зовнішньому переглядачі" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Копіювати до кошика новин" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "С_творити закладку для %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "Копіювати _адресу пункту" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Перемкнути стан п_рочитання" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Перемкнути п_рапорець пункту" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "Ви_лучити пункт" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Відкрити вкладення…" #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Зберегти як…" #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Скопіювати адресу посилання" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Оновити" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "_Оновити теку" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Нова п_ідписка…" #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "С_творити теку…" #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Створити т_еку пошуку…" #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Нове д_жерело…" #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Ст_ворити кошик новин…" #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Створити" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Впорядкувати подачі" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "Поз_начити всі як прочитані" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "П_еребудувати" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "В_илучити" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Властивості" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Перетворити на локальні підписки…" #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "Типові параметри GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Текст під піктограмами" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Текст збоку від піктограм" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Лише піктограми" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Лише текст" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "хвилин" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "годин" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "днів" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Пробіл" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Пробіл" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Пробіл" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Звичайний перегляд" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Широкий режим" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Комбінований перегляд" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Типовий переглядач" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Вручну" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Тип" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Програма" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Порожньо)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Перезбирання" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Вилучення запису" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Ви справді бажаєте вилучити «%s» і всі дані, які там зберігаються?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Ви справді бажаєте вилучити «%s»?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Підтвердження вилучення" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Підтвердження вилучення" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "_Відкрити" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "" "Надавачем цієї подачі рекомендовано проміжок між оновленнями у %d хвилину." msgstr[1] "" "Надавачем цієї подачі рекомендовано проміжок між оновленнями у %d хвилини." msgstr[2] "" "Надавачем цієї подачі рекомендовано проміжок між оновленнями у %d хвилин." msgstr[3] "" "Надавачем цієї подачі рекомендовано проміжок між оновленнями у %d хвилину." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "У цій подачі не вказано ніякого типового проміжку між оновленнями." #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Без назви" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Сайт" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b, %k:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Нова підписка" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Виберіть файл OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Нова підписка OPML" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "У списку подач не виявлено даних про тип джерел." #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Тип джерела" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" "Вхід до «%s» ще не завершено. Будь ласка, зачекайте на завершення процедури " "входу." #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "Ппідписні дані «%s» успішно перетворено на локальні подачі!" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "Невдала спроба увійти!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "Reedah" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "" "Не вдалося обробити код JSON, повернутий програмним інтерфейсом Reedah!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "Програмний інтерфейс HTTP TinyTinyRSS недоступний!" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" "Спроба підписатися на TinyTinyRSS завершилася невдало! Перевірте, чи " "передали ви адресу подачі!" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "Не вдалося відписатися від подачі TinyTinyRSS!" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" "У цій версії TinyTinyRSS не передбачено підтримки вилучення подач. Оновіть " "програму до версії %s або новішої!" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" "Не вдалося обробити код JSON, повернутий програмним інтерфейсом TinyTinyRSS!" #: ../src/fl_sources/theoldreader_source.c:329 msgid "TheOldReader" msgstr "TheOldReader" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Відкрити посилання у в_кладці" #: ../src/webkit/liferea_web_view.c:176 msgid "Open Link In Browser" msgstr "Відкрити посилання у переглядачі" #: ../src/webkit/liferea_web_view.c:177 msgid "Open Link In External Browser" msgstr "Відкрити посилання в зовнішньому переглядачі" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "С_творити закладку для посилання на %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "_Копіювати посилання" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "З_берегти зображення як" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "_Копіювати адресу зображення" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "З_берегти посилання як" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "З_берегти зображення як" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "_Підписатися…" #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "_Копіювати" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "З_більшити розмір символів" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "З_меншити розмір символів" #: ../glade/about.ui.h:1 msgid "About" msgstr "Про програму" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea програма для читання новин з використанням GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Домашня сторінка Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Розпізнавання" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "_Користувач:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Пароль:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Відкрити вкладення" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Відкрити вкладення такого типу:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Які дії слід виконувати Liferea з цим вкладенням? Будь ласка, вкажіть нижче " "команду, яку слід виконати. Дані щодо адреси вкладень буде додано до " "аргументів вказаної команди." #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "Ви_брати" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "" "Ви_конувати вказану дію автоматично для всіх вкладено, подібних до цього" #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Додавання облікового запису Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Будь ласка, вкажіть параметри вашого облікового запису Google Reader." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Пароль" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_Користувач (адреса ел. пошти)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "0" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Перегляд заголовків" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Заголовки" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Позначити всі як прочитані" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Позначити всі як прочитані" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Нова тека" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "_Назва теки:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Створити кошик новин" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "_Назва кошика новин:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Джерело подачі" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Тип джерела:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_Адреса" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Команда" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Локальний файл" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Вибрати файл…" #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "Д_жерело:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Отримання/Обробка" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "_Не використовувати проксі-сервер для звантаження" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Використовувати _фільтр перетворення" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "У Liferea передбачено використання зовнішніх додатків фільтрування для " "доступу до даних подач і каталогів, формат яких не підтримується основною " "програмою. Докладніше про ці додатки можна дізнатися з документації до " "програми." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Перетворити за _допомогою:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Вибір джерела" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Виберіть тип джерела, яке слід додати…" #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Додати OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Будь ласка, вкажіть локальний файл або адресу URL, що вказує на коректний " "список подач у форматі OPML." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Адреса" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Вибрати файл" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Параметри Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Обробка кешу подач" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "Типова _кількість збережених пунктів на подачу:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Параметри оновлення подач" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Зауваження: будь ласка, не забудьте вказати прийнятний проміжок часу між " "оновленнями. Зазвичай, опитування подач з інтервалом, меншим за одну годину, " "є простим марнуванням потужностей каналу зв’язку." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "_Оновлювати всі підписки під час запуску" #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Типовий проміжок між _оновленнями подачі:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "1" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Подачі" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Параметри показу тек" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "По_казувати пункти всіх вкладених подач, якщо позначено теку" #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "При_ховувати прочитані пункти" #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Піктограми подач (улюблені)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "_Оновити всі піктограми улюблених зараз" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Теки" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Читання заголовків" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Про_глянути статті з:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "_Типовий режим перегляду:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Інтернет-інтеграція" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "_Додати закладки до" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Параметри переглядача інтернету" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Відкривати поси_лання у вікні Liferea" #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "Ви_мкнути Javascript" #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_Увімкнути додатки переглядача" #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Параметри зовнішнього переглядача" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Переглядач:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "В_ручну:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s для адреси)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Переглядач" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Параметри панелі інструментів" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "При_ховувати панель інструментів" #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Мітки _кнопок панелі інструментів:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "Інтерфейс" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "Проксі-сервер HTTP" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "_Автоматичне визначення (GNOME або середовище)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Без проксі" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "_Ручне налаштування:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "Проксі-_вузол:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "Проксі-п_орт:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Використовувати проксі-р_озпізнавання" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "_Користувач проксі:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "_Пароль проксі:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Проксі" #: ../glade/prefs.ui.h:51 msgid "Privacy Settings" msgstr "Параметри конфіденційності" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "Повідомляти сайтам, що с_теження є небажаним" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "Конфіденційність" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Отримання вкладень" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "_Отримувати за допомогою" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Відкриття вкладень" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Вкладення" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Параметри підписки" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Назва подачі" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "_Назва подачі:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Проміжок між оновленнями" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "Ви_користовувати загальний типовий проміжок між оновленнями" #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "_Окремий проміжок між оновленнями для подач" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Не оновлювати цю подачу у автоматичному режимі" #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "Цим надавачем подач запропоновано проміжок між оновленнями у %d хвилин." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Загальне" #: ../glade/properties.ui.h:20 msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "У Liferea передбачено використання зовнішніх скриптів фільтрування для " "доступу до даних подач і каталогів, формат яких не підтримується основною " "програмою." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "За допомогою параметра кешування можна керувати збереженням даних подач під " "час завершення роботи Liferea. Дані позначених пунктів завжди " "зберігатимуться у сховищі даних (кеші)." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "_Типові параметри кешу" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "Ви_мкнути кешування" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Необмежений кеш" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "_Кількість пунктів для зберігання:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Архівування" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Використовувати HTTP-_розпізнавання" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Отримати" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "_Автоматично звантажувати всі вкладення цієї подачі" #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "А_втозавантажувати посилання у вказаному переглядачі після позначення статті" #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Ігнорувати подачі _коментарів у цій підписці" #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "Позна_чати звантажені пункти як прочитані" #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Додатково" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "Додавання облікового запису Reedah" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "Будь ласка, вкажіть параметри вашого облікового запису Reedah." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Перейменувати" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "_Нова назва:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Властивості теки пошуку" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "_Назва пошуку:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Знайти пункти, які відповідають вказаним нижче критеріям" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Ві_дповідність будь-якому з правил" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "В_ідповідність кожному з правил" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Складний пошук" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "_Тека пошуку…" #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Шукати у всіх подачах" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "Д_одатково…" #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Розпочати пошук вказаного фрагмента тексту у всіх подачах. Результат пошуку " "буде показано у списку пунктів." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Шукати:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Вкажіть рядок, який Liferea має знайти у заголовках пунктів або їх тексті." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Додатково…" #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Вкажіть адресу веб-сайта для автоматичного пошуку подач або, якщо вона вам " "відома, точну адресу подачі." #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "Додавання облікового запису TheOldReader" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "Будь ласка, вкажіть параметри вашого облікового запису TheOldReader." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Додавання облікового запису Tiny Tiny RSS" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "Будь ласка, вкажіть параметри вашого облікового запису TinyTinyRSS." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "_Адреса сервера" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Користувач" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Спостереження за оновленням" #: ../glade/update_monitor.ui.h:2 msgid "Cancel All" msgstr "Скасувати усе" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Запити у черзі" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Отримання" #~ msgid "_Subscriptions" #~ msgstr "_Підписки" #~ msgid "Update _All" #~ msgstr "Оновити _всі" #~ msgid "Updates all subscriptions." #~ msgstr "Оновити всі підписки." #~ msgid "Mark All As _Read" #~ msgstr "Позначити всі _як прочитані" #~ msgid "Marks read every item of every subscription." #~ msgstr "Позначити всі пункти у всіх підписках як прочитані." #~ msgid "_Import Feed List..." #~ msgstr "_Імпортувати список подач…" #~ msgid "Imports an OPML feed list." #~ msgstr "Імпортувати список подач у форматі OPML." #~ msgid "_Export Feed List..." #~ msgstr "_Експортувати список подач…" #~ msgid "Exports the feed list as OPML." #~ msgstr "Експортувати список подач у форматі OPML." #~ msgid "_Quit" #~ msgstr "Ви_йти" #~ msgid "_Feed" #~ msgstr "П_одача" #~ msgid "Remove _All Items" #~ msgstr "Вилу_чити всі пункти" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Вилучити всі пункти з поточної позначеної подачі." #~ msgid "_Item" #~ msgstr "П_ункт" #~ msgid "Previous Item" #~ msgstr "Попередній пункт" #~ msgid "Next Item" #~ msgstr "Наступний пункт" #~ msgid "_Next Unread Item" #~ msgstr "_Наступний непрочитаний пункт" #~ msgid "_View" #~ msgstr "П_ерегляд" #~ msgid "Increases the text size of the item view." #~ msgstr "Збільшити розмір символів на панелі перегляду." #~ msgid "Decreases the text size of the item view." #~ msgstr "Зменшити розмір символів на панелі перегляду." #~ msgid "_Tools" #~ msgstr "_Інструменти" #~ msgid "_Update Monitor" #~ msgstr "С_постереження за оновленням" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "" #~ "Показати список всіх пунктів подач, які перебувають у черзі оновлення" #~ msgid "_Preferences" #~ msgstr "П_араметри" #~ msgid "Edit Preferences." #~ msgstr "Змінити параметри роботи програми." #~ msgid "S_earch" #~ msgstr "По_шук" #~ msgid "Search All Feeds..." #~ msgstr "Шукати у всіх подачах…" #~ msgid "Show the search dialog." #~ msgstr "Показати діалогове вікно пошуку." #~ msgid "_Help" #~ msgstr "_Довідка" #~ msgid "_Contents" #~ msgstr "_Зміст" #~ msgid "View help for this application." #~ msgstr "Показати довідку до цієї програми." #~ msgid "_Quick Reference" #~ msgstr "_Швидке ознайомлення" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Показати список всіх клавіатурних скорочень Liferea." #~ msgid "_FAQ" #~ msgstr "_ЧаП" #~ msgid "View the FAQ for this application." #~ msgstr "" #~ "Показати список поширених питань щодо програми та відповідей на них." #~ msgid "_About" #~ msgstr "_Про програму" #~ msgid "Shows an about dialog." #~ msgstr "Показати діалогове вікно даними щодо програми." #~ msgid "_Normal View" #~ msgstr "_Звичайний перегляд" #~ msgid "Set view mode to mail client mode." #~ msgstr "Перемкнути програму у режим перегляду клієнта електронної пошти." #~ msgid "_Wide View" #~ msgstr "_Широкий режим" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Перемкнути програму у режим показу трьох вертикальних панелей." #~ msgid "_Combined View" #~ msgstr "_Комбінований перегляд" #~ msgid "Set view mode to two pane mode." #~ msgstr "Перемкнути програму у режим перегляду з двома панелями." #~ msgid "_Reduced Feed List" #~ msgstr "Ст_ислий список подач" #~ msgid "Hide feeds with no unread items." #~ msgstr "Приховати подачі, у яких немає непрочитаних пунктів." #~ msgid "_New Subscription..." #~ msgstr "О_формити підписку…" #~ msgid "Adds a subscription to the feed list." #~ msgstr "Додати до списку подач новий запис подачі." #~ msgid "Adds a folder to the feed list." #~ msgstr "Додати до списку подач нову теку." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Додати до списку подач новий запис теки пошуку." #~ msgid "New _Source..." #~ msgstr "Створити д_жерело…" #~ msgid "Adds a new feed list source." #~ msgstr "Додати нове джерело списку подач." #~ msgid "Adds a new news bin." #~ msgstr "Додати новий кошик новин." #~ msgid "_Mark Items Read" #~ msgstr "П_означити пункти як прочитані" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Позначити всі пункти позначеного вузла у списку подач або у списку " #~ "пунктів як прочитані." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "Оновити поточну подачу або всі подачі у позначеній теці." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Відкрити діалогове вікно параметрів позначеного пункту підписки." #~ msgid "_Remove" #~ msgstr "В_илучити" #~ msgid "Removes the selected subscription." #~ msgstr "Вилучити позначений пункт підписки." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Перемкнути стан прочитання позначеного пункту." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Перемкнути прапорець стану позначеного пункту." #~ msgid "R_emove" #~ msgstr "Ви_лучити" #~ msgid "Removes the selected item." #~ msgstr "Вилучити позначений пункт." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Відкрити посилання пункту на новій панелі перегляду Liferea." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Відкрити посилання пункту на панелі записів Liferea." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "" #~ "Відкрити посилання пункту у вказаній вами зовнішній програмі для " #~ "перегляду інтернету." #~ msgid "_Fullscreen" #~ msgstr "На весь _екран" #~ msgid "Browse at full screen" #~ msgstr "Перегляд у повноекранному режимі" #~ msgid "_Work Offline" #~ msgstr "_Автономний режим" #~ msgid "_Update All" #~ msgstr "_Оновити всі" #~ msgid "_Show Liferea" #~ msgstr "По_казати Liferea" #~ msgid "InoReader" #~ msgstr "InoReader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Зауваження: ім’я користувача і пароль буде збережено у вашому файлі " #~ "списку подач Liferea без будь-якого шифрування." #~ msgid "Add InoReader Account" #~ msgstr "Додавання облікового запису InoReader" #~ msgid "Please enter your InoReader account settings." #~ msgstr "Будь ласка, вкажіть параметри вашого облікового запису InoReader." #~ msgid "Plugins" #~ msgstr "Додатки" #~ msgid "normal view" #~ msgstr "звичайний перегляд" #~ msgid "wide view" #~ msgstr "широкий перегляд" #~ msgid "combined view" #~ msgstr "суміщений перегляд" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, програма для читання подач у Linux" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "" #~ "Докладніше про програму можна дізнатися за адресою https://lzone.de/" #~ "liferea/" #~ msgid "_Open Link In Browser" #~ msgstr "Ві_дкрити посилання у переглядачі" #~ msgid "_Open Link In External Browser" #~ msgstr "Ві_дкрити посилання у зовнішньому переглядачі" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Створення подачі рушія пошуку" #~ msgid "enter any search string you want" #~ msgstr "вкажіть ключ пошуку" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "Максимальна _кількість пунктів-відповідників:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Зауваження: Liferea створити підписку на подачу, яка " #~ "використовуватиметься для опитування рушія пошуку щодо результатів пошуку " #~ "вказаного рядка. Ви можете зберегти таку подачу і оновлювати її дані " #~ "подібно до будь-якої іншої підписки." #~ msgid "Liferea is now online" #~ msgstr "Liferea працює у мережі" #~ msgid "Work Offline" #~ msgstr "Працювати автономно" #~ msgid "Liferea is now offline" #~ msgstr "Liferea працює у автономному режимі" #~ msgid "Work Online" #~ msgstr "Працювати в мережі" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "За допомогою цього пункту ви можете вимкнути оновлення подач." #~ msgid "Browser default" #~ msgstr "Типовий для переглядача" #~ msgid "Existing window" #~ msgstr "У існуючому вікні" #~ msgid "New window" #~ msgstr "У новому вікні" #~ msgid "New tab" #~ msgstr "У новій вкладці" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Програма для читання подач" #~ msgid "Online/Offline Button" #~ msgstr "Кнопка «У мережі»/«Автономний режим»" #~ msgid "_Open link in:" #~ msgstr "В_ідкривати посилання у:" #~ msgid "No comments yet." #~ msgstr "Коментарів ще немає." #~ msgid "Refresh" #~ msgstr "Оновити" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea — програма для читання подач у Linux" #~ msgid "" #~ "

        Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

        You can add new subscriptions

        • From main menu " #~ "'Subscription' -> 'New Subscription'
        • By dropping feed links " #~ "into the subscription list
        • By right clicking links and choosing " #~ "'Subscribe' within Liferea

        " #~ msgstr "" #~ "

        Ласкаво просимо до Liferea, програми для обробки новин, що " #~ "надходять мережевими подачами новин.

        Щоб додати підписку, " #~ "скористайтеся одним з таких варіантів дій:

        • виберіть у меню " #~ "програми пункт «Підписки → Нова підписка»;
        • скиньте посилання на " #~ "підписку на панель списку підписок;
        • наведіть вказівник миші на " #~ "посилання, клацніть правою кнопкою і виберіть пункт «Підписатися…» у " #~ "вікні Liferea

        " #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "Вбудовуватися до меню (індикатора) повідомлень" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Завершувати роботу замість згортання до меню повідомлень" #~ msgid "Start minimized to the messaging menu" #~ msgstr "Запускати згорнутою до меню повідомлень" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d новий пункт" #~ msgstr[1] "%d нових пункти" #~ msgstr[2] "%d нових пунктів" #~ msgstr[3] "%d новий пункт" #~ msgid "No new items" #~ msgstr "Нових пунктів немає" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d непрочитаний пункт" #~ msgstr[1] "" #~ "%s\n" #~ "%d непрочитані пункти" #~ msgstr[2] "" #~ "%s\n" #~ "%d непрочитаних пунктів" #~ msgstr[3] "" #~ "%s\n" #~ "%d непрочитаний пункт" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Непрочитаних пунктів немає" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Некоректна подача Atom: невідомий автор" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Інтегрувати список подач вашого облікового запису Google Reader. Liferea " #~ "показуватиме ваші підписки Google Reader і виконуватиме синхронізацію " #~ "вашого спису подач та списку прочитаних пунктів." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Інтегрувати blogrolls або Planets у ваш список подач. Liferea автоматично " #~ "додаватиме і вилучатиме пункти подач відповідно до змін у вихідному " #~ "документі OPML." #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Інтегрувати список подач вашого облікового запису Tiny Tiny RSS версії " #~ "1.5 і новіших версій. Liferea показуватиме ваші підписки tt-rss і " #~ "виконуватиме синхронізацію вашого спису подач та списку прочитаних " #~ "пунктів." #~ msgid "This feed does not exist anymore!" #~ msgstr "Цієї подачі більше не існує." #~ msgid "This news entry has no headline" #~ msgstr "У цього запису новин немає заголовка" #~ msgid "Visit" #~ msgstr "Відвідати" #~ msgid "Open feed" #~ msgstr "Відкрити подачу" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "У %s виявлено %d оновлення" #~ msgstr[1] "У %s виявлено %d оновлення" #~ msgstr[2] "У %s виявлено %d оновлень" #~ msgstr[3] "У %s виявлено %d оновлення" #~ msgid "Feed Update" #~ msgstr "Оновлення подач" #~ msgid "Show details" #~ msgstr "Показати подробиці" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "_Завжди сповіщати контекстними вікнами про цю подачу" #~ msgid "_Never do popup notification for this subscription." #~ msgstr "_Ніколи не сповіщати контекстними вікнами про цю подачу" #~ msgid "Notification Settings" #~ msgstr "Параметри сповіщення" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Показувати _контекстне вікно з новими заголовками" #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "Показувати п_іктограму стану у області сповіщень (системному лотку)" #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Показувати _кількість нових пунктів за допомогою піктограми лотка" #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "З_авершувати роботу замість згортання до системного лотка" #~ msgid "_Start in tray icon." #~ msgstr "_Запускати згорнутою у лоток" #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "© Команда Liferea\n" #~ "2003–2012\n" #~ msgid "Download and view feeds" #~ msgstr "Звантаження і перегляд подач" #~ msgid "You may want to validate the feed using" #~ msgstr "Ви можете перевірити цю подачу за допомогою" #~ msgid "bookmark" #~ msgstr "закладка" #~ msgid "comments" #~ msgstr "коментарі" #~ msgid "flag" #~ msgstr "прапорець" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Помилка звантаження вкладення: «%s»" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Звантаження вкладення завершено: «%s»" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "У цій версії Liferea внесено зміни до формату даних кешу. Було виконано " #~ "перетворення даних у новий формат кешу подач. Вміст кешу у %s не було " #~ "вилучено у автоматичному режимі. Будь ласка, вилучіть цей каталог вручну, " #~ "якщо вважаєте, що перенесення даних завершено успішно." #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Перейти до наступного непрочитаного пункту. Якщо у поточній подачі більше " #~ "немає таких пунктів, програма перейде до читання наступної." #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Помилка під час звантаження: «%s»" #~ msgid "Download finished." #~ msgstr "Звантаження завершено." #~ msgid "Launch Item In _Tab" #~ msgstr "Відкрити пункт у в_кладці" #~ msgid "_Launch Item In Browser" #~ msgstr "Ві_дкрити пункт у переглядачі" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Копіювати _адресу з пункту до буфера" #~ msgid "Choose download directory" #~ msgstr "Виберіть каталог для звантаження даних" #~ msgid "Liferea Sync %s@%s" #~ msgstr "Синхронізація Liferea %s@%s" #~ msgid "Downloading Enclosure" #~ msgstr "Звантаження вкладення" #~ msgid "Sync" #~ msgstr "Синхронізація" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "_Увімкнути синхронізацію локальною мережею" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "В_ручну:\n" #~ "(%s для URL)" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "П_ередати адресу і не звантажувати вкладення" #~ msgid "_Save downloads in" #~ msgstr "З_берігати звантажені дані у" #~ msgid "_Service Name" #~ msgstr "Назва с_лужби" #~ msgid "link cosmos" #~ msgstr "посилання cosmos" #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "Виводити діагностичні повідомлення щодо завантаження додатків" #~ msgid "Liferea seems to be running already!" #~ msgstr "Liferea вже запущено!" #~ msgid "Update status" #~ msgstr "Стан оновлення" #~ msgid "was updated" #~ msgstr "оновлено" #~ msgid "was not updated" #~ msgstr "не оновлено" #~ msgid "The orientation of the tray." #~ msgstr "Орієнтація лотка" #~ msgid "topics_en.html" #~ msgstr "topics_en.html" #~ msgid "reference_en.html" #~ msgstr "reference_en.html" #~ msgid "faq_en.html" #~ msgstr "faq_en.html" #~ msgid "_Script Manager" #~ msgstr "_Керування скриптами" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Налаштувати або змінити скрипти обробки, написані мовою LUA" #~ msgid "Search With ..." #~ msgstr "Шукати за допомогою…" #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d відповідник до «%s»" #~ msgstr[1] "%d відповідники до «%s»" #~ msgstr[2] "%d відповідників до «%s»" #~ msgstr[3] "%d відповідник до «%s»" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d відповідник" #~ msgstr[1] "%d відповідники" #~ msgstr[2] "%d відповідників" #~ msgstr[3] "%d відповідник" #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "У списку пунктів тепер залишилися лише пункти, що відповідають вказаному " #~ "шаблону пошуку. Якщо вам потрібно зберегти ці результати пошуку, ви " #~ "можете натиснути кнопку «Тека пошуку» у діалоговому вікні пошуку: Liferea " #~ "додасть теку пошуку до вашого списку подач." #~ msgid "You have to select a feed entry" #~ msgstr "Вам слід позначити запис подачі" #~ msgid "(empty)" #~ msgstr "(порожній)" #~ msgid "_Properties..." #~ msgstr "_Властивості…" #~ msgid "Update out-dated feeds" #~ msgstr "Оновлювати застарілі подачі" #~ msgid "Force update of all feeds" #~ msgstr "Примусово оновлювати всі подачі" #~ msgid "No feed update at all" #~ msgstr "Взагалі не оновлювати подачі" #~ msgid "startup" #~ msgstr "запуск" #~ msgid "feed updated" #~ msgstr "оновлено подачу" #~ msgid "feed added" #~ msgstr "додано подачу" #~ msgid "item selected" #~ msgstr "позначено пункт" #~ msgid "feed selected" #~ msgstr "позначено подачу" #~ msgid "item unselected" #~ msgstr "знято позначення з пункту" #~ msgid "feed unselected" #~ msgstr "знято позначення з подачі" #~ msgid "shutdown" #~ msgstr "завершення роботи" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Вибачте, підтримки роботи зі скриптами не передбачено." #~ msgid "Script Name" #~ msgstr "Назва скрипту" #~ msgid "No script selected!" #~ msgstr "Не вказано жодного скрипту." #~ msgid "Create a new search feed." #~ msgstr "Створити новий запис подачі пошуку." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea не вдалося показати дані цього пункту." #~ msgid "

        View this item's content.

        " #~ msgstr "

        Переглянути дані цього пункту.

        " #~ msgid "Bloglines" #~ msgstr "Bloglines" #~ msgid "" #~ "Integrate the feed list of your Bloglines account. Liferea will present " #~ "your Bloglines subscription as a read-only subtree in the feed list." #~ msgstr "" #~ "Інтегрувати список подач з вашого облікового запису на Bloglines. Liferea " #~ "покаже вашу підписку Bloglines окремим придатним лише для читання " #~ "піддеревом у списку подач." #~ msgid "feedlist.opml" #~ msgstr "feedlist.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "У %s %d новий або оновлений заголовок\n" #~ msgstr[1] "У %s %d нові або оновлені заголовки\n" #~ msgstr[2] "У %s %d нових або оновлених заголовків\n" #~ msgstr[3] "У %s %d новий або оновлений заголовок\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Hook" #~ msgstr "Обробка" #~ msgid "Registered Scripts" #~ msgstr "Зареєстровані скрипти" #~ msgid "Script Code" #~ msgstr "Код скрипту" #~ msgid "text/plain" #~ msgstr "text/plain" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Позначення цього пункту може спричинити значні затримки під час " #~ "завантаження тек, що містять багато подач." #~ msgid "Downloading Enclosures" #~ msgstr "Звантаження вкладень" #~ msgid "Feed Cache Handling" #~ msgstr "Обробка кешу подач" #~ msgid "Feed Name" #~ msgstr "Назва подачі" #~ msgid "Feed Update Settings" #~ msgstr "Параметри оновлення подач" #~ msgid "HTTP Proxy Server" #~ msgstr "Проксі-сервер HTTP" #~ msgid "Opening Enclosures" #~ msgstr "Відкриття вкладень" #~ msgid "Reading Headlines" #~ msgstr "Читання заголовків" #~ msgid "Toolbar Settings" #~ msgstr "Параметри панелі інструментів" #~ msgid "Update Interval" #~ msgstr "Проміжок між оновленнями" #~ msgid "Web Integration" #~ msgstr "Веб-інтеграція" #~ msgid "Add Script" #~ msgstr "Додати скрипт" #~ msgid "At _startup:" #~ msgstr "При _запуску:" #~ msgid "Create new script" #~ msgstr "Створити новий скрипт" #~ msgid "Exec Command" #~ msgstr "Виконати команду" #~ msgid "Reuse existing script" #~ msgstr "Використати вже існуючий скрипт" #~ msgid "Script Manager" #~ msgstr "Керування скриптами" #~ msgid "Search _Link Cosmos with" #~ msgstr "Шукати _у Link Cosmos" liferea-1.12.7/po/vi.po000066400000000000000000002210551352135647700146270ustar00rootroot00000000000000# Vietnamese translation for liferea. # Copyright © 2013 Free Software Foundation, Inc. # This file is distributed under the same license as the liferea package. # Trần Ngọc Quân , 2012-2013, 2017. # msgid "" msgstr "" "Project-Id-Version: liferea git-master\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2017-02-18 15:18+0700\n" "Last-Translator: Trần Ngọc Quân \n" "Language-Team: Vietnamese \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-Poedit-SourceCharset: UTF-8\n" "X-Generator: Gtranslator 2.91.7\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Bộ đọc Feed" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" "Liferea là từ viết tắt từ Linux Feed Reader. Nó là một bộ tập hợp tin tức " "cho các feed tin tức trực tuyến. Nó hỗ trợ một lượng lớn các định dạng feed " "khác nhau bao gồm RSS/RDF, CDF và Atom. Hiện sẵn có nhiều bộ đọc tin tức, " "nhưng những cái khác đó không sẵn có trên Linux hay yêu cầu cài đặt bổ sung " "nhiều thư viện. Liferea có để lấp đầy khoảng trống này bằng các tạo cho môi " "trường GTK/GNOME một bộ tập hợp tin tức nhanh, dễ cài đặt và sử dụng." #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "Các tính năng phân biệt:" #: ../liferea.appdata.xml.in.h:4 msgid "Read articles when offline" msgstr "Đọc các bài viết khi ngoại tuyến" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TheOldReader" msgstr "Đồng bộ hóa với TheOldReader" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with TinyTinyRSS" msgstr "Đồng bộ hóa với TinyTinyRSS" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with InoReader" msgstr "Đồng bộ hóa với InoReader" #: ../liferea.appdata.xml.in.h:8 msgid "Synchronizes with Reedah" msgstr "Đồng bộ hóa với Reedah" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "Lưu vĩnh viễn tin chính vào một bin tin tức" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "Khớp các mục tin sử dụng các thư mục tìm kiếm" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "Chơi Podcast" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Bộ đọc Feed" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Bộ đọc Feed Liferea" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Đọc các tin mới và blog" #: ../net.sourceforge.liferea.desktop.in.h:5 #, fuzzy msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "news;feed;aggregator;blog;podcast;" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "Feed này không còn được kết nối nữa. Nó không sẵn dùng. Liferea sau này " "không thể cập nhật thêm nữa nhưng bạn vẫn có thể truy cập các đề mục đã được " "nhớ tạm." #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "" "Lần cập nhật cuối địa chỉ đặt xem dài hạn này gặp lỗi!
        Mã lỗi HTTP " ": " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Có một số lỗi xảy ra khi phân tích feed này!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Chi tiết về lỗi bộ phân tích cú pháp" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Chi tiết" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" "Bạn có lẽ cần liên hệ với người quản lý trang web hay tác giả của feed về " "vấn đề này!" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Có một số lỗi xảy ra khi lọc feed này!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Chi tiết về lỗi bộ lọc" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Feed:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "Nguồn:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Nhà xuất bản" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "Tác quyền" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "có con" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "những tiêu đề chưa đọc" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "Thư mục:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "Nguồn" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Feed" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "Được lọc dưới" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "Tác giả" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "Chia sẻ bởi" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Thông qua" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Quan hệ" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Đồng thời post tại" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Người tạo" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "Tọa độ" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "Bản đồ" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "Ghi chú" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "Đang cập nhật…" #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Phần" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Phòng ban" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "Thùng rác tin tức:" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" "Thêm các mục vào thùng rác tin tức này bằng cách chọn \"Sao chép vào Thùng " "rác Tin tức\" từ trình đơn ngữ cảnh danh sách mục tin." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Thư mục tìm kiếm:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "Lệnh duyệt gặp lỗi: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "Đang khởi chạy: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Lỗi xác thực" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Không thể tạo thư mục nhớ đệm \"%s\"!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "Hôm nay %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "Hôm qua %l:%M %p" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %l:%M %p" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%b %d %l:%M %p" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%b %d %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" không phải là tập tin cấu hình kiểu tài liệu đính kèm hợp lệ!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" "Bạn vẫn chưa cấu hình công cụ tải về! Hãy làm điều đó tại tab “Vỏ ngoài” " "trong “Công cụ/Tùy chỉnh”." #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" "Lệnh gặp lỗi: \n" "\n" "%s\n" "\n" " Hãy kiểm tra xem công cụ “tải về” đã được cấu hình đã cài đặt và hoạt động " "có chính xác hay không! Bạn có thể thay nó tại tab “Tải về” trong “Công cụ/" "Tùy chỉnh”." #: ../src/export.c:188 #, c-format msgid "Error renaming %s to %s: %s\n" msgstr "Gặp lỗi khi đổi tên %s thành %s: %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "XML gặp lỗi khi đọc tập tin OPML! Không thể nhập vào \"%s\"!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Tài liệu trống rỗng! Tài liệu OPML \"%s\" không nên là trống rỗng trong khi " "nó được dùng để nhập vào." #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" không phải là tài liệu định dạng OPML hợp lệ! Liferea không thể nhập " "vào tập tin này!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "Nhập vào danh sách feed" #: ../src/export.c:481 msgid "Import Feed List" msgstr "Nhập vào danh sách feed" #: ../src/export.c:481 msgid "Import" msgstr "Nhập" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 msgid "OPML Files" msgstr "Tập tin OPML" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "Gặp lỗi khi xuất ra danh sách feed!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Danh sách feed đã được xuất ra!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "Xuất ra danh sách feed" #: ../src/export.c:498 msgid "Export" msgstr "Xuất" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        Không thể dò tìm kiểu của feed này! Xin hãy kiểm tra xem nguồn của nó có " "thực sự chỉ vào một nguồn tài nguyên được cung cấp bởi một trong số định " "dạng được hỗ trợ!!

        Bộ phân tích XML Kết xuất:
        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" đã được cập nhật…" #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" không sẵn sàng" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "Địa chỉ URL bạn muốn Liferea đặt xem dài hạn chỉ đến một trang web và hệ " "thống tự động không tìm thấy feed nào trên trang này. Có lẽ trang web này " "không hỗ trợ chương trình tự dò tìm feed." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "Lỗi XML trong khi đọc feed! Feed \"%s\" không thể tải lên được!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Tài liệu rỗng!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "XML không hợp lệ!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "Nguồn chỉ đến một tài liệu HTML." #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Không thể xác định được kiểu của feed." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 msgid "There are no unread items" msgstr "Không có mục tin nào chưa đọc cả" #: ../src/liferea_application.c:282 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" "Khởi động Liferea với cửa sổ chính trong trạng thái STATE. STATE có thể là " "“shown” hoặc “hidden”" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "TRẠNG-THÁI" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "hiển thị thông tin phiên bản rồi thoát" #: ../src/liferea_application.c:284 msgid "Add a new subscription" msgstr "Thêm một địa chỉ đặt xem dài hạn" #: ../src/liferea_application.c:284 msgid "uri" msgstr "uri" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "Hiển thị ra thông tin để gỡ lỗi cho tất cả các kiểu" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "Hiển thị ra thông tin để gỡ lỗi cho bộ tiếp hợp bộ nhớ tạm" #: ../src/liferea_application.c:292 msgid "Print debugging messages for the configuration handling" msgstr "Hiển thị ra thông tin để gỡ lỗi cho bộ tiếp hợp cấu hình" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "Hiển thị ra thông tin để gỡ lỗi cho bộ tiếp hợp cơ sở dữ liệu" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "Hiển thị ra thông tin để gỡ lỗi cho tất cả các hàm GUI" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "Cho phép gỡ lỗi biểu diễn HTML. Mỗi khi Liferea biểu diễn kết xuất HTML nó " "cũng đồng thời đổ đống trang HTML đã tạo vào ~/.cache/liferea/output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "" "Hiển thị ra thông tin để gỡ lỗi cho tất cả các kết nối mạng đang hoạt động" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "Hiển thị ra thông tin để gỡ lỗi cho tất cả các hàm phân tích cú pháp" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Hiển thị ra thông tin để gỡ lỗi khi một hàm xử lý mất quá nhiều thời gian" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "Hiển thị ra thông tin để gỡ lỗi khi vào/rời_khỏi hàm" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "Hiển thị ra thông tin để gỡ lỗi cho tiến trình cập nhật feed" #: ../src/liferea_application.c:301 msgid "Print debugging messages of the search folder matching" msgstr "Hiển thị ra thông tin để gỡ lỗi cho thư mục tìm kiếm hợp" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "Hiển thị thông tin gỡ lỗi chi tiết" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "Hiển thị ra thông tin để gỡ lỗi cho chủ đề đã chỉ ra" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "Yêu cầu cập nhật đã bị hủy bỏ" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "Không thể phân giải tên máy của máy phục vụ đích" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "Không thể phân giải tên máy chủ ủy thác" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "Không thể kết nối đến máy chủ" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "Không thể kết nối đến máy chủ ủy thác" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "Mạng xảy ra lỗi, hoặc là một chương trình khác đã đóng kết nối đột xuất" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "Nguồn tài nguyên đã thực sự được thay đổi sang vị trí mới" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Bạn không đủ thẩm quyền để tải về feed này. Hãy cập nhật tài khoản và mật " "khẩu trong hộp thoại thuộc tính của feed" #: ../src/net.c:476 msgid "Payment required" msgstr "Yêu cầu phải trả tiền" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "Bạn không được phép truy cập vào tài nguyên này" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "Không tìm thấy tài nguyên" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "Phương thức không được phép" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "Không được chấp nhận" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "Máy chủ ủy thác proxy yêu cầu xác thực" #: ../src/net.c:482 msgid "Request timed out" msgstr "Kết nối bị lỗi quá thời gian" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Hết hy vọng. Tài nguyên không tồn tại. Hãy bỏ địa chỉ đặt dài hạn!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "Có một lỗi nội bộ trong quá trình cập nhật" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Feed không sẵn sàng: Máy chủ được yêu cầu đã không hỗ trợ chuyển hướng!" #: ../src/net.c:492 msgid "Client Error" msgstr "Lỗi máy khách" #: ../src/net.c:494 msgid "Server Error" msgstr "Lỗi máy phục vụ" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "Một lỗi mạng không rõ đã xảy ra!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "Mục" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "có chứa" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "không chứa" #: ../src/rule.c:175 msgid "Item title" msgstr "Tên mục" #: ../src/rule.c:176 msgid "Item body" msgstr "Thân mục" #: ../src/rule.c:177 msgid "Read status" msgstr "Trạng thái đọc" #: ../src/rule.c:177 msgid "is unread" msgstr "chưa đọc" #: ../src/rule.c:177 msgid "is read" msgstr "đã đọc" #: ../src/rule.c:178 msgid "Flag status" msgstr "Trạng thái cờ" #: ../src/rule.c:178 msgid "is flagged" msgstr "được gắn cờ" #: ../src/rule.c:178 msgid "is unflagged" msgstr "không được gắn cờ" #: ../src/rule.c:179 msgid "Podcast" msgstr "Podcast" #: ../src/rule.c:179 msgid "included" msgstr "được bao gồm" #: ../src/rule.c:179 msgid "not included" msgstr "không được bao gồm" #: ../src/rule.c:180 msgid "Category" msgstr "Category" #: ../src/rule.c:180 msgid "is set" msgstr "được đặt" #: ../src/rule.c:180 msgid "is not set" msgstr "chưa được đặt" #: ../src/rule.c:181 msgid "Feed title" msgstr "Tiêu đề Feed" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Địa chỉ đặt dài hạn \"%s\" đã được cập nhật từ trước rồi!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "Địa chỉ đặt xem dài hạn \"%s\" không còn được tiếp tục nữa. Liferea không " "thể cập nhật thêm nữa!" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Đang cập nhật favicon cho \"%s\"" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Ở đây có vấn đề xảy ra trong khi đọc địa chỉ đặt xem dài hạn này. Hãy kiểm " "tra URL và xem kết xuất của thiết bị cuối." #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "Địa chỉ URL của \"%s\" đã thực sự bị thay đổi và đã được cập nhật" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "" "\"%s\" không còn được tiếp tục nữa. Liferea không thể cập nhật thêm nữa!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" không thay đổi kích thước kể từ lần cập nhật trước" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "Đang cập nhật \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Gặp lỗi kho mở tập tin tạm %s để sử dụng cho việc lọc!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s đã thoát với trạng thái %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Lỗi: Không thể mở đường ống (pipe) \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Lỗi: Không thể mở tập tin \"%s\"" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Lỗi: Không có tập tin \"%s\"" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "Thêm thư mục tìm kiếm" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[Ở đây có nhiều lỗi. Kết xuất đã bị cắt cụt!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "XML Parser: Không thể phân tích tài liệu:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Đính kèm" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " Bytes" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "kB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d tài liệu đính kèm" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "Chọn một tệp tin" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "Đuôi mở rộng Tệp tin .%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Không tìm thấy tập tin pixmap: %s" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d mới)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d chưa đọc%s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "Trợ Giúp Theo Chủ Đề" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "Tham khảo nhanh" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "FAQ" #: ../src/ui/search_dialog.c:116 msgid "Saved Search" msgstr "Tìm kiếm đã lưu" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "Nhập vào tên và mật khẩu cho \"%s\" (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Nguồn không rõ" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 msgid "_Cancel" msgstr "T_hôi" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "Mọi kiểu tập tin" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea đang ở trạng thái ngoại tuyến. Cập nhật là điều không thể." #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "Tìm trong tất cả các Feed" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "Đánh dấu là tất cả đã đọc" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "Bạn có chắc muốn xóa bỏ\"%s\" không?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "Mục này chưa chỉ ra đường link!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** Vô đề ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "Tin chính" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "Ngày tháng" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "Bạn phải chọn một feed để mà xóa bỏ các mục tin của nó!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "Không có mục nào được chọn" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "Mở Trong _Tab" #: ../src/ui/popup_menu.c:111 msgid "_Open In Browser" msgstr "_Mở trong trình duyệt" #: ../src/ui/popup_menu.c:115 msgid "Open In _External Browser" msgstr "Mở liên kết trong bộ duyệt _Bên ngoài" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "Sao chép vào Thùng rác tin tức" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "Đánh dấ_u ở %s" #: ../src/ui/popup_menu.c:153 msgid "Copy Item _Location" msgstr "Sao chép địa chỉ _Mục tin" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "Bật/Tắt trạng thái đọc" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "Bật/Tắt Cờ của mục tin" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "Xóa bỏ mục t_in" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "Mở tập tin đính kèm…" #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "Ghi lại bằng tên mới…" #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "Sao chép địa chỉ liên kết" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "_Cập nhật" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "Cập nhật thư mục" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "Thêm một địa chỉ đặt dài hạn…" #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "Thư _mục mới…" #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "Thêm thư mục tìm _kiếm…" #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "Nguồn mới…" #: ../src/ui/popup_menu.c:300 msgid "New _News Bin..." msgstr "Thùng rác tin tức mới…" #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "_Mới" #: ../src/ui/popup_menu.c:312 msgid "Sort Feeds" msgstr "Sắp xếp Feed" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "Đánh dấu là tất cả đã đọc" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "_Xây dụng lại" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "_Xóa" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "_Thuộc tính" #: ../src/ui/popup_menu.c:343 msgid "Convert To Local Subscriptions..." msgstr "Chuyển thành địa chỉ đặt xem dài hạn Nội bộ…" #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "mặc định GNOME" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "Chữ ở dưới biểu tượng" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "Chữ ở bên cạnh biểu tượng" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "Chỉ có biểu tượng" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "Chỉ có chữ" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "phút" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "giờ" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "ngày" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "Space" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " Space" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Space" #: ../src/ui/preferences_dialog.c:112 msgid "Normal View" msgstr "Trình bày bình thường" #: ../src/ui/preferences_dialog.c:113 msgid "Wide View" msgstr "Trình bày kiểu rộng" #: ../src/ui/preferences_dialog.c:114 msgid "Combined View" msgstr "Trình bày kiểu tổ hợp" #: ../src/ui/preferences_dialog.c:476 msgid "Default Browser" msgstr "Trình duyệt mặc định" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "Kiểu" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "Chương trình" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Rỗng)" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Đang xây dụng lại" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "Đang xóa mục" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Bạn có chắc là mình muốn xóa \"%s\" cùng với nội dung của nó?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Bạn có chắc muốn xóa bỏ\"%s\" không?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "Xác nhận việc xóa" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "Xác nhận việc xóa" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "_Mở" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "Nơi cung cấp feed này đã gợi ý nhịp cập nhật là mỗi %d phút." #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "Feed này ghi rõ không có nhịp cập nhật mặc định" #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "Không tên" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Website" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Thêm một đặt xem dài hạn" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "Chọn tập tin OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Thêm một địa chỉ đặt xem dài hạn OPML" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "Không tìm thấy kiểu nguồn danh sách feed!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "Kiểu nguồn" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" "Việc đăng nhập cho “%s” vẫn chưa hoàn tất! Vui lòng chờ cho việc đăng nhập " "được thực hiện xong." #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" "Địa chỉ đặt xem dài hạn “%s” đã chuyển đổi thành công sang kiểu nội bộ!" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "Đăng nhập gặp lỗi!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "Reedah" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "Không thể phân tích cú pháp của JSON được trả về từ API Reedah!" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "Không tiếp cận được TinyTinyRSS HTTP API!" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" "Gặp lỗi khi TinyTinyRSS đặt xem dài hạn một feed! Kiểm tra xem bạn có thực " "sự phân tích cú pháp của một feed URL!" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "Gặp lỗi khi TinyTinyRSS thôi đặt xem dài hạn một feed!" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" "Phiên bản TinyTinyRSS này không hỗ trợ xóa bỏ các feed. Hãy nâng cấp lên " "phiên bản %s hay mới hơn!" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "Không thể phân tích cú pháp của JSON được trả về từ API TinyTinyRSS!" #: ../src/fl_sources/theoldreader_source.c:329 msgid "TheOldReader" msgstr "TheOldReader" #: ../src/webkit/liferea_web_view.c:175 msgid "Open Link In _Tab" msgstr "Mở liên kết trong _Tab" #: ../src/webkit/liferea_web_view.c:176 msgid "Open Link In Browser" msgstr "Mở liên kết trong trình duyệt" #: ../src/webkit/liferea_web_view.c:177 msgid "Open Link In External Browser" msgstr "Mở liên kết trong trình duyệt ngoài" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "Đánh dấu liên kết ở %s" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "Sao chép địa chỉ liên kết" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "Ghi lại ảnh với tên" #: ../src/webkit/liferea_web_view.c:194 msgid "_Copy Image Location" msgstr "Sao chép địa chỉ của ảnh" #: ../src/webkit/liferea_web_view.c:197 msgid "S_ave Link As" msgstr "Ghi lại Link với tên" #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "Ghi lại ảnh với tên" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "Đặt _dài hạn…" #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "_Sao chép" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "Tăn_g kích thước chữ" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "Giả_m kích thước chữ" #: ../glade/about.ui.h:1 msgid "About" msgstr "Giới thiệu" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea là chương trình tập hợp tin tức chạy trên nền GTK+" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Trang chủ Liferea" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Xác thực" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "Tài khoả_n:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "_Mật khẩu:" #: ../glade/enclosure_handler.ui.h:1 msgid "Open Enclosure" msgstr "Mở đính kèm" #: ../glade/enclosure_handler.ui.h:2 msgid "Open an enclosure of type:" msgstr "Mở các tài liệu đính kèm cho các kiểu sau:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Bạn muốn Liferea làm gì với tài liệu đính kèm này? Xin hãy nhập vào lệnh mà " "bạn muốn thực hiện ở phía dưới. Những URL tài liệu đính kèm sẽ được áp dụng " "như là một tham số cho lệnh này:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "_Tìm duyệt" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "" "Thực hiện tự động cho những tài liệu đính kèm giống với cái này kể từ giờ." #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "Thêm tài khoản Google Reader" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "Hãy nhập vào các cài đặt tài khoản Google Reader của bạn." #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Mật khẩu" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_Tài khoản (Email)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "0" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "Hiển thị tiêu đề" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "Headlines" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "Đánh dấu là tất cả đã đọc" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "Đánh dấu là tất cả đã đọc" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "Tạo thư mục mới" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "Tên thư mục:" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "Tạo thùng rác tin tức" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "Tên thùng rác tin tức:" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Nguồn Feed" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "Kiểu Nguồn:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "_URL" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "_Lệnh" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "_Tệp tin nội bộ" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "Chọn tập tin…" #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "_Nguồn:" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Tải về / Xử lý sau" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "Không sử dụng proxy khi tải dữ liệu về" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "Sử dụng bộ lọc chuyển đổi" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea có thể sử dụng phần bổ sung dùng để lọc từ bên ngoài cốt để mà truy " "cập các feed và thư mục mà nó có định dạng không được hỗ trợ. Đọc thêm tài " "liệu để có thông tin chi tiết." #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "Chuyển đổi sử dụng:" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Chọn nguồn" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "Chọn một kiểu nguồn mà bạn muốn thêm…" #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Thêm vào OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" "Hãy chỉ ra một tập tin nội bộ hoặc một địa chỉ URL chỉ đến một danh sách " "feed OPML hợp lệ." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Vị trí" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Chọn tập tin" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Tùy chỉnh Liferea" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "Bộ tiếp hợp bộ nhớ tạm feed" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "Số lượng mục tin mặc định cho mỗi feed để ghi lại:" #: ../glade/prefs.ui.h:5 msgid "Feed Update Settings" msgstr "Cài đặt cập nhật feed" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "Chú ý: Nên nhớ rằng cần đặt thời gian làm tươi mới cho hợp lý. Thông " "thường nó gây ra sự lãng phí về băng thông để lấy về các feed nếu tần số này " "nhiều hơn một lần mỗi giờ." #: ../glade/prefs.ui.h:8 msgid "_Update all subscriptions at startup." msgstr "Cập nhật mọi địa chỉ đặt xem dài hạn lúc khởi động." #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "Nhịp thời gian cập nhật feed mặc định:" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "1" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Feeds" #: ../glade/prefs.ui.h:12 msgid "Folder Display Settings" msgstr "Cài đặt hiển thị thư mục" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "" "Hiển thị các mục tin của tất cả các feed con khi thư mục chứa nó được chọn." #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "Ẩn các mục tin đã đọc." #: ../glade/prefs.ui.h:15 msgid "Feed Icons (Favicons)" msgstr "Biểu tượng Feed (Favicons)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "Cập nhật tất cả favicons ngay bây giờ" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "Thư mục" #: ../glade/prefs.ui.h:18 msgid "Reading Headlines" msgstr "Đang đọc tiêu đề" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "Đọc lướt qua toàn bộ bài viết bằng:" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "Chế độ xem Mặc địn_h:" #: ../glade/prefs.ui.h:21 msgid "Web Integration" msgstr "Hợp nhất Web" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "Gửi dấu trang tới" #: ../glade/prefs.ui.h:24 msgid "Internal Browser Settings" msgstr "Cài đặt trình duyệt nội tại" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "Mở các liên kết trong cửa sổ của Liferea." #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "_Tắt Javascript." #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "_Bật các phần bổ sung trình duyệt." #: ../glade/prefs.ui.h:28 msgid "External Browser Settings" msgstr "Cài đặt trình duyệt bên ngoài" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "_Trình duyệt:" #: ../glade/prefs.ui.h:30 msgid "_Manual:" msgstr "_Thủ công:" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "(%s cho URL)" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "Trình duyệt" #: ../glade/prefs.ui.h:34 msgid "Toolbar Settings" msgstr "Cài đặt thanh công cụ" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "Ẩn thanh công cụ." #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "Những nhãn cho nút bấm trên thanh công cụ:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "Máy chủ HTTP Proxy" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "Tự dò tìm (GNOME hoặc môi trường)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "_Không dùng máy chủ ủy thác" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "Cài đặt _thủ công:" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "Má_y chủ proxy:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "Cổn_g proxy:" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "Dùng xác thực ủy thác" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "Tên tài khoản proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "Mật khẩu Proxy:" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:51 msgid "Privacy Settings" msgstr "Cài đặt chính sách riêng tư" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "Cho biết địa chỉ mà Tôi _không muốn bị theo dõi" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "Riêng tư" #: ../glade/prefs.ui.h:54 msgid "Downloading Enclosures" msgstr "Đang mở các tài liệu đính kèm" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "Tả_i về sử dụng" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 msgid "Opening Enclosures" msgstr "Đang mở tài liệu đính kèm" #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "Những tài liệu đính kèm" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "Các thuộc tính của địa chỉ đặt dài hạn" #: ../glade/properties.ui.h:2 msgid "Feed Name" msgstr "Tên Feed" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "Tê_n Feed:" #: ../glade/properties.ui.h:4 msgid "Update Interval" msgstr "Khoảng thời gian giữa hai lần cập nhật" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "_Sử dụng khoảng cách thời gian giữa hai lần cập nhật theo mặc định" #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "Nhịp cập nhật đặc thù _feed của" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "_Không cập nhật feed này một cách tự động." #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Người cung cấp feed gợi ý nhịp thời gian cập nhật %d phút." #: ../glade/properties.ui.h:11 msgid "General" msgstr "Chung" #: ../glade/properties.ui.h:20 msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea có thể sử dụng văn lệnh lọc từ bên ngoài cốt để mà truy cập các feed " "và thư mục mà nó có định dạng không được hỗ trợ." #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Cài đặt nhớ tạm điều khiển nếu nội dung của feed được ghi lại khi Liferea " "thoát ra. Các mục tin được đánh dấu luôn được lưu vào bộ nhớ này." #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "Sử dụng cài đặt bộ nhớ tạm _mặc định" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "_Tắt nhớ đệm" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "_Không hạn chế đệm" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "_Số mục để ghi:" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "Lưu trữ" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "Sử dụng xác thực kiểu HTTP" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "Tải về" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "Tự động tải về các tài liệu đính kèm cho feed này." #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Tự động tải liên kết mục tin trong trình duyệt đã được cấu hình khi chọn các " "bài viết." #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "Lờ đi các feed ghi chú cho địa chỉ đặt xem dài hạn này" #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "Đánh dấu các _mục tin đã được tải về là đã đọc." #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "Cao cấp" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "Thêm tài khoản Reedah" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "Hãy nhập vào các cài đặt tài khoản Reedah của bạn." #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "Đổi tên" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "Tê_n mới:" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "Thuộc tính thư mục tìm kiếm" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "Tên tìm kiếm:" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "Tìm những mục tin mà nó phù hợp với tiêu chuẩn sau đây" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "Bất kỳ quy tắc nào khớp" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "Tất _cả các quy tắc phải khớp" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "Tìm kiếm cấp cao" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "Thư mục tìm _kiếm…" #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "Tìm trong tất cả các Feed" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "_Cao cấp…" #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Bắt đầu tìm kiếm cho chuỗi được chỉ ra trong toàn bộ feed. Kết quả của việc " "tìm kiếm sẽ xuất hiện trong một danh sách các mục tin." #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "_Tìm kiếm cho:" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Nhập vào một chuỗi tìm kiếm để Liferea có thể tìm trong tiêu đề hoặc nội " "dung của mục tin." #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Cao cấp…" #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "Nhập vào địa chỉ website để sử dụng cho chương trình tự động phát hiện hay " "trong trường hợp bạn biết nó rút trích địa chỉ feed." #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "Thêm tài khoản TheOldReader" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "Hãy nhập vào các cài đặt tài khoản TheOldReader của bạn." #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Thêm tài khoản Tiny Tiny RSS" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "Hãy nhập vào các cài đặt tài khoản TinyTinyRSS của bạn." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "Địa chỉ URL của máy _phục vụ" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Tài khoản" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "Cập nhật bộ theo dõi" #: ../glade/update_monitor.ui.h:2 msgid "Cancel All" msgstr "Hủy bỏ tất" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "Các yêu cầu còn treo" #: ../glade/update_monitor.ui.h:4 msgid "Downloading Now" msgstr "Tải về ngay" #~ msgid "_Subscriptions" #~ msgstr "Địa chỉ đặt xem dài hạn" #~ msgid "Update _All" #~ msgstr "Cập nhật _tất cả" #~ msgid "Updates all subscriptions." #~ msgstr "Cập nhật tất cả các địa chỉ đặt xem dài hạn" #~ msgid "Mark All As _Read" #~ msgstr "Đánh dấu là tất cả đã đọ_c" #~ msgid "Marks read every item of every subscription." #~ msgstr "Đánh dấu đọc cho mỗi mục tin của mỗi địa chỉ đặt xem dài hạn." #~ msgid "_Import Feed List..." #~ msgstr "_Nhập vào danh sách feed…" #~ msgid "Imports an OPML feed list." #~ msgstr "Nhập vào danh sách feed kiểu OPML." #~ msgid "_Export Feed List..." #~ msgstr "_Xuất ra danh sách feed…" #~ msgid "Exports the feed list as OPML." #~ msgstr "Xuất ra danh sách feed kiểu OPML." #~ msgid "_Quit" #~ msgstr "T_hoát" #~ msgid "_Feed" #~ msgstr "_Feed" #~ msgid "Remove _All Items" #~ msgstr "Gỡ bỏ _mọi mục tin" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "Gỡ bỏ tất cả các mục của feed hiện hành đã được chọn." #~ msgid "_Item" #~ msgstr "_Mục" #~ msgid "Previous Item" #~ msgstr "Mục kế trước" #~ msgid "Next Item" #~ msgstr "Mục kế tiếp" #~ msgid "_Next Unread Item" #~ msgstr "Mục chưa đọc _kế tiếp" #~ msgid "_View" #~ msgstr "_Trình bày" #~ msgid "Increases the text size of the item view." #~ msgstr "Tăng kích thước hiển thị các mục." #~ msgid "Decreases the text size of the item view." #~ msgstr "Giảm kích thước hiển thị các mục" #~ msgid "_Tools" #~ msgstr "_Công cụ" #~ msgid "_Update Monitor" #~ msgstr "_Cập nhật bộ theo dõi" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "" #~ "Hiển thị danh sách toàn bộ feed hiện tại đang trong hàng đợi cập nhật" #~ msgid "_Preferences" #~ msgstr "_Tùy chỉnh" #~ msgid "Edit Preferences." #~ msgstr "Sửa sở thích riêng." #~ msgid "S_earch" #~ msgstr "Tìm _kiếm" #~ msgid "Search All Feeds..." #~ msgstr "Tìm trong tất cả các Feed…" #~ msgid "Show the search dialog." #~ msgstr "Hiển thị hộp thoại tìm kiếm." #~ msgid "_Help" #~ msgstr "Trợ g_iúp" #~ msgid "_Contents" #~ msgstr "_Nội dung" #~ msgid "View help for this application." #~ msgstr "Hiển thị trợ giúp cho ứng dụng này." #~ msgid "_Quick Reference" #~ msgstr "_Tham khảo nhanh" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "Hiển thị danh sách của các phím tắt dành cho Liferea." #~ msgid "_FAQ" #~ msgstr "_FAQ" #~ msgid "View the FAQ for this application." #~ msgstr "Hiển thị câu hỏi thường gặp (FAQ) của ứng dụng này." #~ msgid "_About" #~ msgstr "_Giới thiệu" #~ msgid "Shows an about dialog." #~ msgstr "Hiển thị hộp thoại giới thiệu chương trình." #~ msgid "_Normal View" #~ msgstr "Trình bày _bình thường" #~ msgid "Set view mode to mail client mode." #~ msgstr "Đặt chế độ trình bày cho chế độ máy khách thư" #~ msgid "_Wide View" #~ msgstr "Trình bày kiểu _rộng" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "Đặt chế độ hiển thị để sử dụng cho chế độ 3 bảng đứng" #~ msgid "_Combined View" #~ msgstr "Trình bày kiểu tổ hợ_p" #~ msgid "Set view mode to two pane mode." #~ msgstr "Đặt chế độ trình bày cho chế độ hai cửa sổ" #~ msgid "_Reduced Feed List" #~ msgstr "_Tiết giảm danh sách feed" #~ msgid "Hide feeds with no unread items." #~ msgstr "Ẩn đi những feed mà không có mục tin nào chưa đọc cả." #~ msgid "_New Subscription..." #~ msgstr "Thêm một địa chỉ đặt xem dài hạn…" #~ msgid "Adds a subscription to the feed list." #~ msgstr "Thêm địa chỉ đặt xem dài hạn vào danh sách feed." #~ msgid "Adds a folder to the feed list." #~ msgstr "Thêm một thư mục vào danh sách feed." #~ msgid "Adds a new search folder to the feed list." #~ msgstr "Thêm một thư mục tìm kiếm mới vào danh sách feed." #~ msgid "New _Source..." #~ msgstr "Thêm _Nguồn mới…" #~ msgid "Adds a new feed list source." #~ msgstr "Thêm vào một nguồn danh sách feed mới." #~ msgid "Adds a new news bin." #~ msgstr "Thêm một thùng rác tin tức mới." #~ msgid "_Mark Items Read" #~ msgstr "Đánh dấ_u các mục là đã đọc" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "" #~ "Đánh dấu tất cả những mục tin của nút feed đã được chọn / trong danh sách " #~ "mục tin như là đã được đọc." #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "" #~ "Cập nhật tất cả các địa chỉ đặt dài hạn đã chọn và cả trong các thư mục " #~ "đã chọn." #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "Mở hộp thoại thuộc tính cho địa chỉ đặt dài hạn đã được chọn." #~ msgid "_Remove" #~ msgstr "_Xóa bỏ" #~ msgid "Removes the selected subscription." #~ msgstr "Gỡ bỏ những địa chỉ đặt dài hạn đã chọn." #~ msgid "Toggles the read status of the selected item." #~ msgstr "Bật/tắt trạng thái đọc của mục tin đã chọn." #~ msgid "Toggles the flag status of the selected item." #~ msgstr "Bật/tắt trạng thái cờ của mục tin đã chọn." #~ msgid "R_emove" #~ msgstr "Gỡ _bỏ" #~ msgid "Removes the selected item." #~ msgstr "Gỡ bỏ mục đã được chọn." #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "Mở liên kết trong tab trình duyệt Liferea mới." #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "Mở liên kết trong bảng mục tin Liferea." #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "Mở liên kết trong trình duyệt bên ngoài đã được cấu hình sẵn." #~ msgid "_Fullscreen" #~ msgstr "Chế độ t_oàn màn hình" #~ msgid "Browse at full screen" #~ msgstr "Duyệt toàn màn hình" #~ msgid "_Work Offline" #~ msgstr "_Làm việc ngoại tuyến" #~ msgid "_Update All" #~ msgstr "_Cập nhật tất cả" #~ msgid "_Show Liferea" #~ msgstr "Hiển thị Liferea" #~ msgid "InoReader" #~ msgstr "InoReader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "" #~ "Chú ý: Tài khoản và mật khẩu sẽ được lưu lại trong tập tin lưu danh " #~ "sách Liferea của bạn mà không được mã hóa gì cả." #~ msgid "Add InoReader Account" #~ msgstr "Thêm tài khoản InoReader" #~ msgid "Please enter your InoReader account settings." #~ msgstr "Hãy nhập vào các cài đặt tài khoản InoReader của bạn." #~ msgid "Plugins" #~ msgstr "Phần bổ sung" #~ msgid "normal view" #~ msgstr "trình bày bình thường" #~ msgid "wide view" #~ msgstr "trình bày kiểu rộng" #~ msgid "combined view" #~ msgstr "trình bày kiểu tổ hợp" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea, một bộ đọc Feed trên Linux" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "" #~ "Để biết thêm chi tiết, hãy truy cập trang chủ https://lzone.de/liferea/" #~ msgid "_Open Link In Browser" #~ msgstr "_Mở liên kết trong trình duyệt" #~ msgid "_Open Link In External Browser" #~ msgstr "_Mở liên kết trong trình duyệt ngoài" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "Tạo bộ máy tìm kiếm Feed" #~ msgid "enter any search string you want" #~ msgstr "nhập vào chuỗi văn bản mà bạn muốn tìm" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "Số lượng tối đa mục tin kết quả:" #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "Chú ý: Liferea sẽ tạo ra một địa chỉ đặt xem dài hạn cái mà sẽ được sử " #~ "dụng để truy vấn bộ máy tìm kiếm cho chuỗi đã chỉ ra. Bạn có thể giữ " #~ "chúng vĩnh viễn và cập nhật nó như một địa chỉ đặt xem dài hạn." #~ msgid "Liferea is now online" #~ msgstr "Liferea hiện tại đang trực tuyến" #~ msgid "Work Offline" #~ msgstr "Làm việc ngoại tuyến" #~ msgid "Liferea is now offline" #~ msgstr "Liferea hiện tại đang ngoại tuyến" #~ msgid "Work Online" #~ msgstr "Làm việc trực tuyến" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "" #~ "Tùy chọn này cho phép bạn tắt việc cập nhật các địa chỉ đặt dài hạn." #~ msgid "Browser default" #~ msgstr "Trình duyệt mặc định" #~ msgid "Existing window" #~ msgstr "Thoát ra" #~ msgid "New window" #~ msgstr "Mở cửa sổ mới" #~ msgid "New tab" #~ msgstr "Tab mới" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Bộ đọc Feed" #~ msgid "Online/Offline Button" #~ msgstr "Nút bấm Trực_tuyến/Ngoại_tuyến" #~ msgid "_Open link in:" #~ msgstr "Mở liên kết trong:" #~ msgid "No comments yet." #~ msgstr "Vẫn chưa có ghi chú nào." #~ msgid "Refresh" #~ msgstr "Làm mới lại" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - một bộ đọc Feed trên Linux" #~ msgid "" #~ "

        Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

        You can add new subscriptions

        • From main menu " #~ "'Subscription' -> 'New Subscription'
        • By dropping feed links " #~ "into the subscription list
        • By right clicking links and choosing " #~ "'Subscribe' within Liferea

        " #~ msgstr "" #~ "

        Chào mừng các bạn sử dụng Liferea, một chương trình máy tính " #~ "tập hợp tin tức từ feed.

        Bạn có thể thêm các địa chỉ đặt xem dài " #~ "hạn

        • Từ trình đơn chính “Đặt xem dài hạn” -> “Thêm địa chỉ đặt " #~ "xem dài hạn mới'
        • Bằng cách thả liên kết vào danh sách đặt xem dài " #~ "hạn
        • Bằng cách bấm chuột phải vào các liên kết và chọn “Đặt xem " #~ "dài hạn” ở trong Liferea

        " #~ msgid "Integrate with the messaging menu (indicator)" #~ msgstr "Tổ hợp với trình đơn thông điệp (bộ chỉ thị)" #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "Chấm dứt thay vì thu nhỏ nó vào trong trình đơn thông điệp" #~ msgid "Start minimized to the messaging menu" #~ msgstr "Khởi đầu ở dạng thu nhỏ vào trình đơn thông điệp" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d mục tin mới" #~ msgid "No new items" #~ msgstr "Không có mục mới" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d mục tin chưa đọc" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "Không có mục nào chưa đọc" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "Feed kiểu Atom không hợp lệ: không biết tác giả" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "Hợp nhất danh sách feed từ tài khoản Google Reader của bạn. Liferea sẽ " #~ "trình diễn các địa chỉ đặt xem dài hạn Google Reader của bạn, và sẽ đồng " #~ "bộ hóa danh sách feed và danh sách đang đọc." #~ msgid "" #~ "Integrate blogrolls or Planets in your feed list. Liferea will " #~ "automatically add and remove feeds according to the changes of the source " #~ "OPML document" #~ msgstr "" #~ "Hợp nhất blogrolls hoặc Planets trong danh sách feed của bạn. Liferea sẽ " #~ "tự động thêm hoặc gỡ bỏ các feed tương ứng với các thay đổi trong tài " #~ "liệu nguồn OPML" #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "Hợp nhất danh sách feed của tài khoản Tiny Tiny RSS 1.5+ của bạn. Liferea " #~ "sẽ trình bày các địa chỉ xem dài hạn tt-rss của bạn, và sẽ đồng bộ danh " #~ "sách feed của bạn và danh sách đang đọc." #~ msgid "This feed does not exist anymore!" #~ msgstr "Feed này không tồn tại thêm nữa!" #~ msgid "This news entry has no headline" #~ msgstr "Mục tin này không có tiêu đề" #~ msgid "Visit" #~ msgstr "Thăm" #~ msgid "Open feed" #~ msgstr "Mở feed" #~ msgid "%s has %d update" #~ msgid_plural "%s has %d updates" #~ msgstr[0] "%s%d cập nhật" #~ msgid "Feed Update" #~ msgstr "Cập nhật feed" #~ msgid "Show details" #~ msgstr "Hiển thị chi tiết" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "Bắt buộc nổi lên thông báo cho địa chỉ đặt xem dài hạn này." #~ msgid "_Never do popup notification for this subscription." #~ msgstr "Không bao giờ nổi lên thông báo cho địa chỉ đặt xem dài hạn này." #~ msgid "Notification Settings" #~ msgstr "Cài đặt cách thông báo" #~ msgid "Show a _popup window with new headlines." #~ msgstr "Hiển thị trình đơn chuột phải với các tiêu đề mới." #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "" #~ "Hiển thị biểu tượng trạng thái trong khu vực thông báo (khay hệ thống)." #~ msgid "Show _number of new items in the tray icon." #~ msgstr "Hiển thị số lượng các mục tin mới trên khay đồng hồ." #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "Chấm dứt thay vì thu nhỏ nó vào khay biểu tượng (đồng hồ)." #~ msgid "_Start in tray icon." #~ msgstr "_Bắt đầu ở khay đồng hồ." #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Tác quyền (c) 2003-2012\n" #~ "Thuộc về Liferea Team\n" #~ msgid "Download and view feeds" #~ msgstr "Tải về và trình bày feed" #~ msgid "You may want to validate the feed using" #~ msgstr "Bạn có lẽ muốn phê chuẩn sự sử dụng feed" #~ msgid "bookmark" #~ msgstr "dấu trang" #~ msgid "comments" #~ msgstr "ghi chú" #~ msgid "flag" #~ msgstr "cờ" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Tải về tài liệu đính kèm GẶP LỖI: \"%s\"" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Tải về tài liệu đính kèm đã hoàn tất: \"%s\"" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "Phiên bản này của Liferea sử dụng định dạng nhớ tạm mới và cần phải " #~ "chuyển đổi phần bộ nhớ cũ. Nội dung bộ nhớ trong %s đã không được xóa một " #~ "cách tự động. Làm ơn hãy gỡ bỏ thư mục này đi một cách thủ công một khi " #~ "bạn đã chắc chắn là mình đã chuyển đổi một cách thành công!" #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Nhảy tới mục tin chưa đọc kế tiếp. Nếu cần thiết có thể chọn feed kế tiếp " #~ "với các mục tin chưa được đọc." #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Việc tải về BỊ LỖI: \"%s\"" #~ msgid "Download finished." #~ msgstr "Hoàn tất tải về." #~ msgid "Launch Item In _Tab" #~ msgstr "Mở mục trong _Tab" #~ msgid "_Launch Item In Browser" #~ msgstr "Mở mục tin trong trình duyệt" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Sao chép địa chỉ URL vào Clipboard" #~ msgid "Choose download directory" #~ msgstr "Chọn thư mục tải về" #~ msgid "Liferea Sync %s@%s" #~ msgstr "Liferea Sync %s@%s" #~ msgid "Downloading Enclosure" #~ msgstr "Đang tải về tài liệu đính kèm" #~ msgid "Sync" #~ msgstr "Sync" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "Bật tính năng đồng bộ hóa mạng LAN cục bộ" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Thủ công:\n" #~ "(%s cho URL)" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "Chuyển qua URL và không tải về tài liệu đính kèm." #~ msgid "_Save downloads in" #~ msgstr "Ghi các phần tải về tại" #~ msgid "_Service Name" #~ msgstr "_Tên dịch vụ" liferea-1.12.7/po/zh_CN.po000066400000000000000000002062601352135647700152130ustar00rootroot00000000000000# Chinese/Simplified translation of liferea. # Copyright (C) 2005, 2010 Free Software Foundation, Inc. # This file is distributed under the same license as the liferea package. # Guanglei Xiong , 2005. # Aron Xu , 2010. # msgid "" msgstr "" "Project-Id-Version: liferea 1.6.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2011-07-12 18:15+0800\n" "Last-Translator: Aron Xu \n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\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" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "Feed 阅读器" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Lifeare 现为离线模式" #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "已与临近主机同步" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "已与临近主机同步" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "已与临近主机同步" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "已与临近主机同步" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 #, fuzzy msgid "Play Podcasts" msgstr "播客" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../net.sourceforge.liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Feed 阅读器" #: ../net.sourceforge.liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Lifera Feed 阅读器" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "此 Feed 已失效。Liferea 将不会更新它,但是您可以继续读取暂存标题。" #: ../xslt/feed.xml.in.h:2 msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "最近更新此订阅失败!
        HTTP 错误码 %d: %s" #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "解析此 Feed 时出现错误!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "解析器错误详情" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "详细信息" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "过滤此 Feed 时出现错误!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "过滤器错误详情" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Feed:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "来源:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "发布者" #: ../xslt/feed.xml.in.h:12 msgid "Copyright" msgstr "版权" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 msgid "unread headlines" msgstr "标记未读" #: ../xslt/folder.xml.in.h:1 msgid "Folder:" msgstr "目录:" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 msgid "Source" msgstr "来源" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Feed" #: ../xslt/item.xml.in.h:3 msgid "Filed under" msgstr "分类:" #: ../xslt/item.xml.in.h:4 msgid "Author" msgstr "作者" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "分享:" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "通过" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "相关" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "还发表在:" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "创作者" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 msgid "Comments" msgstr "评论" #: ../xslt/item.xml.in.h:13 msgid "Updating..." msgstr "正在更新..." #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "章节" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "部门" #: ../xslt/newsbin.xml.in.h:1 msgid "News Bin:" msgstr "" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "搜索目录:" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "浏览器命令失败:%s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "正在启动:%s" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "认证错误" #: ../src/common.c:66 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "无法创建缓存目录 %s!" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "今天 %H:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "昨天 %H:%M" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "%a %H:%M" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "%b %d %H:%M" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "%b %d %Y" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "%s 不是有效的附件类型配置文件!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "无法将 %s 更名为 %s\n" #: ../src/export.c:417 ../src/export.c:419 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "读取 OPML 文件时发生 XML 错误!无法导入“%s”!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "空白文档!OPML 文档“%s”在导入时不应是空白文件。" #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "“%s”不是有效的 OPML 文档!Liferea 无法导入该文件!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "已导入的 Feed 列表" #: ../src/export.c:481 msgid "Import Feed List" msgstr "导入 Feed 列表" #: ../src/export.c:481 msgid "Import" msgstr "导入" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 #, fuzzy msgid "OPML Files" msgstr "选择 OPML 文件" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "导出 Feed 列表出错!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "Feed 列表已导出!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "导出 Feed 列表" #: ../src/export.c:498 msgid "Export" msgstr "导出" #: ../src/feed.c:317 msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "" "

        无法探测此 Feed 类型! 请确认网址指向已支持的正确 Feed 源!

        XML 解析器输" "出:
        " #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "“%s”已更新..." #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "“%s”不可用" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" "您让 Liferea 订阅的网址指向一个网页,但是自动发现在该页上没有找到 Feed。可能" "该页不支持 Feed 自动发现。" #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "读取 Feed 时出现 XML 错误!Feed “%s” 无法载入!" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "空文档!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "无效 XML!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "" #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "无法确定 Feed 类型。" #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 #, fuzzy msgid "There are no unread items" msgstr "没有未读条目 " #: ../src/liferea_application.c:282 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr " 状态 STATE 可以是 shown, iconified 或 hidden" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "状态" #: ../src/liferea_application.c:283 msgid "Show version information and exit" msgstr "显示 Liferea 版本信息并退出" #: ../src/liferea_application.c:284 #, fuzzy msgid "Add a new subscription" msgstr "新增订阅" #: ../src/liferea_application.c:284 msgid "uri" msgstr "" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 msgid "Print debugging messages of all types" msgstr "输出所有调试信息" #: ../src/liferea_application.c:291 msgid "Print debugging messages for the cache handling" msgstr "输出缓存处理的调试信息" #: ../src/liferea_application.c:292 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "输出配置处理的调试信息" #: ../src/liferea_application.c:293 msgid "Print debugging messages of the database handling" msgstr "输出缓存处理的调试信息" #: ../src/liferea_application.c:294 msgid "Print debugging messages of all GUI functions" msgstr "输出所有图形界面的调试信息" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" "启用 HTML 渲染调试。每当 Liferea 渲染 HTML 都将其转储至 ~/.cache/liferea/" "output.xhtml" #: ../src/liferea_application.c:296 msgid "Print debugging messages of all network activity" msgstr "输出所有网络活动的调试信息" #: ../src/liferea_application.c:297 msgid "Print debugging messages of all parsing functions" msgstr "输出所有解析函数的调试信息" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "当某函数运行时间过长时输出调试信息" #: ../src/liferea_application.c:299 msgid "Print debugging messages when entering/leaving functions" msgstr "输出进入或离开函数时的调试信息" #: ../src/liferea_application.c:300 msgid "Print debugging messages of the feed update processing" msgstr "输出 Feed 更新的调试信息" #: ../src/liferea_application.c:301 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "输出缓存处理的调试信息" #: ../src/liferea_application.c:302 msgid "Print verbose debugging messages" msgstr "输出详细调试信息" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 msgid "Print debugging messages for the given topic" msgstr "输出给定主题的调试信息" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "更新请求已取消" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "无法解析目标主机名" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "无法解析代理服务器主机名" #: ../src/net.c:466 msgid "Unable to connect to remote host" msgstr "无法连接到远程主机" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "无法连接到代理服务器" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "发生网络错误,或另一端意外关闭了连接。" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "资源已经永久移动到新位置。" #. http 4xx client error #: ../src/net.c:474 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "您无权下载此 Feed。请在 Feed 属性对话框中更新您的帐号与密码。" #: ../src/net.c:476 msgid "Payment required" msgstr "需要付费" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "您无法访问这个资源" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "资源未找到" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "方法不允许" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "无法接受" #: ../src/net.c:481 msgid "Proxy authentication required" msgstr "代理服务器需要认证" #: ../src/net.c:482 msgid "Request timed out" msgstr "请求超时" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "资源不存在。请取消订阅!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "更新过程中发生内部错误" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Feed 无法使用:服务器使用未支持的重定向!" #: ../src/net.c:492 msgid "Client Error" msgstr "客户端错误" #: ../src/net.c:494 msgid "Server Error" msgstr "服务器端错误" #: ../src/net.c:496 msgid "An unknown networking error happened!" msgstr "发生未知的网路错误!" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "条目" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "包含" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "不包含" #: ../src/rule.c:175 msgid "Item title" msgstr "条目标题" #: ../src/rule.c:176 msgid "Item body" msgstr "条目内容" #: ../src/rule.c:177 msgid "Read status" msgstr "阅读状态" #: ../src/rule.c:177 msgid "is unread" msgstr "未读" #: ../src/rule.c:177 msgid "is read" msgstr "已读" #: ../src/rule.c:178 msgid "Flag status" msgstr "标识状态" #: ../src/rule.c:178 msgid "is flagged" msgstr "以标识" #: ../src/rule.c:178 msgid "is unflagged" msgstr "未标识" #: ../src/rule.c:179 msgid "Podcast" msgstr "播客" #: ../src/rule.c:179 msgid "included" msgstr "包含" #: ../src/rule.c:179 msgid "not included" msgstr "不包含" #: ../src/rule.c:180 msgid "Category" msgstr "分类" #: ../src/rule.c:180 msgid "is set" msgstr "已设置" #: ../src/rule.c:180 msgid "is not set" msgstr "未设置" #: ../src/rule.c:181 msgid "Feed title" msgstr "Feed 标题" #: ../src/subscription.c:106 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Feed “%s”已经更新!" #: ../src/subscription.c:111 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "Feed “%s”已失效。Liferea 将不会再更新它。" #: ../src/subscription.c:145 #, c-format msgid "Updating favicon for \"%s\"" msgstr "正在更新 Feed “%s”的图标" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "读取此订阅时出现问题,请检查网址和终端输出。" #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "“%s”的地址已经永久改变,已被更新。" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "“%s”已不再更新。Liferea 将不会再更新它!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "“%s”自上次更新后没有改变" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "正在更新“%s”" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "无法读取用于过滤的临时文件 %s!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s 终止,错误代码:%d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "错误:无法开启管道“%s”!" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "错误:无法打开文件“%s”!" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "错误:无此文件“%s”!" #: ../src/vfolder.c:54 msgid "New Search Folder" msgstr "新建搜索目录" #: ../src/xml.c:410 msgid "[There were more errors. Output was truncated!]" msgstr "[有更多的错误,输出已被截断!]" #: ../src/xml.c:563 msgid "XML Parser: Could not parse document:\n" msgstr "XML 解析器:无法解析文档:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "附件" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr " 字节" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "KB" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "MB" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "GB" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d 个附件" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "选择文件" #: ../src/ui/enclosure_list_view.c:444 #, fuzzy, c-format msgid "File Extension .%s" msgstr "文件扩展名。%s" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "无法找到图形文件: %s" # what's this ? # #: src/ui_tray.c:90 # #, c-format # msgid "%d new item!" # msgid_plural "%d new items!" # msgstr[0] "%d 个新条目" # msgstr[1] "%d 个新条目" # what's this ? # #: src/ui_tray.c:90 # #, c-format # msgid "%d new item!" # msgid_plural "%d new items!" # msgstr[0] "%d 个新条目" # msgstr[1] "%d 个新条目" #: ../src/ui/liferea_shell.c:404 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d 个新条目)" #: ../src/ui/liferea_shell.c:409 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d 未读 %s" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "帮助主题" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "快速参考" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "FAQ" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "高级搜索" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "输入用户名巨额密码“%s”(%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "未知来源" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "取消全部(_A)" #: ../src/ui/ui_common.c:211 #, fuzzy msgid "All Files" msgstr "本地文件(_H)" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea 处于离线模式,无法更新。" #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "搜索所有 Feed" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "全部标记为已读" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "您确定要删除 %s 吗 ?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "此条目没有指定链接!" #: ../src/ui/item_list_view.c:484 msgid "*** No title ***" msgstr "*** 无标题 ***" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "标题" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "日期" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "您必须先选择一个 Feed 才能删除条目!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "未选择条目!" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "" #: ../src/ui/popup_menu.c:111 #, fuzzy msgid "_Open In Browser" msgstr "在浏览器中打开(_L)" #: ../src/ui/popup_menu.c:115 #, fuzzy msgid "Open In _External Browser" msgstr "外部浏览器设置" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "" #: ../src/ui/popup_menu.c:147 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "在 %s 加入书签(_B)" #: ../src/ui/popup_menu.c:153 #, fuzzy msgid "Copy Item _Location" msgstr "复制链接地址(_C)" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "切换阅读状态(_R)" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "切换条目标签(_F)" #: ../src/ui/popup_menu.c:170 msgid "R_emove Item" msgstr "删除条目(_E)" #: ../src/ui/popup_menu.c:200 msgid "Open Enclosure..." msgstr "开启附件..." #: ../src/ui/popup_menu.c:201 msgid "Save As..." msgstr "另存为..." #: ../src/ui/popup_menu.c:202 msgid "Copy Link Location" msgstr "复制链接地址" #: ../src/ui/popup_menu.c:280 msgid "_Update" msgstr "更新(_U)" #: ../src/ui/popup_menu.c:282 msgid "_Update Folder" msgstr "更新目录(_U)" #: ../src/ui/popup_menu.c:292 msgid "New _Subscription..." msgstr "新增订阅(_S)..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "新建目录(_F)..." #: ../src/ui/popup_menu.c:298 msgid "New S_earch Folder..." msgstr "新建搜索目录(_E)..." #: ../src/ui/popup_menu.c:299 msgid "New S_ource..." msgstr "新增来源(_O)..." #: ../src/ui/popup_menu.c:300 #, fuzzy msgid "New _News Bin..." msgstr "新目录(_F)..." #: ../src/ui/popup_menu.c:303 msgid "_New" msgstr "新增(_N)" #: ../src/ui/popup_menu.c:312 #, fuzzy msgid "Sort Feeds" msgstr "导入 Feed 列表" #: ../src/ui/popup_menu.c:320 msgid "_Mark All As Read" msgstr "全部标记为已读(_M)" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 msgid "_Delete" msgstr "删除(_D)" #: ../src/ui/popup_menu.c:336 msgid "_Properties" msgstr "属性(_P)" #: ../src/ui/popup_menu.c:343 #, fuzzy msgid "Convert To Local Subscriptions..." msgstr "新增订阅(_N)..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "GNOME 默认" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "文本在图标下方" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "文本在图标旁" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "仅图标" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "仅文本" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "分" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "小时" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "天" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "空格键" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " 空格键" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " 空格键" #: ../src/ui/preferences_dialog.c:112 #, fuzzy msgid "Normal View" msgstr "正常视图(_N)" #: ../src/ui/preferences_dialog.c:113 #, fuzzy msgid "Wide View" msgstr "宽视图(_W)" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Combined View" msgstr "合并视图(_C)" #: ../src/ui/preferences_dialog.c:476 #, fuzzy msgid "Default Browser" msgstr "GNOME 默认浏览器" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "手动" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "类型" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "程序" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "删除入口中" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "您确定要删除 %s 及其内容吗?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "您确定要删除 %s 吗 ?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "删除确认" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "删除确认" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "此 Feed 的提供者建议更新周期为 %d 分钟。" #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "此 Feed 未指定默认更新周期。" #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "新增订阅" #: ../src/fl_sources/google_source.c:111 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "" #: ../src/fl_sources/opml_source.c:379 msgid "Choose OPML File" msgstr "选择 OPML 文件" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "新增 OPML 订阅" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "未找到 Feed 列表源类型!" #: ../src/fl_sources/node_source.c:363 msgid "Source Type" msgstr "来源类型" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 #, fuzzy msgid "Login failed!" msgstr "Google Reader 登录失败!" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "Feed 阅读器" #: ../src/webkit/liferea_web_view.c:175 #, fuzzy msgid "Open Link In _Tab" msgstr "在标签中打开链接(_T)" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "在浏览器中开启链接(_L)" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "在浏览器中开启链接(_L)" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "在 %s 加入书签(_B)" #: ../src/webkit/liferea_web_view.c:190 msgid "_Copy Link Location" msgstr "复制链接地址(_C)" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "视图(_V)" #: ../src/webkit/liferea_web_view.c:194 #, fuzzy msgid "_Copy Image Location" msgstr "复制链接地址(_C)" #: ../src/webkit/liferea_web_view.c:197 #, fuzzy msgid "S_ave Link As" msgstr "另存为..." #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "" #: ../src/webkit/liferea_web_view.c:207 msgid "_Subscribe..." msgstr "订阅(_S)..." #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "增大字号(_I)" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "减小字号(_D)" #: ../glade/about.ui.h:1 msgid "About" msgstr "关于" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea 是 GTK+ 新闻搜集器" #: ../glade/about.ui.h:3 msgid "Liferea Homepage" msgstr "Liferea 主页" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "认证" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "用户名(_N):" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "密码(_P):" #: ../glade/enclosure_handler.ui.h:1 #, fuzzy msgid "Open Enclosure" msgstr "开启附件..." #: ../glade/enclosure_handler.ui.h:2 #, fuzzy msgid "Open an enclosure of type:" msgstr "下载附件类型:" #: ../glade/enclosure_handler.ui.h:3 #, fuzzy msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" "Liferea 应如何处理附件? 请在下面键入您要执行的命令,下载的文件将作为该命令的" "参数:" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "浏览(_B)" #: ../glade/enclosure_handler.ui.h:5 msgid "_Do this automatically for enclosures like this from now on." msgstr "从现在开始自动对所有附件执行此次进行的操作(_D)。" #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "添加 Google Reader 帐号" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "请输入您的 Google Reader 帐号设置。" #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "密码(_P)" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "用户名(电子邮件地址)(_U)" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 msgid "View Headlines" msgstr "查看标题" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "标题" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "全部标记为已读" #: ../glade/mark_read_dialog.ui.h:2 msgid "Mark all as read" msgstr "全部标记为已读" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "新目录" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "目录名称(_F):" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Feed 来源" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "来源类型:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "网址(_U)" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "命令(_C)" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "本地文件(_H)" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "选择文件..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "源(_S):" #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "下载/预处理" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "下载时不使用代理服务器(_D)" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "使用会话过滤器(_F)" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "" "Liferea 可以使用外挂过滤插件来读取不支持格式的 Feed 和目录,更多信息请查阅文" "档。" #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "转换工具(_U):" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "源选择" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "选择您要添加的源类型..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "添加 OPML/Planet" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "请指定一个本地文件,或指向有效 OPML Feed 列表的 URL。" #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "位置(_L)" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "选择文件(_S)" #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Liferea 首选项" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "每个 Feed 默认保存条目数(_N):" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "Feed Update Settings" msgstr "Feed 更新" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "注意: 请记得输入一个合理的更新时间。通常每小时更新一次只是浪费网络流量。" #: ../glade/prefs.ui.h:8 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "更新全部订阅。" #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "默认 Feed 更新周期(_I):" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "Feed" #: ../glade/prefs.ui.h:12 #, fuzzy msgid "Folder Display Settings" msgstr "目录显示设置" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "当选择目录时,显示所有子 Feed 条目。" #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "隐藏已读条目(_H)。" #: ../glade/prefs.ui.h:15 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Feed 图标(favicon)" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "立即更新所有 Feed 图标(_U)。" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "目录" #: ../glade/prefs.ui.h:18 #, fuzzy msgid "Reading Headlines" msgstr "标记未读" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "浏览文章(_S):" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:21 #, fuzzy msgid "Web Integration" msgstr "方位" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "发送书签到(_P)" #: ../glade/prefs.ui.h:24 #, fuzzy msgid "Internal Browser Settings" msgstr "内部浏览器设置" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "在 Liferea 的窗口开启链接(_W)。" #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "禁用 Javascript(_D)。" #: ../glade/prefs.ui.h:27 msgid "_Enable browser plugins." msgstr "启用浏览器插件(_E)。" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "External Browser Settings" msgstr "外部浏览器设置" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "浏览器(_B):" #: ../glade/prefs.ui.h:30 #, fuzzy msgid "_Manual:" msgstr "手动" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "浏览器" #: ../glade/prefs.ui.h:34 #, fuzzy msgid "Toolbar Settings" msgstr "工具栏按钮标签:" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "隐藏工具栏(_H)。" #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "工具栏按钮标签:" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "图形界面" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "自动检测(GNOME 或环境)(_A)" #: ../glade/prefs.ui.h:42 msgid "_No Proxy" msgstr "不使用代理(_N)" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "手工设置(_M):" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "代理服务器地址(_H):" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "代理服务器端口(_P):" #: ../glade/prefs.ui.h:46 msgid "Use Proxy Au_thentication" msgstr "使用代理服务器认证(_T)" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "代理服务器用户名(_U):" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "代理服务器密码(_W):" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "代理服务器" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "目录显示设置" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 #, fuzzy msgid "Downloading Enclosures" msgstr "附件下载中" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "下载方式(_D):" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 #, fuzzy msgid "Opening Enclosures" msgstr "开启附件..." #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "附件" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "订阅属性" #: ../glade/properties.ui.h:2 #, fuzzy msgid "Feed Name" msgstr "Feed 名称(_N):" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "Feed 名称(_N):" #: ../glade/properties.ui.h:4 #, fuzzy msgid "Update Interval" msgstr "更新监视" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "使用预设更新周期(_U)。" #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "特定 Feed 的更新间隔(_F)" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "不自动更新此 Feed(_D)。" #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Feed 提供者建议更新周期为 %d 分钟。" #: ../glade/properties.ui.h:11 msgid "General" msgstr "常规" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "Liferea 可以使用外挂过滤插件来读取不支持格式的 Feed 和目录,更多信息请查阅文" "档。" #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "缓存设置控制是否在退出 Liferea 时保存 Feed 内容,已标记的条目将总是被保存于缓" "存中。" #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "默认缓存设置(_D)" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "禁用缓存(_S)" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "无限制缓存(_U)" #: ../glade/properties.ui.h:27 msgid "_Number of items to save:" msgstr "保存条目数(_N):" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "存档" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "使用 HTTP 认证(_A)" #: ../glade/properties.ui.h:34 msgid "Download" msgstr "下载" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "自动下载此 Feed 的所有附件(_A)。" #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "选择文章时自动在配置好的浏览器中载入项目链接(_L)。" #: ../glade/properties.ui.h:37 msgid "Ignore _comment feeds for this subscription." msgstr "忽略此订阅的评论 Feed (_C)。" #: ../glade/properties.ui.h:38 msgid "_Mark downloaded items as read." msgstr "标记下载的条目为已读(_M)。" #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "高级" #: ../glade/reedah_source.ui.h:1 #, fuzzy msgid "Add Reedah Account" msgstr "添加 Google Reader 帐号" #: ../glade/reedah_source.ui.h:2 #, fuzzy msgid "Please enter your Reedah account settings." msgstr "请输入您的 Google Reader 帐号设置。" #: ../glade/rename_node.ui.h:1 msgid "Rename" msgstr "重命名" #: ../glade/rename_node.ui.h:2 msgid "_New Name:" msgstr "新名称(_N):" #: ../glade/search_folder.ui.h:1 msgid "Search Folder Properties" msgstr "搜索目录属性" #: ../glade/search_folder.ui.h:2 msgid "Search _Name:" msgstr "搜索名称(_N):" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "所有匹配的规则(_N)" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "必须匹配所有规则(_A)" #: ../glade/search.ui.h:1 msgid "Advanced Search" msgstr "高级搜索" #: ../glade/search.ui.h:2 msgid "_Search Folder..." msgstr "搜索目录(_S)..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "搜索所有 Feed" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "高级(_A)..." #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "开始在所有 Feed 中搜索该文本,结果会出现在条目列表中。" #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "搜索(_S):" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "输入一个让 Liferea 在条目标题或内容中寻找的搜索字符。" #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "高级..." #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" "除非您知道确切的 Feed 地址,否则当您输入一个网址时,Liferea 会进行自动 Feed " "发现。" #: ../glade/theoldreader_source.ui.h:1 #, fuzzy msgid "Add TheOldReader Account" msgstr "添加 Google Reader 帐号" #: ../glade/theoldreader_source.ui.h:2 #, fuzzy msgid "Please enter your TheOldReader account settings." msgstr "请输入您的 Google Reader 帐号设置。" #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your TinyTinyRSS account settings." msgstr "请输入您的 Google Reader 帐号设置。" #: ../glade/ttrss_source.ui.h:3 #, fuzzy msgid "_Server URL" msgstr "服务器端错误" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "用户名(_U)" #: ../glade/update_monitor.ui.h:1 msgid "Update Monitor" msgstr "更新监视" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "取消全部(_A)" #: ../glade/update_monitor.ui.h:3 #, fuzzy msgid "Pending Requests" msgstr "待验证请求" #: ../glade/update_monitor.ui.h:4 #, fuzzy msgid "Downloading Now" msgstr "立即下载" #~ msgid "_Subscriptions" #~ msgstr "订阅(_S)" #~ msgid "Update _All" #~ msgstr "更新全部(_A)" #~ msgid "Updates all subscriptions." #~ msgstr "更新全部订阅。" #~ msgid "Mark All As _Read" #~ msgstr "全部标记为已读(_R)" #~ msgid "Marks read every item of every subscription." #~ msgstr "标记所有订阅项的条目为已读。" #~ msgid "_Import Feed List..." #~ msgstr "导入 Feed 列表(_I)..." #~ msgid "Imports an OPML feed list." #~ msgstr "导入 OPML 格式 Feed 列表。" #~ msgid "_Export Feed List..." #~ msgstr "导出 Feed 列表(_E)..." #~ msgid "Exports the feed list as OPML." #~ msgstr "导出 OPML 格式 Feed 列表。" #~ msgid "_Quit" #~ msgstr "退出(_Q)" #~ msgid "_Feed" #~ msgstr "_Feed" #~ msgid "Remove _All Items" #~ msgstr "删除所有条目(_A)" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "删除现选定 Feed 的所有条目。" #~ msgid "_Item" #~ msgstr "条目(_I)" #, fuzzy #~ msgid "Next Item" #~ msgstr "下一个未读条目(_N)" #~ msgid "_Next Unread Item" #~ msgstr "下一个未读条目(_N)" #~ msgid "_View" #~ msgstr "视图(_V)" #~ msgid "Increases the text size of the item view." #~ msgstr "放大条目显示窗口字体大小。" #~ msgid "Decreases the text size of the item view." #~ msgstr "缩小条目显示窗口字体大小。" #~ msgid "_Tools" #~ msgstr "工具(_T)" #~ msgid "_Update Monitor" #~ msgstr "更新监视器(_U)" #~ msgid "Show a list of all feeds currently in the update queue" #~ msgstr "显示当前更新队列中的全部 Feed" #~ msgid "_Preferences" #~ msgstr "首选项(_P)" #~ msgid "Edit Preferences." #~ msgstr "编辑首选项。" #~ msgid "S_earch" #~ msgstr "搜索(_E)" #~ msgid "Search All Feeds..." #~ msgstr "搜索所有 Feed..." #~ msgid "Show the search dialog." #~ msgstr "显示搜索对话框。" #~ msgid "_Help" #~ msgstr "帮助(_H)" #~ msgid "_Contents" #~ msgstr "目录(_C)" #~ msgid "View help for this application." #~ msgstr "查看该程序的帮助。" #~ msgid "_Quick Reference" #~ msgstr "快速参考(_Q)" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "查看所有快捷键列表。" #~ msgid "_FAQ" #~ msgstr "_FAQ" #~ msgid "View the FAQ for this application." #~ msgstr "查看该程序的 FAQ。" #~ msgid "_About" #~ msgstr "关于(_A)" #~ msgid "Shows an about dialog." #~ msgstr "显示关于对话框。" #~ msgid "_Normal View" #~ msgstr "正常视图(_N)" #~ msgid "Set view mode to mail client mode." #~ msgstr "设置查看模式为邮件客户端模式。" #~ msgid "_Wide View" #~ msgstr "宽视图(_W)" #~ msgid "Set view mode to use three vertical panes." #~ msgstr "设置查看模式以试用三个竖行。" #~ msgid "_Combined View" #~ msgstr "合并视图(_C)" #~ msgid "Set view mode to two pane mode." #~ msgstr "设置查看模式为两栏。" #~ msgid "_Reduced Feed List" #~ msgstr "减少 Feed 列表(_R)" #~ msgid "Hide feeds with no unread items." #~ msgstr "隐藏没有未读条目的 Feed。" #~ msgid "_New Subscription..." #~ msgstr "新增订阅(_N)..." #~ msgid "Adds a subscription to the feed list." #~ msgstr "新增订阅。" #~ msgid "Adds a folder to the feed list." #~ msgstr "向 Feed 列表添加文件夹。" #~ msgid "Adds a new search folder to the feed list." #~ msgstr "为 Feed 列表添加心得搜索文件夹。" #~ msgid "New _Source..." #~ msgstr "添加源(_S)..." #~ msgid "Adds a new feed list source." #~ msgstr "添加新的 Feed 列表源。" #, fuzzy #~ msgid "Adds a new news bin." #~ msgstr "新增订阅。" #~ msgid "_Mark Items Read" #~ msgstr "标记为已读(_M)" #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "标记所有选定订阅下的所有条目或选定目录下的所有订阅为已读。" #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "更新选定的订阅项或目录下的所有订阅项目。" #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "开启选定订阅的属性对话框。" #~ msgid "_Remove" #~ msgstr "删除(_R)" #~ msgid "Removes the selected subscription." #~ msgstr "删除选定的订阅项。" #~ msgid "Toggles the read status of the selected item." #~ msgstr "切换选定条目的阅读状态。" #~ msgid "Toggles the flag status of the selected item." #~ msgstr "切换选定条目的阅读状态。" #~ msgid "R_emove" #~ msgstr "删除(_E)" #~ msgid "Removes the selected item." #~ msgstr "删除选定的条目。" #, fuzzy #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "在设置浏览器中载入此条目链接。" #, fuzzy #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "在设置浏览器中载入此条目链接。" #, fuzzy #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "在设置浏览器中载入此条目链接。" #~ msgid "_Work Offline" #~ msgstr "离线浏览(_W)" #~ msgid "_Update All" #~ msgstr "更新全部(_U)" #~ msgid "_Show Liferea" #~ msgstr "显示 Liferea (_S)" #, fuzzy #~ msgid "InoReader" #~ msgstr "Google Reader" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "注意:帐号跟密码会以明码存于您的 Liferea Feed 列表文件中。" #, fuzzy #~ msgid "Add InoReader Account" #~ msgstr "添加 Google Reader 帐号" #, fuzzy #~ msgid "Please enter your InoReader account settings." #~ msgstr "请输入您的 Google Reader 帐号设置。" #~ msgid "normal view" #~ msgstr "常规视图" #~ msgid "wide view" #~ msgstr "宽视图" #~ msgid "combined view" #~ msgstr "合并视图" #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Liferea,Linux Feed 阅读器" #~ msgid "For more information, please visit https://lzone.de/liferea/" #~ msgstr "更多信息请访问 https://lzone.de/liferea/" #, fuzzy #~ msgid "_Open Link In Browser" #~ msgstr "在浏览器中开启链接(_L)" #, fuzzy #~ msgid "_Open Link In External Browser" #~ msgstr "在浏览器中开启链接(_L)" #~ msgid " " #~ msgstr " " #~ msgid "Create Search Engine Feed" #~ msgstr "创建搜索引擎 Feed" #~ msgid "enter any search string you want" #~ msgstr "输入您想搜索的字符串" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "最大搜索结果数(_N):" #, fuzzy #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "注: Liferea 将产生一个于 Feedster 查询特定字串的feed订阅。您可以永久保留此" #~ "定阅,并如同其他订阅一般更新。" #~ msgid "Liferea is now online" #~ msgstr "Liferea 现为在线模式。" #~ msgid "Work Offline" #~ msgstr "离线浏览" #~ msgid "Liferea is now offline" #~ msgstr "Lifeare 现为离线模式" #~ msgid "Work Online" #~ msgstr "在线浏览" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "此选项允许禁用订阅更新。" #~ msgid "Browser default" #~ msgstr "浏览器预设" #~ msgid "Existing window" #~ msgstr "现有窗口" #~ msgid "New window" #~ msgstr "新窗口" #~ msgid "New tab" #~ msgstr "新标签" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "Feed 阅读器" #~ msgid "Online/Offline Button" #~ msgstr "在线/离线按钮" #~ msgid "_Open link in:" #~ msgstr "开启链接于(_O):" #~ msgid "No comments yet." #~ msgstr "尚无评论。" #~ msgid "Refresh" #~ msgstr "刷新" #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Liferea - Linux Feed 阅读器" #, fuzzy #~ msgid "" #~ "

        Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

        You can add new subscriptions

        • From main menu " #~ "'Subscription' -> 'New Subscription'
        • By dropping feed links " #~ "into the subscription list
        • By right clicking links and choosing " #~ "'Subscribe' within Liferea

        " #~ msgstr "" #~ "

        欢迎使用 Liferea,一个桌面新闻 Feed 聚合器。

        左侧面板是您" #~ "的订阅列表。要订阅一个 Feed,选择 Feed -> 新增订阅。要浏览 Feed 标题," #~ "则选中那个 Feed,程序会把标题自动载入到右侧的主窗口内。

        " #, fuzzy #~ msgid "Terminate instead of minimizing to the messaging menu" #~ msgstr "退出而不是最小化到托盘(_E)。" # what's this ? # #: src/ui_tray.c:90 # #, c-format # msgid "%d new item!" # msgid_plural "%d new items!" # msgstr[0] "%d 个新条目" # msgstr[1] "%d 个新条目" # what's this ? # #: src/ui_tray.c:90 # #, c-format # msgid "%d new item!" # msgid_plural "%d new items!" # msgstr[0] "%d 个新条目" # msgstr[1] "%d 个新条目" #~ msgid "%d new item" #~ msgid_plural "%d new items" #~ msgstr[0] "%d 个新条目" # what's this ? # #: src/ui_tray.c:90 # #, c-format # msgid "%d new item!" # msgid_plural "%d new items!" # msgstr[0] "%d 个新条目" # msgstr[1] "%d 个新条目" # what's this ? # #: src/ui_tray.c:90 # #, c-format # msgid "%d new item!" # msgid_plural "%d new items!" # msgstr[0] "%d 个新条目" # msgstr[1] "%d 个新条目" #~ msgid "No new items" #~ msgstr "无新条目" # what's this ? # #: src/ui_tray.c:90 # #, c-format # msgid "%d new item!" # msgid_plural "%d new items!" # msgstr[0] "%d 个新条目" # msgstr[1] "%d 个新条目" # what's this ? # #: src/ui_tray.c:90 # #, c-format # msgid "%d new item!" # msgid_plural "%d new items!" # msgstr[0] "%d 个新条目" # msgstr[1] "%d 个新条目" #~ msgid "" #~ "%s\n" #~ "%d unread item" #~ msgid_plural "" #~ "%s\n" #~ "%d unread items" #~ msgstr[0] "" #~ "%s\n" #~ "%d 个未读条目" # what's this ? # #: src/ui_tray.c:90 # #, c-format # msgid "%d new item!" # msgid_plural "%d new items!" # msgstr[0] "%d 个新条目" # msgstr[1] "%d 个新条目" # what's this ? # #: src/ui_tray.c:90 # #, c-format # msgid "%d new item!" # msgid_plural "%d new items!" # msgstr[0] "%d 个新条目" # msgstr[1] "%d 个新条目" #~ msgid "" #~ "%s\n" #~ "No unread items" #~ msgstr "" #~ "%s\n" #~ "没有未读条目" #~ msgid "Invalid Atom feed: unknown author" #~ msgstr "无效的 Atom Feed:未知作者" #~ msgid "" #~ "Integrate the feed list of your Google Reader account. Liferea will " #~ "present your Google Reader subscriptions, and will synchronize your feed " #~ "list and reading lists." #~ msgstr "" #~ "集成您 Google Reader 帐号中的 Feed 列表。Liferea 将显示您的 Google Reader " #~ "订阅,并与之同步 Feed 列表和阅读列表。" #, fuzzy #~ msgid "" #~ "Integrate the feed list of your Tiny Tiny RSS 1.5+ account. Liferea will " #~ "present your tt-rss subscriptions, and will synchronize your feed list " #~ "and reading lists." #~ msgstr "" #~ "集成您 Google Reader 帐号中的 Feed 列表。Liferea 将显示您的 Google Reader " #~ "订阅,并与之同步 Feed 列表和阅读列表。" #~ msgid "This feed does not exist anymore!" #~ msgstr "此 Feed 已不存在!" #~ msgid "This news entry has no headline" #~ msgstr "此新闻条目没有标题" #~ msgid "Visit" #~ msgstr "访问" #~ msgid "Open feed" #~ msgstr "打开 Feed" #~ msgid "Feed Update" #~ msgstr "Feed 更新" #~ msgid "Show details" #~ msgstr "显示详细信息" #~ msgid "_Enforce popup notification for this subscription." #~ msgstr "强制弹出此订阅提示(_E)。" #~ msgid "_Never do popup notification for this subscription." #~ msgstr "不再为此订阅弹出提示(_N)。" #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "版权所有 (C) 2003-2009\n" #~ "Liferea 团队\n" #, fuzzy #~ msgid "Notification Settings" #~ msgstr "程序状态通知设置" #~ msgid "Show a _popup window with new headlines." #~ msgstr "使用弹出窗口显示新标题(_P)。" #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "在程序状态通知区中显示状态图标(系统托盘)(_I)。" #~ msgid "Show _number of new items in the tray icon." #~ msgstr "在托盘图标上显示新条目数量。" #~ msgid "T_erminate instead of minimizing to tray icon." #~ msgstr "退出而不是最小化到托盘(_E)。" #~ msgid "_Start in tray icon." #~ msgstr "启动后最小化到托盘(_S)。" #~ msgid "Download and view feeds" #~ msgstr "下载并查看 Feed" #~ msgid "You may want to validate the feed using" #~ msgstr "您可能希望使用以下方式验证 Feed:" #~ msgid "Launch Item In _Tab" #~ msgstr "在标签中打开条目(_T)" #~ msgid "_Launch Item In Browser" #~ msgstr "在浏览器中打开条目(_L)" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "复制条目地址到剪贴板(_U)" #~ msgid "flag" #~ msgstr "标志" #~ msgid "bookmark" #~ msgstr "书签" #~ msgid "comments" #~ msgstr "评论" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "下载附件失败:%s" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "下载附件完成:%s" #~ msgid "" #~ "This version of Liferea uses a new cache format and has migrated your " #~ "feed cache. The cache content in %s was not deleted automatically. Please " #~ "remove this directory manually once you are sure migration was successful!" #~ msgstr "" #~ "此版本的 Liferea 使用了新的缓存格式,并已将您原有的文件转换为新的格式。%s " #~ "中旧的缓存内容没有自动删除,如果您确信转换无误则请手工删除它!" #, fuzzy #~ msgid "Download FAILED: \"%s\"" #~ msgstr "下载附件失败:%s" #, fuzzy #~ msgid "Download finished." #~ msgstr "下载方式(_D):" #~ msgid "Choose download directory" #~ msgstr "选择下载目录" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "手动(_M):\n" #~ "(%s 是网址)" #~ msgid "_Save downloads in" #~ msgstr "将下载保存于(_S)" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "启用本地 LAN 同步(_E)" #~ msgid "_Service Name" #~ msgstr "服务名称(_S)" #~ msgid "Sync" #~ msgstr "同步" #~ msgid "Downloading Enclosure" #~ msgstr "附件下载中" #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "跳到下一个未读条目,必要时会跳到下一个 Feed 中的未读条目。" #~ msgid "Liferea Sync %s@%s" #~ msgstr "Liferea 同步 %s@%s" #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "输出插件装载的调试信息" #~ msgid "Liferea seems to be running already!" #~ msgstr "Liferea 已经运行!" #~ msgid "Update status" #~ msgstr "更新状态" #~ msgid "was updated" #~ msgstr "已更新" #~ msgid "was not updated" #~ msgstr "没有更新" #~ msgid "The orientation of the tray." #~ msgstr "系统托盘的方位。" #~ msgid "topics_en.html" #~ msgstr "topics_zh_CN.html" #~ msgid "reference_en.html" #~ msgstr "reference_zh_CN.html" #~ msgid "faq_en.html" #~ msgstr "faq_zh_CN.html" #~ msgid "_Script Manager" #~ msgstr "脚本管理器(_S)" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "允许配置和编辑 LUA 钩子脚本" #~ msgid "Search With ..." #~ msgstr "使用搜索..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "“%2$s”的 %1$d 个搜索结果" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d 个搜索结果" #, fuzzy #~ msgid "" #~ "The item list now contains all items matching the specified search " #~ "pattern. If you want to save this search result permanently you can click " #~ "the \"Search Folder\" button in the search dialog and Liferea will add a " #~ "search folder to your feed list." #~ msgstr "" #~ "%s

        %d 搜索结果 \"%s\"

        现在的条目列表包括所有匹配设置搜索模式的所" #~ "有条目。如果需要永久保存这些搜索结果,您可以点击搜索对话框中的虚拟目录按" #~ "钮,Liferea 会把一个虚拟目录添加到您的feed列表中。" #~ msgid "You have to select a feed entry" #~ msgstr "您必须选定一 Feed 入口" #~ msgid "(empty)" #~ msgstr "(空)" #~ msgid "_Properties..." #~ msgstr "属性(_P)..." #~ msgid "Update out-dated feeds" #~ msgstr "更新所有过期 Feed" #~ msgid "Force update of all feeds" #~ msgstr "强制更新所有 Feed" #~ msgid "No feed update at all" #~ msgstr "没有 Feed 被更新" #~ msgid "startup" #~ msgstr "启动" #~ msgid "feed updated" #~ msgstr "Feed 已更新" #~ msgid "feed added" #~ msgstr "Feed 已添加" #~ msgid "item selected" #~ msgstr "选定的条目" #~ msgid "feed selected" #~ msgstr "选定的 Feed" #~ msgid "item unselected" #~ msgstr "未选定的条目" #~ msgid "feed unselected" #~ msgstr "未选定的 Feed" #~ msgid "shutdown" #~ msgstr "关闭" #~ msgid "Sorry, no scripting support available!" #~ msgstr "抱歉,不支持脚本!" #~ msgid "Script Name" #~ msgstr "脚本名称" #~ msgid "No script selected!" #~ msgstr "未选择脚本!" #~ msgid "Create a new search feed." #~ msgstr "创建一个搜索 Feed。" #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea 无法显示此条目的内容。" #~ msgid "

        View this item's content.

        " #~ msgstr "

        查看此条目的内容。

        " #~ msgid "feedlist.opml" #~ msgstr "feedlist.opml" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Hook" #~ msgstr "钩子" #~ msgid "Registered Scripts" #~ msgstr "已注册脚本" #~ msgid "Script Code" #~ msgstr "脚本代码" #~ msgid "text/plain" #~ msgstr "text/plain" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "此选项可能会在载入包含大量 Feed 的目录时,导致严重的延迟。" #~ msgid "Downloading Enclosures" #~ msgstr "附件下载" #~ msgid "Feed Cache Handling" #~ msgstr "Feed 缓存处理" #~ msgid "Feed Name" #~ msgstr "Feed 名称" #~ msgid "Feed Update Settings" #~ msgstr "Feed 更新设置" #~ msgid "HTTP Proxy Server" #~ msgstr "HTTP 代理服务器" #~ msgid "Opening Enclosures" #~ msgstr "开启附件" #~ msgid "Reading Headlines" #~ msgstr "读取标题" #~ msgid "Toolbar Settings" #~ msgstr "工具栏设置" #~ msgid "Update Interval" #~ msgstr "更新周期" #~ msgid "Web Integration" #~ msgstr "Web 集成" #~ msgid "Add Script" #~ msgstr "添加脚本" #~ msgid "At _startup:" #~ msgstr "于启动时(_S):" #~ msgid "Create new script" #~ msgstr "新建脚本" #~ msgid "Exec Command" #~ msgstr "执行命令" #~ msgid "Reuse existing script" #~ msgstr "重复使用现有脚本" #~ msgid "Script Manager" #~ msgstr "脚本管理器" liferea-1.12.7/po/zh_TW.po000066400000000000000000002247041352135647700152500ustar00rootroot00000000000000# Chinese/Traditional translation of liferea. # Copyright (C) 2004, 2005 # This file is distributed under the same license as the liferea package. # Jim Huang , 2005. # Rex Tsai , 2004. # msgid "" msgstr "" "Project-Id-Version: liferea\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-12-06 17:12+0100\n" "PO-Revision-Date: 2005-12-11 13:22+0800\n" "Last-Translator: Jim Huang \n" "Language-Team: Chinese/Traditional \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=0;\n" #: ../liferea.appdata.xml.in.h:1 #, fuzzy msgid "RSS feed reader" msgstr "饋流快取" #: ../liferea.appdata.xml.in.h:2 msgid "" "Liferea is an abbreviation for Linux Feed Reader. It is a news aggregator " "for online news feeds. It supports a number of different feed formats " "including RSS/RDF, CDF and Atom. There are many other news readers " "available, but these others are not available for Linux or require many " "extra libraries to be installed. Liferea tries to fill this gap by creating " "a fast, easy to use, easy to install news aggregator for GTK/GNOME." msgstr "" #: ../liferea.appdata.xml.in.h:3 msgid "Distinguishing features:" msgstr "" #: ../liferea.appdata.xml.in.h:4 #, fuzzy msgid "Read articles when offline" msgstr "Lifeare 現為離線模式" #: ../liferea.appdata.xml.in.h:5 #, fuzzy msgid "Synchronizes with TheOldReader" msgstr "饋流名稱" #: ../liferea.appdata.xml.in.h:6 #, fuzzy msgid "Synchronizes with TinyTinyRSS" msgstr "饋流名稱" #: ../liferea.appdata.xml.in.h:7 #, fuzzy msgid "Synchronizes with InoReader" msgstr "饋流名稱" #: ../liferea.appdata.xml.in.h:8 #, fuzzy msgid "Synchronizes with Reedah" msgstr "饋流名稱" #: ../liferea.appdata.xml.in.h:9 msgid "Permanently save headlines in news bins" msgstr "" #: ../liferea.appdata.xml.in.h:10 msgid "Match items using search folders" msgstr "" #: ../liferea.appdata.xml.in.h:11 msgid "Play Podcasts" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:1 ../src/main.c:74 #: ../glade/mainwindow.ui.h:1 msgid "Liferea" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:2 #, fuzzy msgid "Feed Reader" msgstr "饋流快取" #: ../net.sourceforge.liferea.desktop.in.h:3 #, fuzzy msgid "Liferea Feed Reader" msgstr "Lifeera 偏好" #: ../net.sourceforge.liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "" #: ../net.sourceforge.liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;syndication;rss;atom" msgstr "" #: ../xslt/feed.xml.in.h:1 msgid "" "This feed is discontinued. It's no longer available. Liferea won't update it " "anymore but you can still access the cached headlines." msgstr "" "此饋流已失效,將不再更新。Liferea 將不會更新它,但是您可以繼續讀取暫存標題。" #: ../xslt/feed.xml.in.h:2 #, fuzzy msgid "" "The last update of this subscription failed!
        HTTP error code : " msgstr "更新此訂閱失敗!
        HTTP 錯誤碼 %d: %s" #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "分析饋流時出現錯誤" #: ../xslt/feed.xml.in.h:4 #, fuzzy msgid "Parser Error Details" msgstr "顯示細節" #: ../xslt/feed.xml.in.h:5 #, fuzzy msgid "Details" msgstr "顯示細節" #: ../xslt/feed.xml.in.h:6 msgid "You may want to contact the author/webmaster of the feed about this!" msgstr "" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "過濾該饋流時出現錯誤" #: ../xslt/feed.xml.in.h:8 #, fuzzy msgid "Filter Error Details" msgstr "顯示細節" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "饋流:" #: ../xslt/feed.xml.in.h:10 ../xslt/source.xml.in.h:1 msgid "Source:" msgstr "來源:" #: ../xslt/feed.xml.in.h:11 #, fuzzy msgid "Publisher" msgstr "發佈者" #: ../xslt/feed.xml.in.h:12 #, fuzzy msgid "Copyright" msgstr "版權" #: ../xslt/source.xml.in.h:2 ../xslt/folder.xml.in.h:2 msgid "children with" msgstr "" #: ../xslt/source.xml.in.h:3 ../xslt/folder.xml.in.h:3 #: ../xslt/vfolder.xml.in.h:2 #, fuzzy msgid "unread headlines" msgstr "標題" #: ../xslt/folder.xml.in.h:1 #, fuzzy msgid "Folder:" msgstr "虛擬目錄" #: ../xslt/item.xml.in.h:1 ../glade/properties.ui.h:22 #, fuzzy msgid "Source" msgstr "來源:" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "饋流" #: ../xslt/item.xml.in.h:3 #, fuzzy msgid "Filed under" msgstr "饋流快取" #: ../xslt/item.xml.in.h:4 #, fuzzy msgid "Author" msgstr "作者" #: ../xslt/item.xml.in.h:5 msgid "Shared by" msgstr "" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "" #: ../xslt/item.xml.in.h:9 #, fuzzy msgid "Creator" msgstr "創作者" #: ../xslt/item.xml.in.h:10 msgid "Coordinates" msgstr "" #: ../xslt/item.xml.in.h:11 msgid "Map" msgstr "" #: ../xslt/item.xml.in.h:12 #, fuzzy msgid "Comments" msgstr "說明" #: ../xslt/item.xml.in.h:13 #, fuzzy msgid "Updating..." msgstr "更新: \"%s\"" #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "" #: ../xslt/newsbin.xml.in.h:1 #, fuzzy msgid "News Bin:" msgstr "新視窗" #: ../xslt/newsbin.xml.in.h:2 msgid "" "Add items to this news bin by selecting \"Copy to News Bin\" from the item " "list context menu." msgstr "" #: ../xslt/vfolder.xml.in.h:1 #, fuzzy msgid "Search Folder:" msgstr "新目錄" #: ../src/browser.c:81 ../src/browser.c:98 #, c-format msgid "Browser command failed: %s" msgstr "瀏覽器指令失敗: %s" #: ../src/browser.c:101 #, c-format msgid "Starting: \"%s\"" msgstr "啟動: \"%s\"" #. unauthorized #: ../src/comments.c:120 #, fuzzy msgid "Authorization Error" msgstr "認證" #: ../src/common.c:66 #, fuzzy, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "無法建立快取目錄 %s !" #: ../src/conf.c:183 msgid "" "Your version of WebKitGTK+ doesn't support changing the proxy settings from " "Liferea. The system's default proxy settings will be used." msgstr "" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:133 msgid "Today %l:%M %p" msgstr "" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:142 msgid "Yesterday %l:%M %p" msgstr "" #. translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary #: ../src/date.c:154 msgid "%a %l:%M %p" msgstr "" #. translation hint: date format for dates older than a week but from this year, reorder format codes as necessary #: ../src/date.c:162 msgid "%b %d %l:%M %p" msgstr "" #. translation hint: date format for dates from the last years, reorder format codes as necessary #: ../src/date.c:165 msgid "%b %d %Y" msgstr "" #: ../src/enclosure.c:201 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" 不是有效的設定檔!" #: ../src/enclosure.c:292 msgid "" "You have not configured a download tool yet! Please do so in the " "'Enclosures' tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:311 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check whether the configured download tool is installed and working " "correctly! You can change it in the 'Download' tab in Tools/Preferences." msgstr "" #: ../src/export.c:188 #, fuzzy, c-format msgid "Error renaming %s to %s: %s\n" msgstr "無法將 %s 更名為 %s\n" #: ../src/export.c:417 ../src/export.c:419 #, fuzzy, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "讀入快取檔案 \"%s\" 時發生 XML 錯誤 ! 無法讀入快取檔案!" #: ../src/export.c:425 ../src/export.c:427 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "空白文件! OPML \"%s\" 檔案不應是空白檔案。" #: ../src/export.c:448 ../src/export.c:450 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "\"%s\" 不是有效的 OPML 檔案! 無法匯入!" #: ../src/export.c:469 msgid "Imported feed list" msgstr "匯入饋流列表" #: ../src/export.c:481 msgid "Import Feed List" msgstr "匯入饋流列表" #: ../src/export.c:481 msgid "Import" msgstr "匯入" #: ../src/export.c:481 ../src/export.c:498 ../src/fl_sources/opml_source.c:379 #, fuzzy msgid "OPML Files" msgstr "選擇檔案" #: ../src/export.c:489 msgid "Error while exporting feed list!" msgstr "在匯出饋流列表時錯誤!" #: ../src/export.c:491 msgid "Feed List exported!" msgstr "饋流列表已匯出!" #: ../src/export.c:498 msgid "Export Feed List" msgstr "匯出饋流列表" #: ../src/export.c:498 msgid "Export" msgstr "匯出" #: ../src/feed.c:317 #, fuzzy msgid "" "

        Could not detect the type of this feed! Please check if the source really " "points to a resource provided in one of the supported syndication formats!XML Parser Output:

        " msgstr "

        無法偵測此饋流類型! 請確認網址指向已支援的正確餽流來源!

        %s" #: ../src/feed.c:344 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" 更新中" #: ../src/feed.c:351 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" 不可用!" #: ../src/feed_parser.c:137 msgid "" "The URL you want Liferea to subscribe to points to a webpage and the auto " "discovery found no feeds on this page. Maybe this webpage just does not " "support feed auto discovery." msgstr "" #: ../src/feed_parser.c:170 #, fuzzy, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "

        讀入饋流時出現 XML 錯誤! 饋流 \"%s\" 無法載入!

        " #: ../src/feed_parser.c:175 #, fuzzy msgid "Empty document!" msgstr "

        空文件!

        " #: ../src/feed_parser.c:187 #, fuzzy msgid "Invalid XML!" msgstr "

        無效 XML!

        " #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "" #: ../src/feed_parser.c:230 #, fuzzy msgid "Could not determine the feed type." msgstr "

        無法找到 RDF 標頭!

        " #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:396 #, fuzzy msgid "There are no unread items" msgstr "沒有未讀項目 " #: ../src/liferea_application.c:282 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" #: ../src/liferea_application.c:282 msgid "STATE" msgstr "" #: ../src/liferea_application.c:283 #, fuzzy msgid "Show version information and exit" msgstr " --version 印出 Liferea 版本編號" #: ../src/liferea_application.c:284 #, fuzzy msgid "Add a new subscription" msgstr "新增訂閱" #: ../src/liferea_application.c:284 msgid "uri" msgstr "" #: ../src/liferea_application.c:285 msgid "Start with all plugins disabled" msgstr "" #: ../src/liferea_application.c:290 #, fuzzy msgid "Print debugging messages of all types" msgstr " --debug-all 印出所有類別的除錯訊息" #: ../src/liferea_application.c:291 #, fuzzy msgid "Print debugging messages for the cache handling" msgstr " --debug-cache 印出處理快取時的除錯訊息" #: ../src/liferea_application.c:292 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr " --debug-conf 印出設定的除錯訊息" #: ../src/liferea_application.c:293 #, fuzzy msgid "Print debugging messages of the database handling" msgstr " --debug-cache 印出處理快取時的除錯訊息" #: ../src/liferea_application.c:294 #, fuzzy msgid "Print debugging messages of all GUI functions" msgstr " --debug-gui 印出所有圖形使用者介面的除錯訊息" #: ../src/liferea_application.c:295 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" #: ../src/liferea_application.c:296 #, fuzzy msgid "Print debugging messages of all network activity" msgstr " --debug-all 印出所有類別的除錯訊息" #: ../src/liferea_application.c:297 #, fuzzy msgid "Print debugging messages of all parsing functions" msgstr " --debug-parsing 印出所有分析功能的除錯訊息" #: ../src/liferea_application.c:298 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/liferea_application.c:299 #, fuzzy msgid "Print debugging messages when entering/leaving functions" msgstr " --debug-trace 印出 entering/leaving 函式除錯訊息" #: ../src/liferea_application.c:300 #, fuzzy msgid "Print debugging messages of the feed update processing" msgstr " --debug-update 印出饋流升級的錯誤訊息" #: ../src/liferea_application.c:301 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr " --debug-cache 印出處理快取時的除錯訊息" #: ../src/liferea_application.c:302 #, fuzzy msgid "Print verbose debugging messages" msgstr " --debug-verbose 印出繁瑣除錯訊息" #: ../src/liferea_application.c:307 ../src/liferea_application.c:308 #, fuzzy msgid "Print debugging messages for the given topic" msgstr " --debug-cache 印出處理快取時的除錯訊息" #. Some libsoup transport errors #: ../src/net.c:463 msgid "The update request was cancelled" msgstr "" #: ../src/net.c:464 msgid "Unable to resolve destination host name" msgstr "" #: ../src/net.c:465 msgid "Unable to resolve proxy host name" msgstr "" #: ../src/net.c:466 #, fuzzy msgid "Unable to connect to remote host" msgstr "無法連線到遠端主機" #: ../src/net.c:467 msgid "Unable to connect to proxy" msgstr "" #: ../src/net.c:468 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:471 msgid "The resource moved permanently to a new location" msgstr "" #. http 4xx client error #: ../src/net.c:474 #, fuzzy msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "您未獲下載此饋流權限。請在饋流屬性視窗中更新輸入您的帳號與密碼。" #: ../src/net.c:476 #, fuzzy msgid "Payment required" msgstr "Payment Required" #: ../src/net.c:477 msgid "You're not allowed to access this resource" msgstr "" #: ../src/net.c:478 msgid "Resource Not Found" msgstr "未找到資源" #: ../src/net.c:479 msgid "Method Not Allowed" msgstr "方法不允許" #: ../src/net.c:480 msgid "Not Acceptable" msgstr "無法接受" #: ../src/net.c:481 #, fuzzy msgid "Proxy authentication required" msgstr "代理伺服器需要認證" #: ../src/net.c:482 #, fuzzy msgid "Request timed out" msgstr "存取逾時" #: ../src/net.c:483 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "完了。資源不存在。請取消訂閱!" #: ../src/net.c:488 msgid "There was an internal error in the update process" msgstr "" #: ../src/net.c:490 msgid "Feed not available: Server requested unsupported redirection!" msgstr "饋流無法使用: 伺服器使用未支援的重導!" #: ../src/net.c:492 msgid "Client Error" msgstr "客戶端的錯誤" #: ../src/net.c:494 msgid "Server Error" msgstr "伺服器端的錯誤" #: ../src/net.c:496 #, fuzzy msgid "An unknown networking error happened!" msgstr "(未知的網路錯誤)" #. SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param #. ======================================================================================================================================================================================== #: ../src/rule.c:174 msgid "Item" msgstr "項目" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does contain" msgstr "包含" #: ../src/rule.c:174 ../src/rule.c:175 ../src/rule.c:176 ../src/rule.c:181 msgid "does not contain" msgstr "不包含" #: ../src/rule.c:175 msgid "Item title" msgstr "項目標題" #: ../src/rule.c:176 msgid "Item body" msgstr "項目內容" #: ../src/rule.c:177 msgid "Read status" msgstr "閱讀狀態" #: ../src/rule.c:177 msgid "is unread" msgstr "未讀" #: ../src/rule.c:177 msgid "is read" msgstr "已讀" #: ../src/rule.c:178 msgid "Flag status" msgstr "標籤狀態" #: ../src/rule.c:178 msgid "is flagged" msgstr "以標籤" #: ../src/rule.c:178 msgid "is unflagged" msgstr "未標籤" #: ../src/rule.c:179 msgid "Podcast" msgstr "" #: ../src/rule.c:179 #, fuzzy msgid "included" msgstr "包含圖片" #: ../src/rule.c:179 #, fuzzy msgid "not included" msgstr "包含圖片" #: ../src/rule.c:180 #, fuzzy msgid "Category" msgstr "分類" #: ../src/rule.c:180 #, fuzzy msgid "is set" msgstr "已讀" #: ../src/rule.c:180 msgid "is not set" msgstr "" #: ../src/rule.c:181 msgid "Feed title" msgstr "饋流標題" #: ../src/subscription.c:106 #, fuzzy, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "此饋流 \"%s\" 已經更新!" #: ../src/subscription.c:111 #, fuzzy, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "饋流 %s 已經失效。Liferea 將不會更新它。" #: ../src/subscription.c:145 #, fuzzy, c-format msgid "Updating favicon for \"%s\"" msgstr "更新饋流 \"%s\" 的圖示" #: ../src/subscription.c:194 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "讀取此訂閱時出現問題。請確認網址與終端機輸出!" #: ../src/subscription.c:217 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "\"%s\" 已經更新為永久網址。" #: ../src/subscription.c:225 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" 終止更新。Liferea 將不會更新此饋流!" #: ../src/subscription.c:228 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" 自從最後更新後沒有改變。" #: ../src/subscription.c:315 #, c-format msgid "Updating \"%s\"" msgstr "更新: \"%s\"" #: ../src/update.c:297 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "當開始暫存檔 %s 以處理過濾時,發生錯誤!" #: ../src/update.c:320 #, c-format msgid "%s exited with status %d" msgstr "%s 終止,錯誤代碼: %d" #: ../src/update.c:326 ../src/update.c:327 ../src/update.c:444 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "錯誤: 無法開啟管道 \"%s\"!" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:470 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "錯誤: 無法開啟檔案 \"%s\"!" #: ../src/update.c:476 #, c-format msgid "Error: There is no file \"%s\"" msgstr "錯誤: 無此檔案 \"%s\"!" #: ../src/vfolder.c:54 #, fuzzy msgid "New Search Folder" msgstr "新目錄" #: ../src/xml.c:410 #, fuzzy msgid "[There were more errors. Output was truncated!]" msgstr "[解析器的錯誤訊息已截去!]" #: ../src/xml.c:563 #, fuzzy msgid "XML Parser: Could not parse document:\n" msgstr "" "xmlReadMemory(): 無法解析文件:\n" "%s%s" #: ../src/ui/enclosure_list_view.c:175 #, fuzzy msgid "Attachments" msgstr "說明" #. The following literals are the enclosure list size units #: ../src/ui/enclosure_list_view.c:272 msgid " Bytes" msgstr "" #: ../src/ui/enclosure_list_view.c:275 msgid "kB" msgstr "" #: ../src/ui/enclosure_list_view.c:279 msgid "MB" msgstr "" #: ../src/ui/enclosure_list_view.c:283 msgid "GB" msgstr "" #: ../src/ui/enclosure_list_view.c:287 #, c-format msgid "%d%s" msgstr "" #. update list title #: ../src/ui/enclosure_list_view.c:325 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "" msgstr[1] "" #: ../src/ui/enclosure_list_view.c:383 ../src/ui/subscription_dialog.c:352 msgid "Choose File" msgstr "選擇檔案" #: ../src/ui/enclosure_list_view.c:444 #, c-format msgid "File Extension .%s" msgstr "" #: ../src/ui/icons.c:54 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "無法找到圖檔: %s" # what's this ? # #: src/ui_tray.c:90 # #, c-format # msgid "%d new item!" # msgid_plural "%d new items!" # msgstr[0] "%d 個新項目" # msgstr[1] "%d 個新項目" # what's this ? # #: src/ui_tray.c:90 # #, c-format # msgid "%d new item!" # msgid_plural "%d new items!" # msgstr[0] "%d 個新項目" # msgstr[1] "%d 個新項目" #: ../src/ui/liferea_shell.c:404 #, fuzzy, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] "%d 個新項目" msgstr[1] "%d 個新項目" #: ../src/ui/liferea_shell.c:409 #, fuzzy, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "未讀" msgstr[1] "未讀" #: ../src/ui/liferea_shell.c:766 msgid "Help Topics" msgstr "" #: ../src/ui/liferea_shell.c:772 msgid "Quick Reference" msgstr "快速參考" #: ../src/ui/liferea_shell.c:778 msgid "FAQ" msgstr "" #: ../src/ui/search_dialog.c:116 #, fuzzy msgid "Saved Search" msgstr "Feedster 搜尋" #: ../src/ui/auth_dialog.c:123 ../glade/auth.ui.h:3 #, no-c-format msgid "Enter the username and password for \"%s\" (%s):" msgstr "輸入使用者名稱與密碼 \"%s\" (%s):" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "未知來源" #: ../src/ui/ui_common.c:168 ../src/ui/feed_list_node.c:416 #: ../src/ui/feed_list_node.c:470 #, fuzzy msgid "_Cancel" msgstr "更新全部(_A)" #: ../src/ui/ui_common.c:211 #, fuzzy msgid "All Files" msgstr "本地檔案(_L)" #: ../src/ui/feed_list_view.c:376 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea 在離線模式。無法更新!" #: ../src/ui/feed_list_view.c:422 #, fuzzy msgid "all feeds" msgstr "搜尋所有饋流" #: ../src/ui/feed_list_view.c:423 #, fuzzy, c-format msgid "Mark %s as read ?" msgstr "全部標示為已讀(_R)" #: ../src/ui/feed_list_view.c:427 #, fuzzy, c-format msgid "Are you sure you want to mark all items in %s as read ?" msgstr "您確定要刪除 %s 嗎 ?" #: ../src/ui/item_list_view.c:113 msgid "This item has no link specified!" msgstr "此項目沒有指定連結!" #: ../src/ui/item_list_view.c:484 #, fuzzy msgid "*** No title ***" msgstr "[無標題]" #: ../src/ui/item_list_view.c:488 msgid " important " msgstr "" #: ../src/ui/item_list_view.c:834 msgid "Headline" msgstr "標題" #: ../src/ui/item_list_view.c:856 msgid "Date" msgstr "日期" #: ../src/ui/item_list_view.c:1040 msgid "You must select a feed to delete its items!" msgstr "您必須先選擇一個饋流才能刪除!" #: ../src/ui/item_list_view.c:1056 ../src/ui/item_list_view.c:1133 #: ../src/ui/item_list_view.c:1148 msgid "No item has been selected" msgstr "未選擇項目!" #: ../src/ui/popup_menu.c:107 msgid "Open In _Tab" msgstr "" #: ../src/ui/popup_menu.c:111 #, fuzzy msgid "_Open In Browser" msgstr "載入瀏覽器(_L)" #: ../src/ui/popup_menu.c:115 #, fuzzy msgid "Open In _External Browser" msgstr "外部瀏覽器設定" #: ../src/ui/popup_menu.c:139 msgid "Copy to News Bin" msgstr "" #: ../src/ui/popup_menu.c:147 #, c-format msgid "_Bookmark at %s" msgstr "" #: ../src/ui/popup_menu.c:153 #, fuzzy msgid "Copy Item _Location" msgstr "/複製連結位址(_C)" #: ../src/ui/popup_menu.c:162 msgid "Toggle _Read Status" msgstr "切換閱讀狀態(_R)" #: ../src/ui/popup_menu.c:166 msgid "Toggle Item _Flag" msgstr "切換項目旗標(_F)" #: ../src/ui/popup_menu.c:170 #, fuzzy msgid "R_emove Item" msgstr "/移除項目(_E)" #: ../src/ui/popup_menu.c:200 #, fuzzy msgid "Open Enclosure..." msgstr "/開啟附件..." #: ../src/ui/popup_menu.c:201 #, fuzzy msgid "Save As..." msgstr "/另存新檔為..." #: ../src/ui/popup_menu.c:202 #, fuzzy msgid "Copy Link Location" msgstr "/複製連結位址(_C)" #: ../src/ui/popup_menu.c:280 #, fuzzy msgid "_Update" msgstr "/更新(U)" #: ../src/ui/popup_menu.c:282 #, fuzzy msgid "_Update Folder" msgstr "/更新目錄(_U)" #: ../src/ui/popup_menu.c:292 #, fuzzy msgid "New _Subscription..." msgstr "新增訂閱(_N)..." #: ../src/ui/popup_menu.c:295 msgid "New _Folder..." msgstr "新目錄(_F)..." #: ../src/ui/popup_menu.c:298 #, fuzzy msgid "New S_earch Folder..." msgstr "新目錄(_F)..." #: ../src/ui/popup_menu.c:299 #, fuzzy msgid "New S_ource..." msgstr "/新增(_N)/新增目錄(_O)" #: ../src/ui/popup_menu.c:300 #, fuzzy msgid "New _News Bin..." msgstr "/新增(_N)/新增目錄(_O)" #: ../src/ui/popup_menu.c:303 #, fuzzy msgid "_New" msgstr "/新增(_N)" #: ../src/ui/popup_menu.c:312 #, fuzzy msgid "Sort Feeds" msgstr "匯入饋流列表" #: ../src/ui/popup_menu.c:320 #, fuzzy msgid "_Mark All As Read" msgstr "/全部標示為已讀(_M)" #: ../src/ui/popup_menu.c:327 msgid "_Rebuild" msgstr "" #: ../src/ui/popup_menu.c:335 ../src/ui/feed_list_node.c:417 #, fuzzy msgid "_Delete" msgstr "/刪除饋流(_D)" #: ../src/ui/popup_menu.c:336 #, fuzzy msgid "_Properties" msgstr "屬性(_P)..." #: ../src/ui/popup_menu.c:343 #, fuzzy msgid "Convert To Local Subscriptions..." msgstr "新增訂閱(_N)..." #: ../src/ui/preferences_dialog.c:86 msgid "GNOME default" msgstr "" #: ../src/ui/preferences_dialog.c:87 msgid "Text below icons" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "Text beside icons" msgstr "" #: ../src/ui/preferences_dialog.c:89 msgid "Icons only" msgstr "" #: ../src/ui/preferences_dialog.c:90 msgid "Text only" msgstr "" #: ../src/ui/preferences_dialog.c:98 ../src/ui/subscription_dialog.c:43 #, fuzzy msgid "minutes" msgstr "分鐘。" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "" #: ../src/ui/preferences_dialog.c:105 msgid "Space" msgstr "空白" #: ../src/ui/preferences_dialog.c:106 msgid " Space" msgstr " 空白鍵" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " 空白鍵" #: ../src/ui/preferences_dialog.c:112 #, fuzzy msgid "Normal View" msgstr "本地檔案(_L)" #: ../src/ui/preferences_dialog.c:113 #, fuzzy msgid "Wide View" msgstr "檢視項目(_V)" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Combined View" msgstr "啟動摘要模式(_C)" #: ../src/ui/preferences_dialog.c:476 #, fuzzy msgid "Default Browser" msgstr "瀏覽器" #: ../src/ui/preferences_dialog.c:478 msgid "Manual" msgstr "手動" #: ../src/ui/preferences_dialog.c:725 msgid "Type" msgstr "型態" #: ../src/ui/preferences_dialog.c:728 msgid "Program" msgstr "程式" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:335 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/feed_list_node.c:406 msgid "Deleting entry" msgstr "刪除項目中" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "您確定要刪除 %s 及其內容嗎?" #: ../src/ui/feed_list_node.c:407 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "您確定要刪除 %s 嗎 ?" #: ../src/ui/feed_list_node.c:419 msgid "Deletion Confirmation" msgstr "刪除確認" #: ../src/ui/feed_list_node.c:458 #, c-format msgid "" "Are you sure that you want to add a new subscription with URL \"%s\"? " "Another subscription with the same URL already exists (\"%s\")." msgstr "" #: ../src/ui/feed_list_node.c:471 msgid "_Add" msgstr "" #: ../src/ui/feed_list_node.c:473 #, fuzzy msgid "Adding Duplicate Subscription Confirmation" msgstr "刪除確認" #: ../src/ui/subscription_dialog.c:352 ../src/fl_sources/opml_source.c:379 msgid "_Open" msgstr "" #: ../src/ui/subscription_dialog.c:426 #, fuzzy, c-format msgid "The provider of this feed suggests an update interval of %d minute." msgid_plural "" "The provider of this feed suggests an update interval of %d minutes." msgstr[0] "饋流供應者建議更新頻率為 %d 分鐘" msgstr[1] "饋流供應者建議更新頻率為 %d 分鐘" #: ../src/ui/subscription_dialog.c:430 msgid "This feed specifies no default update interval." msgstr "此饋流未指定預設更新頻率" #: ../src/ui/browser_tabs.c:264 msgid "Untitled" msgstr "未命名" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "" #: ../src/fl_sources/default_source.c:139 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "新增訂閱" #: ../src/fl_sources/google_source.c:111 #, fuzzy msgid "Google Reader" msgstr "饋流快取" #: ../src/fl_sources/opml_source.c:319 msgid "Planet, BlogRoll, OPML" msgstr "" #: ../src/fl_sources/opml_source.c:379 #, fuzzy msgid "Choose OPML File" msgstr "選擇檔案" #: ../src/fl_sources/opml_source.h:28 #, fuzzy msgid "New OPML Subscription" msgstr "新增訂閱" #: ../src/fl_sources/node_source.c:334 msgid "No feed list source types found!" msgstr "" #: ../src/fl_sources/node_source.c:363 #, fuzzy msgid "Source Type" msgstr "來源類型:" #: ../src/fl_sources/node_source.c:414 #, c-format msgid "Login for '%s' has not yet completed! Please wait until login is done." msgstr "" #. FIXME: something is not perfect, because if you immediately #. remove the subscription tree afterwards there is a double free #: ../src/fl_sources/node_source.c:580 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "" #: ../src/fl_sources/reedah_source.c:103 #: ../src/fl_sources/theoldreader_source.c:104 msgid "Login failed!" msgstr "" #: ../src/fl_sources/reedah_source.c:312 msgid "Reedah" msgstr "" #: ../src/fl_sources/reedah_source_feed.c:154 msgid "Could not parse JSON returned by Reedah API!" msgstr "" #: ../src/fl_sources/ttrss_source.c:224 ../src/fl_sources/ttrss_source.c:283 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "" #: ../src/fl_sources/ttrss_source.c:231 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "" #: ../src/fl_sources/ttrss_source.c:290 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "" #: ../src/fl_sources/ttrss_source.c:307 #, c-format msgid "" "This TinyTinyRSS version does not support removing feeds. Upgrade to version " "%s or later!" msgstr "" #: ../src/fl_sources/ttrss_source.c:427 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source_feed.c:150 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" #: ../src/fl_sources/theoldreader_source.c:329 #, fuzzy msgid "TheOldReader" msgstr "饋流快取" #: ../src/webkit/liferea_web_view.c:175 #, fuzzy msgid "Open Link In _Tab" msgstr "/在 Tab 開啟連結(_T)" #: ../src/webkit/liferea_web_view.c:176 #, fuzzy msgid "Open Link In Browser" msgstr "/開啟連結(_L)" #: ../src/webkit/liferea_web_view.c:177 #, fuzzy msgid "Open Link In External Browser" msgstr "/開啟連結(_L)" #: ../src/webkit/liferea_web_view.c:183 #, c-format msgid "_Bookmark Link at %s" msgstr "" #: ../src/webkit/liferea_web_view.c:190 #, fuzzy msgid "_Copy Link Location" msgstr "/複製連結位址(_C)" #: ../src/webkit/liferea_web_view.c:193 #, fuzzy msgid "_View Image" msgstr "檢視項目(_V)" #: ../src/webkit/liferea_web_view.c:194 #, fuzzy msgid "_Copy Image Location" msgstr "/複製連結位址(_C)" #: ../src/webkit/liferea_web_view.c:197 #, fuzzy msgid "S_ave Link As" msgstr "/另存新檔為..." #: ../src/webkit/liferea_web_view.c:200 msgid "S_ave Image As" msgstr "" #: ../src/webkit/liferea_web_view.c:207 #, fuzzy msgid "_Subscribe..." msgstr "/訂閱(_S)" #: ../src/webkit/liferea_web_view.c:211 msgid "_Copy" msgstr "" #: ../src/webkit/liferea_web_view.c:217 msgid "_Increase Text Size" msgstr "放大字型(_I)" #: ../src/webkit/liferea_web_view.c:218 msgid "_Decrease Text Size" msgstr "縮小字型(D)" #: ../glade/about.ui.h:1 msgid "About" msgstr "關於" #: ../glade/about.ui.h:2 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea 是 GTK+ 新聞資訊蒐集器" #: ../glade/about.ui.h:3 #, fuzzy msgid "Liferea Homepage" msgstr "Lifeera 偏好" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "認證" #: ../glade/auth.ui.h:4 ../glade/properties.ui.h:32 msgid "User_name:" msgstr "使用者名稱:" #: ../glade/auth.ui.h:5 ../glade/properties.ui.h:33 msgid "_Password:" msgstr "密碼(_P):" #: ../glade/enclosure_handler.ui.h:1 #, fuzzy msgid "Open Enclosure" msgstr "/開啟附件..." #: ../glade/enclosure_handler.ui.h:2 #, fuzzy msgid "Open an enclosure of type:" msgstr "下載附件型態:" #: ../glade/enclosure_handler.ui.h:3 msgid "" "What should Liferea do with this enclosure? Please enter the command you " "want to be executed below. The enclosures URL will be supplied as an " "argument for this command:" msgstr "" #: ../glade/enclosure_handler.ui.h:4 msgid "_Browse" msgstr "瀏覽器(_B):" #: ../glade/enclosure_handler.ui.h:5 #, fuzzy msgid "_Do this automatically for enclosures like this from now on." msgstr "從現在開始自動替檔案作同樣的處理(_D)" #: ../glade/google_source.ui.h:1 msgid "Add Google Reader Account" msgstr "" #: ../glade/google_source.ui.h:2 msgid "Please enter your Google Reader account settings." msgstr "" #: ../glade/google_source.ui.h:3 ../glade/reedah_source.ui.h:3 #: ../glade/theoldreader_source.ui.h:3 ../glade/ttrss_source.ui.h:4 #, fuzzy msgid "_Password" msgstr "密碼(_P):" #: ../glade/google_source.ui.h:4 ../glade/reedah_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "" #: ../glade/mainwindow.ui.h:2 msgid "page 1" msgstr "" #: ../glade/mainwindow.ui.h:3 msgid "page 2" msgstr "" #: ../glade/mainwindow.ui.h:4 ../glade/prefs.ui.h:4 ../glade/properties.ui.h:28 msgid "0" msgstr "" #: ../glade/mainwindow.ui.h:5 #, fuzzy msgid "View Headlines" msgstr "標題瀏覽器(_V)" #: ../glade/mainwindow.ui.h:6 msgid "page 3" msgstr "" #: ../glade/mainwindow.ui.h:7 ../glade/prefs.ui.h:23 msgid "Headlines" msgstr "標題" #: ../glade/mark_read_dialog.ui.h:1 #, fuzzy msgid "Mark all as read ?" msgstr "全部標示為已讀(_R)" #: ../glade/mark_read_dialog.ui.h:2 #, fuzzy msgid "Mark all as read" msgstr "全部標示為已讀(_R)" #: ../glade/mark_read_dialog.ui.h:3 msgid "Do not ask again" msgstr "" #: ../glade/new_folder.ui.h:1 msgid "New Folder" msgstr "新目錄" #: ../glade/new_folder.ui.h:2 msgid "_Folder name:" msgstr "目錄名稱:(_F)" #: ../glade/new_newsbin.ui.h:1 msgid "Create News Bin" msgstr "" #: ../glade/new_newsbin.ui.h:2 msgid "_News Bin Name:" msgstr "" #: ../glade/new_subscription.ui.h:2 ../glade/properties.ui.h:12 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "饋流來源" #: ../glade/new_subscription.ui.h:3 ../glade/properties.ui.h:13 msgid "Source Type:" msgstr "來源類型:" #: ../glade/new_subscription.ui.h:4 ../glade/properties.ui.h:14 msgid "_URL" msgstr "網址(_U)" #: ../glade/new_subscription.ui.h:5 ../glade/properties.ui.h:15 msgid "_Command" msgstr "指令(_C)" #: ../glade/new_subscription.ui.h:6 ../glade/properties.ui.h:16 msgid "_Local File" msgstr "本地檔案(_L)" #: ../glade/new_subscription.ui.h:7 ../glade/properties.ui.h:17 msgid "Select File..." msgstr "選擇檔案..." #: ../glade/new_subscription.ui.h:8 ../glade/properties.ui.h:18 msgid "_Source:" msgstr "來源:(_S)" #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "下載方式:(_D)" #: ../glade/new_subscription.ui.h:10 ../glade/properties.ui.h:31 msgid "_Don't use proxy for download" msgstr "" #: ../glade/new_subscription.ui.h:11 ../glade/properties.ui.h:19 msgid "Use conversion _filter" msgstr "使用轉換篩選器(_F)" #: ../glade/new_subscription.ui.h:12 msgid "" "Liferea can use external filter plugins in order to access feeds and " "directories in non-supported formats. See the documentation for more " "information." msgstr "Liferea 可以使用額外的過濾外掛模組來存取不支援的格式。細節請查閱文件。" #: ../glade/new_subscription.ui.h:13 ../glade/properties.ui.h:21 msgid "Convert _using:" msgstr "使用以下工具轉換:(_U)" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "" #: ../glade/node_source.ui.h:2 msgid "Select the source type you want to add..." msgstr "" #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "" #: ../glade/opml_source.ui.h:2 msgid "" "Please specify a local file or an URL pointing to a valid OPML feed list." msgstr "" #: ../glade/opml_source.ui.h:3 #, fuzzy msgid "_Location" msgstr "/複製連結位址(_C)" #: ../glade/opml_source.ui.h:4 #, fuzzy msgid "_Select File" msgstr "選擇檔案..." #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Lifeera 偏好" #: ../glade/prefs.ui.h:2 msgid "Feed Cache Handling" msgstr "" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "Liferea 退出時單一饋流最多儲存項目數: (_N)" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "Feed Update Settings" msgstr "饋流快取" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:7 #, fuzzy msgid "" "Note: Please remember to set a reasonable refresh time. Usually it is a " "waste of bandwidth to poll feeds more often than each hour." msgstr "" "註: 請記得輸入一個合理的更新時間,不建議每 15 分鐘更新一個每日更新的串" "流! 若停用自動更新請輸入週期為 0 。" #: ../glade/prefs.ui.h:8 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "新增訂閱" #: ../glade/prefs.ui.h:9 msgid "Default Feed Refresh _Interval:" msgstr "饋流更新週期(_I):" #: ../glade/prefs.ui.h:10 ../glade/properties.ui.h:7 msgid "1" msgstr "" #: ../glade/prefs.ui.h:11 msgid "Feeds" msgstr "饋流" #: ../glade/prefs.ui.h:12 #, fuzzy msgid "Folder Display Settings" msgstr "饋流顯示設定" #: ../glade/prefs.ui.h:13 msgid "_Show the items of all child feeds when a folder is selected." msgstr "當目錄被選取時,顯示所有子饋流項目(_S)" #: ../glade/prefs.ui.h:14 msgid "_Hide read items." msgstr "隱藏閱讀過的項目(_H)" #: ../glade/prefs.ui.h:15 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "饋流圖示" #: ../glade/prefs.ui.h:16 msgid "_Update all favicons now" msgstr "更新所有饋流圖示(_U)" #: ../glade/prefs.ui.h:17 msgid "Folders" msgstr "虛擬目錄" #: ../glade/prefs.ui.h:18 #, fuzzy msgid "Reading Headlines" msgstr "標題" #: ../glade/prefs.ui.h:19 msgid "_Skim through articles with:" msgstr "快速檢閱文章的方式:(_S)" #: ../glade/prefs.ui.h:20 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:21 #, fuzzy msgid "Web Integration" msgstr "方位" #: ../glade/prefs.ui.h:22 msgid "_Post Bookmarks to" msgstr "" #: ../glade/prefs.ui.h:24 #, fuzzy msgid "Internal Browser Settings" msgstr "內部瀏覽器設定" #: ../glade/prefs.ui.h:25 msgid "Open links in Liferea's _window." msgstr "在 Liferea 的視窗開啟連結(_W)" #: ../glade/prefs.ui.h:26 msgid "_Disable Javascript." msgstr "停止使用 Javascript (_D)" #: ../glade/prefs.ui.h:27 #, fuzzy msgid "_Enable browser plugins." msgstr "外部瀏覽器設定" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "External Browser Settings" msgstr "外部瀏覽器設定" #: ../glade/prefs.ui.h:29 msgid "_Browser:" msgstr "瀏覽器(_B):" #: ../glade/prefs.ui.h:30 #, fuzzy msgid "_Manual:" msgstr "手動" #: ../glade/prefs.ui.h:32 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:33 msgid "Browser" msgstr "瀏覽器" #: ../glade/prefs.ui.h:34 #, fuzzy msgid "Toolbar Settings" msgstr "饋流顯示設定" #: ../glade/prefs.ui.h:35 msgid "_Hide toolbar." msgstr "" #: ../glade/prefs.ui.h:36 msgid "Toolbar _button labels:" msgstr "" #: ../glade/prefs.ui.h:37 msgid "Other" msgstr "" #: ../glade/prefs.ui.h:38 msgid "Ask for confirmation when marking all items as read" msgstr "" #: ../glade/prefs.ui.h:39 msgid "GUI" msgstr "圖形使用者介面" #: ../glade/prefs.ui.h:40 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:41 msgid "_Auto Detect (GNOME or environment)" msgstr "" #: ../glade/prefs.ui.h:42 #, fuzzy msgid "_No Proxy" msgstr "代理伺服器" #: ../glade/prefs.ui.h:43 msgid "_Manual Setting:" msgstr "" #: ../glade/prefs.ui.h:44 msgid "Proxy _Host:" msgstr "代理伺服器位址(_H):" #: ../glade/prefs.ui.h:45 msgid "Proxy _Port:" msgstr "代理伺服器埠號(_P)" #: ../glade/prefs.ui.h:46 #, fuzzy msgid "Use Proxy Au_thentication" msgstr "使用代理伺服器認證(_A)" #: ../glade/prefs.ui.h:47 msgid "Proxy _Username:" msgstr "代理伺服器使用者名稱(_U):" #: ../glade/prefs.ui.h:48 msgid "Proxy Pass_word:" msgstr "代理伺服器密碼(_W):" #: ../glade/prefs.ui.h:49 msgid "" "Your version of WebKitGTK+ is older than 2.15.3. It doesn't support per " "application proxy settings. The system's default proxy settings will be used." msgstr "" #: ../glade/prefs.ui.h:50 msgid "Proxy" msgstr "代理伺服器" #: ../glade/prefs.ui.h:51 #, fuzzy msgid "Privacy Settings" msgstr "饋流顯示設定" #: ../glade/prefs.ui.h:52 msgid "Tell sites that I do _not want to be tracked" msgstr "" #: ../glade/prefs.ui.h:53 msgid "Privacy" msgstr "" #: ../glade/prefs.ui.h:54 #, fuzzy msgid "Downloading Enclosures" msgstr "附件下載中" #: ../glade/prefs.ui.h:55 msgid "_Download using" msgstr "下載方式:(_D)" #: ../glade/prefs.ui.h:57 #, no-c-format msgid "custom-command %s" msgstr "" #: ../glade/prefs.ui.h:58 #, fuzzy msgid "Opening Enclosures" msgstr "/開啟附件..." #: ../glade/prefs.ui.h:59 msgid "Enclosures" msgstr "附件" #: ../glade/properties.ui.h:1 msgid "Subscription Properties" msgstr "訂閱屬性" #: ../glade/properties.ui.h:2 #, fuzzy msgid "Feed Name" msgstr "饋流名稱(_N):" #: ../glade/properties.ui.h:3 msgid "Feed _Name:" msgstr "饋流名稱(_N):" #: ../glade/properties.ui.h:4 #, fuzzy msgid "Update Interval" msgstr "/更新目錄(_U)" #: ../glade/properties.ui.h:5 msgid "_Use global default update interval." msgstr "使用預設更新週期(_U)" #: ../glade/properties.ui.h:6 msgid "_Feed specific update interval of" msgstr "指定該饋流的更新週期:(不使用預設值)" #: ../glade/properties.ui.h:8 msgid "_Don't update this feed automatically." msgstr "不自動更新本饋流(_D)" #: ../glade/properties.ui.h:10 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "饋流供應者建議更新週期為 %d 分鐘" #: ../glade/properties.ui.h:11 msgid "General" msgstr "一般" #: ../glade/properties.ui.h:20 #, fuzzy msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "Liferea 可以使用額外的過濾外掛模組來存取不支援的格式。細節請查閱文件。" #: ../glade/properties.ui.h:23 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "快取設定可於退出 Liferea 時控制儲存的饋流內容,已標記的項目將永久儲存於快取" "中。" #: ../glade/properties.ui.h:24 msgid "_Default cache settings" msgstr "預設快取設定(_D)" #: ../glade/properties.ui.h:25 msgid "Di_sable cache" msgstr "取消快取(_S)" #: ../glade/properties.ui.h:26 msgid "_Unlimited cache" msgstr "無限制快取(_U)" #: ../glade/properties.ui.h:27 #, fuzzy msgid "_Number of items to save:" msgstr "Liferea 退出時單一饋流最多儲存項目數: (_N)" #: ../glade/properties.ui.h:29 msgid "Archive" msgstr "" #: ../glade/properties.ui.h:30 msgid "Use HTTP _authentication" msgstr "使用 HTTP 認證(_A)" #: ../glade/properties.ui.h:34 #, fuzzy msgid "Download" msgstr "下載方式:(_D)" #: ../glade/properties.ui.h:35 msgid "_Automatically download all enclosures of this feed." msgstr "" #: ../glade/properties.ui.h:36 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" #: ../glade/properties.ui.h:37 #, fuzzy msgid "Ignore _comment feeds for this subscription." msgstr "開啟選擇訂閱的屬性設定視窗" #: ../glade/properties.ui.h:38 #, fuzzy msgid "_Mark downloaded items as read." msgstr "全部標示為已讀(_M)" #: ../glade/properties.ui.h:39 msgid "Extract full content from HTML5 and Google AMP" msgstr "" #: ../glade/properties.ui.h:40 msgid "Advanced" msgstr "" #: ../glade/reedah_source.ui.h:1 msgid "Add Reedah Account" msgstr "" #: ../glade/reedah_source.ui.h:2 msgid "Please enter your Reedah account settings." msgstr "" #: ../glade/rename_node.ui.h:1 #, fuzzy msgid "Rename" msgstr "重新命名目錄" #: ../glade/rename_node.ui.h:2 #, fuzzy msgid "_New Name:" msgstr "名稱:(_N)" #: ../glade/search_folder.ui.h:1 #, fuzzy msgid "Search Folder Properties" msgstr "虛擬目錄屬性" #: ../glade/search_folder.ui.h:2 #, fuzzy msgid "Search _Name:" msgstr "饋流名稱(_N):" #: ../glade/search_folder.ui.h:3 ../glade/search.ui.h:3 msgid "Find Items that meet the following criteria" msgstr "" #: ../glade/search_folder.ui.h:4 ../glade/search.ui.h:4 msgid "A_ny Rule Matches" msgstr "" #: ../glade/search_folder.ui.h:5 ../glade/search.ui.h:5 msgid "_All Rules Must Match" msgstr "" #: ../glade/search.ui.h:1 #, fuzzy msgid "Advanced Search" msgstr "Feedster 搜尋" #: ../glade/search.ui.h:2 #, fuzzy msgid "_Search Folder..." msgstr "新目錄(_F)..." #: ../glade/simple_search.ui.h:1 msgid "Search All Feeds" msgstr "搜尋所有饋流" #: ../glade/simple_search.ui.h:2 msgid "_Advanced..." msgstr "" #: ../glade/simple_search.ui.h:3 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "開始在所有餽流搜尋指定的文字,搜尋結果將會出現在項目列表中。" #: ../glade/simple_search.ui.h:4 msgid "_Search for:" msgstr "搜尋:(_S)" #: ../glade/simple_search.ui.h:5 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "" #: ../glade/simple_subscription.ui.h:4 msgid "" "Enter a website location to use feed autodiscovery or in case you know it " "the exact feed location." msgstr "" #: ../glade/theoldreader_source.ui.h:1 msgid "Add TheOldReader Account" msgstr "" #: ../glade/theoldreader_source.ui.h:2 msgid "Please enter your TheOldReader account settings." msgstr "" #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your TinyTinyRSS account settings." msgstr "" #: ../glade/ttrss_source.ui.h:3 #, fuzzy msgid "_Server URL" msgstr "伺服器端的錯誤" #: ../glade/ttrss_source.ui.h:5 #, fuzzy msgid "_Username" msgstr "使用者名稱:" #: ../glade/update_monitor.ui.h:1 #, fuzzy msgid "Update Monitor" msgstr "/更新目錄(_U)" #: ../glade/update_monitor.ui.h:2 #, fuzzy msgid "Cancel All" msgstr "更新全部(_A)" #: ../glade/update_monitor.ui.h:3 msgid "Pending Requests" msgstr "" #: ../glade/update_monitor.ui.h:4 #, fuzzy msgid "Downloading Now" msgstr "附件下載中" #, fuzzy #~ msgid "_Subscriptions" #~ msgstr "新增訂閱" #~ msgid "Update _All" #~ msgstr "更新全部(_A)" #, fuzzy #~ msgid "Updates all subscriptions." #~ msgstr "新增訂閱" #~ msgid "Mark All As _Read" #~ msgstr "全部標示為已讀(_R)" #~ msgid "Marks read every item of every subscription." #~ msgstr "標示每個訂閱的所有項目為已讀" #~ msgid "_Import Feed List..." #~ msgstr "匯入饋流列表(_I)..." #~ msgid "Imports an OPML feed list." #~ msgstr "匯入 OPML 格式饋流列表" #~ msgid "_Export Feed List..." #~ msgstr "匯出饋流列表(_E)..." #, fuzzy #~ msgid "Exports the feed list as OPML." #~ msgstr "匯出 OPML 格式饋流列表" #, fuzzy #~ msgid "_Quit" #~ msgstr "/離開(_Q)" #, fuzzy #~ msgid "_Feed" #~ msgstr "饋流(_F)" #, fuzzy #~ msgid "Remove _All Items" #~ msgstr "移除所有項目(_A)" #~ msgid "Removes all items of the currently selected feed." #~ msgstr "移除現選擇饋流的所有項目。" #, fuzzy #~ msgid "_Item" #~ msgstr "項目(_I)" #, fuzzy #~ msgid "Next Item" #~ msgstr "下筆未讀項目(_N)" #~ msgid "_Next Unread Item" #~ msgstr "下筆未讀項目(_N)" #~ msgid "_View" #~ msgstr "檢視項目(_V)" #~ msgid "Increases the text size of the item view." #~ msgstr "放大項目顯示視窗字型大小" #~ msgid "Decreases the text size of the item view." #~ msgstr "縮小項目顯示視窗字型大小" #, fuzzy #~ msgid "_Update Monitor" #~ msgstr "/更新目錄(_U)" #, fuzzy #~ msgid "_Preferences" #~ msgstr "偏好設定" #, fuzzy #~ msgid "Edit Preferences." #~ msgstr "編輯偏好設定。" #, fuzzy #~ msgid "S_earch" #~ msgstr "搜尋" #, fuzzy #~ msgid "Search All Feeds..." #~ msgstr "搜尋所有饋流" #, fuzzy #~ msgid "Show the search dialog." #~ msgstr "顯示或隱藏搜尋視窗" #~ msgid "_Help" #~ msgstr "求助(_H)" #~ msgid "_Contents" #~ msgstr "內容(_C)" #~ msgid "_Quick Reference" #~ msgstr "快速參考(_Q)" #~ msgid "View a list of all Liferea shortcuts." #~ msgstr "檢視所有捷徑的列表" #~ msgid "View the FAQ for this application." #~ msgstr "檢視本應用程式的 FAQ 文件" #~ msgid "_About" #~ msgstr "關於(_A)" #~ msgid "Shows an about dialog." #~ msgstr "顯示關於對話視窗" #, fuzzy #~ msgid "_Normal View" #~ msgstr "本地檔案(_L)" #, fuzzy #~ msgid "_Wide View" #~ msgstr "檢視項目(_V)" #, fuzzy #~ msgid "_Combined View" #~ msgstr "啟動摘要模式(_C)" #, fuzzy #~ msgid "Hide feeds with no unread items." #~ msgstr "沒有未讀項目 " #~ msgid "_New Subscription..." #~ msgstr "新增訂閱(_N)..." #, fuzzy #~ msgid "Adds a subscription to the feed list." #~ msgstr "新增訂閱到餽流列表" #, fuzzy #~ msgid "Adds a folder to the feed list." #~ msgstr "新增目錄到餽流列表中。" #, fuzzy #~ msgid "Adds a new search folder to the feed list." #~ msgstr "新增目錄到餽流列表中。" #, fuzzy #~ msgid "New _Source..." #~ msgstr "/新增(_N)/新增目錄(_O)" #, fuzzy #~ msgid "Adds a new feed list source." #~ msgstr "新增目錄到餽流列表中。" #, fuzzy #~ msgid "Adds a new news bin." #~ msgstr "新增訂閱" #, fuzzy #~ msgid "_Mark Items Read" #~ msgstr "全部標示為已讀" #, fuzzy #~ msgid "" #~ "Marks all items of the selected feed list node / in the item list as read." #~ msgstr "標示所有選擇的項目或目錄下所有的項目為已讀。" #~ msgid "" #~ "Updates the selected subscription or all subscriptions of the selected " #~ "folder." #~ msgstr "更新選擇的訂閱項目或目錄下的所有訂閱項目。" #~ msgid "Opens the property dialog for the selected subscription." #~ msgstr "開啟選擇訂閱的屬性設定視窗" #, fuzzy #~ msgid "_Remove" #~ msgstr "移除所有項目(_A)" #~ msgid "Removes the selected subscription." #~ msgstr "移除選擇的訂閱項目。" #~ msgid "Toggles the read status of the selected item." #~ msgstr "切換選擇項目的閱讀狀態。" #~ msgid "Toggles the flag status of the selected item." #~ msgstr "切換選擇項目的狀態。" #, fuzzy #~ msgid "R_emove" #~ msgstr "/移除項目(_E)" #~ msgid "Removes the selected item." #~ msgstr "移除選擇的項目。" #, fuzzy #~ msgid "Launches the item's link in a new Liferea browser tab." #~ msgstr "在設定瀏覽器中載入此項目連結。" #, fuzzy #~ msgid "Launches the item's link in the Liferea item pane." #~ msgstr "在設定瀏覽器中載入此項目連結。" #, fuzzy #~ msgid "Launches the item's link in the configured external browser." #~ msgstr "在設定瀏覽器中載入此項目連結。" #~ msgid "_Work Offline" #~ msgstr "離線瀏覽(_W)" #, fuzzy #~ msgid "_Update All" #~ msgstr "/更新全部(_U)" #, fuzzy #~ msgid "InoReader" #~ msgstr "饋流快取" #~ msgid "" #~ "Note: The username and password will be saved to your Liferea feedlist " #~ "file without using encryption." #~ msgstr "注: 帳號跟密碼會以明碼存於您的 Liferea 饋流列表檔案。" #, fuzzy #~ msgid "Liferea, the Linux Feed Reader" #~ msgstr "Lifeera 偏好" #, fuzzy #~ msgid "_Open Link In Browser" #~ msgstr "/開啟連結(_L)" #, fuzzy #~ msgid "_Open Link In External Browser" #~ msgstr "/開啟連結(_L)" #~ msgid "enter any search string you want" #~ msgstr "輸入您想搜尋的任何字串" #~ msgid "Maximal _Number Of Result Items:" #~ msgstr "最大搜尋結果數量:(_N)" #, fuzzy #~ msgid "" #~ "Note: Liferea will generate a feed subscription which is used to query " #~ "the search engine results for the specified search string. You can keep " #~ "this feed permanently and update it like any other subscription." #~ msgstr "" #~ "註: Liferea 將產生一個於 Feedster 查詢特定字串的饋流訂閱。您可以永久保留此" #~ "訂閱,並如同其他訂閱一般更新。" #~ msgid "Liferea is now online" #~ msgstr "Liferea 現為線上模式。" #, fuzzy #~ msgid "Work Offline" #~ msgstr "離線瀏覽(_W)" #~ msgid "Liferea is now offline" #~ msgstr "Lifeare 現為離線模式" #, fuzzy #~ msgid "Work Online" #~ msgstr "離線瀏覽(_W)" #~ msgid "This option allows you to disable subscription updating." #~ msgstr "本選項允許你抑制訂閱項目的更新" #~ msgid "Browser default" #~ msgstr "瀏覽器預設" #~ msgid "Existing window" #~ msgstr "現行視窗" #~ msgid "New window" #~ msgstr "新視窗" #~ msgid "New tab" #~ msgstr "新分頁" #, fuzzy #~ msgid "AOL Reader" #~ msgstr "饋流快取" #~ msgid "_Open link in:" #~ msgstr "開啟連結於(_O):" #, fuzzy #~ msgid "No comments yet." #~ msgstr "說明" #, fuzzy #~ msgid "Liferea - Linux Feed Reader" #~ msgstr "Lifeera 偏好" #, fuzzy #~ msgid "" #~ "

        Welcome to Liferea, a desktop news aggregator for online news " #~ "feeds.

        You can add new subscriptions

        • From main menu " #~ "'Subscription' -> 'New Subscription'
        • By dropping feed links " #~ "into the subscription list
        • By right clicking links and choosing " #~ "'Subscribe' within Liferea

        " #~ msgstr "" #~ "liferea.png\">

Liferea - Linux 餽流閱讀程式

歡迎使用 Liferea!這是一個桌用新聞匯集器。" #~ "

左邊的窗格包含了你所有訂閱的列表,如果想新增訂閱,請在選單按下 [餽" #~ "流] > 新增訂閱;而如果要瀏覽內文,在標題點選後,即會出現在右側窗格。

程式狀態通知區" #~ msgid "Show a _popup window with new headlines." #~ msgstr "以跳出視窗顯示新標題" #~ msgid "Show a status _icon in the notification area (system tray)." #~ msgstr "在程式狀態通知區中顯示狀態圖示 (亦稱為系統列) (_i)" #, fuzzy #~ msgid "Launch Item In _Tab" #~ msgstr "/開啟瀏覽器項目(_L)" #, fuzzy #~ msgid "_Launch Item In Browser" #~ msgstr "/開啟瀏覽器項目(_L)" #, fuzzy #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "/複製項目的 URL 到剪貼簿(_U)" #~ msgid "comments" #~ msgstr "說明" #, fuzzy #~ msgid "Download finished." #~ msgstr "下載方式:(_D)" #~ msgid "Choose download directory" #~ msgstr "選擇下載目錄" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "手動(_M):\n" #~ "(%s 是網址)" #~ msgid "_Save downloads in" #~ msgstr "將下載存於...(_S)" #~ msgid "Downloading Enclosure" #~ msgstr "附件下載中" #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "跳到下筆未讀項目。必要時會跳到下筆饋流中的未讀項目。" #, fuzzy #~ msgid "Print debugging messages for the plugin loading" #~ msgstr " --debug-cache 印出處理快取時的除錯訊息" #, fuzzy #~ msgid "Update status" #~ msgstr "標籤狀態" #, fuzzy #~ msgid "was updated" #~ msgstr "\"%s\" 更新中" #, fuzzy #~ msgid "was not updated" #~ msgstr "內容最後更新" #~ msgid "The orientation of the tray." #~ msgstr "系統匣的方位" #, fuzzy #~ msgid "Search With ..." #~ msgstr "使用 Feedster 搜尋(_F)..." #, fuzzy #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "搜尋 \"%s\"" #~ msgstr[1] "搜尋 \"%s\"" #, fuzzy #~ msgid "Count" #~ msgstr "關於" #~ msgid "You have to select a feed entry" #~ msgstr "您必須選擇一饋流項目!" #~ msgid "(empty)" #~ msgstr "(空)" #~ msgid "_Properties..." #~ msgstr "屬性(_P)..." #, fuzzy #~ msgid "Update out-dated feeds" #~ msgstr "更新所有饋流" #, fuzzy #~ msgid "Force update of all feeds" #~ msgstr "更新所有饋流" #, fuzzy #~ msgid "startup" #~ msgstr "於啟動時(_S):" #, fuzzy #~ msgid "feed updated" #~ msgstr "\"%s\" 更新中" #, fuzzy #~ msgid "feed added" #~ msgstr "饋流快取" #, fuzzy #~ msgid "item selected" #~ msgstr "刪除所選擇的(_S)" #, fuzzy #~ msgid "feed selected" #~ msgstr "刪除所選擇的(_S)" #, fuzzy #~ msgid "item unselected" #~ msgstr "未選擇項目!" #, fuzzy #~ msgid "feed unselected" #~ msgstr "刪除所選擇的(_S)" #, fuzzy #~ msgid "No script selected!" #~ msgstr "未選擇項目!" #, fuzzy #~ msgid "Create a new search feed." #~ msgstr "創造一個 Feedster 搜尋饋流" #, fuzzy #~ msgid "Liferea is unable to display this item's content." #~ msgstr "無法顯示該項目的內容" #, fuzzy #~ msgid "

View this item's content.

" #~ msgstr "

檢視該項目的內文

" #~ msgid "feedlist.opml" #~ msgstr "feedlist.opml" #~ msgid "Feed Source" #~ msgstr "饋流來源" #, fuzzy #~ msgid "Hook" #~ msgstr "規則" #, fuzzy #~ msgid "Registered Scripts" #~ msgstr "饋流來源" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "本選項可能會在載入含有大量饋流的目錄時,導致嚴重遲緩的現象。" #~ msgid "Downloading Enclosures" #~ msgstr "下載附件" #~ msgid "Feed Cache Handling" #~ msgstr "饋流快取處理" #~ msgid "Feed Name" #~ msgstr "饋流名稱" #~ msgid "Feed Update Settings" #~ msgstr "饋流更新設定" #~ msgid "HTTP Proxy Server" #~ msgstr "HTTP 代理伺服器" #~ msgid "Opening Enclosures" #~ msgstr "開啟附件" #~ msgid "Reading Headlines" #~ msgstr "檢視標題" #, fuzzy #~ msgid "Toolbar Settings" #~ msgstr "選單設定" #~ msgid "Update Interval" #~ msgstr "更新週期" #, fuzzy #~ msgid "Web Integration" #~ msgstr "更新週期" #~ msgid "At _startup:" #~ msgstr "於啟動時(_S):" #, fuzzy #~ msgid "Attention Profile" #~ msgstr "認證失敗!" #, fuzzy #~ msgid "Create new script" #~ msgstr "新增訂閱" #, fuzzy #~ msgid "Exec Command" #~ msgstr "指令(_C)" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "非預期的字元順序或錯誤的 UTF-8 編碼! 某些字元已毀損!" #~ msgid "" #~ "Error while reading cache file \"%s\" ! Cache file could not be loaded!" #~ msgstr "讀入快取檔案 \"%s\"時錯誤! 無法載入快取檔案!" #~ msgid "" #~ "

XML error while parsing cache file! Feed cache file \"%s\" could not " #~ "be loaded!

" #~ msgstr "

分析快取檔案時發生 XML 錯誤! 無法載入快取檔案 \"%s\"!

" #~ msgid "

\"%s\" is no valid cache file! Cannot read cache file!

" #~ msgstr "

\"%s\" 是無效的快取檔案! 無法讀入檔案!

" #~ msgid "There were errors while parsing cache file \"%s\"" #~ msgstr "分析快取檔案 \"%s\" 時出現錯誤!" #~ msgid "Access Forbidden" #~ msgstr "禁用存取" #~ msgid "URL is invalid" #~ msgstr "URL 不合法" #~ msgid "Hostname could not be found" #~ msgstr "無法找到伺服器名稱" #~ msgid "Network connection was refused by the remote host" #~ msgstr "遠端主機拒絕網路連線" #~ msgid "Remote host did not finish sending data" #~ msgstr "遠端主機並未結束傳送資料" #~ msgid "Too many HTTP redirects were encountered" #~ msgstr "太多 HTTP 重導! 放棄。" #~ msgid "Remote host sent an invalid response" #~ msgstr "網站伺服器傳送了一個無效的回應" #~ msgid "Webserver's authentication method incompatible with Liferea" #~ msgstr "網站伺服器的認證方法與 Lifera 不相容" #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "自動偵測饋流連結失敗! 未找到饋流連結!" #~ msgid "single item view" #~ msgstr "單一項目檢視" #~ msgid "_Limit cache to" #~ msgstr "限制快取到(_L)" #~ msgid "items." #~ msgstr "項目。" #~ msgid "Feed Loading Settings" #~ msgstr "饋流載入設定" #~ msgid "Optimize for reduced _memory usage." #~ msgstr "針對記憶體使用最佳化(_M)。" #~ msgid "Optimize for _speed." #~ msgstr "針對使用效率最佳化(_S)" #~ msgid "Date Column Settings" #~ msgstr "日期欄位設定" #~ msgid "Display only _time" #~ msgstr "只顯示時間(_T)" #~ msgid "Display _date and time" #~ msgstr "顯示日期與時間(_D)" #~ msgid "_User defined format:" #~ msgstr "使用自訂格式:(_U)" #~ msgid "" #~ "for expert users: specify a time format string, consult the strftime() " #~ "manpage for the format codes" #~ msgstr "" #~ "給專家使用者: 指定一個特定的時間格式,請參考 strftime 手冊中的格式碼" #~ msgid "Please restart Liferea for changes to take effect." #~ msgstr "請重新啟動 Liferea 以使變更生效。" #~ msgid "Lower Right" #~ msgstr "右下方" #~ msgid "Upper Right" #~ msgstr "右上方" #~ msgid "Upper Left" #~ msgstr "左上方" #~ msgid "Lower Left" #~ msgstr "左下方" #~ msgid "Popup Placement" #~ msgstr "彈跳視窗擺置" #~ msgid "Show Menu _And Toolbar" #~ msgstr "顯示選單與工具列(_A)" #~ msgid "Show _Menu Only" #~ msgstr "只顯示選單(_M)" #~ msgid "Show _Toolbar Only" #~ msgstr "僅顯示工具列(_T)" #~ msgid "" #~ "Liferea reuses the GNOME proxy settings. If you use GNOME you can " #~ "change these settings in the GNOME Control Center." #~ msgstr "" #~ "Liferea 使用 GNOME 代理伺服器設定。如果您使用 GNOME,您可以在 GNOME 控制中" #~ "心修改。" #~ msgid "_Enable Proxy" #~ msgstr "啟用代理伺服器(_E)" #~ msgid "Liferea Homepage" #~ msgstr "Liferea 首頁" #~ msgid "Contributors" #~ msgstr "貢獻者" #~ msgid "Translation" #~ msgstr "翻譯" #, fuzzy #~ msgid "" #~ "Note: Items are added to the search folder if at least one additive rule\n" #~ "matches. They are removed if at least one removing rule matches." #~ msgstr "" #~ "註: 如果符合任一條規則,項目將加入虛擬目錄中。如果符合任一移除規則,它們將" #~ "會被移除。" #~ msgid "Saves this search as a VFolder, which will appear in the feed list." #~ msgstr "儲存此搜尋為饋流列表上的虛擬目錄,如此一來就會出現於饋流列表。" #~ msgid "VFolder" #~ msgstr "虛擬目錄" #~ msgid " --help Print this help and exit" #~ msgstr " --help 印出此訊息後退出" #~ msgid " --debug-plugins Print debugging messages when loading plugins" #~ msgstr " --debug-plugins 印出所有分析功能的除錯訊息" #~ msgid "The --mainwindow-state argument must be given a parameter.\n" #~ msgstr "--mainwindow-state 選項必須指定參數。\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "--session 選項必須指定參數。\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "Lifeare 碰到未知的參數: %s\n" #~ msgid "" #~ "Another copy of Liferea was found to be running. Please use it instead. " #~ "If there is no other copy of Liferea running, please delete the \"~/." #~ "liferea/lock\" lock file." #~ msgstr "" #~ "發現另外一份 Liferea 正在執行。請使用它。如果並沒有其他 Liferea 執行中,請" #~ "刪除 \"~/.liferea/lock\" 檔案。" #~ msgid "does match" #~ msgstr "吻合" #~ msgid "does not match" #~ msgstr "不吻合" #~ msgid "Note: Using the subscriptions filter disables drag & drop" #~ msgstr "註: 使用訂閱過濾將停用拖拉功能!" #, fuzzy #~ msgid "" #~ "Sorry, I was not able to load any installed browser plugin! Try the --" #~ "debug-plugins option to get debug information!" #~ msgstr "抱歉, 無法載入任何瀏覽器模組! 請藉由 --debug-all 選項來取得除錯訊息" #~ msgid "_Program" #~ msgstr "程式(_P)" #~ msgid "Updates all subscriptions. This does not update OCS directories." #~ msgstr "立即升級所有饋流 (除了 OCS 目錄)。" #~ msgid "_Search" #~ msgstr "搜尋(_S)" #~ msgid "Update _Selected" #~ msgstr "更新選擇的饋流(_S)" #~ msgid "_Delete Selected" #~ msgstr "刪除選擇饋流(_D)" #~ msgid "Toggles the item list mode between condensed and normal mode." #~ msgstr "切換項目顯示模式為摘要模式或一般模式" #~ msgid "/Toggle _Read Status" #~ msgstr "/切換閱讀狀態(_R)" #~ msgid "/Toggle Item _Flag" #~ msgstr "/切換項目旗幟(_F)" #~ msgid "/_Next Unread Item" #~ msgstr "/下筆未讀項目(_N)" #~ msgid "/_Increase Text Size" #~ msgstr "/縮小字型(_I)" #~ msgid "/_Decrease Text Size" #~ msgstr "/放大字型(_D)" #~ msgid "/Toggle _Online|Offline" #~ msgstr "/切換線上或離線瀏覽(_O)" #~ msgid "/_Preferences..." #~ msgstr "/偏好設定(_P)" #~ msgid "/_Show Window" #~ msgstr "/顯示視窗(_S)" #~ msgid "/_Quit" #~ msgstr "/離開(_Q)" #~ msgid "/_New/New _Subscription..." #~ msgstr "/新增(_N)/新增訂閱(_S)" #, fuzzy #~ msgid "/_New/New _Folder..." #~ msgstr "/新增(_N)/新增虛擬目錄(_O)" #, fuzzy #~ msgid "/_New/New S_earch Folder..." #~ msgstr "/新增(_N)/新增虛擬目錄(_O)" #, fuzzy #~ msgid "/_New/New S_ource..." #~ msgstr "/新增(_N)/新增目錄(_O)" #~ msgid "/_Rename Folder..." #~ msgstr "/重新命名目錄(_R)" #~ msgid "/_Delete Folder" #~ msgstr "/刪除目錄(_D)" #~ msgid "/_Properties..." #~ msgstr "/屬性(_P)" #~ msgid "Update only feeds scheduled for updates" #~ msgstr "只更新預定更新的饋流" #~ msgid "Reset feed update timers (Update no feeds)" #~ msgstr "重置更新時間表(不更新任何饋流)" #, fuzzy #~ msgid "This item's content is invalid." #~ msgstr "該項目內文有誤" #~ msgid "Cookie for %s has expired!" #~ msgstr "%s 的 cookie 已失效" #~ msgid "Liferea notification" #~ msgstr "Lifeare 通知" #, fuzzy #~ msgid "" #~ "
You may want to validate the feed using Could not find Atom 1.0 header!

" #~ msgstr "

無法找到 Atom 1.0 標頭!

" #~ msgid "internal OCS namespace parsing error!" #~ msgstr "內部 OCS 命名空間分析錯誤!" #~ msgid "no namespace handler for <%s:%s>!\n" #~ msgstr "無 <%s:%s> 之 namespace handler!\n" #~ msgid "

Could not find RDF header!

" #~ msgstr "

無法找到 RDF 標頭!

" #~ msgid "

Could not find OPML header!

" #~ msgstr "

無法找到 OPML 標頭!

" #~ msgid "

Could not find Atom/Echo/PIE header!

" #~ msgstr "

無法找到 Atom/Echo/PIE 標頭!

" #~ msgid "

Could not find RDF/RSS header!

" #~ msgstr "

無法找到 RDF/RSS 標頭!

" #~ msgid "" #~ "The included HTML tag is not supported with GtkHTML2.\n" #~ "Included Plugins might not be displayed." #~ msgstr "" #~ "GtkHTML2 不支援 HTML 標籤。\n" #~ "內含的外掛可能無法顯示。" #~ msgid "" #~ "\n" #~ "Trying to load the Mozilla browser module... Note that this\n" #~ "might not work with every Mozilla version. If you have problems\n" #~ "and Liferea does not start, try to set MOZILLA_FIVE_HOME to\n" #~ "another Mozilla installation or delete the gconf configuration\n" #~ "key /apps/liferea/browser-module!\n" #~ "\n" #~ msgstr "" #~ "\n" #~ "試著載入 Mozilla 瀏覽器模組... 註: 這可能無法在每個 Mozilla \n" #~ "版本中使用。如果您碰到問題而 Liferea 無法啟動,請試著將 \n" #~ "MOZILLA_FIVE_HOME 設定到另外一個 Mozilla 安裝目錄或刪除 gconf\n" #~ " 設定中的 /apps/liferea/browser-module!\n" #~ "\n" #~ msgid "" #~ "Failed to open HTML widget module (%s) specified in configuration!\n" #~ "%s\n" #~ msgstr "" #~ "無法開啟設定中的 HTML 元件模組 (%s)!\n" #~ "%s\n" #~ msgid "Htmlview API mismatch!" #~ msgstr "Htmlview API 版本不一致!" #~ msgid "Detected module is not a valid htmlview module!" #~ msgstr "偵測到的模組並非有效的 htmlview 模組!" #~ msgid "Available browser modules (%s):\n" #~ msgstr "可用的瀏覽器模組 (%s)\n" #~ msgid "Loading configured browser module (%s)!\n" #~ msgstr "載入已設定瀏覽器模組(%s)!\n" #~ msgid "No browser module configured!\n" #~ msgstr "瀏覽器模組未設定!\n" #~ msgid "trying to load browser module %s (%s)\n" #~ msgstr "試著載入瀏覽器模組 %s (%s)\n" #~ msgid "internal error! time conversion error! mktime failed!\n" #~ msgstr "內部錯誤! 時間轉換錯誤! mktime 失敗!\n" #~ msgid "Invalid ISO8601 date format! Ignoring information!\n" #~ msgstr "無效的 ISO8601 日期格式! 忽略 資訊!\n" #~ msgid "" #~ "

Could not determine the feed type. Please check that it is a valid type and listed in the supported formats." #~ "

" #~ msgstr "" #~ "

無法偵測饋流類型。請確定為 有效的" #~ "饋流類型,並為 支援的格式

" #~ msgid "Please do a search first!" #~ msgstr "請先執行搜尋!" #~ msgid "You must select a feed entry." #~ msgstr "您必須選擇一饋流項目!" #~ msgid "New Feed" #~ msgstr "新增饋流" #~ msgid "Next Unread" #~ msgstr "下筆未讀" #~ msgid "Update All" #~ msgstr "更新全部" #~ msgid "Viewing Mode" #~ msgstr "檢視模式" #~ msgid "Switches between 2 and 3 pane mode." #~ msgstr "在兩個與三個窗格的模式作切換" #~ msgid "A folder must be selected." #~ msgstr "目錄必須先選擇。" #~ msgid "URL" #~ msgstr "網址" liferea-1.12.7/src/000077500000000000000000000000001352135647700140155ustar00rootroot00000000000000liferea-1.12.7/src/Makefile.am000066400000000000000000000063551352135647700160620ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in SUBDIRS = parsers ui fl_sources webkit tests . AM_CPPFLAGS = \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ -DPACKAGE_LIB_DIR=\""$(pkglibdir)"\" \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ -DBIN_DIR=\""$(bindir)"\" \ -I$(top_srcdir)/src \ $(PACKAGE_CFLAGS) \ $(INTROSPECTION_CFLAGS) bin_PROGRAMS = liferea bin_SCRIPTS = liferea-add-feed liferea_SOURCES = \ auth.c auth.h \ auth_activatable.c auth_activatable.h \ browser.c browser.h \ browser_history.c browser_history.h \ comments.c comments.h \ common.c common.h \ conf.c conf.h \ date.c date.h \ db.c db.h \ dbus.c dbus.h \ debug.c debug.h \ enclosure.c enclosure.h \ export.c export.h \ favicon.c favicon.h \ feed.c feed.h \ feed_parser.c feed_parser.h \ feedlist.c feedlist.h \ folder.c folder.h \ html.c html.h \ htmlview.c htmlview.h \ item.c item.h \ item_history.c item_history.h \ item_loader.c item_loader.h \ item_state.c item_state.h \ itemset.c itemset.h \ itemlist.c itemlist.h \ json.c json.h \ liferea_application.c liferea_application.h \ metadata.c metadata.h \ migrate.c migrate.h \ net.c net.h \ net_monitor.c net_monitor.h \ newsbin.c newsbin.h \ node.c node.h \ node_type.c node_type.h \ node_view.h \ plugins_engine.c plugins_engine.h \ render.c render.h \ rule.c rule.h \ social.c social.h \ subscription.c subscription.h \ subscription_type.h \ update.c update.h \ main.c \ vfolder.c vfolder.h \ vfolder_loader.c vfolder_loader.h \ xml.c xml.h liferea_LDADD = parsers/libliparsers.a \ fl_sources/libliflsources.a \ ui/libliui.a \ webkit/libwebkit.a \ $(PACKAGE_LIBS) \ $(INTLLIBS) \ $(WEBKIT_LIBS) \ $(INTROSPECTION_LIBS) \ -lm EXTRA_DIST = $(srcdir)/liferea-add-feed.in DISTCLEANFILES = $(srcdir)/liferea-add-feed AM_INSTALLCHECK_STD_OPTIONS_EXEMPT = liferea-add-feed -include $(INTROSPECTION_MAKEFILE) INTROSPECTION_GIRS = Liferea-3.0.gir Liferea-3.0.gir: liferea$(EXEEXT) INTROSPECTION_SCANNER_ARGS = -I$(top_srcdir)/src --warn-all --accept-unprefixed --identifier-prefix=Liferea --verbose Liferea_3_0_gir_NAMESPACE = Liferea Liferea_3_0_gir_VERSION = 3.0 Liferea_3_0_gir_PROGRAM = $(builddir)/liferea$(EXEEXT) Liferea_3_0_gir_FILES = \ auth.c auth.h \ auth_activatable.c auth_activatable.h \ enclosure.h \ feedlist.c feedlist.h \ item.h \ itemlist.c itemlist.h \ itemset.c itemset.h \ node.h node.c \ node_view.h \ social.c social.h \ subscription_type.h \ ui/browser_tabs.c ui/browser_tabs.h \ ui/icons.c ui/icons.h \ ui/itemview.c ui/itemview.h \ ui/item_list_view.c ui/item_list_view.h \ ui/liferea_htmlview.c ui/liferea_htmlview.h \ ui/liferea_shell.c ui/liferea_shell.h \ ui/liferea_shell_activatable.c ui/liferea_shell_activatable.h \ ui/media_player.c ui/media_player.h \ ui/media_player_activatable.c ui/media_player_activatable.h \ fl_sources/node_source.c fl_sources/node_source.h \ fl_sources/node_source_activatable.c fl_sources/node_source_activatable.h Liferea_3_0_gir_INCLUDES = Gtk-3.0 libxml2-2.0 if HAVE_INTROSPECTION girdir = $(datadir)/liferea/gir-1.0 gir_DATA = $(INTROSPECTION_GIRS) typelibdir = $(libdir)/liferea/girepository-1.0 typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib) CLEANFILES = \ $(gir_DATA) \ $(typelib_DATA) endif liferea-1.12.7/src/auth.c000066400000000000000000000076551352135647700151370ustar00rootroot00000000000000/* * @file auth.c authentication helpers * * Copyright (C) 2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "auth.h" #include "auth_activatable.h" #include "plugins_engine.h" #include "subscription.h" #include #include // FIXME: This should be a member of some object! static PeasExtensionSet *extensions = NULL; /*<< Plugin management */ static gint count = 0; /*<< Number of active auth plugins */ static void on_extension_added (PeasExtensionSet *extensions, PeasPluginInfo *info, PeasExtension *exten, gpointer user_data) { peas_extension_call (exten, "activate"); count++; } static void on_extension_removed (PeasExtensionSet *extensions, PeasPluginInfo *info, PeasExtension *exten, gpointer user_data) { peas_extension_call (exten, "deactivate"); count--; } static PeasExtensionSet * liferea_auth_get_extension_set (void) { if (!extensions) { extensions = peas_extension_set_new (PEAS_ENGINE (liferea_plugins_engine_get_default ()), LIFEREA_AUTH_ACTIVATABLE_TYPE, NULL); g_signal_connect (extensions, "extension-added", G_CALLBACK (on_extension_added), NULL); g_signal_connect (extensions, "extension-removed", G_CALLBACK (on_extension_removed), NULL); peas_extension_set_foreach (extensions, on_extension_added, NULL); } return extensions; } static void liferea_auth_info_store_foreach (PeasExtensionSet *set, PeasPluginInfo *info, PeasExtension *exten, gpointer user_data) { subscriptionPtr subscription = (subscriptionPtr)user_data; g_assert (subscription != NULL); g_assert (subscription->node != NULL); g_assert (subscription->updateOptions != NULL); liferea_auth_activatable_store (LIFEREA_AUTH_ACTIVATABLE (exten), subscription->node->id, subscription->updateOptions->username, subscription->updateOptions->password); } void liferea_auth_info_store (gpointer user_data) { peas_extension_set_foreach (liferea_auth_get_extension_set (), liferea_auth_info_store_foreach, user_data); } void liferea_auth_info_from_store (const gchar *id, const gchar *username, const gchar *password) { nodePtr node = node_from_id (id); g_assert (NULL != node->subscription); node->subscription->updateOptions->username = g_strdup (username); node->subscription->updateOptions->password = g_strdup (password); } static void liferea_auth_info_query_foreach (PeasExtensionSet *set, PeasPluginInfo *info, PeasExtension *exten, gpointer data) { liferea_auth_activatable_query (LIFEREA_AUTH_ACTIVATABLE (exten), data); } void liferea_auth_info_query (const gchar *authId) { peas_extension_set_foreach (liferea_auth_get_extension_set (), liferea_auth_info_query_foreach, (gpointer)authId); } gboolean liferea_auth_has_active_store (void) { return (count > 0); } liferea-1.12.7/src/auth.h000066400000000000000000000037311352135647700151330ustar00rootroot00000000000000/* * @file auth.h authentication helpers * * Copyright (C) 2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _AUTH_H #define _AUTH_H #include /** * liferea_auth_has_active_store: * * Method to query whether there is an active password store. * * @returns TRUE if there is a password store */ gboolean liferea_auth_has_active_store (void); /** * liferea_auth_info_from_store: * * @param authId a node id * @param username * @param password * * Allow plugins to provide authentication infos */ void liferea_auth_info_from_store (const gchar *authId, const gchar *username, const gchar *password); /** * liferea_auth_info_store: * * @param subscription pointer to a subscription * * Save given authentication info of a given subscription into password store (if available). */ void liferea_auth_info_store (gpointer subscription); /** * liferea_auth_info_query: * * Return auth information for a given node. Each extension able to * supply a user name and password for the given id is to synchronously call * liferea_auth_info_from_store() to set them. * * @param authId a node id * @param username reference to return username * @param password reference to return password */ void liferea_auth_info_query (const gchar *authId); #endif liferea-1.12.7/src/auth_activatable.c000066400000000000000000000053621352135647700174670ustar00rootroot00000000000000/* * @file auth_activatable.c Auth Plugin Type * * Copyright (C) 2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "auth_activatable.h" /** * SECTION:liferea_auth_activatable * @short_description: Interface for activatable extensions providing auth infos * @see_also: #PeasExtensionSet * * #LifereaAuthActivatable is an interface which should be implemented by * extensions that want to provide a password store **/ G_DEFINE_INTERFACE (LifereaAuthActivatable, liferea_auth_activatable, G_TYPE_OBJECT) void liferea_auth_activatable_default_init (LifereaAuthActivatableInterface *iface) { /* No properties yet */ } void liferea_auth_activatable_activate (LifereaAuthActivatable * activatable) { LifereaAuthActivatableInterface *iface; g_return_if_fail (LIFEREA_IS_AUTH_ACTIVATABLE (activatable)); iface = LIFEREA_AUTH_ACTIVATABLE_GET_IFACE (activatable); if (iface->activate) iface->activate (activatable); } void liferea_auth_activatable_deactivate (LifereaAuthActivatable * activatable) { LifereaAuthActivatableInterface *iface; g_return_if_fail (LIFEREA_IS_AUTH_ACTIVATABLE (activatable)); iface = LIFEREA_AUTH_ACTIVATABLE_GET_IFACE (activatable); if (iface->deactivate) iface->deactivate (activatable); } void liferea_auth_activatable_query (LifereaAuthActivatable * activatable, const gchar *authId) { LifereaAuthActivatableInterface *iface; g_return_if_fail (LIFEREA_IS_AUTH_ACTIVATABLE (activatable)); iface = LIFEREA_AUTH_ACTIVATABLE_GET_IFACE (activatable); if (iface->query) iface->query (activatable, authId); } void liferea_auth_activatable_store (LifereaAuthActivatable * activatable, const gchar *authId, const gchar *username, const gchar *password) { LifereaAuthActivatableInterface *iface; g_return_if_fail (LIFEREA_IS_AUTH_ACTIVATABLE (activatable)); iface = LIFEREA_AUTH_ACTIVATABLE_GET_IFACE (activatable); if (iface->store) iface->store (activatable, authId, username, password); } liferea-1.12.7/src/auth_activatable.h000066400000000000000000000071141352135647700174710ustar00rootroot00000000000000/* * @file liferea_auth_activatable.h Shell Plugin Type * * Copyright (C) 2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _LIFEREA_AUTH_ACTIVATABLE_H__ #define _LIFEREA_AUTH_ACTIVATABLE_H__ #include G_BEGIN_DECLS #define LIFEREA_AUTH_ACTIVATABLE_TYPE (liferea_auth_activatable_get_type ()) #define LIFEREA_AUTH_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIFEREA_AUTH_ACTIVATABLE_TYPE, LifereaAuthActivatable)) #define LIFEREA_AUTH_ACTIVATABLE_IFACE(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), LIFEREA_AUTH_ACTIVATABLE_TYPE, LifereaAuthActivatableInterface)) #define LIFEREA_IS_AUTH_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LIFEREA_AUTH_ACTIVATABLE_TYPE)) #define LIFEREA_AUTH_ACTIVATABLE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), LIFEREA_AUTH_ACTIVATABLE_TYPE, LifereaAuthActivatableInterface)) typedef struct _LifereaAuthActivatable LifereaAuthActivatable; typedef struct _LifereaAuthActivatableInterface LifereaAuthActivatableInterface; struct _LifereaAuthActivatableInterface { GTypeInterface g_iface; void (*activate) (LifereaAuthActivatable * activatable); void (*deactivate) (LifereaAuthActivatable * activatable); void (*query) (LifereaAuthActivatable * activatable, const gchar *authId); void (*store) (LifereaAuthActivatable * activatable, const gchar *authId, const gchar *username, const gchar *password); }; GType liferea_auth_activatable_get_type (void) G_GNUC_CONST; /** * liferea_auth_activatable_activate: * @activatable: A #LifereaAuthActivatable. * * Activates the extension. */ void liferea_auth_activatable_activate (LifereaAuthActivatable *activatable); /** * liferea_auth_activatable_deactivate: * @activatable: A #LifereaAuthActivatable. * * Deactivates the extension. */ void liferea_auth_activatable_deactivate (LifereaAuthActivatable *activatable); /** * liferea_auth_activatable_query: * @activatable: a #LifereaAuthActivatable. * @authId: a unique auth info id * * Triggers a query for authentication infos for a given subscription. * Expects triggered plugins to use liferea_auth_info_add() to provide * any matches. */ void liferea_auth_activatable_query (LifereaAuthActivatable *activatable, const gchar *authId); /** * liferea_auth_activatable_store: * @activatable: a #LifereaAuthActivatable. * @authId: a unique auth info id * @username: the username to store * @password: the password to store * * Triggers a query for authentication infos for a given subscription. * Expects triggered plugins to use liferea_auth_info_add() to provide * any matches. */ void liferea_auth_activatable_store (LifereaAuthActivatable * activatable, const gchar *authId, const gchar *username, const gchar *password); G_END_DECLS #endif /* __LIFEREA_AUTH_ACTIVATABLE_H__ */ liferea-1.12.7/src/browser.c000066400000000000000000000067321352135647700156540ustar00rootroot00000000000000/** * @file browser.c Launching different external browsers * * Copyright (C) 2003-2015 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "browser.h" #include #include "common.h" #include "conf.h" #include "debug.h" #include "ui/liferea_shell.h" /** * Returns a shell command format string which can be used to create * a browser launch command if preference for manual command is set. * * @returns a newly allocated command string (or NULL) */ static gchar * browser_get_manual_command (void) { gchar *cmd = NULL; gchar *libname; /* check for manual browser command */ conf_get_str_value (BROWSER_ID, &libname); if (g_str_equal (libname, "manual")) { /* retrieve user defined command... */ conf_get_str_value (BROWSER_COMMAND, &cmd); } g_free (libname); return cmd; } static gboolean browser_execute (const gchar *cmd, const gchar *uri) { GError *error = NULL; gchar *safeUri, *tmp, **argv, **iter; gint argc; gboolean done = FALSE; g_assert (cmd != NULL); g_assert (uri != NULL); safeUri = common_uri_sanitize (uri); /* If we run using a Mozilla like "-remote openURL()" mechanism we need to escape commata, but not in other cases (see SF #2901447) */ if (strstr(cmd, "openURL(")) safeUri = common_strreplace (safeUri, ",", "%2C"); /* If there is no %s in the command, then just append %s */ if (strstr (cmd, "%s")) tmp = g_strdup (cmd); else tmp = g_strdup_printf ("%s %%s", cmd); /* Parse and substitute the %s in the command */ g_shell_parse_argv (tmp, &argc, &argv, &error); g_free (tmp); if (error && (0 != error->code)) { liferea_shell_set_important_status_bar (_("Browser command failed: %s"), error->message); debug2 (DEBUG_GUI, "Browser command is invalid: %s : %s", tmp, error->message); g_error_free (error); return FALSE; } if (argv) { for (iter = argv; *iter != NULL; iter++) *iter = common_strreplace (*iter, "%s", safeUri); } tmp = g_strjoinv (" ", argv); debug1 (DEBUG_GUI, "Running the browser-remote %s command", tmp); g_spawn_async (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error); if (error && (0 != error->code)) { debug2 (DEBUG_GUI, "Browser command failed: %s : %s", tmp, error->message); liferea_shell_set_important_status_bar (_("Browser command failed: %s"), error->message); g_error_free (error); } else { liferea_shell_set_status_bar (_("Starting: \"%s\""), tmp); done = TRUE; } g_free (safeUri); g_free (tmp); g_strfreev (argv); return done; } gboolean browser_launch_URL_external (const gchar *uri) { gchar *cmd = NULL; gboolean done = FALSE; g_assert (uri != NULL); cmd = browser_get_manual_command (); if (cmd) { done = browser_execute (cmd, uri); g_free (cmd); } else { done = gtk_show_uri (NULL, uri, 0, NULL); } return done; } liferea-1.12.7/src/browser.h000066400000000000000000000022511352135647700156510ustar00rootroot00000000000000/** * @file browser.h Launching different external browsers * * Copyright (C) 2008-2015 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _BROWSER_H #define _BROWSER_H #include /** * Function to execute the commands needed to open up a URL with the * browser specified in the preferences. * * @param the URI to load * * @returns TRUE if the URI was opened, or FALSE if there was an error */ gboolean browser_launch_URL_external (const gchar *uri); #endif liferea-1.12.7/src/browser_history.c000066400000000000000000000054451352135647700174350ustar00rootroot00000000000000/** * @file browser_history.c managing the internal browser history * * Copyright (C) 2012-2016 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "browser_history.h" browserHistory * browser_history_new (void) { return g_new0 (browserHistory, 1); } static void browser_history_clear (browserHistory *history) { GList *iter; iter = history->locations; while (iter) { g_free (iter->data); iter = g_list_next (iter); } g_list_free (history->locations); history->locations = NULL; history->current = NULL; } void browser_history_free (browserHistory *history) { g_return_if_fail (NULL != history); browser_history_clear (history); g_free (history); } gchar * browser_history_forward (browserHistory *history) { GList *url = history->current; url = g_list_next (url); history->current = url; return url->data; } gchar * browser_history_back (browserHistory *history) { GList *url = history->current; url = g_list_previous (url); if (url) { history->current = url; return url->data; } else { /* This happens if we go back to the headline */ g_assert (history->headline); browser_history_clear (history); return NULL; } } gboolean browser_history_can_go_forward (browserHistory *history) { return (NULL != g_list_next (history->current)); } gboolean browser_history_can_go_back (browserHistory *history) { return (NULL != g_list_previous (history->current)) || history->headline; } void browser_history_add_location (browserHistory *history, const gchar *url) { GList *iter; /* Do not add the same URL twice in a row... */ if (history->current && g_str_equal (history->current->data, url)) return; /* If current URL is not at the end of the list, truncate the rest of the list */ if (history->locations) { while (1) { iter = g_list_last (history->locations); if (!iter) break; if (iter == history->current) break; g_free (iter->data); history->locations = g_list_remove (history->locations, iter->data); } } history->locations = g_list_append (history->locations, g_strdup (url)); history->current = g_list_last (history->locations); } liferea-1.12.7/src/browser_history.h000066400000000000000000000047431352135647700174420ustar00rootroot00000000000000/** * @file browser_history.h managing internal browser URI history * * Copyright (C) 2012-2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _BROWSER_HISTORY_H #define _BROWSER_HISTORY_H #include /** structure holding all URLs visited in a browser */ typedef struct browserHistory { GList *locations; /**< list of all visited URLs */ GList *current; /**< pointer into locations */ gboolean headline; /**< TRUE if browser history is for item view and going back to the headline is possible */ } browserHistory; /** * Create a new browser history. * * @returns the browser history */ browserHistory * browser_history_new (void); /** * Dispose of a browser history * * @param history the browser history */ void browser_history_free (browserHistory *history); /** * Set index of the browser history forward. * * @param history the browser history * * @returns the new selected URL (not to be free'd!) */ gchar * browser_history_forward (browserHistory *history); /** * Set index of the browser history backwards. * * @param history the browser history * * @returns the new selected URL (not to be free'd!) */ gchar * browser_history_back (browserHistory *history); /** * Check whether the history can go forward. * * @param history the browser history * * @returns TRUE if it can go forward */ gboolean browser_history_can_go_forward (browserHistory *history); /** * Check whether the history can go back. * * @param history the browser history * * @returns TRUE if it can go back */ gboolean browser_history_can_go_back (browserHistory *history); /** * Add a URL to the history. * * @param history the browser history * @param url the URL to add */ void browser_history_add_location (browserHistory *history, const gchar *url); #endif liferea-1.12.7/src/comments.c000066400000000000000000000201451352135647700160100ustar00rootroot00000000000000/** * @file comments.c comment feed handling * * Copyright (C) 2007-2009 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "comments.h" #include "common.h" #include "db.h" #include "debug.h" #include "feed.h" #include "metadata.h" #include "net.h" #include "net_monitor.h" #include "update.h" #include "ui/itemview.h" /* Comment feeds in Liferea are simple flat lists of items attached to a single item. Each item that has a comment feed URL in its metadata list gets its comment feed updated as soon as the user triggers rendering of the item in 3 pane mode. Although rendered differently items and comment items are handled in the same way. */ static GHashTable *commentFeeds = NULL; typedef struct commentFeed { gulong itemId; /**< parent item id */ gchar *id; /**< id of the items comments feed (or NULL) */ gchar *error; /**< description of error if comments download failed (or NULL)*/ struct updateJob *updateJob; /**< update job structure used when downloading comments */ updateStatePtr updateState; /**< update states (etag, last modified, cookies, last polling times...) used when downloading comments */ } *commentFeedPtr; static void comment_feed_free (commentFeedPtr commentFeed) { if (commentFeed->updateJob) update_job_cancel_by_owner (commentFeed); if (commentFeed->updateState) update_state_free (commentFeed->updateState); g_free (commentFeed->error); g_free (commentFeed->id); g_free (commentFeed); } static void comment_feed_free_cb (gpointer key, gpointer value, gpointer user_data) { comment_feed_free (value); } void comments_deinit (void) { if (commentFeeds) { g_hash_table_foreach (commentFeeds, comment_feed_free_cb, NULL); g_hash_table_destroy (commentFeeds); commentFeeds = NULL; } } /** * Hash lookup to find comment feeds with the given id. * Returns the comment feed (or NULL). */ static commentFeedPtr comment_feed_from_id (const gchar *id) { if (!commentFeeds) return NULL; return (commentFeedPtr) g_hash_table_lookup (commentFeeds, id); } static void comments_process_update_result (const struct updateResult * const result, gpointer user_data, updateFlags flags) { feedParserCtxtPtr ctxt; commentFeedPtr commentFeed = (commentFeedPtr)user_data; itemPtr item; nodePtr node; debug_enter ("comments_process_update_result"); item = item_load (commentFeed->itemId); g_return_if_fail (item != NULL); /* note this is to update the feed URL on permanent redirects */ if (result->source && !strcmp (result->source, metadata_list_get (item->metadata, "commentFeedUri"))) { debug2 (DEBUG_UPDATE, "updating comment feed URL from \"%s\" to \"%s\"", metadata_list_get (item->metadata, "commentFeedUri"), result->source); metadata_list_set (&(item->metadata), "commentFeedUri", result->source); } if (401 == result->httpstatus) { /* unauthorized */ commentFeed->error = g_strdup (_("Authorization Error")); } else if (410 == result->httpstatus) { /* gone */ metadata_list_set (&item->metadata, "commentFeedGone", "true"); } else if (304 == result->httpstatus) { debug1(DEBUG_UPDATE, "comment feed \"%s\" did not change", result->source); } else if (result->data) { debug1(DEBUG_UPDATE, "received update result for comment feed \"%s\"", result->source); /* parse the new downloaded feed into fake node, subscription and feed */ node = node_new (feed_get_node_type ()); ctxt = feed_create_parser_ctxt (); ctxt->subscription = subscription_new (result->source, NULL, NULL); ctxt->feed = feed_new (); node_set_data (node, ctxt->feed); node_set_subscription (node, ctxt->subscription); ctxt->data = result->data; ctxt->dataLength = result->size; feed_parse (ctxt); if (ctxt->failed) { debug0 (DEBUG_UPDATE, "parsing comment feed failed!"); } else { itemSetPtr comments; GList *iter; /* before merging mark all downloaded items as comments */ iter = ctxt->items; while (iter) { itemPtr comment = (itemPtr) iter->data; comment->isComment = TRUE; comment->parentItemId = commentFeed->itemId; comment->parentNodeId = g_strdup (item->nodeId); iter = g_list_next (iter); } debug1 (DEBUG_UPDATE, "parsing comment feed successful (%d comments downloaded)", g_list_length(ctxt->items)); comments = db_itemset_load (commentFeed->id); itemset_merge_items (comments, ctxt->items, ctxt->feed->valid, FALSE); itemset_free (comments); /* No comment feed truncating as comment items are automatically dropped when the parent items are removed from cache. */ } node_free (ctxt->subscription->node); feed_free_parser_ctxt (ctxt); } /* update error message */ g_free (commentFeed->error); commentFeed->error = NULL; if ((result->httpstatus < 200) || (result->httpstatus >= 400)) { commentFeed->error = g_strdup (network_strerror (result->returncode, result->httpstatus)); } /* clean up... */ commentFeed->updateJob = NULL; /* rerender item with new comments */ itemview_update_item (item); itemview_update (); item_unload (item); debug_exit ("comments_process_update_result"); } void comments_refresh (itemPtr item) { commentFeedPtr commentFeed = NULL; updateRequestPtr request; const gchar *url; if (!network_monitor_is_online ()) return; if (metadata_list_get (item->metadata, "commentFeedGone")) { debug0 (DEBUG_UPDATE, "Comment feed returned HTTP 410. Not updating anymore!"); return; } url = metadata_list_get (item->metadata, "commentFeedUri"); if (url) { debug2 (DEBUG_UPDATE, "Updating comments for item \"%s\" (comment URL: %s)", item->title, url); // FIXME: restore update state from DB? if (item->commentFeedId) { commentFeed = comment_feed_from_id (item->commentFeedId); } else { item->commentFeedId = node_new_id (); db_item_update (item); } if (!commentFeed) { commentFeed = g_new0 (struct commentFeed, 1); commentFeed->id = g_strdup (item->commentFeedId); commentFeed->itemId = item->id; commentFeed->updateState = update_state_new (); if (!commentFeeds) commentFeeds = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_insert (commentFeeds, commentFeed->id, commentFeed); } request = update_request_new (); request->options = g_new0 (struct updateOptions, 1); // FIXME: use copy of parent subscription options request->source = g_strdup (url); commentFeed->updateJob = update_execute_request (commentFeed, request, comments_process_update_result, commentFeed, FEED_REQ_PRIORITY_HIGH); /* Item view refresh to change link from "Update" to "Updating..." */ itemview_update_item (item); itemview_update (); } } void comments_to_xml (xmlNodePtr parentNode, const gchar *id) { xmlNodePtr commentsNode; commentFeedPtr commentFeed; itemSetPtr itemSet; GList *iter; commentFeed = comment_feed_from_id (id); if (!commentFeed) return; commentsNode = xmlNewChild (parentNode, NULL, "comments", NULL); itemSet = db_itemset_load (id); g_return_if_fail (itemSet != NULL); iter = itemSet->ids; while (iter) { itemPtr comment = item_load (GPOINTER_TO_UINT (iter->data)); item_to_xml (comment, commentsNode); item_unload (comment); iter = g_list_next (iter); } xmlNewTextChild (commentsNode, NULL, "updateState", (commentFeed->updateJob)?"updating":"ok"); if (commentFeed->error) xmlNewTextChild (commentsNode, NULL, "updateError", commentFeed->error); itemset_free (itemSet); } liferea-1.12.7/src/comments.h000066400000000000000000000026151352135647700160170ustar00rootroot00000000000000/** * @file comments.h comment feed handling * * Copyright (C) 2007-2008 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _COMMENTS_H #define _COMMENTS_H #include #include #include "item.h" /** * Frees everything related with comments */ void comments_deinit (void); /** * Triggers immediate comments retrieval (or update) for the given item. * * @param item the item */ void comments_refresh (itemPtr item); /** * Adds the comments and state of the given comment feed id to the * passed XML node. * * @param parentNode XML parent node * @param id the comment feed id */ void comments_to_xml (xmlNodePtr parentNode, const gchar *id); #endif liferea-1.12.7/src/common.c000066400000000000000000000233331352135647700154550ustar00rootroot00000000000000/** * @file common.c common routines for Liferea * * Copyright (C) 2003-2013 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2004 Karl Soderstrom * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #include "common.h" #include "debug.h" #if defined (G_OS_WIN32) && !defined (HAVE_GMTIME_R) #define gmtime_r(t,o) gmtime_s (o,t) #endif static gboolean pathsChecked = FALSE; long common_parse_long (const gchar *str, long def) { long num; if (str == NULL) return def; if (0 == (sscanf (str,"%ld", &num))) num = def; return num; } static void common_check_dir (gchar *path) { if (!g_file_test (path, G_FILE_TEST_IS_DIR)) { if (0 != g_mkdir_with_parents (path, S_IRUSR | S_IWUSR | S_IXUSR)) { g_error (_("Cannot create cache directory \"%s\"!"), path); } } g_free (path); } static void common_init_paths (void) { gchar *lifereaCachePath = g_build_filename (g_get_user_cache_dir(), "liferea", NULL); common_check_dir (g_strdup (lifereaCachePath)); common_check_dir (g_build_filename (lifereaCachePath, "feeds", NULL)); common_check_dir (g_build_filename (lifereaCachePath, "favicons", NULL)); common_check_dir (g_build_filename (lifereaCachePath, "plugins", NULL)); common_check_dir (g_build_filename (g_get_user_config_dir(), "liferea", NULL)); common_check_dir (g_build_filename (g_get_user_data_dir(), "liferea", NULL)); /* ensure reasonable default umask */ umask (077); g_free (lifereaCachePath); pathsChecked = TRUE; } gchar * common_create_data_filename (const gchar *filename) { if (!pathsChecked) common_init_paths (); return g_build_filename (g_get_user_data_dir (), "liferea", filename, NULL); } gchar * common_create_config_filename (const gchar *filename) { if (!pathsChecked) common_init_paths (); return g_build_filename (g_get_user_config_dir (), "liferea", filename, NULL); } gchar * common_create_cache_filename (const gchar *folder, const gchar *filename, const gchar *extension) { gchar *result; if (!pathsChecked) common_init_paths (); result = g_strdup_printf ("%s%s%s%s%s%s%s", g_get_user_cache_dir (), G_DIR_SEPARATOR_S "liferea" G_DIR_SEPARATOR_S, folder ? folder : "", folder ? G_DIR_SEPARATOR_S : "", filename, extension ? "." : "", extension ? extension : ""); return result; } xmlChar * common_uri_escape (const xmlChar *url) { xmlChar *result, *tmp; g_assert (NULL != url); /* xmlURIEscape returns NULL if spaces are in the URL, so we need to replace them first (see SF #2965158) */ tmp = common_strreplace (g_strdup (url), " ", "%20"); result = xmlURIEscape (tmp); g_free (tmp); /* workaround if escaping somehow fails... */ if (!result) result = g_strdup (url); return result; } xmlChar * common_uri_unescape (const xmlChar *url) { return xmlURIUnescapeString (url, -1, NULL); } xmlChar * common_uri_sanitize (const xmlChar *uri) { xmlChar *tmp, *result; /* We must escape all dangerous characters (e.g. & and spaces) in the URL. As we do not know if the URL is already escaped we simply unescape and reescape it. */ tmp = common_uri_unescape (uri); result = common_uri_escape (tmp); g_free (tmp); return result; } /* to correctly escape and expand URLs */ xmlChar * common_build_url (const gchar *url, const gchar *baseURL) { xmlChar *escapedURL, *absURL, *escapedBaseURL; escapedURL = common_uri_escape (url); if (baseURL) { escapedBaseURL = common_uri_escape (baseURL); absURL = xmlBuildURI (escapedURL, escapedBaseURL); if (absURL) xmlFree (escapedURL); else absURL = escapedURL; xmlFree (escapedBaseURL); } else { absURL = escapedURL; } return absURL; } /* * Returns a string that can be used for the HTML "dir" attribute. * Direction is taken from a string, regardless of any language tags. */ const gchar * common_get_text_direction (const gchar *text) { PangoDirection pango_direction = PANGO_DIRECTION_NEUTRAL; if (text) pango_direction = pango_find_base_dir (text, -1); if (pango_direction == PANGO_DIRECTION_RTL) return ("rtl"); else return ("ltr"); } const gchar * common_get_app_direction (void) { GtkTextDirection gtk_direction; gtk_direction = gtk_widget_get_default_direction (); if (gtk_direction == GTK_TEXT_DIR_RTL) return ("rtl"); else return ("ltr"); } #ifndef HAVE_STRSEP /* code taken from glibc-2.2.1/sysdeps/generic/strsep.c */ char * common_strsep (char **stringp, const char *delim) { char *begin, *end; begin = *stringp; if (begin == NULL) return NULL; /* A frequent case is when the delimiter string contains only one character. Here we don't need to call the expensive `strpbrk' function and instead work using `strchr'. */ if (delim[0] == '\0' || delim[1] == '\0') { char ch = delim[0]; if (ch == '\0') end = NULL; else { if (*begin == ch) end = begin; else if (*begin == '\0') end = NULL; else end = strchr (begin + 1, ch); } } else /* Find the end of the token. */ end = strpbrk (begin, delim); if (end) { /* Terminate the token and set *STRINGP past NUL character. */ *end++ = '\0'; *stringp = end; } else /* No more delimiters; this is the last token. */ *stringp = NULL; return begin; } #endif /* HAVE_STRSEP */ /* Taken from gaim 24 June 2004, copyrighted by the gaim developers under the GPL, etc.... It was slightly modified to free the passed string */ gchar * common_strreplace (gchar *string, const gchar *delimiter, const gchar *replacement) { gchar **split; gchar *ret; g_return_val_if_fail (string != NULL, NULL); g_return_val_if_fail (delimiter != NULL, NULL); g_return_val_if_fail (replacement != NULL, NULL); split = g_strsplit (string, delimiter, 0); ret = g_strjoinv (replacement, split); g_strfreev (split); g_free (string); return ret; } typedef unsigned chartype; /* strcasestr is Copyright (C) 1994, 1996-2000, 2004 Free Software Foundation, Inc. It was taken from the GNU C Library, which is licenced under the GPL v2.1 or (at your option) newer version. */ char * common_strcasestr (const char *phaystack, const char *pneedle) { register const unsigned char *haystack, *needle; register chartype b, c; haystack = (const unsigned char *) phaystack; needle = (const unsigned char *) pneedle; b = tolower(*needle); if (b != '\0') { haystack--; /* possible ANSI violation */ do { c = *++haystack; if (c == '\0') goto ret0; } while (tolower(c) != (int) b); c = tolower(*++needle); if (c == '\0') goto foundneedle; ++needle; goto jin; for (;;) { register chartype a; register const unsigned char *rhaystack, *rneedle; do { a = *++haystack; if (a == '\0') goto ret0; if (tolower(a) == (int) b) break; a = *++haystack; if (a == '\0') goto ret0; shloop: ; } while (tolower(a) != (int) b); jin: a = *++haystack; if (a == '\0') goto ret0; if (tolower(a) != (int) c) goto shloop; rhaystack = haystack-- + 1; rneedle = needle; a = tolower(*rneedle); if (tolower(*rhaystack) == (int) a) do { if (a == '\0') goto foundneedle; ++rhaystack; a = tolower(*++needle); if (tolower(*rhaystack) != (int) a) break; if (a == '\0') goto foundneedle; ++rhaystack; a = tolower(*++needle); } while (tolower (*rhaystack) == (int) a); needle = rneedle; /* took the register-poor approach */ if (a == '\0') break; } } foundneedle: return (char*) haystack; ret0: return 0; } gboolean common_str_is_empty (const gchar *s) { if (s == NULL) return TRUE; while (*s != '\0') { if (!g_ascii_isspace (*s)) return FALSE; s++; } return TRUE; } time_t common_get_mod_time (const gchar *file) { struct stat attribute; struct tm tm; if (stat (file, &attribute) == 0) { gmtime_r (&(attribute.st_mtime), &tm); return mktime (&tm); } else { /* this is no error as this method is used to check for files */ return 0; } } gchar * common_get_localized_filename (const gchar *str) { const gchar *const *languages = g_get_language_names(); int i = 0; while (languages[i] != NULL) { gchar *filename = g_strdup_printf (str, strcmp (languages[i], "C") ? languages[i] : "en"); if (g_file_test (filename, G_FILE_TEST_IS_REGULAR)) return filename; g_free (filename); i++; } g_warning ("No file found for %s", str); return NULL; } void common_copy_file (const gchar *src, const gchar *dest) { gchar *content; gsize length; if (g_file_get_contents (src, &content, &length, NULL)) g_file_set_contents (dest, content, length, NULL); g_free (content); } liferea-1.12.7/src/common.h000066400000000000000000000137421352135647700154650ustar00rootroot00000000000000/** * @file common.h common routines * * Copyright (C) 2003-2012 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _COMMON_H #define _COMMON_H #include #include #include #include #include #include /* * Standard gettext macros */ #ifdef ENABLE_NLS # include # undef _ # define _(String) dgettext (PACKAGE, String) # define Q_(String) g_strip_context ((String), gettext (String)) # ifdef gettext_noop # define N_(String) gettext_noop (String) # else # define N_(String) (String) # endif #else # define textdomain(String) (String) # define gettext(String) (String) # define dgettext(Domain,Message) (Message) # define dcgettext(Domain,Message,Type) (Message) # define bindtextdomain(Domain,Directory) (Domain) # define _(String) (String) # define Q_(String) g_strip_context ((String), (String)) # define N_(String) (String) #endif /** * Parses the given string as a number. * * @param str the string to parse * @param def default value to return on parsing error * * @returns result value */ long common_parse_long (const gchar *str, long def); /** * Method to build user data file names. * * @param filename the user data filename (with extension) * * @returns a newly allocated filename string (to be free'd using g_free) */ gchar * common_create_data_filename (const gchar *filename); /** * Method to build config file names. * * @param filename the cache filename (with extension) * * @returns a newly allocated filename string (to be free'd using g_free) */ gchar * common_create_config_filename (const gchar *filename); /** * Method to build cache file names. * * @param folder a subfolder in the cache dir (optional) * @param filename the cache filename (without extension) * @param extension the cache filename extension * * @returns a newly allocated filename string (to be free'd using g_free) */ gchar * common_create_cache_filename(const gchar *folder, const gchar *filename, const gchar *extension); /** * Takes an URI and returns a new string containing the escaped URI. * * @param uri the URI to escape * * @returns new escaped URI string */ xmlChar * common_uri_escape(const xmlChar *uri); /** * Takes an URI and returns a new string containing the unescaped URI. * * @param uri the URI to unescape * * @returns new unescaped URI string */ xmlChar * common_uri_unescape(const xmlChar *uri); /** * Takes an URI of uncertain safety (e.g. partially escaped) and * returns if fully escaped safe for passing to a shell or browser. * This means the resulting URL is ensured to have no quotes, spaces * or &. Note: commata are not escaped! * * @param uri the URI to escape * * @returns new escaped URI string */ xmlChar * common_uri_sanitize(const xmlChar *uri); /** * To correctly escape and expand URLs, does not touch the * passed strings. * * @param url relative URL * @param baseURL base URL * * @returns new string with resulting absolute URL */ xmlChar * common_build_url(const gchar *url, const gchar *baseURL); /** * Analyzes the string, returns a diection setting immediately * useful for insertion into HTML * * @param text string to analyze * * @returns a constant "ltr" (default) or "rtl" */ const gchar * common_get_text_direction(const gchar *text); /** * Returns the overall directionality of the application * * @returns a constant "ltr" (default) or "rtl" */ const gchar * common_get_app_direction(void); #ifndef HAVE_STRSEP char * common_strsep(char **stringp, const char *delim); #define strsep(a,b) common_strsep(a,b) #endif /** * Replaces delimiter in string with a replacement string. * * @param string original string (will be freed) * @param delimiter match string * @param replacement replacement string * * @returns a new modified string */ gchar *common_strreplace(gchar *string, const gchar *delimiter, const gchar *replacement); /** * Case insensitive strstr() like searching. * * @param pneedle a string to find * @param phaystack the string to search in * * @returns first found position or NULL */ char * common_strcasestr(const char *phaystack, const char *pneedle); /** * Checks if a string is empty, when leading and trailing whitespace is ignored * * @param string a string to check * * @returns TRUE if string only contains whitespace or is NULL, FALSE otherwise */ gboolean common_str_is_empty (const gchar *string); /** * Get file modification timestamp * * @param *file the file name * * @returns modification timestamp (or 0 if file doesn't exist) */ time_t common_get_mod_time(const gchar *file); /** * Create a localized filename. * * This function tries all applicable locale names and replaces * the %s in str with the first one that points to an existing file. * "en" is always among the searched locale names. * * @param str full path containing one %s * * @returns a string with %s replaced (to be freed by the caller), or NULL */ gchar *common_get_localized_filename (const gchar *str); /** * Copy a source file to a target filename. * * @param src absolute source file path * @param dest absolute destination file path */ void common_copy_file (const gchar *src, const gchar *dest); #endif liferea-1.12.7/src/conf.c000066400000000000000000000206061352135647700151120ustar00rootroot00000000000000/** * @file conf.c Liferea configuration (GSettings access) * * Copyright (C) 2011 Mikel Olasagasti Uranga * Copyright (C) 2003-2015 Lars Windolf * Copyright (C) 2004,2005 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "common.h" #include "conf.h" #include "debug.h" #include "net.h" #include "update.h" #include "ui/liferea_shell.h" #define MAX_GCONF_PATHLEN 256 #define LIFEREA_SCHEMA_NAME "net.sf.liferea" #define DESKTOP_SCHEMA_NAME "org.gnome.desktop.interface" static GSettings *settings; static GSettings *desktop_settings; /* Function prototypes */ static void conf_proxy_reset_settings_cb(GSettings *settings, guint cnxn_id, gchar *key, gpointer user_data); static void conf_toolbar_style_settings_cb(GSettings *settings, guint cnxn_id, gchar *key, gpointer user_data); static void conf_ensure_migrated (const gchar *name) { gboolean needed = TRUE; GKeyFile *kf; gchar **list; gsize i, n; kf = g_key_file_new (); g_key_file_load_from_data_dirs (kf, "gsettings-data-convert", NULL, G_KEY_FILE_NONE, NULL); list = g_key_file_get_string_list (kf, "State", "converted", &n, NULL); if (list) { for (i = 0; i < n; i++) { if (strcmp (list[i], name) == 0) { needed = FALSE; break; } } g_strfreev (list); } g_key_file_free (kf); if (needed) g_spawn_command_line_sync ("gsettings-data-convert", NULL, NULL, NULL, NULL); } /* called once on startup */ void conf_init (void) { /* ensure we migrated from gconf to gsettings */ conf_ensure_migrated (LIFEREA_SCHEMA_NAME); /* initialize GSettings client */ settings = g_settings_new (LIFEREA_SCHEMA_NAME); desktop_settings = g_settings_new(DESKTOP_SCHEMA_NAME); g_signal_connect ( desktop_settings, "changed::" TOOLBAR_STYLE, G_CALLBACK (conf_toolbar_style_settings_cb), NULL ); g_signal_connect ( settings, "changed::" PROXY_DETECT_MODE, G_CALLBACK (conf_proxy_reset_settings_cb), NULL ); g_signal_connect ( settings, "changed::" PROXY_HOST, G_CALLBACK (conf_proxy_reset_settings_cb), NULL ); g_signal_connect ( settings, "changed::" PROXY_PORT, G_CALLBACK (conf_proxy_reset_settings_cb), NULL ); g_signal_connect ( settings, "changed::" PROXY_USEAUTH, G_CALLBACK (conf_proxy_reset_settings_cb), NULL ); g_signal_connect ( settings, "changed::" PROXY_USER, G_CALLBACK (conf_proxy_reset_settings_cb), NULL ); g_signal_connect ( settings, "changed::" PROXY_PASSWD, G_CALLBACK (conf_proxy_reset_settings_cb), NULL ); /* Load settings into static buffers */ conf_proxy_reset_settings_cb (NULL, 0, NULL, NULL); } void conf_deinit (void) { g_object_unref (settings); g_object_unref (desktop_settings); } static void conf_toolbar_style_settings_cb (GSettings *settings, guint cnxn_id, gchar *key, gpointer user_data) { gchar *style = conf_get_toolbar_style (); if (style) { liferea_shell_set_toolbar_style (style); g_free (style); } } static void conf_proxy_reset_settings_cb (GSettings *settings, guint cnxn_id, gchar *key, gpointer user_data) { gchar *proxyname, *proxyusername, *proxypassword; gint proxyport; gint proxydetectmode; gboolean proxyuseauth; GtkWidget *dialog = NULL; proxyname = NULL; proxyport = 0; proxyusername = NULL; proxypassword = NULL; conf_get_int_value (PROXY_DETECT_MODE, &proxydetectmode); #if !WEBKIT_CHECK_VERSION (2, 15, 3) if (proxydetectmode != PROXY_DETECT_MODE_AUTO) { dialog = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, _("Your version of WebKitGTK+ doesn't support changing the proxy settings from Liferea. The system's default proxy settings will be used.")); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); conf_set_int_value (PROXY_DETECT_MODE, PROXY_DETECT_MODE_AUTO); return; } #endif switch (proxydetectmode) { default: case 0: debug0 (DEBUG_CONF, "proxy auto detect is configured"); /* nothing to do, all done by libproxy inside libsoup */ break; case 1: debug0 (DEBUG_CONF, "proxy is disabled by user"); /* nothing to do */ break; case 2: debug0 (DEBUG_CONF, "manual proxy is configured"); conf_get_str_value (PROXY_HOST, &proxyname); conf_get_int_value (PROXY_PORT, &proxyport); conf_get_bool_value (PROXY_USEAUTH, &proxyuseauth); if (proxyuseauth) { conf_get_str_value (PROXY_USER, &proxyusername); conf_get_str_value (PROXY_PASSWD, &proxypassword); } break; } debug4 (DEBUG_CONF, "Manual proxy settings are now %s:%d %s:%s", proxyname != NULL ? proxyname : "NULL", proxyport, proxyusername != NULL ? proxyusername : "NULL", proxypassword != NULL ? proxypassword : "NULL"); network_set_proxy (proxydetectmode, proxyname, proxyport, proxyusername, proxypassword); } /*----------------------------------------------------------------------*/ /* generic configuration access methods */ /*----------------------------------------------------------------------*/ void conf_set_bool_value (const gchar *key, gboolean value) { g_assert (key != NULL); g_settings_set_boolean (settings, key, value); } void conf_set_str_value (const gchar *key, const gchar *value) { g_assert (key != NULL); g_settings_set_string (settings, key, value); } void conf_set_strv_value (const gchar *key, const gchar **value) { g_assert (key != NULL); g_settings_set_strv (settings, key, value); } void conf_set_int_value (const gchar *key, gint value) { g_assert (key != NULL); debug2 (DEBUG_CONF, "Setting %s to %d", key, value); g_settings_set_int (settings, key, value); } gchar * conf_get_toolbar_style(void) { gchar *style; conf_get_str_value (TOOLBAR_STYLE, &style); /* check if we don't override the toolbar style */ if (strcmp(style, "") == 0) { g_free (style); conf_get_str_value_from_schema (desktop_settings,"toolbar-style", &style); } return style; } gboolean conf_get_bool_value_from_schema (GSettings *gsettings, const gchar *key, gboolean *value) { g_assert (key != NULL); g_assert (value != NULL); if (gsettings == NULL) gsettings = settings; *value = g_settings_get_boolean (gsettings,key); return *value; } gboolean conf_get_str_value_from_schema (GSettings *gsettings, const gchar *key, gchar **value) { g_assert (key != NULL); g_assert (value != NULL); if (gsettings == NULL) gsettings = settings; *value = g_settings_get_string (gsettings, key); return (NULL != value); } gboolean conf_get_strv_value_from_schema (GSettings *gsettings, const gchar *key, gchar ***value) { g_assert (key != NULL); g_assert (value != NULL); if (gsettings == NULL) gsettings = settings; *value = g_settings_get_strv (gsettings, key); return (NULL != value); } gboolean conf_get_int_value_from_schema (GSettings *gsettings, const gchar *key, gint *value) { g_assert (key != NULL); g_assert (value != NULL); if (gsettings == NULL) gsettings = settings; *value = g_settings_get_int (gsettings,key); return (NULL != value); } gboolean conf_get_default_font_from_schema (const gchar *key, gchar **value) { g_assert (key != NULL); g_assert (value != NULL); if (desktop_settings) *value = g_strdup (g_settings_get_string (desktop_settings, key)); return (NULL != value); } void conf_signal_connect (const gchar *signal, GCallback cb, gpointer data) { g_signal_connect (settings, signal, cb, data); } void conf_bind (const gchar *key, gpointer object, const gchar *property, GSettingsBindFlags flags) { g_assert (settings); g_settings_bind (settings, key, object, property, flags); } liferea-1.12.7/src/conf.h000066400000000000000000000161631352135647700151220ustar00rootroot00000000000000/** * @file conf.h Liferea configuration (GSettings access) * * Copyright (C) 2011 Mikel Olasagasti Uranga * Copyright (C) 2003-2017 Lars Windolf * Copyright (C) 2004,2005 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _CONF_H #define _CONF_H #include #include /* browsing settings */ #define BROWSE_INSIDE_APPLICATION "browse-inside-application" #define BROWSE_KEY_SETTING "browse-key-setting" #define BROWSER_ID "browser-id" #define BROWSER_COMMAND "browser" #define DEFAULT_VIEW_MODE "default-view-mode" #define DEFAULT_FONT "document-font-name" #define USER_FONT "browser-font" #define DISABLE_JAVASCRIPT "disable-javascript" #define SOCIAL_BM_SITE "social-bm-site" #define ENABLE_PLUGINS "enable-plugins" /* enclosure handling */ #define DOWNLOAD_CUSTOM_COMMAND "download-custom-command" #define DOWNLOAD_TOOL "download-tool" #define DOWNLOAD_USE_CUSTOM_COMMAND "download-use-custom-command" /* feed handling settings */ #define DEFAULT_MAX_ITEMS "maxitemcount" #define DEFAULT_UPDATE_INTERVAL "default-update-interval" #define STARTUP_FEED_ACTION "startup-feed-action" /* folder handling settings */ #define FOLDER_DISPLAY_MODE "folder-display-mode" #define FOLDER_DISPLAY_HIDE_READ "folder-display-hide-read" #define REDUCED_FEEDLIST "reduced-feedlist" /* GUI settings and persistency values */ #define CONFIRM_MARK_ALL_READ "confirm-mark-all-read" #define DISABLE_TOOLBAR "disable-toolbar" #define TOOLBAR_STYLE "toolbar-style" #define LAST_WINDOW_STATE "last-window-state" #define LAST_WINDOW_X "last-window-x" #define LAST_WINDOW_Y "last-window-y" #define LAST_WINDOW_WIDTH "last-window-width" #define LAST_WINDOW_HEIGHT "last-window-height" #define LAST_WINDOW_MAXIMIZED "last-window-maximized" #define LAST_VPANE_POS "last-vpane-pos" #define LAST_HPANE_POS "last-hpane-pos" #define LAST_WPANE_POS "last-wpane-pos" #define LAST_ZOOMLEVEL "last-zoomlevel" #define LAST_NODE_SELECTED "last-node-selected" #define LIST_VIEW_COLUMN_ORDER "list-view-column-order" /* networking settings */ #define PROXY_DETECT_MODE "proxy-detect-mode" #define PROXY_HOST "proxy-host" #define PROXY_PORT "proxy-port" #define PROXY_USEAUTH "proxy-use-authentication" #define PROXY_USER "proxy-authentication-user" #define PROXY_PASSWD "proxy-authentication-password" #define DO_NOT_TRACK "do-not-track" /* initializing methods */ void conf_init (void); void conf_deinit (void); /* preferences access methods */ #define conf_get_bool_value(key, value) conf_get_bool_value_from_schema (NULL, key, value) #define conf_get_str_value(key, value) conf_get_str_value_from_schema (NULL, key, value) #define conf_get_strv_value(key, value) conf_get_strv_value_from_schema (NULL, key, value) #define conf_get_int_value(key, value) conf_get_int_value_from_schema (NULL, key, value) /** * Retrieves the value of the given boolean configuration key. * * @param gsettings gsettings schema to use * @param key the configuration key * @param value the value, if the function returned FALSE it's always FALSE * * @returns TRUE if the configuration key was found */ gboolean conf_get_bool_value_from_schema (GSettings *gsettings, const gchar *key, gboolean *value); /** * Retrieves the value of the given string configuration key. * The string has to be freed by the caller. * * @param gsettings gsettings schema to use * @param key the configuration key * @param value the value, if the function returned FALSE an empty string * * @returns TRUE if the configuration key was found */ gboolean conf_get_str_value_from_schema (GSettings *gsettings,const gchar *key, gchar **value); /** * Retrieves the value of the given string array configuration key. * The string array has to be freed by the caller. * * @param gsettings gsettings schema to use * @param key the configuration key * @param value the value, if the function returned FALSE an empty string * * @returns TRUE if the configuration key was found */ gboolean conf_get_strv_value_from_schema (GSettings *gsettings,const gchar *key, gchar ***value); /** * Retrieves the value of the given integer configuration key. * * @param gsettings gsettings schema to use * @param key the configuration key * @param value the value, if the function returned FALSE it's always 0 * * @returns TRUE if the configuration key was found */ gboolean conf_get_int_value_from_schema (GSettings *gsettings, const gchar *key, gint *value); /** * Sets the value of the given boolean configuration key. * * @param key the configuration key * @param value the new boolean value */ void conf_set_bool_value (const gchar *key, gboolean value); /** * Sets the value of the given string configuration key. * The given value will not be free'd after setting it! * * @param key the configuration key * @param value the new string value */ void conf_set_str_value (const gchar *key, const gchar *value); /** * Sets the value of the given string configuration key. * The given value will not be free'd after setting it! * * @param key the configuration key * @param value the new string value */ void conf_set_strv_value (const gchar *key, const gchar **value); /** * Sets the value of the given integer configuration key * * @param key the configuration key * @param value the new integer value */ void conf_set_int_value (const gchar *key, gint value); /** * Returns the current toolbar configuration. * * @returns a string (to be free'd using g_free) */ gchar * conf_get_toolbar_style (void); /** * Get the current system default font from desktop schema * * @param key the configuration key * @param value the value, if the function returned FALSE it's always 0 * * @returns TRUE if the configuration key was found */ gboolean conf_get_default_font_from_schema (const gchar *key, gchar **value); /** * Connect to a signal in the default GSettings object * * @param signal the signal to connect to * @param cb callback to invoke when the signal is emitted * @param data user data to pass to the callback */ void conf_signal_connect (const gchar *signal, GCallback cb, gpointer data); /** * conf_bind: * @key: the configuration key * @object: a GObject * @property: the object's property to bind * @flags: binding flags * * This is a convenience function that calls g_settings_bind with Liferea settings. */ void conf_bind (const gchar *key, gpointer object, const gchar *property, GSettingsBindFlags flags); #endif liferea-1.12.7/src/date.c000066400000000000000000000276041352135647700151070ustar00rootroot00000000000000/** * @file date.c date formatting routines * * Copyright (C) 2008-2011 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * * The date formatting was reused from the Evolution code base * * Author: Chris Lahey * Jeffrey Stedfast * * Copyright 2000 Helix Code, Inc. (www.helixcode.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 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "date.h" #include #include "common.h" #include "debug.h" /* date formatting methods */ /** * Originally from Evolution e-util.c * * Function to do a last minute fixup of the AM/PM stuff if the locale * and gettext haven't done it right. Most English speaking countries * except the USA use the 24 hour clock (UK, Australia etc). However * since they are English nobody bothers to write a language * translation (gettext) file. So the locale turns off the AM/PM, but * gettext does not turn on the 24 hour clock. Leaving a mess. * * This routine checks if AM/PM are defined in the locale, if not it * forces the use of the 24 hour clock. * * The function itself is a front end on strftime and takes exactly * the same arguments. * * TODO: Actually remove the '%p' from the fixed up string so that * there isn't a stray space. **/ static gchar * e_utf8_strftime_fix_am_pm (const char *fmt, GDateTime *tm) { gchar *buf; char *sp; char *ffmt; gchar *datestr; if (g_strstr_len (fmt, -1, "%p")==NULL && g_strstr_len (fmt, -1, "%P")==NULL) { /* No AM/PM involved - can use the fmt string directly */ datestr = g_date_time_format (tm, fmt); } else { /* Get the AM/PM symbol from the locale */ buf = g_date_time_format (tm, "%p"); if (buf && buf[0]) { /** * AM/PM have been defined in the locale * so we can use the fmt string directly **/ datestr = g_date_time_format (tm, fmt); } else { /** * No AM/PM defined by locale * must change to 24 hour clock **/ ffmt=g_strdup(fmt); for (sp=ffmt; (sp = g_strstr_len (sp, -1, "%l")); sp++) { /** * Maybe this should be 'k', but I have never * seen a 24 clock actually use that format **/ sp[1]='H'; } for (sp=ffmt; (sp=g_strstr_len (sp, -1, "%I")); sp++) { sp[1]='H'; } datestr = g_date_time_format (tm, ffmt); g_free(ffmt); } g_free (buf); } return datestr; } /* This function is originally from the Evolution 2.6.2 code (e-cell-date.c) */ static gchar * date_format_nice (gint64 date) { GDateTime *then, *now, *yesterday; gchar *temp, *buf; gboolean done = FALSE; then = g_date_time_new_from_unix_local (date); now = g_date_time_new_now_local (); if ((date == 0) || (then == NULL)) { return g_strdup (""); } /* if (nowdate - date < 60 * 60 * 8 && nowdate > date) { e_utf8_strftime_fix_am_pm (buf, TIMESTRLEN, _("%l:%M %p"), &then); done = TRUE; }*/ if (!done) { if (g_date_time_get_day_of_year (then) == g_date_time_get_day_of_year (now) && g_date_time_get_year (then) == g_date_time_get_year (now)) { /* translation hint: date format for today, reorder format codes as necessary */ buf = e_utf8_strftime_fix_am_pm (_("Today %l:%M %p"), then); done = TRUE; } } if (!done) { yesterday = g_date_time_add_days (now, -1); if (g_date_time_get_day_of_year (then) == g_date_time_get_day_of_year (yesterday) && g_date_time_get_year (then) == g_date_time_get_year (yesterday)) { /* translation hint: date format for yesterday, reorder format codes as necessary */ buf = e_utf8_strftime_fix_am_pm (_("Yesterday %l:%M %p"), then); done = TRUE; } g_date_time_unref (yesterday); } if (!done) { yesterday = g_date_time_add_days (now, -6); if ((g_date_time_compare (now, then) > 0) && (g_date_time_compare (then, yesterday) > 0 || (g_date_time_get_day_of_year (then) == g_date_time_get_day_of_year (yesterday) && g_date_time_get_year (then) == g_date_time_get_year (yesterday)))) { /* translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary */ buf = e_utf8_strftime_fix_am_pm (_("%a %l:%M %p"), then); done = TRUE; } g_date_time_unref (yesterday); } if (!done) { if (g_date_time_get_year (then) == g_date_time_get_year (now)) { /* translation hint: date format for dates older than a week but from this year, reorder format codes as necessary */ buf = e_utf8_strftime_fix_am_pm (_("%b %d %l:%M %p"), then); } else { /* translation hint: date format for dates from the last years, reorder format codes as necessary */ buf = e_utf8_strftime_fix_am_pm (_("%b %d %Y"), then); } } g_date_time_unref (then); g_date_time_unref (now); temp = buf; while ((temp = strstr (temp, " "))) { memmove (temp, temp + 1, strlen (temp)); } temp = g_strstrip (buf); return temp; } gchar * date_format (gint64 date, const gchar *date_format) { gchar *result; GDateTime *date_tm; if (date == 0) { return g_strdup (""); } if (date_format) { date_tm = g_date_time_new_from_unix_local (date); result = e_utf8_strftime_fix_am_pm (date_format, date_tm); g_date_time_unref (date_tm); } else { result = date_format_nice (date); } return result; } /* date parsing methods */ gint64 date_parse_ISO8601 (const gchar *date) { GTimeVal timeval; GDateTime *datetime = NULL; gboolean result; guint64 year, month, day; gint64 t = 0; gchar *pos, *next, *ascii_date = NULL; g_assert (date != NULL); /* we expect at least something like "2003-08-07T15:28:19" and don't require the second fractions and the timezone info the most specific format: YYYY-MM-DDThh:mm:ss.sTZD */ /* full specified variant */ result = g_time_val_from_iso8601 (date, &timeval); if (result) return timeval.tv_sec; /* only date */ ascii_date = g_str_to_ascii (date, "C"); ascii_date = g_strstrip (ascii_date); /* Parsing year */ year = g_ascii_strtoull (ascii_date, &next, 10); if ((*next != '-') || (next == ascii_date)) goto parsing_failed; pos = next + 1; /* Parsing month */ month = g_ascii_strtoull (pos, &next, 10); if ((*next != '-') || (next == pos)) goto parsing_failed; pos = next + 1; /* Parsing day */ day = g_ascii_strtoull (pos, &next, 10); if ((*next != '\0') || (next == pos)) goto parsing_failed; /* there were others combinations too... */ datetime = g_date_time_new_utc (year, month, day, 0,0,0); if (datetime) { t = g_date_time_to_unix (datetime); g_date_time_unref (datetime); } parsing_failed: if (!t) debug0 (DEBUG_PARSING, "Invalid ISO8601 date format! Ignoring information!"); g_free (ascii_date); return t; } /* in theory, we'd need only the RFC822 timezones here in practice, feeds also use other timezones... */ static struct { const char *name; const char *offset; } tz_offsets [] = { { "IDLW","-1200" }, { "HAST","-1000" }, { "AKST","-0900" }, { "AKDT","-0800" }, { "WESZ","+0100" }, { "WEST","+0100" }, { "WEDT","+0100" }, { "MEST","+0200" }, { "MESZ","+0200" }, { "CEST","+0200" }, { "CEDT","+0200" }, { "EEST","+0300" }, { "EEDT","+0300" }, { "IRST","+0430" }, { "CNST","+0800" }, { "ACST","+0930" }, { "ACDT","+1030" }, { "AEST","+1000" }, { "AEDT","+1100" }, { "IDLE","+1200" }, { "NZST","+1200" }, { "NZDT","+1300" }, { "GMT", "+00" }, { "EST", "-0500" }, { "EDT", "-0400" }, { "CST", "-0600" }, { "CDT", "-0500" }, { "MST", "-0700" }, { "MDT", "-0600" }, { "PST", "-0800" }, { "PDT", "-0700" }, { "HDT", "-0900" }, { "YST", "-0900" }, { "YDT", "-0800" }, { "AST", "-0400" }, { "ADT", "-0300" }, { "VST", "-0430" }, { "NST", "-0330" }, { "NDT", "-0230" }, { "WET", "+00" }, { "WEZ", "+00" }, { "IST", "+0100" }, { "CET", "+0100" }, { "MEZ", "+0100" }, { "EET", "+0200" }, { "MSK", "+0300" }, { "MSD", "+0400" }, { "IRT", "+0330" }, { "IST", "+0530" }, { "ICT", "+0700" }, { "JST", "+0900" }, { "NFT", "+1130" }, { "UT", "+00" }, { "PT", "-0800" }, { "BT", "+0300" }, { "Z", "+00" }, { "A", "-0100" }, { "M", "-1200" }, { "N", "+0100" }, { "Y", "+1200" } }; /** date_parse_rfc822_tz: * @token: String representing the timezone. * * Returns: (transfer full): a GTimeZone to be freed by g_time_zone_unref */ static GTimeZone * date_parse_rfc822_tz (char *token) { const char *inptr = token; int num_timezones = sizeof (tz_offsets) / sizeof ((tz_offsets)[0]); if (*inptr == '+' || *inptr == '-') { return g_time_zone_new (inptr); } else { int t; if (*inptr == '(') inptr++; for (t = 0; t < num_timezones; t++) if (!strncmp (inptr, tz_offsets[t].name, strlen (tz_offsets[t].name))) return g_time_zone_new (tz_offsets[t].offset); } return g_time_zone_new_utc (); } static const gchar * rfc822_months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; GDateMonth date_parse_month (const gchar *str) { int i; for (i = 0;i < 12;i++) { if (!g_ascii_strncasecmp (str, rfc822_months[i], 3)) return i + 1; } return 0; } gint64 date_parse_RFC822 (const gchar *date) { guint64 day, month, year, hour, minute, second = 0; GTimeZone *tz = NULL; GDateTime *datetime = NULL; gint64 t = 0; gchar *pos, *next, *ascii_date = NULL; /* we expect at least something like "03 Dec 12 01:38:34" and don't require a day of week or the timezone the most specific format we expect: "Fri, 03 Dec 12 01:38:34 CET" */ /* skip day of week */ pos = g_utf8_strchr(date, -1, ','); if (pos) date = ++pos; ascii_date = g_str_to_ascii (date, "C"); /* Parsing day */ day = g_ascii_strtoull (ascii_date, &next, 10); if ((*next == '\0') || (next == ascii_date)) goto parsing_failed; pos = next; /* Parsing month */ while (pos && *pos != '\0' && g_ascii_isspace (*pos)) /* skip whitespaces before month */ pos++; if (strlen (pos) < 3) goto parsing_failed; month = date_parse_month (pos); pos += 3; /* Parsing year */ year = g_ascii_strtoull (pos, &next, 10); if ((*next == '\0') || (next == pos)) goto parsing_failed; if (year < 100) { /* If year is 2 digits, years after 68 are in 20th century (strptime convention) */ if (year > 68) year += 1900; else year += 2000; } pos = next; /* Parsing hour */ hour = g_ascii_strtoull (pos, &next, 10); if ((next == pos) || (*next != ':')) goto parsing_failed; pos = next + 1; /* Parsing minute */ minute = g_ascii_strtoull (pos, &next, 10); if (next == pos) goto parsing_failed; /* Optional second */ if (*next == ':') { pos = next + 1; second = g_ascii_strtoull (pos, &next, 10); if (next == pos) goto parsing_failed; } pos = next; /* Optional Timezone */ while (pos && *pos != '\0' && g_ascii_isspace (*pos)) /* skip whitespaces before timezone */ pos++; if (*pos != '\0') tz = date_parse_rfc822_tz (pos); if (!tz) datetime = g_date_time_new_utc (year, month, day, hour, minute, second); else { datetime = g_date_time_new (tz, year, month, day, hour, minute, second); g_time_zone_unref (tz); } if (datetime) { t = g_date_time_to_unix (datetime); g_date_time_unref (datetime); } parsing_failed: if (!t) debug0 (DEBUG_PARSING, "Invalid RFC822 date !"); g_free (ascii_date); return t; } liferea-1.12.7/src/date.h000066400000000000000000000034401352135647700151040ustar00rootroot00000000000000/** * @file date.h date formatting and parsing routines for Liferea * * Copyright (C) 2008-2009 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _DATE_H #define _DATE_H #include /** * Generic date formatting function. Uses either the * user defined format string, or (if date_format is NULL) * a formatted date string whose format string depends * on the time difference to today. * * @param t the timestamp * @param date_format NULL or a strptime format string (encoded in UTF-8) * * @returns a newly allocated formatted date string (encoded in UTF-8) */ gchar * date_format (gint64 date, const gchar *date_format); /** * Parses a ISO8601 date. * * @param date the date string to parse * * @returns timestamp */ gint64 date_parse_ISO8601 (const gchar *date); /** * Parses a RFC822 format date. This FAILS if a timezone string is * specified such as EDT or EST and that timezone is in daylight * savings time. * * @param date the date string to parse * * @returns timestamp (GMT, no daylight savings time) */ gint64 date_parse_RFC822 (const gchar *date); #endif liferea-1.12.7/src/db.c000066400000000000000000001363671352135647700145660ustar00rootroot00000000000000/** * @file db.c sqlite backend * * Copyright (C) 2007-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "common.h" #include "conf.h" #include "db.h" #include "debug.h" #include "item.h" #include "itemset.h" #include "metadata.h" #include "vfolder.h" /* You can find a schema description used by this version of Liferea at: https://lzone.de/wiki/doku.php?id=liferea:v1.8:db_schema */ static sqlite3 *db = NULL; gboolean searchFolderRebuild = FALSE; /** hash of all prepared statements */ static GHashTable *statements = NULL; static void db_view_remove (const gchar *id); static void db_prepare_stmt (sqlite3_stmt **stmt, const gchar *sql) { gint res; const char *left; res = sqlite3_prepare_v2 (db, sql, -1, stmt, &left); if ((SQLITE_BUSY == res) || (SQLITE_LOCKED == res)) { g_warning ("The Liferea cache DB seems to be used by another instance (error code=%d)! Only one accessing instance is allowed.", res); exit(1); } if (SQLITE_OK != res) g_error ("Failure while preparing statement, (error=%d, %s) SQL: \"%s\"", res, sqlite3_errmsg(db), sql); } static void db_new_statement (const gchar *name, const gchar *sql) { if (!statements) statements = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_insert (statements, (gpointer)name, (gpointer)sql); } static sqlite3_stmt * db_get_statement (const gchar *name) { sqlite3_stmt *statement; gchar *sql; sql = (gchar *) g_hash_table_lookup (statements, name); db_prepare_stmt (&statement, sql); if (!statement) g_error ("Fatal: unknown prepared statement \"%s\" requested!", name); sqlite3_reset (statement); return statement; } static void db_exec (const gchar *sql) { gchar *err; gint res; debug1 (DEBUG_DB, "executing SQL: %s", sql); res = sqlite3_exec (db, sql, NULL, NULL, &err); if (1 >= res) { debug2 (DEBUG_DB, " -> result: %d (%s)", res, err?err:"success"); } else { g_warning ("Unexpected status on SQL execution: %d (%s)", res, err?err:"success"); } sqlite3_free (err); } static gboolean db_table_exists (const gchar *name) { gchar *sql; sqlite3_stmt *stmt; gint res = 0; sql = sqlite3_mprintf ("SELECT COUNT(type) FROM sqlite_master WHERE type = 'table' AND name = '%s';", name); db_prepare_stmt (&stmt, sql); sqlite3_reset (stmt); if (SQLITE_ROW == sqlite3_step (stmt)) res = sqlite3_column_int (stmt, 0); sqlite3_finalize (stmt); sqlite3_free (sql); return (1 == res); } static void db_set_schema_version (gint schemaVersion) { gchar *err, *sql; sql = sqlite3_mprintf ("REPLACE INTO info (name, value) VALUES ('schemaVersion',%d);", schemaVersion); if (SQLITE_OK != sqlite3_exec (db, sql, NULL, NULL, &err)) debug1 (DEBUG_DB, "setting schema version failed: %s", err); sqlite3_free (sql); sqlite3_free (err); } static gint db_get_schema_version (void) { guint schemaVersion = 0; sqlite3_stmt *stmt; if (!db_table_exists ("info")) { db_exec ("CREATE TABLE info ( " " name TEXT, " " value TEXT, " " PRIMARY KEY (name) " ");"); db_set_schema_version (-1); } db_prepare_stmt (&stmt, "SELECT value FROM info WHERE name = 'schemaVersion'"); if (SQLITE_ROW == sqlite3_step (stmt)) schemaVersion = sqlite3_column_int (stmt, 0); sqlite3_finalize (stmt); return schemaVersion; } static void db_begin_transaction (void) { gchar *sql, *err; gint res; sql = sqlite3_mprintf ("BEGIN"); res = sqlite3_exec (db, sql, NULL, NULL, &err); if (SQLITE_OK != res) g_warning ("Transaction begin failed (%s) SQL: %s", err, sql); sqlite3_free (sql); sqlite3_free (err); } static void db_end_transaction (void) { gchar *sql, *err; gint res; sql = sqlite3_mprintf ("END"); res = sqlite3_exec (db, sql, NULL, NULL, &err); if (SQLITE_OK != res) g_warning ("Transaction end failed (%s) SQL: %s", err, sql); sqlite3_free (sql); sqlite3_free (err); } #define VACUUM_ON_FRAGMENTATION_RATIO 10 static void db_vacuum (void) { sqlite3_stmt *stmt; gint res, page_count, freelist_count; /* Determine fragmentation ratio using PRAGMA page_count PRAGMA freelist_count as suggested by adriatic in this blog post http://jeff.ecchi.ca/blog/2011/12/24/investigating-lifereas-startup-performance/#comment-19989 and perform VACUUM only when needed. */ db_prepare_stmt (&stmt, "PRAGMA page_count"); sqlite3_reset (stmt); res = sqlite3_step (stmt); if (SQLITE_ROW != res) g_error ("Could not determine page count (error code %d)!", res); page_count = sqlite3_column_int (stmt, 0); sqlite3_finalize (stmt); db_prepare_stmt (&stmt, "PRAGMA freelist_count"); sqlite3_reset (stmt); res = sqlite3_step (stmt); if (SQLITE_ROW != res) g_error ("Could not determine free list count (error code %d)!", res); freelist_count = sqlite3_column_int (stmt, 0); sqlite3_finalize (stmt); float fragmentation = (100 * (float)freelist_count/page_count); if (fragmentation > VACUUM_ON_FRAGMENTATION_RATIO) { debug2 (DEBUG_DB, "Performing VACUUM as freelist count/page count ratio %2.2f > %d", fragmentation, VACUUM_ON_FRAGMENTATION_RATIO); debug_start_measurement (DEBUG_DB); db_exec ("VACUUM;"); debug_end_measurement (DEBUG_DB, "VACUUM"); } else { debug2 (DEBUG_DB, "No VACUUM as freelist count/page count ratio %2.2f <= %d", fragmentation, VACUUM_ON_FRAGMENTATION_RATIO); } } static void db_open (void) { gchar *filename; gint res; filename = common_create_data_filename ("liferea.db"); debug1 (DEBUG_DB, "Opening DB file %s...", filename); res = sqlite3_open_v2 (filename, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL); if (SQLITE_OK != res) g_error ("Data base file %s could not be opened (error code %d: %s)...", filename, res, sqlite3_errmsg (db)); g_free (filename); sqlite3_extended_result_codes (db, TRUE); db_exec("PRAGMA journal_mode=WAL"); db_exec("PRAGMA page_size=32768"); db_exec("PRAGMA synchronous=NORMAL"); } #define SCHEMA_TARGET_VERSION 10 /* opening or creation of database */ void db_init (void) { gint res; debug_enter ("db_init"); db_open (); /* create info table/check versioning info */ debug1 (DEBUG_DB, "current DB schema version: %d", db_get_schema_version ()); if (-1 == db_get_schema_version ()) { /* no schema version available -> first installation without tables... */ db_set_schema_version (SCHEMA_TARGET_VERSION); /* nothing exists yet, tables will be created below */ } if (SCHEMA_TARGET_VERSION < db_get_schema_version ()) g_error ("Fatal: The cache database was created by a newer version of Liferea than this one!"); if (SCHEMA_TARGET_VERSION > db_get_schema_version ()) { /* do table migration */ if (db_get_schema_version () < 5) g_error ("This version of Liferea doesn't support migrating from such an old DB file!"); if (db_get_schema_version () == 5 || db_get_schema_version () == 6) { debug0 (DEBUG_DB, "dropping triggers in preparation of database migration"); db_exec ("BEGIN; " "DROP TRIGGER item_removal; " "DROP TRIGGER item_insert; " "END;"); } if (db_get_schema_version () == 5) { /* 1.4.9 -> 1.4.10 adding parent_item_id to itemset relation */ debug0 (DEBUG_DB, "migrating from schema version 5 to 6 (this drops all comments)"); db_exec ("BEGIN; " "DELETE FROM itemsets WHERE comment = 1; " "DELETE FROM items WHERE comment = 1; " "CREATE TEMPORARY TABLE itemsets_backup(item_id,node_id,read,comment); " "INSERT INTO itemsets_backup SELECT item_id,node_id,read,comment FROM itemsets; " "DROP TABLE itemsets; " "CREATE TABLE itemsets (" " item_id INTEGER," " parent_item_id INTEGER," " node_id TEXT," " read INTEGER," " comment INTEGER," " PRIMARY KEY (item_id, node_id)" "); " "INSERT INTO itemsets SELECT item_id,0,node_id,read,comment FROM itemsets_backup; " "DROP TABLE itemsets_backup; " "REPLACE INTO info (name, value) VALUES ('schemaVersion',6); " "END;"); } if (db_get_schema_version () == 6) { /* 1.4.15 -> 1.4.16 adding parent_node_id to itemset relation */ debug0 (DEBUG_DB, "migrating from schema version 6 to 7 (this drops all comments)"); db_exec ("BEGIN; " "DELETE FROM itemsets WHERE comment = 1; " "DELETE FROM items WHERE comment = 1; " "CREATE TEMPORARY TABLE itemsets_backup(item_id,node_id,read,comment); " "INSERT INTO itemsets_backup SELECT item_id,node_id,read,comment FROM itemsets; " "DROP TABLE itemsets; " "CREATE TABLE itemsets (" " item_id INTEGER," " parent_item_id INTEGER," " node_id TEXT," " parent_node_id TEXT," " read INTEGER," " comment INTEGER," " PRIMARY KEY (item_id, node_id)" "); " "INSERT INTO itemsets SELECT item_id,0,node_id,node_id,read,comment FROM itemsets_backup; " "DROP TABLE itemsets_backup; " "REPLACE INTO info (name, value) VALUES ('schemaVersion',7); " "END;"); } if (db_get_schema_version () == 7) { /* 1.7.1 -> 1.7.2 dropping the itemsets and attention_stats relation */ db_exec ("BEGIN; " "CREATE TEMPORARY TABLE items_backup(" " item_id, " " title, " " read, " " updated, " " popup, " " marked, " " source, " " source_id, " " valid_guid, " " description, " " date, " " comment_feed_id, " " comment); " "INSERT into items_backup SELECT ROWID, title, read, updated, popup, marked, source, source_id, valid_guid, description, date, comment_feed_id, comment FROM items; " "DROP TABLE items; " "CREATE TABLE items (" " item_id INTEGER," " parent_item_id INTEGER," " node_id TEXT," " parent_node_id TEXT," " title TEXT," " read INTEGER," " updated INTEGER," " popup INTEGER," " marked INTEGER," " source TEXT," " source_id TEXT," " valid_guid INTEGER," " description TEXT," " date INTEGER," " comment_feed_id INTEGER," " comment INTEGER," " PRIMARY KEY (item_id)" ");" "INSERT INTO items SELECT itemsets.item_id, parent_item_id, node_id, parent_node_id, title, itemsets.read, updated, popup, marked, source, source_id, valid_guid, description, date, comment_feed_id, itemsets.comment FROM items_backup JOIN itemsets ON itemsets.item_id = items_backup.item_id; " "DROP TABLE items_backup; " "DROP TABLE itemsets; " "REPLACE INTO info (name, value) VALUES ('schemaVersion',8); " "END;" ); db_exec ("DROP TABLE attention_stats"); /* this is unconditional, no checks and backups needed */ } if (db_get_schema_version () == 8) { gchar *sql; sqlite3_stmt *stmt; /* 1.7.3 -> 1.7.4 change search folder handling */ db_exec ("BEGIN; " "DROP TABLE view_state; " "DROP TABLE update_state; " "CREATE TABLE search_folder_items (" " node_id STRING," " item_id INTEGER," " PRIMARY KEY (node_id, item_id)" ");" "REPLACE INTO info (name, value) VALUES ('schemaVersion',9); " "END;" ); debug0 (DEBUG_DB, "Removing all views."); sql = sqlite3_mprintf("SELECT name FROM sqlite_master WHERE type='view';"); res = sqlite3_prepare_v2 (db, sql, -1, &stmt, NULL); sqlite3_free (sql); if (SQLITE_OK != res) { debug1 (DEBUG_DB, "Could not determine views (error=%d)", res); } else { sqlite3_reset (stmt); while (sqlite3_step (stmt) == SQLITE_ROW) { const gchar *viewName = sqlite3_column_text (stmt, 0) + strlen("view_"); gchar *copySql = g_strdup_printf("INSERT INTO search_folder_items (node_id, item_id) SELECT '%s',item_id FROM view_%s;", viewName, viewName); db_exec (copySql); db_view_remove (viewName); g_free (copySql); } sqlite3_finalize (stmt); } } if (db_get_schema_version () == 9) { /* A parent node id to search folder relation to allow cleanups */ db_exec ("BEGIN; " "DROP TABLE search_folder_items; " "CREATE TABLE search_folder_items (" " node_id STRING," " parent_node_id STRING," " item_id INTEGER," " PRIMARY KEY (node_id, item_id)" ");" "REPLACE INTO info (name, value) VALUES ('schemaVersion',10); " "END;" ); searchFolderRebuild = TRUE; } } if (SCHEMA_TARGET_VERSION != db_get_schema_version ()) g_error ("Fatal: DB schema version not up-to-date! Running with --debug-db could give some hints about the problem!"); /* Vacuuming... */ db_vacuum (); /* Schema creation */ debug_start_measurement (DEBUG_DB); db_begin_transaction (); /* 1. Create tables if they do not exist yet */ db_exec ("CREATE TABLE items (" " item_id INTEGER," " parent_item_id INTEGER," " node_id TEXT," /* FIXME: migrate node ids to real integers */ " parent_node_id TEXT," /* FIXME: migrate node ids to real integers */ " title TEXT," " read INTEGER," " updated INTEGER," " popup INTEGER," " marked INTEGER," " source TEXT," " source_id TEXT," " valid_guid INTEGER," " description TEXT," " date INTEGER," " comment_feed_id TEXT," " comment INTEGER," " PRIMARY KEY (item_id)" ");"); db_exec ("CREATE INDEX items_idx ON items (source_id);"); db_exec ("CREATE INDEX items_idx2 ON items (comment_feed_id);"); db_exec ("CREATE INDEX items_idx3 ON items (node_id);"); db_exec ("CREATE INDEX items_idx4 ON items (item_id);"); db_exec ("CREATE INDEX items_idx5 ON items (parent_item_id);"); db_exec ("CREATE INDEX items_idx6 ON items (parent_node_id);"); db_exec ("CREATE TABLE metadata (" " item_id INTEGER," " nr INTEGER," " key TEXT," " value TEXT," " PRIMARY KEY (item_id, nr)" ");"); db_exec ("CREATE INDEX metadata_idx ON metadata (item_id);"); db_exec ("CREATE TABLE subscription (" " node_id STRING," " source STRING," " orig_source STRING," " filter_cmd STRING," " update_interval INTEGER," " default_interval INTEGER," " discontinued INTEGER," " available INTEGER," " PRIMARY KEY (node_id)" ");"); db_exec ("CREATE TABLE subscription_metadata (" " node_id STRING," " nr INTEGER," " key TEXT," " value TEXT," " PRIMARY KEY (node_id, nr)" ");"); db_exec ("CREATE INDEX subscription_metadata_idx ON subscription_metadata (node_id);"); db_exec ("CREATE TABLE node (" " node_id STRING," " parent_id STRING," " title STRING," " type INTEGER," " expanded INTEGER," " view_mode INTEGER," " sort_column INTEGER," " sort_reversed INTEGER," " PRIMARY KEY (node_id)" ");"); db_exec ("CREATE TABLE search_folder_items (" " node_id STRING," " parent_node_id STRING," " item_id INTEGER," " PRIMARY KEY (node_id, item_id)" ");"); db_end_transaction (); debug_end_measurement (DEBUG_DB, "table setup"); /* 2. Removing old triggers */ db_exec ("DROP TRIGGER item_insert;"); db_exec ("DROP TRIGGER item_update;"); db_exec ("DROP TRIGGER item_removal;"); db_exec ("DROP TRIGGER subscription_removal;"); /* 3. Cleanup of DB */ /* Note: do not check on subscriptions here, as non-subscription node types (e.g. news bin) do contain items too. */ debug0 (DEBUG_DB, "Checking for items without a feed list node...\n"); db_exec ("DELETE FROM items WHERE comment = 0 AND node_id NOT IN " "(SELECT node_id FROM node);"); debug0 (DEBUG_DB, "Checking for comments without parent item...\n"); db_exec ("BEGIN; " " CREATE TEMP TABLE tmp_id ( id );" " INSERT INTO tmp_id SELECT item_id FROM items WHERE comment = 1 AND parent_item_id NOT IN (SELECT item_id FROM items WHERE comment = 0);" /* limit to 1000 items as it is very slow */ " DELETE FROM items WHERE item_id IN (SELECT id FROM tmp_id LIMIT 1000);" " DROP TABLE tmp_id;" "END;"); debug0 (DEBUG_DB, "Checking for search folder items without a feed list node...\n"); db_exec ("DELETE FROM search_folder_items WHERE parent_node_id NOT IN " "(SELECT node_id FROM node);"); debug0 (DEBUG_DB, "Checking for search folder items without a search folder...\n"); db_exec ("DELETE FROM search_folder_items WHERE node_id NOT IN " "(SELECT node_id FROM node);"); debug0 (DEBUG_DB, "Checking for search folder with comments...\n"); db_exec ("DELETE FROM search_folder_items WHERE comment = 1;"); debug0 (DEBUG_DB, "Checking for subscription metadata without node...\n"); db_exec ("DELETE FROM subscription_metadata WHERE node_id NOT IN " "(SELECT node_id FROM node);"); debug0 (DEBUG_DB, "DB cleanup finished. Continuing startup."); /* 4. Creating triggers (after cleanup so it is not slowed down by triggers) */ /* This trigger does explicitely not remove comments! */ db_exec ("CREATE TRIGGER item_removal DELETE ON items " "BEGIN " " DELETE FROM metadata WHERE item_id = old.item_id; " " DELETE FROM search_folder_items WHERE item_id = old.item_id; " "END;"); db_exec ("CREATE TRIGGER subscription_removal DELETE ON subscription " "BEGIN " " DELETE FROM node WHERE node_id = old.node_id; " " DELETE FROM subscription_metadata WHERE node_id = old.node_id; " " DELETE FROM search_folder_items WHERE parent_node_id = old.node_id; " "END;"); /* Note: view counting triggers are set up in the view preparation code (see db_view_create()) */ /* prepare statements */ db_new_statement ("itemsetLoadStmt", "SELECT item_id FROM items WHERE node_id = ?"); db_new_statement ("itemsetLoadOffsetStmt", "SELECT item_id FROM items WHERE comment = 0 LIMIT ? OFFSET ?"); db_new_statement ("itemsetReadCountStmt", "SELECT COUNT(item_id) FROM items " "WHERE read = 0 AND node_id = ?"); db_new_statement ("itemsetItemCountStmt", "SELECT COUNT(item_id) FROM items " "WHERE node_id = ?"); db_new_statement ("itemsetRemoveStmt", "DELETE FROM items WHERE item_id = ? OR (comment = 1 AND parent_item_id = ?)"); db_new_statement ("itemsetRemoveAllStmt", "DELETE FROM items WHERE node_id = ? OR (comment = 1 AND parent_node_id = ?)"); db_new_statement ("itemsetMarkAllPopupStmt", "UPDATE items SET popup = 0 WHERE node_id = ?"); db_new_statement ("itemLoadStmt", "SELECT " "title," "read," "updated," "popup," "marked," "source," "source_id," "valid_guid," "description," "date," "comment_feed_id," "comment," "item_id," "parent_item_id, " "node_id, " "parent_node_id " " FROM items WHERE item_id = ?"); db_new_statement ("itemUpdateStmt", "REPLACE INTO items (" "title," "read," "updated," "popup," "marked," "source," "source_id," "valid_guid," "description," "date," "comment_feed_id," "comment," "item_id," "parent_item_id," "node_id," "parent_node_id" ") values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); db_new_statement ("itemStateUpdateStmt", "UPDATE items SET read=?, marked=?, updated=? " "WHERE item_id=?"); db_new_statement ("duplicatesFindStmt", "SELECT item_id FROM items WHERE source_id = ?"); db_new_statement ("duplicateNodesFindStmt", "SELECT node_id FROM items WHERE item_id IN " "(SELECT item_id FROM items WHERE source_id = ?)"); db_new_statement ("duplicatesMarkReadStmt", "UPDATE items SET read = 1, updated = 0 WHERE source_id = ?"); db_new_statement ("metadataLoadStmt", "SELECT key,value,nr FROM metadata WHERE item_id = ? ORDER BY nr"); db_new_statement ("metadataUpdateStmt", "REPLACE INTO metadata (item_id,nr,key,value) VALUES (?,?,?,?)"); db_new_statement ("subscriptionUpdateStmt", "REPLACE INTO subscription (" "node_id," "source," "orig_source," "filter_cmd," "update_interval," "default_interval," "discontinued," "available" ") VALUES (?,?,?,?,?,?,?,?)"); db_new_statement ("subscriptionRemoveStmt", "DELETE FROM subscription WHERE node_id = ?"); db_new_statement ("subscriptionLoadStmt", "SELECT " "node_id," "source," "orig_source," "filter_cmd," "update_interval," "default_interval," "discontinued," "available " "FROM subscription"); db_new_statement ("subscriptionMetadataLoadStmt", "SELECT key,value,nr FROM subscription_metadata WHERE node_id = ? ORDER BY nr"); db_new_statement ("subscriptionMetadataUpdateStmt", "REPLACE INTO subscription_metadata (node_id,nr,key,value) VALUES (?,?,?,?)"); db_new_statement ("nodeUpdateStmt", "REPLACE INTO node (node_id,parent_id,title,type,expanded,view_mode,sort_column,sort_reversed) VALUES (?,?,?,?,?,?,?,?)"); db_new_statement ("itemUpdateSearchFoldersStmt", "REPLACE INTO search_folder_items (node_id, parent_node_id, item_id) VALUES (?,?,?)"); db_new_statement ("itemRemoveFromSearchFolderStmt", "DELETE FROM search_folder_items WHERE node_id =? AND item_id = ?;"); db_new_statement ("searchFolderLoadStmt", "SELECT item_id FROM search_folder_items WHERE node_id = ?;"); db_new_statement ("searchFolderCountStmt", "SELECT count(item_id) FROM search_folder_items WHERE node_id = ?;"); db_new_statement ("nodeIdListStmt", "SELECT node_id FROM node;"); db_new_statement ("nodeRemoveStmt", "DELETE FROM node WHERE node_id = ?;"); g_assert (sqlite3_get_autocommit (db)); debug_exit ("db_init"); } void db_deinit (void) { debug_enter ("db_deinit"); if (FALSE == sqlite3_get_autocommit (db)) g_warning ("Fatal: DB not in auto-commit mode. This is a bug. Data may be lost!"); if (statements) { g_hash_table_destroy (statements); statements = NULL; } if (SQLITE_OK != sqlite3_close (db)) g_warning ("DB close failed: %s", sqlite3_errmsg (db)); db = NULL; debug_exit ("db_deinit"); } static GSList * db_metadata_list_append (GSList *metadata, const char *key, const char *value) { if (metadata_is_type_registered (key)) metadata = metadata_list_append (metadata, key, value); else debug1 (DEBUG_DB, "Trying to load unregistered metadata type %s from DB.", key); return metadata; } static GSList * db_item_metadata_load(itemPtr item) { GSList *metadata = NULL; sqlite3_stmt *stmt; gint res; stmt = db_get_statement ("metadataLoadStmt"); res = sqlite3_bind_int (stmt, 1, item->id); if (SQLITE_OK != res) g_error ("db_item_load_metadata: sqlite bind failed (error code %d)!", res); while (sqlite3_step (stmt) == SQLITE_ROW) { const char *key, *value; key = (const char *) sqlite3_column_text(stmt, 0); value = (const char *) sqlite3_column_text(stmt, 1); if (g_str_equal (key, "enclosure")) item->hasEnclosure = TRUE; metadata = db_metadata_list_append (metadata, key, value); } sqlite3_finalize (stmt); return metadata; } static void db_item_metadata_update_cb (const gchar *key, const gchar *value, guint index, gpointer user_data) { sqlite3_stmt *stmt; itemPtr item = (itemPtr)user_data; gint res; stmt = db_get_statement ("metadataUpdateStmt"); sqlite3_bind_int (stmt, 1, item->id); sqlite3_bind_int (stmt, 2, index); sqlite3_bind_text (stmt, 3, key, -1, SQLITE_TRANSIENT); sqlite3_bind_text (stmt, 4, value, -1, SQLITE_TRANSIENT); res = sqlite3_step (stmt); if (SQLITE_DONE != res) g_warning ("Update in \"metadata\" table failed (error code=%d, %s)", res, sqlite3_errmsg (db)); sqlite3_finalize (stmt); } static void db_item_metadata_update(itemPtr item) { metadata_list_foreach(item->metadata, db_item_metadata_update_cb, item); } /* Item structure loading methods */ static itemPtr db_load_item_from_columns (sqlite3_stmt *stmt) { const gchar *tmp; itemPtr item = item_new (); item->readStatus = sqlite3_column_int (stmt, 1)?TRUE:FALSE; item->updateStatus = sqlite3_column_int (stmt, 2)?TRUE:FALSE; item->popupStatus = sqlite3_column_int (stmt, 3)?TRUE:FALSE; item->flagStatus = sqlite3_column_int (stmt, 4)?TRUE:FALSE; item->validGuid = sqlite3_column_int (stmt, 7)?TRUE:FALSE; item->time = sqlite3_column_int64 (stmt, 9); item->commentFeedId = g_strdup ((const gchar *) sqlite3_column_text (stmt, 10)); item->isComment = sqlite3_column_int (stmt, 11); item->id = sqlite3_column_int (stmt, 12); item->parentItemId = sqlite3_column_int (stmt, 13); item->nodeId = g_strdup ((const gchar *) sqlite3_column_text (stmt, 14)); item->parentNodeId = g_strdup ((const gchar *) sqlite3_column_text (stmt, 15)); item->title = g_strdup ((const gchar *) sqlite3_column_text(stmt, 0)); item->sourceId = g_strdup ((const gchar *) sqlite3_column_text(stmt, 6)); tmp = (const gchar *) sqlite3_column_text(stmt, 5); if (tmp) item->source = g_strdup (tmp); tmp = (const gchar *) sqlite3_column_text(stmt, 8); if (tmp) item->description = g_strdup (tmp); else item->description = g_strdup (""); item->metadata = db_item_metadata_load (item); return item; } itemSetPtr db_itemset_load (const gchar *id) { sqlite3_stmt *stmt; itemSetPtr itemSet; debug1 (DEBUG_DB, "loading itemset for node \"%s\"", id); itemSet = g_new0 (struct itemSet, 1); itemSet->nodeId = (gchar *)id; stmt = db_get_statement ("itemsetLoadStmt"); sqlite3_bind_text (stmt, 1, id, -1, SQLITE_TRANSIENT); while (sqlite3_step (stmt) == SQLITE_ROW) { itemSet->ids = g_list_append (itemSet->ids, GUINT_TO_POINTER (sqlite3_column_int (stmt, 0))); } sqlite3_finalize (stmt); debug0 (DEBUG_DB, "loading of itemset finished"); return itemSet; } itemPtr db_item_load (gulong id) { sqlite3_stmt *stmt; itemPtr item = NULL; debug1 (DEBUG_DB, "loading item %lu", id); debug_start_measurement (DEBUG_DB); stmt = db_get_statement ("itemLoadStmt"); sqlite3_bind_int (stmt, 1, id); if (sqlite3_step (stmt) == SQLITE_ROW) { item = db_load_item_from_columns (stmt); (void) sqlite3_step (stmt); } else { debug1 (DEBUG_DB, "Could not load item with id %lu!", id); } sqlite3_finalize (stmt); debug_end_measurement (DEBUG_DB, "item load"); return item; } /* Item modification methods */ static int db_item_set_id_cb (void *user_data, int count, char **values, char **columns) { itemPtr item = (itemPtr)user_data; g_assert(NULL != values); if(values[0]) { /* the result in *values should be MAX(item_id), so adding one should give a unique new id */ item->id = 1 + atol(values[0]); } else { /* empty table causes no result in values[0]... */ item->id = 1; } debug2(DEBUG_DB, "new item id=%lu for \"%s\"", item->id, item->title); return 0; } static void db_item_set_id (itemPtr item) { gchar *sql, *err; gint res; g_assert (0 == item->id); sql = sqlite3_mprintf ("SELECT MAX(item_id) FROM items"); res = sqlite3_exec (db, sql, db_item_set_id_cb, item, &err); if (SQLITE_OK != res) g_warning ("Select failed (%s) SQL: %s", err, sql); sqlite3_free (sql); sqlite3_free (err); } static void db_item_search_folders_update (itemPtr item) { sqlite3_stmt *stmt; gint res; GSList *iter, *list; /* Bail on comments which are not covered by search folders */ if (item->isComment) return; /* Add item to all search folders it now belongs to */ stmt = db_get_statement ("itemUpdateSearchFoldersStmt"); iter = list = vfolder_get_all_with_item_id (item); while (iter) { vfolderPtr vfolder = (vfolderPtr)iter->data; sqlite3_reset (stmt); sqlite3_bind_text (stmt, 1, vfolder->node->id, -1, SQLITE_TRANSIENT); sqlite3_bind_text (stmt, 2, item->nodeId, -1, SQLITE_TRANSIENT); sqlite3_bind_int (stmt, 3, item->id); res = sqlite3_step (stmt); if (SQLITE_DONE != res) g_warning ("item add to search folder failed (error code=%d, %s)", res, sqlite3_errmsg (db)); iter = g_slist_next (iter); } g_slist_free (list); sqlite3_finalize (stmt); /* Remove item from all search folders it does not belong (we do not check if it is in there, just remove it) */ stmt = db_get_statement ("itemRemoveFromSearchFolderStmt"); iter = list = vfolder_get_all_without_item_id (item); while (iter) { vfolderPtr vfolder = (vfolderPtr)iter->data; sqlite3_reset (stmt); sqlite3_bind_text (stmt, 1, vfolder->node->id, -1, SQLITE_TRANSIENT); sqlite3_bind_int (stmt, 2, item->id); res = sqlite3_step (stmt); if (SQLITE_DONE != res) g_warning ("item remove from search folder failed (error code=%d, %s)", res, sqlite3_errmsg (db)); iter = g_slist_next (iter); } g_slist_free (list); sqlite3_finalize (stmt); } void db_item_update (itemPtr item) { sqlite3_stmt *stmt; gint res; debug2 (DEBUG_DB, "update of item \"%s\" (id=%lu)", item->title, item->id); debug_start_measurement (DEBUG_DB); db_begin_transaction (); if (!item->id) { db_item_set_id (item); debug1(DEBUG_DB, "insert into table \"items\": \"%s\"", item->title); } /* Update the item... */ stmt = db_get_statement ("itemUpdateStmt"); sqlite3_bind_text (stmt, 1, item->title, -1, SQLITE_TRANSIENT); sqlite3_bind_int (stmt, 2, item->readStatus?1:0); sqlite3_bind_int (stmt, 3, item->updateStatus?1:0); sqlite3_bind_int (stmt, 4, item->popupStatus?1:0); sqlite3_bind_int (stmt, 5, item->flagStatus?1:0); sqlite3_bind_text (stmt, 6, item->source, -1, SQLITE_TRANSIENT); sqlite3_bind_text (stmt, 7, item->sourceId, -1, SQLITE_TRANSIENT); sqlite3_bind_int (stmt, 8, item->validGuid?1:0); sqlite3_bind_text (stmt, 9, item->description, -1, SQLITE_TRANSIENT); sqlite3_bind_int64 (stmt, 10, item->time); sqlite3_bind_text (stmt, 11, item->commentFeedId, -1, SQLITE_TRANSIENT); sqlite3_bind_int (stmt, 12, item->isComment?1:0); sqlite3_bind_int (stmt, 13, item->id); sqlite3_bind_int (stmt, 14, item->parentItemId); sqlite3_bind_text (stmt, 15, item->nodeId, -1, SQLITE_TRANSIENT); sqlite3_bind_text (stmt, 16, item->parentNodeId, -1, SQLITE_TRANSIENT); res = sqlite3_step (stmt); if (SQLITE_DONE != res) g_warning ("item update failed (error code=%d, %s)", res, sqlite3_errmsg (db)); sqlite3_finalize (stmt); db_item_metadata_update (item); db_item_search_folders_update (item); db_end_transaction (); debug_end_measurement (DEBUG_DB, "item update"); } void db_item_state_update (itemPtr item) { sqlite3_stmt *stmt; if (!item->id) { db_item_update (item); return; } db_item_search_folders_update (item); debug_start_measurement (DEBUG_DB); stmt = db_get_statement ("itemStateUpdateStmt"); sqlite3_bind_int (stmt, 1, item->readStatus?1:0); sqlite3_bind_int (stmt, 2, item->flagStatus?1:0); sqlite3_bind_int (stmt, 3, item->updateStatus?1:0); sqlite3_bind_int (stmt, 4, item->id); if (sqlite3_step (stmt) != SQLITE_DONE) g_warning ("item state update failed (%s)", sqlite3_errmsg (db)); sqlite3_finalize (stmt); debug_end_measurement (DEBUG_DB, "item state update"); } void db_item_remove (gulong id) { sqlite3_stmt *stmt; gint res; debug1 (DEBUG_DB, "removing item with id %lu", id); stmt = db_get_statement ("itemsetRemoveStmt"); sqlite3_bind_int (stmt, 1, id); sqlite3_bind_int (stmt, 2, id); res = sqlite3_step (stmt); if (SQLITE_DONE != res) g_warning ("item remove failed (error code=%d, %s)", res, sqlite3_errmsg (db)); sqlite3_finalize (stmt); } GSList * db_item_get_duplicates (const gchar *guid) { GSList *duplicates = NULL; sqlite3_stmt *stmt; gint res; debug_start_measurement (DEBUG_DB); stmt = db_get_statement ("duplicatesFindStmt"); res = sqlite3_bind_text (stmt, 1, guid, -1, SQLITE_TRANSIENT); if (SQLITE_OK != res) g_error ("db_item_get_duplicates: sqlite bind failed (error code %d)!", res); while (sqlite3_step (stmt) == SQLITE_ROW) { gulong id = sqlite3_column_int (stmt, 0); duplicates = g_slist_append (duplicates, GUINT_TO_POINTER (id)); } sqlite3_finalize (stmt); debug_end_measurement (DEBUG_DB, "searching for duplicates"); return duplicates; } GSList * db_item_get_duplicate_nodes (const gchar *guid) { GSList *duplicates = NULL; sqlite3_stmt *stmt; gint res; debug_start_measurement (DEBUG_DB); stmt = db_get_statement ("duplicateNodesFindStmt"); res = sqlite3_bind_text (stmt, 1, guid, -1, SQLITE_TRANSIENT); if (SQLITE_OK != res) g_error ("db_item_get_duplicates: sqlite bind failed (error code %d)!", res); while (sqlite3_step (stmt) == SQLITE_ROW) { gchar *id = g_strdup((const gchar *) sqlite3_column_text (stmt, 0)); duplicates = g_slist_append (duplicates, id); } sqlite3_finalize (stmt); debug_end_measurement (DEBUG_DB, "searching for duplicates"); return duplicates; } void db_itemset_remove_all (const gchar *id) { sqlite3_stmt *stmt; gint res; debug1(DEBUG_DB, "removing all items for item set with %s", id); stmt = db_get_statement ("itemsetRemoveAllStmt"); sqlite3_bind_text (stmt, 1, id, -1, SQLITE_TRANSIENT); sqlite3_bind_text (stmt, 2, id, -1, SQLITE_TRANSIENT); res = sqlite3_step (stmt); if (SQLITE_DONE != res) g_warning ("removing all items failed (error code=%d, %s)", res, sqlite3_errmsg (db)); sqlite3_finalize (stmt); } void db_itemset_mark_all_popup (const gchar *id) { sqlite3_stmt *stmt; gint res; debug1 (DEBUG_DB, "marking all items popup for item set with %s", id); stmt = db_get_statement ("itemsetMarkAllPopupStmt"); sqlite3_bind_text (stmt, 1, id, -1, SQLITE_TRANSIENT); res = sqlite3_step (stmt); if (SQLITE_DONE != res) g_warning ("marking all items popup failed (error code=%d, %s)", res, sqlite3_errmsg(db)); sqlite3_finalize (stmt); } gboolean db_itemset_get (itemSetPtr itemSet, gulong offset, guint limit) { sqlite3_stmt *stmt; gboolean success = FALSE; debug2 (DEBUG_DB, "loading %d items offset %lu", limit, offset); stmt = db_get_statement ("itemsetLoadOffsetStmt"); sqlite3_bind_int (stmt, 1, limit); sqlite3_bind_int (stmt, 2, offset); while (sqlite3_step (stmt) == SQLITE_ROW) { itemSet->ids = g_list_append (itemSet->ids, GUINT_TO_POINTER (sqlite3_column_int (stmt, 0))); success = TRUE; } sqlite3_finalize (stmt); return success; } /* Statistics interface */ guint db_itemset_get_unread_count (const gchar *id) { sqlite3_stmt *stmt; gint res; guint count = 0; debug_start_measurement (DEBUG_DB); stmt = db_get_statement ("itemsetReadCountStmt"); sqlite3_bind_text (stmt, 1, id, -1, SQLITE_TRANSIENT); res = sqlite3_step (stmt); if (SQLITE_ROW == res) count = sqlite3_column_int (stmt, 0); else g_warning("item read counting failed (error code=%d, %s)", res, sqlite3_errmsg (db)); sqlite3_finalize (stmt); debug_end_measurement (DEBUG_DB, "counting unread items"); return count; } guint db_itemset_get_item_count (const gchar *id) { sqlite3_stmt *stmt; gint res; guint count = 0; debug_start_measurement (DEBUG_DB); stmt = db_get_statement ("itemsetItemCountStmt"); sqlite3_bind_text (stmt, 1, id, -1, SQLITE_TRANSIENT); res = sqlite3_step (stmt); if (SQLITE_ROW == res) count = sqlite3_column_int (stmt, 0); else g_warning ("item counting failed (error code=%d, %s)", res, sqlite3_errmsg (db)); sqlite3_finalize (stmt); debug_end_measurement (DEBUG_DB, "counting items"); return count; } /* This method is only used for migration from old schema versions */ static void db_view_remove_triggers (const gchar *id) { gchar *sql, *err; gint res; err = NULL; sql = sqlite3_mprintf ("DROP TRIGGER view_%s_insert_before;", id); res = sqlite3_exec (db, sql, NULL, NULL, &err); if (SQLITE_OK != res) debug2 (DEBUG_DB, "Dropping trigger failed (%s) SQL: %s", err, sql); sqlite3_free (sql); sqlite3_free (err); err = NULL; sql = sqlite3_mprintf ("DROP TRIGGER view_%s_insert_after;", id); res = sqlite3_exec (db, sql, NULL, NULL, &err); if (SQLITE_OK != res) debug2 (DEBUG_DB, "Dropping trigger failed (%s) SQL: %s", err, sql); sqlite3_free (sql); sqlite3_free (err); err = NULL; sql = sqlite3_mprintf ("DROP TRIGGER view_%s_delete;", id); res = sqlite3_exec (db, sql, NULL, NULL, &err); if (SQLITE_OK != res) debug2 (DEBUG_DB, "Dropping trigger failed (%s) SQL: %s", err, sql); sqlite3_free (sql); sqlite3_free (err); err = NULL; sql = sqlite3_mprintf ("DROP TRIGGER view_%s_update_before;", id); res = sqlite3_exec (db, sql, NULL, NULL, &err); if (SQLITE_OK != res) debug2 (DEBUG_DB, "Dropping trigger failed (%s) SQL: %s", err, sql); sqlite3_free (sql); sqlite3_free (err); err = NULL; sql = sqlite3_mprintf ("DROP TRIGGER view_%s_update_after;", id); res = sqlite3_exec (db, sql, NULL, NULL, &err); if (SQLITE_OK != res) debug2 (DEBUG_DB, "Dropping trigger failed (%s) SQL: %s", err, sql); sqlite3_free (sql); sqlite3_free (err); } /* This method is only used for migration from old schema versions */ static void db_view_remove (const gchar *id) { gchar *sql, *err; gint res; debug1 (DEBUG_DB, "Dropping view \"%s\"", id); db_view_remove_triggers (id); /* Note: no need to remove anything from view_state, as this is dropped on schema migration and this method is only used during schema migration to remove all views. */ sql = sqlite3_mprintf ("DROP VIEW view_%s;", id); res = sqlite3_exec (db, sql, NULL, NULL, &err); if (SQLITE_OK != res) g_warning ("Dropping view failed (%s) SQL: %s", err, sql); sqlite3_free (sql); sqlite3_free (err); } itemSetPtr db_search_folder_load (const gchar *id) { gint res; sqlite3_stmt *stmt; itemSetPtr itemSet; debug1 (DEBUG_DB, "loading search folder node \"%s\"", id); stmt = db_get_statement ("searchFolderLoadStmt"); res = sqlite3_bind_text (stmt, 1, id, -1, SQLITE_TRANSIENT); if (SQLITE_OK != res) g_error ("db_search_folder_load: sqlite bind failed (error code %d)!", res); itemSet = g_new0 (struct itemSet, 1); itemSet->nodeId = (gchar *)id; while (sqlite3_step (stmt) == SQLITE_ROW) { itemSet->ids = g_list_append (itemSet->ids, GUINT_TO_POINTER (sqlite3_column_int (stmt, 0))); } sqlite3_finalize (stmt); debug1 (DEBUG_DB, "loading search folder finished (%d items)", g_list_length (itemSet->ids)); return itemSet; } void db_search_folder_reset (const gchar *id) { gchar *sql, *err; gint res; debug1 (DEBUG_DB, "resetting search folder node \"%s\"", id); sql = sqlite3_mprintf ("DELETE FROM search_folder_items WHERE node_id = '%s';", id); res = sqlite3_exec (db, sql, NULL, NULL, &err); if (SQLITE_OK != res) g_warning ("resetting search folder failed (%s) SQL: %s", err, sql); sqlite3_free (sql); sqlite3_free (err); debug0 (DEBUG_DB, "removing search folder finished"); } void db_search_folder_add_items (const gchar *id, GSList *items) { sqlite3_stmt *stmt; GSList *iter; gint res; debug2 (DEBUG_DB, "add %d items to search folder node \"%s\"", g_slist_length (items), id); stmt = db_get_statement ("itemUpdateSearchFoldersStmt"); iter = items; while (iter) { itemPtr item = (itemPtr)iter->data; sqlite3_reset (stmt); sqlite3_bind_text (stmt, 1, id, -1, SQLITE_TRANSIENT); sqlite3_bind_text (stmt, 2, item->nodeId, -1, SQLITE_TRANSIENT); sqlite3_bind_int (stmt, 3, item->id); res = sqlite3_step (stmt); if (SQLITE_DONE != res) g_error ("db_search_folder_add_items: sqlite3_step (error code %d)!", res); iter = g_slist_next (iter); } sqlite3_finalize (stmt); debug0 (DEBUG_DB, "adding items to search folder finished"); } guint db_search_folder_get_item_count (const gchar *id) { sqlite3_stmt *stmt; gint res; guint count = 0; debug_start_measurement (DEBUG_DB); stmt = db_get_statement ("searchFolderCountStmt"); sqlite3_bind_text (stmt, 1, id, -1, SQLITE_TRANSIENT); res = sqlite3_step (stmt); if (SQLITE_ROW == res) count = sqlite3_column_int (stmt, 0); else g_warning("item read counting failed (error code=%d, %s)", res, sqlite3_errmsg (db)); sqlite3_finalize (stmt); debug_end_measurement (DEBUG_DB, "counting unread items"); return count; } static GSList * db_subscription_metadata_load (const gchar *id) { GSList *metadata = NULL; sqlite3_stmt *stmt; gint res; stmt = db_get_statement ("subscriptionMetadataLoadStmt"); res = sqlite3_bind_text (stmt, 1, id, -1, SQLITE_TRANSIENT); if (SQLITE_OK != res) g_error ("db_subscription_metadata_load: sqlite bind failed (error code %d)!", res); while (sqlite3_step (stmt) == SQLITE_ROW) { metadata = db_metadata_list_append (metadata, (const char *) sqlite3_column_text(stmt, 0), (const char *) sqlite3_column_text(stmt, 1)); } sqlite3_finalize (stmt); return metadata; } static void db_subscription_metadata_update_cb (const gchar *key, const gchar *value, guint index, gpointer user_data) { sqlite3_stmt *stmt; nodePtr node = (nodePtr)user_data; gint res; stmt = db_get_statement ("subscriptionMetadataUpdateStmt"); sqlite3_bind_text (stmt, 1, node->id, -1, SQLITE_TRANSIENT); sqlite3_bind_int (stmt, 2, index); sqlite3_bind_text (stmt, 3, key, -1, SQLITE_TRANSIENT); sqlite3_bind_text (stmt, 4, value, -1, SQLITE_TRANSIENT); res = sqlite3_step (stmt); if (SQLITE_DONE != res) g_warning ("Update in \"subscription_metadata\" table failed (error code=%d, %s)", res, sqlite3_errmsg (db)); sqlite3_finalize (stmt); } static void db_subscription_metadata_update (subscriptionPtr subscription) { metadata_list_foreach (subscription->metadata, db_subscription_metadata_update_cb, subscription->node); } void db_subscription_load (subscriptionPtr subscription) { subscription->metadata = db_subscription_metadata_load (subscription->node->id); } void db_subscription_update (subscriptionPtr subscription) { sqlite3_stmt *stmt; gint res; debug1 (DEBUG_DB, "updating subscription info %s", subscription->node->id); debug_start_measurement (DEBUG_DB); stmt = db_get_statement ("subscriptionUpdateStmt"); sqlite3_bind_text (stmt, 1, subscription->node->id, -1, SQLITE_TRANSIENT); sqlite3_bind_text (stmt, 2, subscription->source, -1, SQLITE_TRANSIENT); sqlite3_bind_text (stmt, 3, subscription->origSource, -1, SQLITE_TRANSIENT); sqlite3_bind_text (stmt, 4, subscription->filtercmd, -1, SQLITE_TRANSIENT); sqlite3_bind_int (stmt, 5, subscription->updateInterval); sqlite3_bind_int (stmt, 6, subscription->defaultInterval); sqlite3_bind_int (stmt, 7, subscription->discontinued?1:0); sqlite3_bind_int (stmt, 8, (subscription->updateError || subscription->httpError || subscription->filterError)?1:0); res = sqlite3_step (stmt); if (SQLITE_DONE != res) g_warning ("Could not update subscription info for node id %s in DB (error code %d)!", subscription->node->id, res); sqlite3_finalize (stmt); db_subscription_metadata_update (subscription); debug_end_measurement (DEBUG_DB, "subscription update"); } void db_subscription_remove (const gchar *id) { sqlite3_stmt *stmt; gint res; debug1 (DEBUG_DB, "removing subscription %s", id); debug_start_measurement (DEBUG_DB); stmt = db_get_statement ("subscriptionRemoveStmt"); sqlite3_bind_text (stmt, 1, id, -1, SQLITE_TRANSIENT); res = sqlite3_step (stmt); if (SQLITE_DONE != res) g_warning ("Could not remove subscription %s from DB (error code %d)!", id, res); sqlite3_finalize (stmt); debug_end_measurement (DEBUG_DB, "subscription remove"); } void db_node_update (nodePtr node) { sqlite3_stmt *stmt; gint res; debug1 (DEBUG_DB, "updating node info %s", node->id); debug_start_measurement (DEBUG_DB); stmt = db_get_statement ("nodeUpdateStmt"); sqlite3_bind_text (stmt, 1, node->id, -1, SQLITE_TRANSIENT); sqlite3_bind_text (stmt, 2, node->parent->id, -1, SQLITE_TRANSIENT); sqlite3_bind_text (stmt, 3, node->title, -1, SQLITE_TRANSIENT); sqlite3_bind_text (stmt, 4, node_type_to_str (node), -1, SQLITE_TRANSIENT); sqlite3_bind_int (stmt, 5, node->expanded?1:0); sqlite3_bind_int (stmt, 6, node->viewMode); sqlite3_bind_int (stmt, 7, node->sortColumn); sqlite3_bind_int (stmt, 8, node->sortReversed?1:0); res = sqlite3_step (stmt); if (SQLITE_DONE != res) g_warning ("Could not update node info %s in DB (error code %d)!", node->id, res); sqlite3_finalize (stmt); debug_end_measurement (DEBUG_DB, "node update"); } static gboolean db_node_find (nodePtr node, gpointer id) { GSList *iter; if (g_str_equal (node->id, (gchar *)id)) return TRUE; iter = node->children; while (iter) { if (db_node_find ((nodePtr)iter->data, id)) return TRUE; iter = g_slist_next (iter); } return FALSE; } static void db_node_remove (const gchar *id) { sqlite3_stmt *stmt; gint res; stmt = db_get_statement ("nodeRemoveStmt"); sqlite3_bind_text (stmt, 1, id, -1, SQLITE_TRANSIENT); res = sqlite3_step (stmt); if (SQLITE_DONE != res) g_warning ("Could not remove node %s in DB (error code %d)!", id, res); sqlite3_finalize (stmt); } void db_node_cleanup (nodePtr root) { sqlite3_stmt *stmt; debug0 (DEBUG_DB, "Cleaning node ids..."); /* Fetch all node ids */ stmt = db_get_statement ("nodeIdListStmt"); while (sqlite3_step (stmt) == SQLITE_ROW) { /* Drop node ids not in feed list anymore */ const gchar *id = (const gchar *) sqlite3_column_text (stmt, 0); if (id && !db_node_find (root, (gpointer)id)) { db_subscription_remove (id); /* in case it is a subscription */ db_node_remove (id); /* in case it is a folder */ } } sqlite3_finalize (stmt); } liferea-1.12.7/src/db.h000066400000000000000000000120521352135647700145530ustar00rootroot00000000000000/** * @file db.h sqlite backend * * Copyright (C) 2007-2011 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _DB_H #define _DB_H #include #include "item.h" #include "itemset.h" #include "subscription.h" #include "update.h" /** * Open and initialize the DB. */ void db_init (void); /** * Clean up and close the DB. */ void db_deinit (void); /* item set access (note: item sets are identified by the node id string) */ /** * Loads all items of the given node id. * * @param id the node id * * @returns a newly allocated item set, must be freed using itemset_free() */ itemSetPtr db_itemset_load (const gchar *id); /** * Removes all items of the given item set from the DB. * * @param id the node id */ void db_itemset_remove_all (const gchar *id); /** * Mass items state changing methods. Mark all items of * a given item set as old/popup. * * @param id the node id */ void db_itemset_mark_all_popup (const gchar *id); /** * Returns the number of unread items for the given item set. * * @param id the node id * * @returns the number of unread items */ guint db_itemset_get_unread_count (const gchar *id); /** * Returns the number of items for the given item set. * * @param id the node id * * @returns the number of items */ guint db_itemset_get_item_count (const gchar *id); /** * Returns a batch of items starting with the given * offset and no more than the given limit. * * To be used for batched item loading (search folder loaders) * * @param itemSet an itemset to add the items to * @param offset the current offset * @param limit maximum number of items to fetch * * @returns FALSE if no more items to fetch */ gboolean db_itemset_get (itemSetPtr itemSet, gulong offset, guint limit); /* item access (note: items are identified by the numeric item id) */ /** * Loads the item specified by id from the DB. * * @param id the id * * @returns new item structure, must be free'd using item_unload() */ itemPtr db_item_load(gulong id); /** * Updates all attributes of the item in the DB * * @param item the item */ void db_item_update(itemPtr item); /** * Removes the given item from the DB * * @param item the item */ void db_item_remove(gulong id); /** * Update the attributes related to item state only. * * @param item the item */ void db_item_state_update (itemPtr item); /** * Returns a list of item ids with the given GUID. * * @param guid the item GUID * * @returns a list of item ids */ GSList * db_item_get_duplicates(const gchar *guid); /** * Returns a list of node ids containing an item with the given GUID. * * @param guid the item GUID * * @returns a list of node ids (to be free'd using g_free) */ GSList * db_item_get_duplicate_nodes(const gchar *guid); /** * Returns an item set of all items for the given search folder id. * * @param id the search folder id * * @returns a new item set (to be free'd using itemset_free()) */ itemSetPtr db_search_folder_load (const gchar *id); /** * Removes all items from the given search folder * * @param id the search folder id */ void db_search_folder_reset (const gchar *id); /** * Add a list of item ids to a search folder. * * @param id the search folder id * @param items the list of items */ void db_search_folder_add_items (const gchar *id, GSList *items); /** * Returns the number of items for the given search folder. * * @param id the node id * * @returns the number of items */ guint db_search_folder_get_item_count (const gchar *id); /** * Load the metadata and update state of the given subscription. * * @param subscription the subscription whose info to load */ void db_subscription_load (subscriptionPtr subscription); /** * Updates (or inserts) the properties of the given subscription in the DB. * * @param subscription the subscription */ void db_subscription_update (subscriptionPtr subscription); /** * Removes the subscription with the given id from the DB * * @param id the node id */ void db_subscription_remove (const gchar *id); /** * Updates the given nodes properties in the DB. * * @param node the node */ void db_node_update (nodePtr node); /** * Clean old nodes from the DB by comparing all DB nodes * against the OPML feed list. * * @param root the root node */ void db_node_cleanup (nodePtr root); #endif liferea-1.12.7/src/dbus.c000066400000000000000000000147461352135647700151320ustar00rootroot00000000000000/** * @file dbus.c DBUS interface to control Liferea * * Copyright (C) 2007 mooonz * Copyright (C) 2010 Emilio Pozuelo Monfort * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "dbus.h" #include "debug.h" #include "feedlist.h" #include "net_monitor.h" #include "subscription.h" #include "ui/liferea_shell.h" static GDBusNodeInfo *introspection_data = NULL; static const gchar introspection_xml[] = "" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ""; G_DEFINE_TYPE(LifereaDBus, liferea_dbus, G_TYPE_OBJECT) static gboolean liferea_dbus_ping (LifereaDBus *self, GError **err) { return TRUE; } static gboolean liferea_dbus_set_online (LifereaDBus *self, gboolean online, GError **err) { network_monitor_set_online (online); return TRUE; } static gboolean liferea_dbus_subscribe (LifereaDBus *self, const gchar *url, GError **err) { liferea_shell_present (); feedlist_add_subscription (url, NULL, NULL, 0); return TRUE; } static guint liferea_dbus_get_unread_items (LifereaDBus *self, GError **err) { return feedlist_get_unread_item_count (); } static guint liferea_dbus_get_new_items (LifereaDBus *self, GError **err) { return feedlist_get_new_item_count (); } static gboolean liferea_dbus_refresh (LifereaDBus *self, GError **err) { node_update_subscription (feedlist_get_root (), GUINT_TO_POINTER (0)); return TRUE; } static void handle_method_call (GDBusConnection *connection, const gchar *sender, const gchar *object_path, const gchar *interface_name, const gchar *method_name, GVariant *parameters, GDBusMethodInvocation *invocation, gpointer user_data) { LifereaDBus *self = user_data; gboolean res; if (g_str_equal (method_name, "Ping")) { res = liferea_dbus_ping (self, NULL); g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", res)); } else if (g_str_equal (method_name, "SetOnline") && g_variant_is_of_type (parameters, G_VARIANT_TYPE ("(b)"))) { gboolean set_online; g_variant_get (parameters, "(b)", &set_online); res = liferea_dbus_set_online (self, set_online, NULL); g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", res)); } else if (g_str_equal (method_name, "Subscribe") && g_variant_is_of_type (parameters, G_VARIANT_TYPE ("(s)"))) { const gchar *url; g_variant_get (parameters, "(s)", &url); res = liferea_dbus_subscribe (self, url, NULL); g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", res)); } else if (g_str_equal (method_name, "GetUnreadItems")) { guint num = liferea_dbus_get_unread_items (self, NULL); g_dbus_method_invocation_return_value (invocation, g_variant_new ("(i)", num)); } else if (g_str_equal (method_name, "GetNewItems")) { guint num = liferea_dbus_get_new_items (self, NULL); g_dbus_method_invocation_return_value (invocation, g_variant_new ("(i)", num)); } else if (g_str_equal (method_name, "Refresh")) { res = liferea_dbus_refresh (self, NULL); g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", res)); } else { g_warning ("Unknown method name or unknown parameters: %s", method_name); } } static const GDBusInterfaceVTable interface_vtable = { handle_method_call, NULL, NULL }; static void on_bus_acquired (GDBusConnection *connection, const gchar *name, gpointer user_data) { guint id; debug_enter ("on_bus_acquired"); /* parse introspection data */ introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL); id = g_dbus_connection_register_object (connection, LF_DBUS_PATH, introspection_data->interfaces[0], &interface_vtable, NULL, /* user_data */ NULL, /* user_data_free_func */ NULL); /* GError** */ g_assert (id > 0); debug_exit ("on_bus_acquired"); } static void on_name_acquired (GDBusConnection *connection, const gchar *name, gpointer user_data) { debug1 (DEBUG_GUI, "Acquired the name %s on the session bus\n", name); } static void on_name_lost (GDBusConnection *connection, const gchar *name, gpointer user_data) { debug1 (DEBUG_GUI, "Lost the name %s on the session bus\n", name); } static void liferea_dbus_init(LifereaDBus *obj) { } static void liferea_dbus_dispose (GObject *obj) { LifereaDBus *self = LIFEREA_DBUS (obj); g_bus_unown_name (self->owner_id); G_OBJECT_CLASS (liferea_dbus_parent_class)->dispose (obj); } static void liferea_dbus_class_init (LifereaDBusClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->dispose = liferea_dbus_dispose; } LifereaDBus* liferea_dbus_new (void) { LifereaDBus *obj = NULL; debug_enter ("liferea_dbus_new"); obj = (LifereaDBus*)g_object_new(LIFEREA_DBUS_TYPE, NULL); obj->owner_id = g_bus_own_name (G_BUS_TYPE_SESSION, LF_DBUS_SERVICE, G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT, on_bus_acquired, on_name_acquired, on_name_lost, NULL, NULL); debug_exit ("liferea_dbus_new"); return obj; } liferea-1.12.7/src/dbus.h000066400000000000000000000035741352135647700151340ustar00rootroot00000000000000/** * @file dbus.c DBUS interface to control Liferea * * Copyright (C) 2007 mooonz * Copyright (C) 2010 Emilio Pozuelo Monfort * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __LIFEREA_DBUS_H__ #define __LIFEREA_DBUS_H__ #include #define LF_DBUS_PATH "/org/gnome/feed/Reader" #define LF_DBUS_SERVICE "org.gnome.feed.Reader" typedef struct _LifereaDBus { GObject parent; guint owner_id; } LifereaDBus; typedef struct _LifereaDBusClass { GObjectClass parent; } LifereaDBusClass; GType liferea_dbus_get_type (void); #define LIFEREA_DBUS_TYPE (liferea_dbus_get_type ()) #define LIFEREA_DBUS(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), LIFEREA_DBUS_TYPE, LifereaDBus)) #define LIFEREA_DBUS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LIFEREA_DBUS_TYPE, LifereaDBusClass)) #define IS_LIFEREA_DBUS(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), LIFEREA_DBUS_TYPE)) #define IS_LIFEREA_DBUS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LIFEREA_DBUS_TYPE)) #define LIFEREA_DBUS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LIFEREA_DBUS_TYPE, LifereaDBusClass)) LifereaDBus* liferea_dbus_new (void); #endif liferea-1.12.7/src/debug.c000066400000000000000000000124461352135647700152560ustar00rootroot00000000000000/* * Debugging output support. This was originally written for * * Pan - A Newsreader for Gtk+ * Copyright (C) 2002 Charles Kerr * * Liferea specific adaptations * Copyright (C) 2004-2012 Lars Windolf * * 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; version 2 of the License. * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include "debug.h" #if defined (G_OS_WIN32) && !defined (HAVE_LOCALTIME_R) #define localtime_r(t,o) localtime_s (o,t) #endif unsigned long debug_level = 0; static GHashTable * t2d = NULL; /**< per thread call tree depth */ static GHashTable *startTimes = NULL; static const char * debug_get_prefix (unsigned long flag) { if (flag & DEBUG_CACHE) return "CACHE "; if (flag & DEBUG_CONF) return "CONF "; if (flag & DEBUG_UPDATE) return "UPDATE "; if (flag & DEBUG_PARSING) return "PARSING"; if (flag & DEBUG_GUI) return "GUI "; if (flag & DEBUG_HTML) return "HTML "; if (flag & DEBUG_TRACE) return "TRACE "; if (flag & DEBUG_NET) return "NET "; if (flag & DEBUG_DB) return "DB "; if (flag & DEBUG_PERF) return "PERF "; if (flag & DEBUG_VFOLDER) return "VFOLDER"; return ""; } static void debug_set_depth (gint newDepth) { const gpointer self = g_thread_self (); /* Track per-thread call tree depth */ if (t2d == NULL) t2d = g_hash_table_new (g_direct_hash, g_direct_equal); if (newDepth < 0) g_hash_table_insert(t2d, self, GINT_TO_POINTER(0)); else g_hash_table_insert(t2d, self, GINT_TO_POINTER(newDepth)); } static gint debug_get_depth (void) { const gpointer self = g_thread_self (); if (!t2d) return 0; return GPOINTER_TO_INT (g_hash_table_lookup (t2d, self)); } void debug_start_measurement_func (const char * function) { GTimeVal *startTime = NULL; if (!function) return; if (!startTimes) startTimes = g_hash_table_new (g_str_hash, g_str_equal); startTime = (GTimeVal *) g_hash_table_lookup (startTimes, function); if (!startTime) { startTime = g_new0 (GTimeVal, 1); g_hash_table_insert (startTimes, g_strdup(function), startTime); } g_get_current_time (startTime); } void debug_end_measurement_func (const char * function, unsigned long flags, const char *name) { GTimeVal *startTime = NULL; GTimeVal endTime; unsigned long duration = 0; int i; if (!function) return; if (!startTimes) return; startTime = g_hash_table_lookup (startTimes, function); if (!startTime) return; g_get_current_time (&endTime); g_time_val_add (&endTime, (-1) * startTime->tv_usec); if ((0 == endTime.tv_sec - startTime->tv_sec) && (0 == endTime.tv_usec/1000)) return; g_print ("%s: ", debug_get_prefix (flags)); if (debug_level & DEBUG_TRACE) g_print ("[%p] ", g_thread_self ()); for (i = 0; i < debug_get_depth (); i++) g_print (" "); g_print ("= %s took %01ld,%03lds\n", name, endTime.tv_sec - startTime->tv_sec, endTime.tv_usec/1000); duration = (endTime.tv_sec - startTime->tv_sec)*1000 + endTime.tv_usec/1000; if (duration > 250) debug2 (DEBUG_PERF, "function \"%s\" is slow! Took %dms.", name, duration); } void set_debug_level (unsigned long level) { debug_level = level; } void debug_printf (const char * strloc, const gchar * function, gulong flag, const gchar * fmt, ...) { char timebuf[64]; gchar * string; const gchar * prefix; time_t now_time_t; va_list args; struct tm now_tm; gint depth, i; g_return_if_fail (fmt != NULL); depth = debug_get_depth (); if (*fmt == '-') { debug_set_depth (depth - 1); depth--; } /* Get prefix */ prefix = debug_get_prefix(flag); va_start (args, fmt); string = g_strdup_vprintf (fmt, args); va_end (args); time (&now_time_t); localtime_r (&now_time_t, &now_tm); strftime (timebuf, sizeof(timebuf), "%H:%M:%S", &now_tm); if(debug_level & DEBUG_VERBOSE) { printf ("(%15s:%20s)(thread %p)(time %s) %s: %s\n", strloc, function, g_thread_self (), timebuf, prefix, string); } else { g_print ("%s: ", prefix); if (debug_level & DEBUG_TRACE) g_print ("[%p] ", g_thread_self ()); for (i = 0; i < depth; i++) g_print (" "); g_print ("%s\n", string); } fflush (NULL); g_free (string); if (*fmt == '+') debug_set_depth (depth + 1); } void debug_enter (const char *name) { debug1 (DEBUG_TRACE, "+ %s", name); if (debug_level & DEBUG_PERF) debug_start_measurement_func (name); } void debug_exit (const char *name) { debug1 (DEBUG_TRACE, "- %s", name); if (debug_level & DEBUG_PERF) debug_end_measurement_func (name, DEBUG_PERF, name); } liferea-1.12.7/src/debug.h000066400000000000000000000077111352135647700152620ustar00rootroot00000000000000/* * Debugging output support. This was originally written for * * Pan - A Newsreader for Gtk+ * Copyright (C) 2002 Charles Kerr * * Liferea specific adaptions * Copyright (C) 2004-2007 Lars Windolf * * 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; version 2 of the License. * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __DEBUG_H__ #define __DEBUG_H__ typedef enum { DEBUG_CACHE = (1<<0), DEBUG_CONF = (1<<1), DEBUG_UPDATE = (1<<2), DEBUG_PARSING = (1<<3), DEBUG_GUI = (1<<4), DEBUG_TRACE = (1<<5), DEBUG_HTML = (1<<6), DEBUG_NET = (1<<7), DEBUG_DB = (1<<8), DEBUG_PERF = (1<<9), DEBUG_VFOLDER = (1<<10), DEBUG_VERBOSE = (1<<11) } DebugFlags; /** * Method to save start time for a measurement. * * @param level debugging flags that enable the measurement * * Not thread-safe! */ extern void debug_start_measurement_func (const char * function); #define debug_start_measurement(level) if ((debug_level) & level) debug_start_measurement_func (PRETTY_FUNCTION) /** * Method to calculate the duration for a measurement. * The result will be printed to the debug trace. * * @param level debugging flags that enable the measurement * @param name name of the measurement * * Not thread-safe! */ extern void debug_end_measurement_func (const char * function, unsigned long flags, const char *name); #define debug_end_measurement(level, name) if ((debug_level) & level) debug_end_measurement_func (PRETTY_FUNCTION, level, name) /** * Enable debugging for one or more of the given debugging flags. * * @param flags debugging flags (see above) */ extern void set_debug_level (unsigned long flags); /** currently configured debug flag set */ extern unsigned long debug_level; /** macros for debug output */ extern void debug_printf (const char * strloc, const char * function, unsigned long level, const char* fmt, ...); #ifdef __GNUC__ #define PRETTY_FUNCTION __PRETTY_FUNCTION__ #else #define PRETTY_FUNCTION "" #endif #define debug0(level, fmt) if ((debug_level) & level) debug_printf (G_STRLOC, PRETTY_FUNCTION, level,fmt) #define debug1(level, fmt, A) if ((debug_level) & level) debug_printf (G_STRLOC, PRETTY_FUNCTION, level,fmt, A) #define debug2(level, fmt, A, B) if ((debug_level) & level) debug_printf (G_STRLOC, PRETTY_FUNCTION, level,fmt, A, B) #define debug3(level, fmt, A, B, C) if ((debug_level) & level) debug_printf (G_STRLOC, PRETTY_FUNCTION, level,fmt, A, B, C) #define debug4(level, fmt, A, B, C, D) if ((debug_level) & level) debug_printf (G_STRLOC, PRETTY_FUNCTION, level,fmt, A, B, C, D) #define debug5(level, fmt, A, B, C, D, E) if ((debug_level) & level) debug_printf (G_STRLOC, PRETTY_FUNCTION, level,fmt, A, B, C, D, E) #define debug6(level, fmt, A, B, C, D, E, F) if ((debug_level) & level) debug_printf (G_STRLOC, PRETTY_FUNCTION, level,fmt, A, B, C, D, E, F) /** * Trace method to trace function entering when function name * tracing is enabled (--debug-trace|--debug-all). Also implements * slow function detection when performance trace (--debug-perf) * is active. * * @param name function name */ extern void debug_enter (const char *name); /** * Trace method to trace function exiting when function name * tracing is enabled (--debug-trace|--debug-all). Also implements * slow function detection when performance trace (--debug-perf) * is active. * * @param name function name */ extern void debug_exit (const char *name); #endif liferea-1.12.7/src/enclosure.c000066400000000000000000000177621352135647700161750ustar00rootroot00000000000000/* * @file enclosure.c enclosures/podcast support * * Copyright (C) 2007-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "common.h" #include "conf.h" #include "debug.h" #include "enclosure.h" #include "xml.h" #include "ui/preferences_dialog.h" // FIXME: remove this! #include "ui/ui_common.h" #if !defined (G_OS_WIN32) || defined (HAVE_SYS_WAIT_H) #include #endif /* Liferea manages a MIME type configuration to allow comfortable enclosure/podcast handling that launches external applications to play or download content. The MIME type configuration is saved into a XML file in the cache directory. Enclosure download is currently done using external tools (gwget,kget,steadyflow...) and is performed by simply passing the URL. All downloads are asynchronous and download concurrency is considered to be handled by the invoked tools. */ static GSList *types = NULL; static gboolean typesLoaded = FALSE; /* The internal enclosure encoding format is either or enc:::: Examples: "http://somewhere.com/cool.mp3" "enc::::http://somewhere.com/cool.mp3" "enc:0:audio/ogg:237423414:http://somewhere.com/cool.ogg" "enc:1:x-application/pdf::https://secret.site.us/defense-plan.pdf" */ enclosurePtr enclosure_from_string (const gchar *str) { gchar **fields; enclosurePtr enclosure; enclosure = g_new0 (struct enclosure, 1); /* legacy URL, migration case... */ if (strstr (str, "enc:") != str) { enclosure->url = g_strdup (str); return enclosure; } fields = g_regex_split_simple ("^enc:([01]?):([^:]*):(\\d+):(.*)", str, 0, 0); if (6 > g_strv_length (fields)) { debug2 (DEBUG_PARSING, "Dropping incorrectly encoded enclosure: >>>%s<<< (nr of fields=%d)\n", str, g_strv_length (fields)); enclosure_free (enclosure); return NULL; } enclosure->downloaded = ('1' == *fields[1]); if (strlen (fields[2])) enclosure->mime = g_strdup (fields[2]); if (strlen (fields[3])) enclosure->size = atol (fields[3]); enclosure->url = g_strdup (fields[4]); g_strfreev (fields); return enclosure; } gchar * enclosure_values_to_string (const gchar *url, const gchar *mime, gssize size, gboolean downloaded) { gchar *result, *safeUrl; /* There are websites out there encoding -1 as size */ if (size < 0) size = 0; safeUrl = (gchar *) common_uri_escape (BAD_CAST url); result = g_strdup_printf ("enc:%s:%s:%" G_GSSIZE_FORMAT ":%s", downloaded?"1":"0", mime?mime:"", size, safeUrl); g_free (safeUrl); return result; } gchar * enclosure_to_string (enclosurePtr enclosure) { return enclosure_values_to_string (enclosure->url, enclosure->mime, enclosure->size, enclosure->downloaded); } gchar * enclosure_get_url (const gchar *str) { enclosurePtr enclosure = enclosure_from_string(str); gchar *url = NULL; if (enclosure) { url = g_strdup (enclosure->url); enclosure_free (enclosure); } return url; } gchar * enclosure_get_mime (const gchar *str) { enclosurePtr enclosure = enclosure_from_string (str); gchar *mime = NULL; if (enclosure) { mime = g_strdup (enclosure->mime); enclosure_free (enclosure); } return mime; } void enclosure_free (enclosurePtr enclosure) { g_free (enclosure->url); g_free (enclosure->mime); g_free (enclosure); } static void enclosure_mime_types_load (void) { xmlDocPtr doc; xmlNodePtr cur; encTypePtr etp; gchar *filename; typesLoaded = TRUE; filename = common_create_config_filename ("mime.xml"); if (g_file_test (filename, G_FILE_TEST_EXISTS)) { doc = xmlParseFile (filename); if (!doc) { debug0 (DEBUG_CONF, "could not load enclosure type config file!"); } else { cur = xmlDocGetRootElement (doc); if (!cur) { g_warning ("could not read root element from enclosure type config file!"); } else { while (cur) { if (!xmlIsBlankNode (cur)) { if (!xmlStrcmp (cur->name, BAD_CAST"types")) { cur = cur->xmlChildrenNode; while (cur) { if ((!xmlStrcmp (cur->name, BAD_CAST"type"))) { etp = g_new0 (struct encType, 1); etp->mime = (gchar *) xmlGetProp (cur, BAD_CAST"mime"); etp->extension = (gchar *) xmlGetProp (cur, BAD_CAST"extension"); etp->cmd = (gchar *) xmlGetProp (cur, BAD_CAST"cmd"); etp->permanent = TRUE; types = g_slist_append (types, etp); } cur = cur->next; } break; } else { g_warning (_("\"%s\" is not a valid enclosure type config file!"), filename); } } cur = cur->next; } } xmlFreeDoc (doc); } } g_free (filename); } void enclosure_mime_types_save (void) { xmlDocPtr doc; xmlNodePtr root, cur; encTypePtr etp; GSList *iter; gchar *filename; doc = xmlNewDoc (BAD_CAST "1.0"); root = xmlNewDocNode (doc, NULL, BAD_CAST"types", NULL); iter = types; while (iter) { etp = (encTypePtr)iter->data; cur = xmlNewChild (root, NULL, BAD_CAST"type", NULL); xmlNewProp (cur, BAD_CAST"cmd", BAD_CAST etp->cmd); if (etp->mime) xmlNewProp (cur, BAD_CAST"mime", BAD_CAST etp->mime); if (etp->extension) xmlNewProp (cur, BAD_CAST"extension", BAD_CAST etp->extension); iter = g_slist_next (iter); } xmlDocSetRootElement (doc, root); filename = common_create_config_filename ("mime.xml"); if (-1 == xmlSaveFormatFileEnc (filename, doc, NULL, 1)) g_warning ("Could not save to enclosure type config file!"); g_free (filename); xmlFreeDoc (doc); } const GSList * enclosure_mime_types_get (void) { if (!typesLoaded) enclosure_mime_types_load (); return types; } void enclosure_mime_type_add (encTypePtr type) { types = g_slist_append (types, type); enclosure_mime_types_save (); } void enclosure_mime_type_remove (encTypePtr type) { types = g_slist_remove (types, type); g_free (type->cmd); g_free (type->mime); g_free (type->extension); g_free (type); enclosure_mime_types_save (); } /* etp is optional, if it is missing we are in save mode */ void enclosure_download (encTypePtr type, const gchar *url, gboolean interactive) { GError *error = NULL; gchar *cmd, *urlQ; urlQ = g_shell_quote (url); if (type) { debug2 (DEBUG_UPDATE, "passing URL %s to command %s...", urlQ, type->cmd); cmd = g_strdup_printf ("%s %s", type->cmd, urlQ); } else { gchar *toolCmd = prefs_get_download_command (); if(!toolCmd) { if (interactive) ui_show_error_box (_("You have not configured a download tool yet! Please do so in the 'Enclosures' tab in Tools/Preferences.")); return; } debug2 (DEBUG_UPDATE, "downloading URL %s with %s...", urlQ, toolCmd); cmd = g_strdup_printf (toolCmd, urlQ); g_free (toolCmd); } g_free (urlQ); /* free now unnecessary stuff */ if (type && !type->permanent) enclosure_mime_type_remove (type); /* execute command */ g_spawn_command_line_async (cmd, &error); if (error && (0 != error->code)) { if (interactive) ui_show_error_box (_("Command failed: \n\n%s\n\n Please check whether the configured download tool is installed and working correctly! You can change it in the 'Download' tab in Tools/Preferences."), cmd); else g_warning ("Command \"%s\" failed!", cmd); } if (error) g_error_free (error); g_free (cmd); } liferea-1.12.7/src/enclosure.h000066400000000000000000000102351352135647700161660ustar00rootroot00000000000000/* * @file enclosure.h enclosure/podcast support * * Copyright (C) 2007-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _ENCLOSURE_H #define _ENCLOSURE_H #include /* structure describing the preferences for a MIME type or file extension */ typedef struct encType { gchar *mime; /*<< either mime or extension is set */ gchar *extension; gchar *cmd; /*<< the command to launch the enclosure type */ gboolean permanent; /*<< if TRUE definition is deleted after opening and not added to the permanent list of type configs */ } *encTypePtr; /* structure describing an enclosure and its states */ typedef struct enclosure { gchar *url; /*<< enclosure download URI (absolute path) */ gchar *mime; /*<< enclosure MIME type (optional, can be NULL) */ gssize size; /*<< enclosure size (optional, can be 0, but also -1) */ gboolean downloaded; /*<< flag indicating we have downloaded the enclosure */ } *enclosurePtr; /** * enclosure_from_string: (skip) * @str: the enclosure description * * Parses enclosure description. * * Returns: (transfer full): new enclosure structure (to be free'd using enclosure_free) */ enclosurePtr enclosure_from_string (const gchar *str); /** * enclosure_values_to_string: * @url: the enclosure URL * @mime: the MIME type (optional, can be NULL) * @size: the enclosure size (optional, can be 0, and also -1) * @downloaded: downloading state (TRUE=downloaded) * * Serialize enclosure infos to string. * * Returns: (transfer full): new string (to be free'd using g_free) */ gchar * enclosure_values_to_string (const gchar *url, const gchar *mime, gssize size, gboolean downloaded); /** * enclosure_to_string: (skip) * @enclosure: the enclosure * * Serialize enclosure to string. * * Returns: (transfer full): new string (to be free'd using g_free) */ gchar * enclosure_to_string (const enclosurePtr enclosure); /** * enclosure_get_url: * @str: enclosure string to parse * * Get URL from enclosure string * * Returns: (transfer full): URL string, free after use */ gchar * enclosure_get_url (const gchar *str); /** * enclosure_get_mime: * @str: enclosure string to parse * * Get MIME type from enclosure string * * Returns: (transfer full): MIME type string, free after use */ gchar * enclosure_get_mime (const gchar *str); /** * enclosure_free: (skip) * @enclosure: the enclosure * * Free all memory associated with the enclosure. */ void enclosure_free (enclosurePtr enclosure); /** * enclosure_mime_types_get: (skip) * * Returns all configured enclosure types. * * Returns: (transfer none): list of encType structures */ const GSList * enclosure_mime_types_get (void); /** * enclosure_mime_type_add: (skip) * @type: the new definition * * Adds a new MIME type handling definition. */ void enclosure_mime_type_add (encTypePtr type); /** * enclosure_mime_type_remove: (skip) * @type: the definition to remove * * Removes an existing MIME type handling definition. * The definition will be free'd by this function. */ void enclosure_mime_type_remove (encTypePtr type); /** * enclosure_mime_types_save: (skip) * * Save all MIME type definitions. */ void enclosure_mime_types_save (void); /** * enclosure_download: (skip) * @type: ULL or pointer to type structure * @url: valid HTTP URL * @interactive: TRUE if triggered by user interaction * * Downloads a given enclosure URL into a file */ void enclosure_download (encTypePtr type, const gchar *url, gboolean interactive); #endif liferea-1.12.7/src/export.c000066400000000000000000000333151352135647700155070ustar00rootroot00000000000000/** * @file export.c OPML feed list import & export * * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2004-2015 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "export.h" #include #include #include #include #include "auth.h" #include "common.h" #include "db.h" #include "debug.h" #include "favicon.h" #include "feedlist.h" #include "folder.h" #include "node.h" #include "xml.h" #include "ui/ui_common.h" #include "ui/feed_list_node.h" struct exportData { gboolean trusted; /**< Include all the extra Liferea-specific tags */ xmlNodePtr cur; }; static void export_node_children (nodePtr node, xmlNodePtr cur, gboolean trusted); /* Used for exporting, this adds a folder or feed's node to the XML tree */ static void export_append_node_tag (nodePtr node, gpointer userdata) { xmlNodePtr cur = ((struct exportData*)userdata)->cur; gboolean internal = ((struct exportData*)userdata)->trusted; xmlNodePtr childNode; gchar *tmp; /* When exporting external OPML do not export every node type... */ if (!(internal || (NODE_TYPE (node)->capabilities & NODE_CAPABILITY_EXPORT))) return; childNode = xmlNewChild (cur, NULL, BAD_CAST"outline", NULL); /* 1. write generic node attributes */ xmlNewProp (childNode, BAD_CAST"title", BAD_CAST node_get_title(node)); xmlNewProp (childNode, BAD_CAST"text", BAD_CAST node_get_title(node)); /* The OPML spec requires "text" */ xmlNewProp (childNode, BAD_CAST"description", BAD_CAST node_get_title(node)); if (node_type_to_str (node)) xmlNewProp (childNode, BAD_CAST"type", BAD_CAST node_type_to_str (node)); /* Don't add the following tags if we are exporting to other applications */ if (internal) { xmlNewProp (childNode, BAD_CAST"id", BAD_CAST node_get_id (node)); switch (node->sortColumn) { case NODE_VIEW_SORT_BY_TITLE: xmlNewProp (childNode, BAD_CAST"sortColumn", BAD_CAST"title"); break; case NODE_VIEW_SORT_BY_TIME: xmlNewProp (childNode, BAD_CAST"sortColumn", BAD_CAST"time"); break; case NODE_VIEW_SORT_BY_PARENT: xmlNewProp (childNode, BAD_CAST"sortColumn", BAD_CAST"parent"); break; case NODE_VIEW_SORT_BY_STATE: xmlNewProp (childNode, BAD_CAST"sortColumn", BAD_CAST"state"); break; default: g_assert_not_reached(); break; } if (FALSE == node->sortReversed) xmlNewProp (childNode, BAD_CAST"sortReversed", BAD_CAST"false"); if (node->loadItemLink) xmlNewProp (childNode, BAD_CAST"loadItemLink", BAD_CAST"true"); /* Do not export the default view mode setting to avoid making it permanent. Do not use node_get_view_mode () here to ensure that the comparison works as node_get_view_mode () returns the effective mode! */ if (NODE_VIEW_MODE_DEFAULT != node->viewMode) { tmp = g_strdup_printf ("%u", node_get_view_mode(node)); xmlNewProp (childNode, BAD_CAST"viewMode", BAD_CAST tmp); g_free (tmp); } } /* 2. add node type specific stuff */ NODE_TYPE (node)->export (node, childNode, internal); /* 3. add children */ if (internal) { if (feed_list_node_is_expanded (node->id)) xmlNewProp (childNode, BAD_CAST"expanded", BAD_CAST"true"); else xmlNewProp (childNode, BAD_CAST"collapsed", BAD_CAST"true"); } if (IS_FOLDER (node)) export_node_children (node, childNode, internal); } static void export_node_children (nodePtr node, xmlNodePtr cur, gboolean trusted) { struct exportData params; params.cur = cur; params.trusted = trusted; node_foreach_child_data (node, export_append_node_tag, ¶ms); } gboolean export_OPML_feedlist (const gchar *filename, nodePtr node, gboolean trusted) { xmlDocPtr doc; xmlNodePtr cur, opmlNode; gboolean error = FALSE; gchar *backupFilename; int old_umask = 0; debug_enter ("export_OPML_feedlist"); backupFilename = g_strdup_printf ("%s~", filename); doc = xmlNewDoc ("1.0"); if (doc) { opmlNode = xmlNewDocNode (doc, NULL, BAD_CAST"opml", NULL); if (opmlNode) { xmlNewProp (opmlNode, BAD_CAST"version", BAD_CAST"1.0"); /* create head */ cur = xmlNewChild (opmlNode, NULL, BAD_CAST"head", NULL); if (cur) xmlNewTextChild (cur, NULL, BAD_CAST"title", BAD_CAST"Liferea Feed List Export"); /* create body with feed list */ cur = xmlNewChild (opmlNode, NULL, BAD_CAST"body", NULL); if (cur) export_node_children (node, cur, trusted); xmlDocSetRootElement (doc, opmlNode); } else { g_warning ("could not create XML feed node for feed cache document!"); error = TRUE; } if (!trusted) old_umask = umask (022); /* give read permissions for other, per-default we wouldn't give it... */ xmlSetDocCompressMode (doc, 0); if (-1 == xmlSaveFormatFile (backupFilename, doc, TRUE)) { g_warning ("Could not export to OPML file!"); error = TRUE; } if (!trusted) umask (old_umask); xmlFreeDoc (doc); if (!error) { // FIXME: Use g_rename() once we've reached Glib 2.6+ if (rename (backupFilename, filename) < 0) { g_warning (_("Error renaming %s to %s: %s\n"), backupFilename, filename, g_strerror (errno)); error = TRUE; } } } else { g_warning ("Could not create XML document!"); error = TRUE; } g_free (backupFilename); debug_exit ("export_OPML_feedlist"); return !error; } static void import_parse_outline (xmlNodePtr cur, nodePtr parentNode, gboolean trusted) { gchar *title, *typeStr, *tmp, *sortStr; xmlNodePtr child; nodePtr node; nodeTypePtr type = NULL; gboolean needsUpdate = FALSE; debug_enter("import_parse_outline"); /* 1. determine node type */ typeStr = xmlGetProp (cur, BAD_CAST"type"); if (typeStr) { type = node_str_to_type (typeStr); xmlFree (typeStr); } /* if we didn't find a type attribute we use heuristics */ if (!type) { /* check for a source URL */ tmp = xmlGetProp (cur, BAD_CAST"xmlUrl"); if (!tmp) tmp = xmlGetProp (cur, BAD_CAST"xmlurl"); /* AmphetaDesk */ if (!tmp) tmp = xmlGetProp (cur, BAD_CAST"xmlURL"); /* LiveJournal */ if (tmp) { debug0 (DEBUG_CACHE, "-> URL found assuming type feed"); type = feed_get_node_type(); xmlFree (tmp); } else { /* if the outline has no type and URL it just has to be a folder */ type = folder_get_node_type(); debug0 (DEBUG_CACHE, "-> must be a folder"); } } g_assert (NULL != type); /* Check if adding this type is allowed */ // FIXME: Prevent news bins outside root source // FIXME: Prevent search folders outside root source /* 2. do general node parsing */ node = node_new (type); node_set_parent (node, parentNode, -1); /* The id should only be used from feedlist.opml. Otherwise, it could cause corruption if the same id was imported multiple times. */ if (trusted) { gchar *id = NULL; id = xmlGetProp (cur, BAD_CAST"id"); /* If, for some reason, the OPML has been corrupted and there are two copies asking for a certain ID then give the second one a new ID. */ if (node_is_used_id (id)) { xmlFree (id); id = NULL; } if (id) { node_set_id (node, id); xmlFree (id); } else { needsUpdate = TRUE; } } else { needsUpdate = TRUE; } /* title */ title = xmlGetProp (cur, BAD_CAST"title"); if (!title || !xmlStrcmp (title, BAD_CAST"")) { if (title) xmlFree (title); title = xmlGetProp (cur, BAD_CAST"text"); } if (title) { node_set_title (node, title); xmlFree (title); } /* sorting order */ sortStr = xmlGetProp (cur, BAD_CAST"sortColumn"); if (sortStr) { if (!xmlStrcmp (sortStr, "title")) node->sortColumn = NODE_VIEW_SORT_BY_TITLE; else if (!xmlStrcmp (sortStr, "parent")) node->sortColumn = NODE_VIEW_SORT_BY_PARENT; else if (!xmlStrcmp (sortStr, "state")) node->sortColumn = NODE_VIEW_SORT_BY_STATE; else node->sortColumn = NODE_VIEW_SORT_BY_TIME; xmlFree (sortStr); } sortStr = xmlGetProp (cur, BAD_CAST"sortReversed"); if (sortStr) { if(!xmlStrcmp (sortStr, BAD_CAST"false")) node->sortReversed = FALSE; xmlFree (sortStr); } /* auto item link loading flag */ tmp = xmlGetProp (cur, BAD_CAST"loadItemLink"); if (tmp) { if (!xmlStrcmp (tmp, BAD_CAST"true")) node->loadItemLink = TRUE; xmlFree (tmp); } /* viewing mode */ tmp = xmlGetProp (cur, BAD_CAST"viewMode"); if (tmp) { node_set_view_mode (node, atoi (tmp)); xmlFree (tmp); } /* expansion state */ if (xmlHasProp (cur, BAD_CAST"expanded")) node->expanded = TRUE; else if (xmlHasProp (cur, BAD_CAST"collapsed")) node->expanded = FALSE; else node->expanded = TRUE; /* 3. Try to load the favicon (needs to be done before adding to the feed list) */ node_load_icon (node); /* 4. add to GUI parent */ feedlist_node_imported (node); /* 5. import child nodes */ if (IS_FOLDER (node)) { child = cur->xmlChildrenNode; while (child) { if (!xmlStrcmp (child->name, BAD_CAST"outline")) import_parse_outline (child, node, trusted); child = child->next; } } /* 6. do node type specific parsing */ NODE_TYPE (node)->import (node, parentNode, cur, trusted); if (node->subscription) { /* Handle OPML auth info (imported from subscription_import() */ if(node->subscription->updateOptions->username) { /* Write to password store (for migration) */ liferea_auth_info_store (node->subscription); } else { /* If no auth options in OPML try to import them from the key store */ liferea_auth_info_query (node->id); } /* 7. update immediately if necessary */ if (needsUpdate) { debug1 (DEBUG_CACHE, "seems to be an import, setting new id: %s and doing first download...", node_get_id(node)); subscription_update (node->subscription, 0); } } /* 8. Always update the node info in the DB to ensure a proper node entry and parent node information. Search folders would silentely fail to work without node entry. */ db_node_update (node); debug_exit ("import_parse_outline"); } static void import_parse_body (xmlNodePtr n, nodePtr parentNode, gboolean trusted) { xmlNodePtr cur; cur = n->xmlChildrenNode; while (cur) { if (!xmlStrcmp (cur->name, BAD_CAST"outline")) import_parse_outline (cur, parentNode, trusted); cur = cur->next; } } static void import_parse_OPML (xmlNodePtr n, nodePtr parentNode, gboolean trusted) { xmlNodePtr cur; cur = n->xmlChildrenNode; while (cur) { /* we ignore the head */ if (!xmlStrcmp (cur->name, BAD_CAST"body")) { import_parse_body (cur, parentNode, trusted); } cur = cur->next; } } gboolean import_OPML_feedlist (const gchar *filename, nodePtr parentNode, gboolean showErrors, gboolean trusted) { xmlDocPtr doc; xmlNodePtr cur; gboolean error = FALSE; debug1 (DEBUG_CACHE, "Importing OPML file: %s", filename); /* read the feed list */ doc = xmlParseFile (filename); if (!doc) { if (showErrors) ui_show_error_box (_("XML error while reading OPML file! Could not import \"%s\"!"), filename); else g_warning (_("XML error while reading OPML file! Could not import \"%s\"!"), filename); error = TRUE; } else { cur = xmlDocGetRootElement (doc); if (!cur) { if (showErrors) ui_show_error_box (_("Empty document! OPML document \"%s\" should not be empty when importing."), filename); else g_warning (_("Empty document! OPML document \"%s\" should not be empty when importing."), filename); error = TRUE; } else { if (!trusted) { /* set title only when importing as folder and not as OPML source */ xmlNodePtr title = xpath_find (cur, "/opml/head/title"); if (title) { xmlChar *titleStr = xmlNodeListGetString (title->doc, title->xmlChildrenNode, 1); if (titleStr) { node_set_title (parentNode, titleStr); xmlFree (titleStr); } } } while (cur) { if (!xmlIsBlankNode (cur)) { if (!xmlStrcmp (cur->name, BAD_CAST"opml")) { import_parse_OPML (cur, parentNode, trusted); } else { if (showErrors) ui_show_error_box (_("\"%s\" is not a valid OPML document! Liferea cannot import this file!"), filename); else g_warning (_("\"%s\" is not a valid OPML document! Liferea cannot import this file!"), filename); } } cur = cur->next; } } xmlFreeDoc (doc); } return !error; } /* UI stuff */ static void on_import_activate_cb (const gchar *filename, gpointer user_data) { if (filename) { nodePtr node = node_new (folder_get_node_type ()); node_set_title (node, _("Imported feed list")); feedlist_node_added (node); if (!import_OPML_feedlist (filename, node, TRUE /* show errors */, FALSE /* not trusted */)) { feedlist_remove_node (node); } } } void import_OPML_file (void) { ui_choose_file(_("Import Feed List"), _("Import"), FALSE, on_import_activate_cb, NULL, NULL, "*.opml|*.xml", _("OPML Files"), NULL); } static void on_export_activate_cb (const gchar *filename, gpointer user_data) { if (filename) { if (!export_OPML_feedlist (filename, feedlist_get_root (), FALSE)) ui_show_error_box (_("Error while exporting feed list!")); else ui_show_info_box (_("Feed List exported!")); } } void export_OPML_file (void) { ui_choose_file (_("Export Feed List"), _("Export"), TRUE, on_export_activate_cb, NULL, "feedlist.opml", "*.opml", _("OPML Files"), NULL); } liferea-1.12.7/src/export.h000066400000000000000000000040351352135647700155110ustar00rootroot00000000000000/** * @file export.h OPML feedlist import&export * * Copyright (C) 2003-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _EXPORT_H #define _EXPORT_H #include #include "node.h" /** * Exports a given feed list tree. Can be used to export * the static feed list but also to export subtrees. * * @param filename filename of export file * @param node root node of the tree to export * @param internal FALSE if export to other programs * is requested, will suppress export * of passwords and Liferea specifics * * @returns TRUE on success */ gboolean export_OPML_feedlist(const gchar *filename, nodePtr node, gboolean internal); /** * Reads an OPML file and inserts it into the feedlist. * * @param filename path to file that will be read for importing * @param parentNode node of the parent folder * @param showErrors set to TRUE if errors should generate a error dialog * @param trusted set to TRUE if the feedlist is being imported from a trusted source * * @returns TRUE on success */ gboolean import_OPML_feedlist(const gchar *filename, nodePtr parentNode, gboolean showErrors, gboolean trusted); /** * Called when user requested dialog to import an OPML file. */ void import_OPML_file (void); /** * Called when user requested dialog to save an OPML file. */ void export_OPML_file (void); #endif liferea-1.12.7/src/favicon.c000066400000000000000000000262631352135647700156170ustar00rootroot00000000000000/** * @file favicon.c Liferea favicon handling * * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2015 Lars Windolf * * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include #include "common.h" #include "debug.h" #include "favicon.h" #include "feed.h" #include "html.h" #include "metadata.h" typedef struct faviconDownloadCtxt { gchar *id; /**< favicon cache id */ GSList *urls; /**< ordered list of URLs to try */ updateOptionsPtr options; /**< download options */ faviconUpdatedCb callback; /**< usually feed_favicon_updated() */ gpointer user_data; /**< usually the node pointer */ } *faviconDownloadCtxtPtr; static faviconDownloadCtxtPtr favicon_download_ctxt_new () { return g_new0 (struct faviconDownloadCtxt, 1); } static void favicon_download_ctxt_free (faviconDownloadCtxtPtr ctxt) { GSList *iter; if (!ctxt) return; g_free (ctxt->id); for (iter = ctxt->urls; iter; iter = g_slist_next (iter)) g_free (iter->data); g_slist_free (ctxt->urls); update_options_free (ctxt->options); } static void favicon_download_run(faviconDownloadCtxtPtr ctxt); GdkPixbuf * favicon_load_from_cache (const gchar *id, guint size) { struct stat statinfo; gchar *filename; GdkPixbuf *pixbuf, *result = NULL; GError *error = NULL; filename = common_create_cache_filename ("favicons", id, "png"); if (0 == stat ((const char*)filename, &statinfo)) { pixbuf = gdk_pixbuf_new_from_file (filename, &error); if (pixbuf && !error) { result = gdk_pixbuf_scale_simple (pixbuf, size, size, GDK_INTERP_BILINEAR); g_object_unref (pixbuf); } else { /* Error */ fprintf (stderr, "Failed to load pixbuf file: %s: %s\n", filename, error->message); g_error_free (error); } } g_free (filename); return result; } gboolean favicon_update_needed(const gchar *id, updateStatePtr updateState, GTimeVal *now) { gboolean result = FALSE; /* check creation date and update favicon if older than one month */ if (now->tv_sec > (updateState->lastFaviconPoll.tv_sec + 60*60*24*31)) result = TRUE; return result; } void favicon_remove_from_cache(const gchar *id) { gchar *filename; debug_enter("favicon_remove"); /* try to load a saved favicon */ filename = common_create_cache_filename ("favicons", id, "png"); if(g_file_test(filename, G_FILE_TEST_EXISTS)) { if(0 != unlink(filename)) g_warning ("Removal of %s failed", filename); } g_free(filename); debug_exit("favicon_remove"); } /** * prevent saving huge favicons loaded from net * */ static void favicon_pixbuf_size_prepared_cb (GdkPixbufLoader *loader, gint width, gint height, gpointer user_data) { gint max_size = 256; if (width > max_size || height > max_size) { width = width < max_size ? width : max_size; height = height < max_size ? height : max_size; gdk_pixbuf_loader_set_size(loader, width, height); } } static void favicon_download_icon_cb (const struct updateResult * const result, gpointer user_data, updateFlags flags) { faviconDownloadCtxtPtr ctxt = (faviconDownloadCtxtPtr)user_data; gchar *tmp; GError *err = NULL; gboolean success = FALSE; debug4 (DEBUG_UPDATE, "icon download processing (%s, %d bytes, content type %s) for favicon %s", result->source, result->size, result->contentType, ctxt->id); if (result->data && result->size > 0 && result->contentType /*&&*/ /* the MIME type is wrong much too often, so we cannot check it... */ /*(!strncmp("image", result->contentType, 5))*/) { GdkPixbufLoader *loader = gdk_pixbuf_loader_new (); GdkPixbuf *pixbuf; g_signal_connect (loader, "size-prepared", G_CALLBACK (favicon_pixbuf_size_prepared_cb), NULL); if (gdk_pixbuf_loader_write (loader, (guchar *)result->data, (gsize)result->size, &err)) { if (gdk_pixbuf_loader_close (loader, &err)) { pixbuf = gdk_pixbuf_loader_get_pixbuf (loader); if (pixbuf) { tmp = common_create_cache_filename ("favicons", ctxt->id, "png"); debug2 (DEBUG_UPDATE, "saving favicon %s to file %s", ctxt->id, tmp); if (!gdk_pixbuf_save (pixbuf, tmp, "png", &err, NULL)) { g_warning ("Could not save favicon (id=%s) to file %s!", ctxt->id, tmp); } else { success = TRUE; /* Run favicon-updated callback */ if (ctxt->callback) (ctxt->callback) (ctxt->user_data); } g_free (tmp); } else { debug0 (DEBUG_UPDATE, "gdk_pixbuf_loader_get_pixbuf() failed!"); } } else { debug0 (DEBUG_UPDATE, "gdk_pixbuf_loader_close() failed!"); } } else { debug0 (DEBUG_UPDATE, "gdk_pixbuf_loader_write() failed!"); gdk_pixbuf_loader_close (loader, NULL); } if (err) { debug1 (DEBUG_UPDATE, "%s", err->message); g_error_free (err); } g_object_unref (loader); } else { debug1 (DEBUG_UPDATE, "No data in download result for favicon %s!", ctxt->id); } if (!success) { favicon_download_run (ctxt); /* try next... */ } else { favicon_download_ctxt_free (ctxt); } } static void favicon_download_html_cb (const struct updateResult * const result, gpointer user_data, updateFlags flags) { faviconDownloadCtxtPtr ctxt = (faviconDownloadCtxtPtr)user_data; if (result->size > 0 && result->data) { gchar *iconUri = html_discover_favicon (result->data, result->source); if (iconUri) { updateRequestPtr request; debug2 (DEBUG_UPDATE, "found link for favicon %s: %s", ctxt->id, iconUri); request = update_request_new (); request->source = iconUri; request->options = update_options_copy (ctxt->options); update_execute_request (ctxt->user_data, request, favicon_download_icon_cb, ctxt, flags); return; } } debug1 (DEBUG_UPDATE, "No link for favicon %s found!", ctxt->id); favicon_download_run (ctxt); /* no sucess, try next... */ } static void favicon_download_run (faviconDownloadCtxtPtr ctxt) { gchar *url; updateRequestPtr request; update_result_cb callback; debug_enter("favicon_download_run"); if (ctxt->urls) { url = (gchar *)ctxt->urls->data; ctxt->urls = g_slist_remove (ctxt->urls, url); debug2 (DEBUG_UPDATE, "favicon %s trying URL: %s", ctxt->id, url); request = update_request_new (); request->source = url; request->options = update_options_copy (ctxt->options); if (strstr (url, "/favicon.ico")) callback = favicon_download_icon_cb; else callback = favicon_download_html_cb; update_execute_request (ctxt->user_data, request, callback, ctxt, FEED_REQ_PRIORITY_HIGH); } else { debug1 (DEBUG_UPDATE, "favicon %s could not be downloaded!", ctxt->id); /* Run favicon-updated callback */ if (ctxt->callback) (ctxt->callback) (ctxt->user_data); favicon_download_ctxt_free (ctxt); } debug_exit ("favicon_download_run"); } static gint count_slashes(const gchar *str) { const gchar *tmp = str; gint slashes = 0; slashes = 0; while(*tmp) { if(*tmp == '/') slashes++;tmp++; } return slashes; } void favicon_download (subscriptionPtr subscription, const gchar *html_url, const gchar *source_url, const updateOptionsPtr options, faviconUpdatedCb callback, gpointer user_data) { const gchar *id; faviconDownloadCtxtPtr ctxt; gchar *tmp, *tmp2; debug_enter("favicon_download"); id = subscription->node->id; ctxt = favicon_download_ctxt_new (); ctxt->id = g_strdup (id); ctxt->options = update_options_copy (options); ctxt->callback = callback; ctxt->user_data = user_data; /* * This code tries to download from a series of URLs. If there are no * favicons, this will make five downloads, three of which will be 404 * errors. Hopefully this will not cause any webservers pain because * this code should be run only once a month per feed. * * 1. --> downloading favicon from the feed (e.g. tag in atom feeds) * 2. --> downloading HTML of the feed url and looking for a favicon reference * 3. --> downloading HTML of root of webserver and looking for a favicon reference * 4. --> downloading favicon from the root HTML * 5. --> downloading favicon from directory of RSS feed * 6. --> downloading favicon from root of webserver of the RSS feed */ /* In the following These URLs will be prepared here and passed as a list to the download function that will then process in order until success or the end of the list is reached... */ debug1(DEBUG_UPDATE, "preparing download URLs for favicon %s...", ctxt->id); /* case 1. */ if (metadata_list_get (subscription->metadata, "icon")) { tmp = g_strstrip (g_strdup (metadata_list_get (subscription->metadata, "icon"))); ctxt->urls = g_slist_append (ctxt->urls, tmp); debug1 (DEBUG_UPDATE, "(1) adding favicon search URL: %s", tmp); } /* case 2. */ if(html_url) { tmp = g_strstrip (g_strdup (html_url)); ctxt->urls = g_slist_append(ctxt->urls, tmp); debug1(DEBUG_UPDATE, "(2) adding favicon search URL: %s", tmp); } /* case 3. */ g_assert(source_url); if(*source_url != '|') { tmp = tmp2 = g_strstrip (g_strdup (source_url)); if(tmp[strlen(tmp) - 1] == '/') tmp[strlen(tmp) - 1] = 0; /* Strip trailing slash */ tmp = strrchr(tmp, '/'); if(tmp) { *tmp = 0; ctxt->urls = g_slist_append(ctxt->urls, tmp2); debug1(DEBUG_UPDATE, "(3) adding favicon search URL: %s", tmp2); } } /* case 4. */ if(html_url) { if(2 < count_slashes(html_url)) { tmp = tmp2 = g_strstrip (g_strdup (html_url)); tmp = strstr(tmp, "://"); if(tmp) { tmp = strchr(tmp + 3, '/'); if(tmp) { *tmp = 0; tmp = tmp2; tmp2 = g_strdup_printf("%s/favicon.ico", tmp); ctxt->urls = g_slist_append(ctxt->urls, tmp2); debug1(DEBUG_UPDATE, "(4) adding favicon source URL: %s", tmp2); } } g_free(tmp); } } if(*source_url != '|' && 2 < count_slashes(source_url)) { /* case 5 */ tmp = tmp2 = g_strstrip (g_strdup (source_url)); tmp = strrchr(tmp, '/'); if(tmp) { *tmp = 0; tmp = tmp2; tmp2 = g_strdup_printf("%s/favicon.ico", tmp); ctxt->urls = g_slist_append(ctxt->urls, tmp2); debug1(DEBUG_UPDATE, "(5) adding favicon source URL: %s", tmp2); } g_free(tmp); /* case 6 */ tmp = tmp2 = g_strstrip (g_strdup (source_url)); tmp = strstr(tmp, "://"); if(tmp) { tmp = strchr(tmp + 3, '/'); /* to skip to first subpath */ if(tmp) { *tmp = 0; tmp = tmp2; tmp2 = g_strdup_printf("%s/favicon.ico", tmp); ctxt->urls = g_slist_append(ctxt->urls, tmp2); debug1(DEBUG_UPDATE, "(6) adding favicon source URL: %s", tmp2); } } g_free(tmp); } favicon_download_run(ctxt); debug_exit("favicon_download"); } liferea-1.12.7/src/favicon.h000066400000000000000000000051161352135647700156160ustar00rootroot00000000000000/** * @file favicon.h Liferea favicon handling * * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2015 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _FAVICON_H #define _FAVICON_H #include #include #include "subscription.h" #include "update.h" /** * Tries to load a given favicon from cache. * * @param id the favicon id * @param size width / height in pixel * * @returns a pixmap (or NULL) */ GdkPixbuf * favicon_load_from_cache (const gchar *id, guint size); /** * Removes a given favicon from the favicon cache. * * @param id the favicon id */ void favicon_remove_from_cache(const gchar *id); /** * Checks whether a given favicon needs to be updated * * @param id the favicon id * @param updateState update state info of the favicon * @param now current time */ gboolean favicon_update_needed (const gchar *id, updateStatePtr updateState, GTimeVal *now); /** * Favicon download callback. Called after the download * has finished (both on success and failure). * * @param user_data user data for the callback */ typedef void (*faviconUpdatedCb)(gpointer user_data); /** * Tries to download a favicon from and relative to a given * feed source URL and an optional feed HTML URL. Can be used * for non-feed related favicon download too. * * @param subscription subscription whose icon is going to be updated * @param html_url URL of a website where a favicon could be found (optional) * @param source_url URL (usually the feed source) where a favicon can be found (mandatory) * @param options download options * @param callback callback to triggered on success * @param user_data user data to be passed to callback */ void favicon_download (subscriptionPtr subscription, const gchar *html_url, const gchar *source_url, const updateOptionsPtr options, faviconUpdatedCb callback, gpointer user_data); #endif liferea-1.12.7/src/feed.c000066400000000000000000000305071352135647700150710ustar00rootroot00000000000000/** * @file feed.c feed node and subscription type * * Copyright (C) 2003-2017 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "feed.h" #include #include "conf.h" #include "common.h" #include "db.h" #include "debug.h" #include "favicon.h" #include "feedlist.h" #include "html.h" #include "itemlist.h" #include "metadata.h" #include "node.h" #include "render.h" #include "update.h" #include "xml.h" #include "ui/icons.h" #include "ui/liferea_shell.h" #include "ui/subscription_dialog.h" #include "ui/feed_list_node.h" feedPtr feed_new (void) { feedPtr feed; feed = g_new0 (struct feed, 1); feed->cacheLimit = CACHE_DEFAULT; feed->valid = TRUE; return feed; } static void feed_import (nodePtr node, nodePtr parent, xmlNodePtr xml, gboolean trusted) { gchar *cacheLimitStr, *title; gchar *tmp; feedPtr feed = NULL; xmlChar *typeStr = xmlGetProp (xml, BAD_CAST"type"); feed = feed_new (); feed->fhp = feed_type_str_to_fhp (typeStr); xmlFree (typeStr); node_set_data (node, feed); node_set_subscription (node, subscription_import (xml, trusted)); /* Set the feed cache limit */ cacheLimitStr = xmlGetProp (xml, BAD_CAST "cacheLimit"); if (cacheLimitStr && !xmlStrcmp (cacheLimitStr, "unlimited")) feed->cacheLimit = CACHE_UNLIMITED; else feed->cacheLimit = common_parse_long (cacheLimitStr, CACHE_DEFAULT); xmlFree (cacheLimitStr); /* enclosure auto download flag */ tmp = xmlGetProp (xml, BAD_CAST"encAutoDownload"); if (tmp && !xmlStrcmp (tmp, BAD_CAST"true")) feed->encAutoDownload = TRUE; xmlFree (tmp); /* comment feed handling flag */ tmp = xmlGetProp (xml, BAD_CAST"ignoreComments"); if (tmp && !xmlStrcmp (tmp, BAD_CAST"true")) feed->ignoreComments = TRUE; xmlFree (tmp); tmp = xmlGetProp (xml, BAD_CAST"markAsRead"); if (tmp && !xmlStrcmp (tmp, BAD_CAST"true")) feed->markAsRead = TRUE; xmlFree (tmp); tmp = xmlGetProp (xml, BAD_CAST"html5Extract"); if (tmp && !xmlStrcmp (tmp, BAD_CAST"true")) feed->html5Extract = TRUE; xmlFree (tmp); title = xmlGetProp (xml, BAD_CAST"title"); if (!title || !xmlStrcmp (title, BAD_CAST"")) { if (title) xmlFree (title); title = xmlGetProp (xml, BAD_CAST"text"); } node_set_title (node, title); xmlFree (title); if (node->subscription) debug4 (DEBUG_CACHE, "import feed: title=%s source=%s typeStr=%s interval=%d", node_get_title (node), subscription_get_source (node->subscription), typeStr, subscription_get_update_interval (node->subscription)); } static void feed_export (nodePtr node, xmlNodePtr xml, gboolean trusted) { feedPtr feed = (feedPtr) node->data; gchar *cacheLimit = NULL; if (node->subscription) subscription_export (node->subscription, xml, trusted); if (trusted) { if (feed->cacheLimit >= 0) cacheLimit = g_strdup_printf ("%d", feed->cacheLimit); if (feed->cacheLimit == CACHE_UNLIMITED) cacheLimit = g_strdup ("unlimited"); if (cacheLimit) xmlNewProp (xml, BAD_CAST"cacheLimit", BAD_CAST cacheLimit); if (feed->encAutoDownload) xmlNewProp (xml, BAD_CAST"encAutoDownload", BAD_CAST"true"); if (feed->ignoreComments) xmlNewProp (xml, BAD_CAST"ignoreComments", BAD_CAST"true"); if (feed->markAsRead) xmlNewProp (xml, BAD_CAST"markAsRead", BAD_CAST"true"); if (feed->html5Extract) xmlNewProp (xml, BAD_CAST"html5Extract", BAD_CAST"true"); } if (node->subscription) debug3 (DEBUG_CACHE, "adding feed: source=%s interval=%d cacheLimit=%s", subscription_get_source (node->subscription), subscription_get_update_interval (node->subscription), (cacheLimit != NULL ? cacheLimit : "")); g_free (cacheLimit); } static void feed_add_xml_attributes (nodePtr node, xmlNodePtr feedNode) { feedPtr feed = (feedPtr)node->data; gchar *tmp; xmlNewTextChild (feedNode, NULL, "feedId", node_get_id (node)); xmlNewTextChild (feedNode, NULL, "feedTitle", node_get_title (node)); if (node->subscription) subscription_to_xml (node->subscription, feedNode); tmp = g_strdup_printf("%d", node->available?1:0); xmlNewTextChild(feedNode, NULL, "feedStatus", tmp); g_free(tmp); tmp = g_strdup_printf("file://%s", node_get_favicon_file (node)); xmlNewTextChild(feedNode, NULL, "favicon", tmp); g_free(tmp); if(feed->parseErrors && (strlen(feed->parseErrors->str) > 0)) xmlNewTextChild(feedNode, NULL, "parseError", feed->parseErrors->str); } xmlDocPtr feed_to_xml (nodePtr node, xmlNodePtr feedNode) { xmlDocPtr doc = NULL; if (!feedNode) { doc = xmlNewDoc ("1.0"); feedNode = xmlNewDocNode (doc, NULL, "feed", NULL); xmlDocSetRootElement (doc, feedNode); } feed_add_xml_attributes (node, feedNode); return doc; } guint feed_get_max_item_count (nodePtr node) { gint default_max_items; feedPtr feed = (feedPtr)node->data; switch (feed->cacheLimit) { case CACHE_DEFAULT: conf_get_int_value (DEFAULT_MAX_ITEMS, &default_max_items); return default_max_items; break; case CACHE_DISABLE: case CACHE_UNLIMITED: return G_MAXUINT; break; default: return feed->cacheLimit; break; } } // HTML5 Headline enrichment static void feed_enrich_item_cb (const struct updateResult * const result, gpointer userdata, updateFlags flags) { itemPtr item; gchar *article; if (!result->data || result->httpstatus >= 400) return; item = item_load (GPOINTER_TO_UINT (userdata)); if (!item) return; article = html_get_article (result->data, result->source); if (article) article = xhtml_strip_dhtml (article); if (article) { // Enable AMP images by replacing by gchar *tmp = g_strjoinv("metadata), "richContent", article); db_item_update (item); itemlist_update_item (item); g_free (article); } else { // If there is no HTML5 article try to fetch AMP source if there is one gchar *ampurl = html_get_amp_url (result->data); if (ampurl) { updateRequestPtr request; debug3 (DEBUG_HTML, "Fetching AMP HTML %ld %s : %s", item->id, item->title, ampurl); request = update_request_new (); update_request_set_source (request, ampurl); // Explicitely do not pass proxy/auth options to Google request->options = g_new0 (struct updateOptions, 1); update_execute_request (NULL, request, feed_enrich_item_cb, item, 0); } } item_unload (item); } /** * Checks content of an items source and tries to crawl content */ void feed_enrich_item (subscriptionPtr subscription, itemPtr item) { updateRequestPtr request; if (!item->source) return; // Don't enrich twice if (NULL != metadata_list_get (item->metadata, "richContent")) return; // Fetch item->link document and try to parse it as XHTML debug3 (DEBUG_HTML, "Fetching HTML5 %ld %s : %s", item->id, item->title, item->source); request = update_request_new (); update_request_set_source (request, item->source); // Pass options of parent feed (e.g. password, proxy...) request->options = update_options_copy (subscription->updateOptions); update_execute_request (subscription, request, feed_enrich_item_cb, GUINT_TO_POINTER (item->id), 0); } /* implementation of subscription type interface */ static void feed_process_update_result (subscriptionPtr subscription, const struct updateResult * const result, updateFlags flags) { feedParserCtxtPtr ctxt; nodePtr node = subscription->node; feedPtr feed = (feedPtr)node->data; debug_enter ("feed_process_update_result"); if (result->data) { /* parse the new downloaded feed into feed and itemSet */ ctxt = feed_create_parser_ctxt (); ctxt->feed = feed; ctxt->data = result->data; ctxt->dataLength = result->size; ctxt->subscription = subscription; /* try to parse the feed */ feed_parse (ctxt); if (ctxt->failed) { /* No feed found, display an error */ node->available = FALSE; g_string_prepend (feed->parseErrors, _("

Could not detect the type of this feed! Please check if the source really points to a resource provided in one of the supported syndication formats!

" "XML Parser Output:
")); g_string_append (feed->parseErrors, "
"); } else if (!ctxt->failed && !ctxt->feed->fhp) { /* There's a feed but no Handler. This means autodiscovery * found a feed, but we still need to download it. * An update should be in progress that will process it */ } else { /* Feed found, process it */ itemSetPtr itemSet; gboolean html5_enabled; node->available = TRUE; /* merge the resulting items into the node's item set */ itemSet = node_get_itemset (node); node->newCount = itemset_merge_items (itemSet, ctxt->items, ctxt->feed->valid, ctxt->feed->markAsRead); itemlist_merge_itemset (itemSet); itemset_free (itemSet); /* restore user defined properties if necessary */ if ((flags & FEED_REQ_RESET_TITLE) && ctxt->title) node_set_title (node, ctxt->title); if (flags > 0) db_subscription_update (subscription); liferea_shell_set_status_bar (_("\"%s\" updated..."), node_get_title (node)); } feed_free_parser_ctxt (ctxt); } else { node->available = FALSE; liferea_shell_set_status_bar (_("\"%s\" is not available"), node_get_title (node)); } feed_list_node_update (node->id); debug_exit ("feed_process_update_result"); } static gboolean feed_prepare_update_request (subscriptionPtr subscription, struct updateRequest *request) { /* Nothing to do. Feeds require no subscription extra handling. */ return TRUE; } /* implementation of the node type interface */ static itemSetPtr feed_load (nodePtr node) { return db_itemset_load(node->id); } static void feed_save (nodePtr node) { /* Nothing to do. Feeds do not have any UI states */ } static void feed_update_counters (nodePtr node) { node->itemCount = db_itemset_get_item_count (node->id); node->unreadCount = db_itemset_get_unread_count (node->id); } static void feed_remove (nodePtr node) { feed_list_node_remove_node (node); favicon_remove_from_cache (node->id); db_subscription_remove (node->id); } static const gchar * feed_get_direction(nodePtr feed) { if (node_get_title (feed)) return (common_get_text_direction (node_get_title (feed))); else return ("ltr"); } static gchar * feed_render (nodePtr node) { gchar *output = NULL; xmlDocPtr doc; renderParamPtr params; const gchar *text_direction = NULL; text_direction = feed_get_direction (node); params = render_parameter_new (); render_parameter_add (params, "appDirection='%s'", common_get_app_direction ()); render_parameter_add (params, "txtDirection='%s'", text_direction); doc = feed_to_xml (node, NULL); output = render_xml (doc, "feed", params); xmlFreeDoc (doc); return output; } static gboolean feed_add (void) { subscription_dialog_new (); return TRUE; } static void feed_properties (nodePtr node) { subscription_prop_dialog_new (node->subscription); } static void feed_free (nodePtr node) { feedPtr feed = (feedPtr)node->data; if (feed->parseErrors) g_string_free (feed->parseErrors, TRUE); g_free (feed); } subscriptionTypePtr feed_get_subscription_type (void) { static struct subscriptionType sti = { feed_prepare_update_request, feed_process_update_result }; return &sti; } nodeTypePtr feed_get_node_type (void) { static struct nodeType nti = { NODE_CAPABILITY_SHOW_UNREAD_COUNT | NODE_CAPABILITY_UPDATE | NODE_CAPABILITY_UPDATE_FAVICON | NODE_CAPABILITY_EXPORT, "feed", /* not used, feed format ids are used instead */ NULL, feed_import, feed_export, feed_load, feed_save, feed_update_counters, feed_remove, feed_render, feed_add, feed_properties, feed_free }; nti.icon = icon_get (ICON_DEFAULT); return &nti; } liferea-1.12.7/src/feed.h000066400000000000000000000074751352135647700151060ustar00rootroot00000000000000/** * @file feed.h common feed handling interface * * Copyright (C) 2003-2017 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _FEED_H #define _FEED_H #include #include #include "node_type.h" #include "subscription_type.h" /* * The feed concept in Liferea comprises several standalone concepts: * * 1.) A "feed" is an XML document to be parsed * (-> see feed_parser.h) * * 2.) A "feed" is a node in the feed list. * * 3.) A "feed" is a way of updating a subscription. * * The feed.h interface provides default methods for 2.) and 3.) that * are used per-default but might be overwritten by node source, node * type or subscription type specific implementations. */ /** Common structure to hold all information about a single feed. */ typedef struct feed { struct feedHandler *fhp; /**< Feed format parsing handler. */ /* feed cache state properties */ gint cacheLimit; /**< Amount of cache to save: See the cache_limit enum */ /* feed parsing state */ gboolean valid; /**< FALSE if there was an error in xml_parse_feed() */ GString *parseErrors; /**< textual description of parsing errors */ gint64 time; /**< Feeds modified date */ /* feed specific behaviour settings */ gboolean encAutoDownload; /**< if TRUE do automatically download enclosures */ gboolean ignoreComments; /**< if TRUE ignore comment feeds for this feed */ gboolean markAsRead; /**< if TRUE downloaded items are automatically marked as read */ gboolean html5Extract; /**< if TRUE try to fetch extra content via HTML5 / Google AMP */ } *feedPtr; /** * Create a new feed structure. * * @returns a new feed structure */ feedPtr feed_new(void); /** * Serialization helper function for rendering purposes. * * @param node the feed node to serialize * @param feedNode XML node to add feed attributes to, * or NULL if a new XML document is to * be created * * @returns a new XML document (if feedNode was NULL) */ xmlDocPtr feed_to_xml(nodePtr node, xmlNodePtr xml); // FIXME: doesn't seem to belong here (looks like a subscription type method) /** * Returns the feed-specific maximum cache size. * If none is set it returns the global default * setting. * * @param node the feed node * * @returns max item count */ guint feed_get_max_item_count(nodePtr node); // FIXME: doesn't seem to belong here (looks like a subscription method) /** * feed_enrich_item: * Tries to fetch extra content for the item description * * @subscription: the subscription * @item: the item */ void feed_enrich_item (subscriptionPtr subscription, itemPtr item); /** * Returns the subscription type implementation for simple feed nodes. * This subscription type is used as the default subscription type. */ subscriptionTypePtr feed_get_subscription_type (void); #define IS_FEED(node) (node->type == feed_get_node_type ()) /** * Returns the node type implementation for simple feed nodes. * This node type is the default node type for non-folder nodes. */ nodeTypePtr feed_get_node_type (void); #endif liferea-1.12.7/src/feed_parser.c000066400000000000000000000160521352135647700164440ustar00rootroot00000000000000/** * @file feed_parser.c parsing of different feed formats * * Copyright (C) 2008-2017 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "common.h" #include "debug.h" #include "html.h" #include "metadata.h" #include "xml.h" #include "parsers/cdf_channel.h" #include "parsers/rss_channel.h" #include "parsers/atom10.h" #include "parsers/pie_feed.h" static GSList *feedHandlers = NULL; /**< list of available parser implementations */ struct feed_type { gint id_num; gchar *id_str; }; static GSList * feed_parsers_get_list (void) { if (feedHandlers) return feedHandlers; feedHandlers = g_slist_append (feedHandlers, rss_init_feed_handler ()); feedHandlers = g_slist_append (feedHandlers, cdf_init_feed_handler ()); feedHandlers = g_slist_append (feedHandlers, atom10_init_feed_handler ()); /* Must be before pie */ feedHandlers = g_slist_append (feedHandlers, pie_init_feed_handler ()); return feedHandlers; } const gchar * feed_type_fhp_to_str (feedHandlerPtr fhp) { if (!fhp) return NULL; return fhp->typeStr; } feedHandlerPtr feed_type_str_to_fhp (const gchar *str) { GSList *iter; feedHandlerPtr fhp = NULL; if (!str) return NULL; if (strstr(str, "pie")) return feed_type_str_to_fhp ("atom"); for(iter = feed_parsers_get_list (); iter != NULL; iter = iter->next) { fhp = (feedHandlerPtr)iter->data; if(!strcmp(str, fhp->typeStr)) return fhp; } return NULL; } feedParserCtxtPtr feed_create_parser_ctxt (void) { feedParserCtxtPtr ctxt; ctxt = g_new0 (struct feedParserCtxt, 1); ctxt->tmpdata = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free); return ctxt; } void feed_free_parser_ctxt (feedParserCtxtPtr ctxt) { if (ctxt) { /* Don't free the itemset! */ g_hash_table_destroy (ctxt->tmpdata); g_free (ctxt->title); g_free (ctxt); } } /** * This function tries to find a feed link for a given HTTP URI. It * tries to download it. If it finds a valid feed source it parses * this source instead into the given feed parsing context. It also * replaces the HTTP URI with the found feed source. */ static void feed_parser_auto_discover (feedParserCtxtPtr ctxt) { gchar *source; if (ctxt->feed->parseErrors) g_string_truncate (ctxt->feed->parseErrors, 0); else ctxt->feed->parseErrors = g_string_new(NULL); debug1 (DEBUG_UPDATE, "Starting feed auto discovery (%s)", subscription_get_source (ctxt->subscription)); source = html_auto_discover_feed (ctxt->data, subscription_get_source (ctxt->subscription)); /* FIXME: we only need the !g_str_equal as a workaround after a 404 */ if (source && !g_str_equal (source, subscription_get_source (ctxt->subscription))) { debug1 (DEBUG_UPDATE, "Discovered link: %s", source); ctxt->failed = FALSE; subscription_set_source (ctxt->subscription, source); /* The feed that was processed wasn't the correct one, we need to redownload it. * Cancel the update in case there's one in progress */ subscription_cancel_update (ctxt->subscription); subscription_update (ctxt->subscription, FEED_REQ_RESET_TITLE); g_free (source); } else { debug0 (DEBUG_UPDATE, "No feed link found!"); g_string_append (ctxt->feed->parseErrors, _("The URL you want Liferea to subscribe to points to a webpage and the auto discovery found no feeds on this page. Maybe this webpage just does not support feed auto discovery.")); } } /** * General feed source parsing function. Parses the passed feed source * and tries to determine the source type. * * @param ctxt feed parsing context * * @returns FALSE if auto discovery is indicated, * TRUE if feed type was recognized and parsing was successful */ gboolean feed_parse (feedParserCtxtPtr ctxt) { xmlNodePtr cur; gboolean success = FALSE; debug_enter("feed_parse"); g_assert(NULL == ctxt->items); ctxt->failed = TRUE; /* reset on success ... */ if(ctxt->feed->parseErrors) g_string_truncate(ctxt->feed->parseErrors, 0); else ctxt->feed->parseErrors = g_string_new(NULL); /* try to parse buffer with XML and to create a DOM tree */ do { if(NULL == xml_parse_feed (ctxt)) { g_string_append_printf (ctxt->feed->parseErrors, _("XML error while reading feed! Feed \"%s\" could not be loaded!"), subscription_get_source (ctxt->subscription)); break; } if(NULL == (cur = xmlDocGetRootElement(ctxt->doc))) { g_string_append(ctxt->feed->parseErrors, _("Empty document!")); break; } while(cur && xmlIsBlankNode(cur)) { cur = cur->next; } if(!cur) break; if(!cur->name) { g_string_append(ctxt->feed->parseErrors, _("Invalid XML!")); break; } /* determine the syndication format and start parser */ GSList *handlerIter = feed_parsers_get_list (); while(handlerIter) { feedHandlerPtr handler = (feedHandlerPtr)(handlerIter->data); if(handler && handler->checkFormat && (*(handler->checkFormat))(ctxt->doc, cur)) { /* free old temp. parsing data, don't free right after parsing because it can be used until the last feed request is finished, move me to the place where the last request in list otherRequests is finished :-) */ g_hash_table_destroy(ctxt->tmpdata); ctxt->tmpdata = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free); /* we always drop old metadata */ metadata_list_free(ctxt->subscription->metadata); ctxt->subscription->metadata = NULL; ctxt->failed = FALSE; ctxt->feed->fhp = handler; (*(handler->feedParser))(ctxt, cur); break; } handlerIter = handlerIter->next; } } while(0); /* if the given URI isn't valid we need to start auto discovery */ if(ctxt->failed) feed_parser_auto_discover (ctxt); if(ctxt->failed) { /* Autodiscovery failed */ /* test if we have a HTML page */ if((strstr(ctxt->data, "") || strstr(ctxt->data, "") || strstr(ctxt->data, "data, "feed->parseErrors, _("Source points to HTML document.")); } else { debug0(DEBUG_UPDATE, "neither a known feed type nor a HTML document!"); g_string_append(ctxt->feed->parseErrors, _("Could not determine the feed type.")); } } else { debug1(DEBUG_UPDATE, "discovered feed format: %s", feed_type_fhp_to_str(ctxt->feed->fhp)); success = TRUE; } if(ctxt->doc) { xmlFreeDoc(ctxt->doc); ctxt->doc = NULL; } debug_exit("feed_parse"); return success; } liferea-1.12.7/src/feed_parser.h000066400000000000000000000066021352135647700164510ustar00rootroot00000000000000/** * @file feed_parser.h parsing of different feed formats * * Copyright (C) 2008 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _FEED_PARSER_H #define _FEED_PARSER_H #include #include "feed.h" /** Holds all information used on feed parsing time */ typedef struct feedParserCtxt { subscriptionPtr subscription; /**< the subscription the feed belongs to (optional) */ feedPtr feed; /**< the feed structure to fill */ GList *items; /**< the list of new items */ struct item *item; /**< the item currently parsed (or NULL) */ GHashTable *tmpdata; /**< tmp data hash used during stateful parsing */ gchar *title; /**< resulting feed/channel title */ gchar *data; /**< data buffer to parse */ gsize dataLength; /**< length of the data buffer */ xmlDocPtr doc; /**< the parsed data buffer */ gboolean failed; /**< TRUE if parsing failed because feed type could not be detected */ } *feedParserCtxtPtr; /** * Function type which parses the given feed data. * * @param ctxt feed parsing context * @param cur the XML node to parse */ typedef void (*feedParserFunc) (feedParserCtxtPtr ctxt, xmlNodePtr cur); /** * Function type which checks a given XML document if it has the expected format. * * @param doc the XML document * @param cur the XML node to parse * * @return TRUE if the XML document has the correct format */ typedef gboolean (*checkFormatFunc) (xmlDocPtr doc, xmlNodePtr cur); /** feed handler interface */ typedef struct feedHandler { const gchar *typeStr; /**< string representation of the feed type */ feedParserFunc feedParser; /**< feed type parse function */ checkFormatFunc checkFormat; /**< Parser for the feed type*/ } *feedHandlerPtr; /** * Creates a new feed parsing context. * * @returns a new feed parsing context */ feedParserCtxtPtr feed_create_parser_ctxt (void); /** * Frees the given parser context. Note: it does * not free the list of new items! * * @param ctxt the feed parsing context */ void feed_free_parser_ctxt (feedParserCtxtPtr ctxt); /** * Lookup a feed type string from the feed type id. * * @param id feed type id * * @returns feed parser implementation */ feedHandlerPtr feed_type_str_to_fhp (const gchar *id); /** * Get feed type id for a given parser implementation. * * @param fhp feed type handler * * @returns feed type id */ const gchar *feed_type_fhp_to_str (feedHandlerPtr fhp); /** * General feed source parsing function. Parses the passed feed source * and tries to determine the source type. * * @param ctxt feed parsing context * * @returns FALSE if auto discovery is indicated, * TRUE if feed type was recognized */ gboolean feed_parse (feedParserCtxtPtr ctxt); #endif liferea-1.12.7/src/feedlist.c000066400000000000000000000357711352135647700157750ustar00rootroot00000000000000/* * @file feedlist.c subscriptions as an hierarchic tree * * Copyright (C) 2005-2013 Lars Windolf * Copyright (C) 2005-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "comments.h" #include "common.h" #include "conf.h" #include "db.h" #include "debug.h" #include "feed.h" #include "feedlist.h" #include "folder.h" #include "itemlist.h" #include "net_monitor.h" #include "node.h" #include "update.h" #include "vfolder.h" #include "ui/feed_list_view.h" #include "ui/itemview.h" #include "ui/liferea_shell.h" #include "ui/feed_list_node.h" #include "fl_sources/node_source.h" static void feedlist_save (void); #define FEEDLIST_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), FEEDLIST_TYPE, FeedListPrivate)) struct FeedListPrivate { guint newCount; /*<< overall new item count */ nodePtr rootNode; /*<< the feed list root node */ nodePtr selectedNode; /*<< matches the node selected in the feed list tree view, which is not necessarily the displayed one (e.g. folders without recursive display enabled) */ guint saveTimer; /*<< timer id for delayed feed list saving */ guint autoUpdateTimer; /*<< timer id for auto update */ gboolean loading; /*<< prevents the feed list being saved before it is completely loaded */ }; enum { NEW_ITEMS, /*<< node has new items after update */ NODE_UPDATED, /*<< node display info (title, unread count) has changed */ LAST_SIGNAL }; #define ROOTNODE feedlist->priv->rootNode #define SELECTED feedlist->priv->selectedNode static guint feedlist_signals[LAST_SIGNAL] = { 0 }; static GObjectClass *parent_class = NULL; FeedList *feedlist = NULL; G_DEFINE_TYPE (FeedList, feedlist, G_TYPE_OBJECT); static void feedlist_free_node (nodePtr node) { if (node->children) node_foreach_child (node, feedlist_free_node); node->parent->children = g_slist_remove (node->parent->children, node); node_free (node); } static void feedlist_finalize (GObject *object) { /* Stop all timer based activity */ if (feedlist->priv->autoUpdateTimer) { g_source_remove (feedlist->priv->autoUpdateTimer); feedlist->priv->autoUpdateTimer = 0; } if (feedlist->priv->saveTimer) { g_source_remove (feedlist->priv->saveTimer); feedlist->priv->saveTimer = 0; } /* Enforce synchronous save upon exit */ feedlist_save (); /* Save last selection for next start */ if (feedlist->priv->selectedNode) conf_set_str_value (LAST_NODE_SELECTED, feedlist->priv->selectedNode->id); /* And destroy everything */ feedlist_foreach (feedlist_free_node); node_free (ROOTNODE); ROOTNODE = NULL; /* This might also be a good place to get for some other cleanup */ comments_deinit (); G_OBJECT_CLASS (parent_class)->finalize (object); } static void feedlist_class_init (FeedListClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = feedlist_finalize; feedlist_signals[NEW_ITEMS] = g_signal_new ("new-items", G_OBJECT_CLASS_TYPE (object_class), (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION), 0, NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); feedlist_signals[NODE_UPDATED] = g_signal_new ("node-updated", G_OBJECT_CLASS_TYPE (object_class), (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION), 0, NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); g_type_class_add_private (object_class, sizeof(FeedListPrivate)); } static gboolean feedlist_auto_update (void *data) { debug_enter ("feedlist_auto_update"); if (network_monitor_is_online ()) node_auto_update_subscription (ROOTNODE); else debug0 (DEBUG_UPDATE, "no update processing because we are offline!"); debug_exit ("feedlist_auto_update"); return TRUE; } static void on_network_status_changed (gpointer instance, gboolean online, gpointer data) { if (online) feedlist_auto_update (NULL); } /* This method is used to initialize the node states in the feed list */ static void feedlist_init_node (nodePtr node) { if (node->expanded) feed_list_node_set_expansion (node, TRUE); if (node->subscription) db_subscription_load (node->subscription); node_update_counters (node); feed_list_node_update (node->id); /* Necessary to initially set folder unread counters */ node_foreach_child (node, feedlist_init_node); } static void feedlist_init (FeedList *fl) { gint startup_feed_action; debug_enter ("feedlist_init"); /* 1. Prepare globally accessible singleton */ g_assert (NULL == feedlist); feedlist = fl; feedlist->priv = FEEDLIST_GET_PRIVATE (fl); feedlist->priv->loading = TRUE; /* 2. Set up a root node and import the feed list source structure. */ debug0 (DEBUG_CACHE, "Setting up root node"); ROOTNODE = node_source_setup_root (); /* 3. Ensure folder expansion and unread count*/ debug0 (DEBUG_CACHE, "Initializing node state"); feedlist_foreach (feedlist_init_node); /* 4. Check if feeds do need updating. */ debug0 (DEBUG_UPDATE, "Performing initial feed update"); conf_get_int_value (STARTUP_FEED_ACTION, &startup_feed_action); if (0 == startup_feed_action) { /* Update all feeds */ if (network_monitor_is_online ()) { debug0 (DEBUG_UPDATE, "initial update: updating all feeds"); node_update_subscription (feedlist_get_root (), GUINT_TO_POINTER (0)); } else { debug0 (DEBUG_UPDATE, "initial update: prevented because we are offline"); } } else { debug0 (DEBUG_UPDATE, "initial update: resetting feed counter"); feedlist_reset_update_counters (NULL); } /* 5. Purge old nodes from the database */ db_node_cleanup (feedlist_get_root ()); /* 6. Start automatic updating */ feedlist->priv->autoUpdateTimer = g_timeout_add_seconds (10, feedlist_auto_update, NULL); g_signal_connect (network_monitor_get (), "online-status-changed", G_CALLBACK (on_network_status_changed), NULL); /* 7. Finally save the new feed list state */ feedlist->priv->loading = FALSE; feedlist_schedule_save (); debug_exit ("feedlist_init"); } static void feedlist_unselect(void); nodePtr feedlist_get_root (void) { return ROOTNODE; } nodePtr feedlist_get_selected (void) { return SELECTED; } static nodePtr feedlist_get_parent_node (void) { g_assert (NULL != ROOTNODE); if (!SELECTED) return ROOTNODE; if (IS_FOLDER (SELECTED)) return SELECTED; if (SELECTED->parent) return SELECTED->parent; return ROOTNODE; } nodePtr feedlist_find_node (nodePtr parent, feedListFindType type, const gchar *str) { GSList *iter; g_assert (str); iter = parent->children; while (iter) { gboolean found = FALSE; nodePtr result, node = (nodePtr)iter->data; /* Check child node */ switch (type) { case NODE_BY_URL: if (node->subscription) found = g_str_equal (str, subscription_get_source (node->subscription)); break; case NODE_BY_ID: found = g_str_equal (str, node->id); break; case FOLDER_BY_TITLE: if (IS_FOLDER (node)) found = g_str_equal (str, node->title); break; default: break; } if (found) return node; /* And recurse */ result = feedlist_find_node (node, type, str); if (result) return result; iter = g_slist_next (iter); } return NULL; } gboolean feedlist_is_writable (void) { nodePtr node; node = feedlist_get_parent_node (); return (0 != (NODE_TYPE (node->source->root)->capabilities & NODE_CAPABILITY_ADD_CHILDS)); } static void feedlist_update_node_counters (nodePtr node) { node_update_counters (node); /* update with parent propagation */ if (node->needsUpdate) feed_list_node_update (node->id); if (node->children) node_foreach_child (node, feedlist_update_node_counters); } void feedlist_mark_all_read (nodePtr node) { if (!node) return; feedlist_reset_new_item_count (); if (node != ROOTNODE) node_mark_all_read (node); else node_foreach_child (ROOTNODE, node_mark_all_read); feedlist_foreach (feedlist_update_node_counters); itemview_select_item (NULL); itemview_update_all_items (); itemview_update (); } /* statistic handling methods */ guint feedlist_get_unread_item_count (void) { if (!feedlist) return 0; return (ROOTNODE->unreadCount > 0)?ROOTNODE->unreadCount:0; } guint feedlist_get_new_item_count (void) { if (!feedlist) return 0; return (feedlist->priv->newCount > 0)?feedlist->priv->newCount:0; } void feedlist_reset_new_item_count (void) { if (feedlist->priv->newCount) feedlist->priv->newCount = 0; feedlist_new_items (0); } void feedlist_add_folder (const gchar *title) { nodePtr parent; g_assert (NULL != title); parent = feedlist_get_parent_node (); if(0 == (NODE_TYPE (parent->source->root)->capabilities & NODE_CAPABILITY_ADD_CHILDS)) return; node_source_add_folder (parent->source->root, title); } void feedlist_add_subscription (const gchar *source, const gchar *filter, updateOptionsPtr options, gint flags) { nodePtr parent; g_assert (NULL != source); parent = feedlist_get_parent_node (); if (0 == (NODE_TYPE (parent->source->root)->capabilities & NODE_CAPABILITY_ADD_CHILDS)) { g_warning ("feedlist_add_subscription: this should never happen!"); return; } node_source_add_subscription (parent->source->root, subscription_new (source, filter, options)); } void feedlist_node_imported (nodePtr node) { feed_list_node_add (node); feedlist_schedule_save (); } void feedlist_node_added (nodePtr node) { gint position = -1; g_assert (NULL == node->parent); if (SELECTED && !IS_FOLDER (SELECTED)) { position = g_slist_index (SELECTED->parent->children, SELECTED); if (position > -1) position++; /* insert after selected child index */ } node_set_parent (node, feedlist_get_parent_node (), position); if (node->subscription) db_subscription_update (node->subscription); db_node_update (node); feedlist_node_imported (node); feed_list_view_select (node); } void feedlist_remove_node (nodePtr node) { if (node->source->root != node) node_source_remove_node (node->source->root, node); else feedlist_node_removed (node); } void feedlist_node_removed (nodePtr node) { if (node == SELECTED) feedlist_unselect (); /* First remove all children */ node_foreach_child (node, feedlist_node_removed); node_remove (node); feed_list_node_remove_node (node); node->parent->children = g_slist_remove (node->parent->children, node); node_free (node); feedlist_schedule_save (); } /* Checks if the given node is a subscription node and has at least one unread item or is selected, if yes it is added to the list ref passed as user_data */ static void feedlist_collect_unread (nodePtr node, gpointer user_data) { GSList **list = (GSList **)user_data; if (node->children) { node_foreach_child_data (node, feedlist_collect_unread, user_data); return; } if (!node->subscription) return; if (!node->unreadCount && !g_str_equal (node->id, SELECTED->id)) return; *list = g_slist_append (*list, g_strdup (node->id)); } nodePtr feedlist_find_unread_feed (nodePtr folder) { GSList *list = NULL; nodePtr result = NULL; feedlist_foreach_data (feedlist_collect_unread, &list); if (list) { // Pass 1: try after selected node in list if (SELECTED) { GSList *s = g_slist_find_custom (list, SELECTED->id, g_strcmp0); if (s) s = g_slist_next (s); if (s) result = node_from_id (s->data); } // Pass 2: just return first node in list if (!result) result = node_from_id (list->data); g_slist_free_full (list, g_free); } return result; } /* selection handling */ static void feedlist_unselect (void) { SELECTED = NULL; itemview_set_displayed_node (NULL); itemview_update (); itemlist_unload (FALSE /* mark all read */); feed_list_view_select (NULL); liferea_shell_update_feed_menu (TRUE, FALSE, FALSE); liferea_shell_update_allitems_actions (FALSE, FALSE); } void feedlist_selection_changed (nodePtr node) { debug_enter ("feedlist_selection_changed"); debug1 (DEBUG_GUI, "new selected node: %s", node?node_get_title (node):"none"); if (node != SELECTED) { /* When the user selects a feed in the feed list we assume that he got notified of the new items or isn't interested in the event anymore... */ if (0 != feedlist->priv->newCount) feedlist_reset_new_item_count (); /* Unload visible items. */ itemlist_unload (TRUE); /* Load items of new selected node. */ SELECTED = node; if (SELECTED) { itemlist_set_view_mode (node_get_view_mode (SELECTED)); itemlist_load (SELECTED); } else { itemview_clear (); } } debug_exit ("feedlist_selection_changed"); } static gboolean feedlist_schedule_save_cb (gpointer user_data) { /* step 1: request each node to save its state, that is mostly needed for nodes that are node sources */ feedlist_foreach (node_save); /* step 2: request saving for the root node and thereby forcing the default source to write an OPML file */ NODE_SOURCE_TYPE (ROOTNODE)->source_export (ROOTNODE); feedlist->priv->saveTimer = 0; return FALSE; } void feedlist_schedule_save (void) { if (feedlist->priv->loading || feedlist->priv->saveTimer) return; debug0 (DEBUG_CONF, "Scheduling feedlist save"); /* By waiting here 5s and checking feedlist_save_time we hope to catch bulks of feed list changes and save less often */ feedlist->priv->saveTimer = g_timeout_add_seconds (5, feedlist_schedule_save_cb, NULL); } /* Handling updates */ void feedlist_new_items (guint newCount) { feedlist->priv->newCount += newCount; /* On subsequent feed updates with cache drops more new items can be reported than effectively were merged. The simplest way to catch this case is by checking for new count > unread count here. */ if (feedlist->priv->newCount > ROOTNODE->unreadCount) feedlist->priv->newCount = ROOTNODE->unreadCount; g_signal_emit_by_name (feedlist, "new-items", feedlist->priv->newCount); } void feedlist_node_was_updated (nodePtr node) { node_update_counters (node); feedlist_schedule_save (); g_signal_emit_by_name (feedlist, "node-updated", node->title); } /* This method is only to be used when exiting the program! */ static void feedlist_save (void) { debug0 (DEBUG_CONF, "Forced feed list save"); feedlist_schedule_save_cb (NULL); } void feedlist_reset_update_counters (nodePtr node) { GTimeVal now; if (!node) node = feedlist_get_root (); g_get_current_time (&now); node_foreach_child_data (node, node_reset_update_counter, &now); } FeedList * feedlist_create (void) { return FEEDLIST (g_object_new (FEEDLIST_TYPE, NULL)); } liferea-1.12.7/src/feedlist.h000066400000000000000000000174331352135647700157750ustar00rootroot00000000000000/* * @file feedlist.h subscriptions as an hierarchic tree * * Copyright (C) 2005-2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _FEEDLIST_H #define _FEEDLIST_H #include #include #include "node.h" #include "update.h" G_BEGIN_DECLS #define FEEDLIST_TYPE (feedlist_get_type ()) #define FEEDLIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FEEDLIST_TYPE, FeedList)) #define FEEDLIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), FEEDLIST_TYPE, FeedListClass)) #define IS_FEEDLIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FEEDLIST_TYPE)) #define IS_FEEDLIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), FEEDLIST_TYPE)) typedef struct FeedList FeedList; typedef struct FeedListClass FeedListClass; typedef struct FeedListPrivate FeedListPrivate; extern FeedList *feedlist; struct FeedList { GObject parent; /*< private >*/ FeedListPrivate *priv; }; struct FeedListClass { GObjectClass parent_class; }; GType feedlist_get_type (void); /** * feedlist_create: (skip) * * Set up the feed list. * * Returns: (transfer full): the feed list instance */ FeedList * feedlist_create (void); /** * feedlist_get_selected: (skip) * * Get currently selected feed list node * * Returns: (transfer none) (nullable): selected node (or NULL) */ nodePtr feedlist_get_selected (void); /** * feedlist_get_unread_item_count: * * Query overall number of unread items. * * Returns: overall number of unread items. */ guint feedlist_get_unread_item_count (void); /** * feedlist_get_new_item_count: * * Query overall number of new items. * * Note: result might be slightly off, but error * won't aggregate over time. * * Returns: overall number of new items. */ guint feedlist_get_new_item_count (void); /** * feedlist_reset_new_item_count: * * Reset the global feed list new item counter. * * TODO: use signal instead */ void feedlist_reset_new_item_count (void); /** * feedlist_node_was_updated: (skip) * @node: the updated node * * To be called when a feed is updated and has * new or dropped items forcing a node unread count * update for all affected nodes in the feed list. * */ void feedlist_node_was_updated (nodePtr node); /** * feedlist_get_root: (skip) * * Helper function to query the feed list root node. * * Returns: (transfer none): the feed list root node */ nodePtr feedlist_get_root (void); typedef enum { NODE_BY_URL, NODE_BY_ID, FOLDER_BY_TITLE } feedListFindType; /** * feedlist_find_node: (skip) * @parent: (nullable): parent node to traverse from (or NULL) * @type: NODE_BY_(URL|FOLDER_TITLE|ID) * @str: string to compare to * * Search trough list of subscriptions for a node matching exactly * to an criteria defined by the find type and comparison string. * Searches recursively from a given parent node or the root node. * Always returns just the first occurence in traversal order. * * Returns: (nullable) (transfer none): a nodePtr or NULL */ nodePtr feedlist_find_node (nodePtr parent, feedListFindType type, const gchar *str); /** * feedlist_add_subscription: (skip) * @source: the subscriptions source URL * @filter: (nullable): NULL or the filter for the subscription * @options: (nullable): NULL or the update options * @flags: download request flags * * Adds a new subscription to the feed list. */ void feedlist_add_subscription (const gchar *source, const gchar *filter, updateOptionsPtr options, gint flags); /** * feedlist_add_folder: * @title: the title of the new folder. * * Adds a folder to the feed list without any user interaction. */ void feedlist_add_folder (const gchar *title); /** * feedlist_node_added: (skip) * @node: the new node * * Notifies the feed list controller that a new node * was added to the feed list. This method will insert * the new node into the feed list view and select * the new node. * * This method is used for all node types (feeds, folders...). * * Before calling this method the node must be given * a parent node using node_set_parent(). * */ void feedlist_node_added (nodePtr node); /** * feedlist_node_imported: (skip) * @node: the new node * * Notifies the feed list controller that a new node * was added to the feed list. Similar to feedlist_node_added() * the new node will be added to the feed list but the * selection won't be changed. * * This method is used for all node types (feeds, folders...). * * Before calling this method the node must be given * a parent node using node_set_parent(). * */ void feedlist_node_imported (nodePtr node); /** * feedlist_remove_node: (skip) * @node: the node to remove * * Removes the given node from the feed list. */ void feedlist_remove_node (nodePtr node); /** * feedlist_node_removed: (skip) * @node: the removed node * * Notifies the feed list controller that an existing * node was removed from it's source (feed list subtree) * and is to be destroyed and to be removed from the * feed list view. * */ void feedlist_node_removed (nodePtr node); /** * feedlist_schedule_save: (skip) * * Schedules a save requests for the feed list within the next 5s. * Triggers state saving for all feed list sources. */ void feedlist_schedule_save (void); /** * feedlist_reset_update_counters: (skip) * @node: (nullable): the node (or NULL for whole feed list) * * Resets the update counter of all childs of the given node * */ void feedlist_reset_update_counters (nodePtr node); gboolean feedlist_is_writable (void); /** * feedlist_mark_all_read: (skip) * @node: the node to start with * * Triggers a recursive mark-all-read on the given node * and updates the feed list afterwards. * */ void feedlist_mark_all_read (nodePtr node); /* feed list iterating interface */ /** * feedlist_foreach: (skip) * @func: the function to process all found elements * * Helper function to recursivly call node methods for all * nodes in the feed list. This method is just a wrapper for * node_foreach_child(). */ #define feedlist_foreach(func) node_foreach_child(feedlist_get_root(), func) /** * feedlist_foreach_data: (skip) * @func: the function to process all found elements * @user_data: specifies the second argument that func should be passed * * Helper function to recursivly call node methods for all * nodes in the feed list. This method is just a wrapper for * node_foreach_child_data(). * */ #define feedlist_foreach_data(func, user_data) node_foreach_child_data(feedlist_get_root(), func, user_data) /* UI callbacks */ /** * feedlist_selection_changed: (skip) * @node: the new selected node * * Callback for feed list selection change . */ void feedlist_selection_changed (nodePtr node); /** * feedlist_find_unread_feed: (skip) * @folder: the folder to search * * Tries to find the first node with an unread item in the given folder. * * Returns: (nullable) (transfer none): a found node or NULL */ nodePtr feedlist_find_unread_feed (nodePtr folder); /** * feedlist_new_items: (skip) * @newCount: number of new and unread items * * To be called when node subscription update gained new items. */ void feedlist_new_items (guint newCount); G_END_DECLS #endif liferea-1.12.7/src/fl_sources/000077500000000000000000000000001352135647700161615ustar00rootroot00000000000000liferea-1.12.7/src/fl_sources/Makefile.am000066400000000000000000000025251352135647700202210ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in AM_CPPFLAGS = \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ -DPACKAGE_LIB_DIR=\""$(pkglibdir)"\" \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ -I$(top_srcdir)/src \ $(PACKAGE_CFLAGS) noinst_LIBRARIES = libliflsources.a libliflsources_a_SOURCES = node_source.c node_source.h \ node_source_activatable.c node_source_activatable.h \ default_source.c default_source.h \ dummy_source.c dummy_source.h \ google_reader_api_edit.c google_reader_api_edit.h \ google_reader_api.h \ google_source.c google_source.h \ json_api_mapper.c json_api_mapper.h \ opml_source.c opml_source.h \ reedah_source.c reedah_source.h \ reedah_source_feed.c \ reedah_source_feed_list.c reedah_source_feed_list.h \ theoldreader_source.c theoldreader_source.h \ theoldreader_source_feed.c \ theoldreader_source_feed_list.c theoldreader_source_feed_list.h \ ttrss_source.c ttrss_source.h \ ttrss_source_feed.c \ ttrss_source_feed_list.c ttrss_source_feed_list.h libliflsources_a_CFLAGS = $(PACKAGE_FLAGS) liferea-1.12.7/src/fl_sources/default_source.c000066400000000000000000000143061352135647700213350ustar00rootroot00000000000000/** * @file default_source.c default static feed list source * * Copyright (C) 2005-2014 Lars Windolf * Copyright (C) 2005-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "common.h" #include "debug.h" #include "export.h" #include "feed.h" #include "feedlist.h" #include "folder.h" #include "migrate.h" #include "update.h" #include "fl_sources/default_source.h" #include "fl_sources/node_source.h" /** lock to prevent feed list saving while loading */ static gboolean feedlistImport = TRUE; static gchar * default_source_source_get_feedlist (nodePtr node) { return common_create_config_filename ("feedlist.opml"); } static void default_source_import (nodePtr node) { gchar *filename, *backupFilename; gchar *content; gssize length; debug_enter ("default_source_source_import"); g_assert (TRUE == feedlistImport); filename = default_source_source_get_feedlist (node); backupFilename = g_strdup_printf("%s.backup", filename); if (g_file_test (filename, G_FILE_TEST_EXISTS)) { if (!import_OPML_feedlist (filename, node, FALSE, TRUE)) g_error ("Fatal: Feed list import failed! You might want to try to restore\n" "the feed list file %s from the backup in %s", filename, backupFilename); /* upon successful import create a backup copy of the feed list */ if (g_file_get_contents (filename, &content, &length, NULL)) { g_file_set_contents (backupFilename, content, length, NULL); g_free (content); } } else { /* If subscriptions could not be loaded try cache migration or provide a default feed list */ gchar *filename14 = g_strdup_printf ("%s/.liferea_1.4/feedlist.opml", g_get_home_dir ()); gchar *filename16 = g_strdup_printf ("%s/.liferea_1.6/feedlist.opml", g_get_home_dir ()); gchar *filename18 = g_strdup_printf ("%s/.liferea_1.8/feedlist.opml", g_get_home_dir ()); if (g_file_test (filename18, G_FILE_TEST_EXISTS)) { migration_execute (MIGRATION_FROM_18, node); } else if (g_file_test (filename16, G_FILE_TEST_EXISTS)) { migration_execute (MIGRATION_FROM_16, node); } else if (g_file_test (filename14, G_FILE_TEST_EXISTS)) { migration_execute (MIGRATION_FROM_14, node); } else { gchar *filename = common_get_localized_filename (PACKAGE_DATA_DIR "/" PACKAGE "/opml/feedlist_%s.opml"); if (!filename) g_error ("Fatal: No migration possible and no default feedlist found!"); if (!import_OPML_feedlist (filename, node, FALSE, TRUE)) g_error ("Fatal: Feed list import failed!"); g_free (filename); } g_free (filename18); g_free (filename16); g_free (filename14); } g_free (filename); g_free (backupFilename); feedlistImport = FALSE; debug_exit ("default_source_source_import"); } static void default_source_export (nodePtr node) { gchar *filename; if (feedlistImport) return; debug_enter ("default_source_source_export"); g_assert (node->source->root == feedlist_get_root ()); filename = default_source_source_get_feedlist (node); export_OPML_feedlist (filename, node->source->root, TRUE); g_free (filename); debug_exit ("default_source_source_export"); } static void default_source_auto_update (nodePtr node) { node_foreach_child (node, node_auto_update_subscription); } static nodePtr default_source_add_subscription (nodePtr node, subscriptionPtr subscription) { /* For the local feed list source subscriptions are always feed subscriptions implemented by the feed node and subscription type... */ nodePtr child = node_new (feed_get_node_type ()); node_set_title (child, _("New Subscription")); node_set_data (child, feed_new ()); node_set_subscription (child, subscription); /* feed subscription type is implicit */ feedlist_node_added (child); subscription_update (subscription, FEED_REQ_RESET_TITLE | FEED_REQ_PRIORITY_HIGH); return child; } static nodePtr default_source_add_folder (nodePtr node, const gchar *title) { /* For the local feed list source folders are always real folders implemented by the folder node type... */ nodePtr child = node_new (folder_get_node_type()); node_set_title (child, title); feedlist_node_added (child); return child; } static void default_source_remove_node (nodePtr node, nodePtr child) { /* The default source can always immediately serve remove requests. */ feedlist_node_removed (child); } static void default_source_init (void) { } static void default_source_deinit (void) { } /* node source type definition */ static struct nodeSourceType nst = { .id = "fl_default", .name = "Static Feed List", .capabilities = NODE_SOURCE_CAPABILITY_IS_ROOT | NODE_SOURCE_CAPABILITY_HIERARCHIC_FEEDLIST | NODE_SOURCE_CAPABILITY_ADD_FEED | NODE_SOURCE_CAPABILITY_ADD_FOLDER | NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST, .feedSubscriptionType = NULL, .sourceSubscriptionType = NULL, .source_type_init = default_source_init, .source_type_deinit = default_source_deinit, .source_new = NULL, .source_delete = NULL, .source_import = default_source_import, .source_export = default_source_export, .source_get_feedlist = default_source_source_get_feedlist, .source_auto_update = default_source_auto_update, .free = NULL, .add_subscription = default_source_add_subscription, .add_folder = default_source_add_folder, .remove_node = default_source_remove_node, .convert_to_local = NULL }; nodeSourceTypePtr default_source_get_type (void) { nst.feedSubscriptionType = feed_get_subscription_type (); return &nst; } liferea-1.12.7/src/fl_sources/default_source.h000066400000000000000000000021501352135647700213340ustar00rootroot00000000000000/** * @file default_source.h default static feedlist provider * * Copyright (C) 2005 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _DEFAULT_SOURCE_H #define _DEFAULT_SOURCE_H #ifdef HAVE_CONFIG_H # include #endif #include "fl_sources/node_source.h" /** * Returns default source type implementation info. */ nodeSourceTypePtr default_source_get_type(void); #endif /* _DEFAULT_SOURCE_H */ liferea-1.12.7/src/fl_sources/dummy_source.c000066400000000000000000000032311352135647700210370ustar00rootroot00000000000000/** * @file dummy_source.c dummy feed list source * * Copyright (C) 2006-2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "fl_sources/dummy_source.h" #include "ui/icons.h" static gchar * dummy_source_get_feedlist(nodePtr node) { return NULL; } static void dummy_source_noop (nodePtr node) { } static void dummy_source_import(nodePtr node) { node->icon = (gpointer)icon_get (ICON_UNAVAILABLE); } static void dummy_source_init(void) { } static void dummy_source_deinit(void) { } /* feed list provider plugin definition */ static struct nodeSourceType nst = { .id = NODE_SOURCE_TYPE_DUMMY_ID, .name = "Dummy Feed List Source", .source_type_init = dummy_source_init, .source_type_deinit = dummy_source_deinit, .source_import = dummy_source_import, .source_export = dummy_source_noop, .source_get_feedlist = dummy_source_get_feedlist, .source_auto_update = dummy_source_noop }; nodeSourceTypePtr dummy_source_get_type(void) { return &nst; } liferea-1.12.7/src/fl_sources/dummy_source.h000066400000000000000000000020441352135647700210450ustar00rootroot00000000000000/** * @file dummy_source.h dummy feed list source * * Copyright (C) 2005-2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _DUMMY_SOURCE_H #define _DUMMY_SOURCE_H #include "fl_sources/node_source.h" /** * Returns dummy source type implementation info. */ nodeSourceTypePtr dummy_source_get_type(void); #endif /* _DUMMY_SOURCE_H */ liferea-1.12.7/src/fl_sources/google_reader_api.h000066400000000000000000000036271352135647700217710ustar00rootroot00000000000000/** * @file google_reader_api.h Interface for implementing the Google Reader API * * Copyright (C) 2014-2015 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _GOOGLE_READER_API_H #define _GOOGLE_READER_API_H /** A set of tags (states) defined by Google Reader */ #define GOOGLE_READER_TAG_KEPT_UNREAD "user/-/state/com.google/kept-unread" #define GOOGLE_READER_TAG_READ "user/-/state/com.google/read" #define GOOGLE_READER_TAG_TRACKING_KEPT_UNREAD "user/-/state/com.google/tracking-kept-unread" #define GOOGLE_READER_TAG_STARRED "user/-/state/com.google/starred" typedef struct googleReaderApi { gboolean json; /**< Returns mostly JSON */ /** Endpoint definitions */ const char *unread_count; const char *subscription_list; const char *add_subscription; const char *add_subscription_post; const char *remove_subscription; const char *remove_subscription_post; const char *edit_tag; const char *edit_tag_add_post; const char *edit_tag_ar_tag_post; const char *edit_tag_remove_post; const char *edit_add_label; const char *edit_add_label_post; const char *token; /* when extending this list add assertions in node_source_type_register! */ } googleReaderApi; #endif liferea-1.12.7/src/fl_sources/google_reader_api_edit.c000066400000000000000000000451011352135647700227620ustar00rootroot00000000000000/** * @file google_reader_api_edit.c Google Reader API syncing support * * Copyright (C) 2008 Arnold Noronha * Copyright (C) 2014-2015 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "google_reader_api_edit.h" #include "common.h" #include "debug.h" #include "feedlist.h" #include "json.h" #include "update.h" #include "subscription.h" /** * A structure to indicate an edit to the node source remote feed "database". * These edits are put in a queue and processed in sequential order * so that the API endpoint does not end up processing the requests in an * unintended order. */ typedef struct GoogleReaderAction { /** * The guid of the item to edit. This will be ignored if the * edit is acting on an subscription rather than an item. */ gchar* guid; /** * A MANDATORY feed url to containing the item, or the url of the * subscription to edit. */ gchar* feedUrl; /** * The source type. Currently known types are "feed" and "user". * "user" sources are used, for example, for items that are links (as * opposed to posts) in broadcast-friends. The unique id of the source * is of the form /. */ gchar* feedUrlType; /** * An optional label id to use for an action (e.g. to add a feed label) * Must be of syntax "user/-/label/MyLabel" */ gchar* label; /** * A callback function on completion of the edit. */ void (*callback) (nodeSourcePtr source, struct GoogleReaderAction* edit, gboolean success); /** * The type of this GoogleReaderAction. */ int actionType; /** * The node source this action runs against (mandatory). */ nodeSourcePtr source; /** * The action result data (available on callback) */ gchar *response; } *GoogleReaderActionPtr; enum { EDIT_ACTION_MARK_READ, EDIT_ACTION_MARK_UNREAD, EDIT_ACTION_TRACKING_MARK_UNREAD, /**< every UNREAD request, should be followed by tracking-kept-unread */ EDIT_ACTION_MARK_STARRED, EDIT_ACTION_MARK_UNSTARRED, EDIT_ACTION_ADD_SUBSCRIPTION, EDIT_ACTION_REMOVE_SUBSCRIPTION, EDIT_ACTION_ADD_LABEL }; typedef struct GoogleReaderAction* editPtr; typedef struct GoogleReaderActionCtxt { gchar *nodeId; GoogleReaderActionPtr action; } *GoogleReaderActionCtxtPtr; static void google_reader_api_edit_push (nodeSourcePtr source, GoogleReaderActionPtr action, gboolean head); static GoogleReaderActionPtr google_reader_api_action_new (int actionType) { GoogleReaderActionPtr action = g_slice_new0 (struct GoogleReaderAction); action->actionType = actionType; return action; } static void google_reader_api_action_free (GoogleReaderActionPtr action) { g_free (action->guid); g_free (action->feedUrl); g_free (action->label); g_slice_free (struct GoogleReaderAction, action); } static GoogleReaderActionCtxtPtr google_reader_api_action_context_new(nodeSourcePtr source, GoogleReaderActionPtr action) { GoogleReaderActionCtxtPtr ctxt = g_slice_new0(struct GoogleReaderActionCtxt); ctxt->nodeId = g_strdup(source->root->id); ctxt->action = action; return ctxt; } static void google_reader_api_action_context_free(GoogleReaderActionCtxtPtr ctxt) { g_free(ctxt->nodeId); g_slice_free(struct GoogleReaderActionCtxt, ctxt); } static void google_reader_api_edit_action_complete (const struct updateResult* const result, gpointer userdata, updateFlags flags) { GoogleReaderActionCtxtPtr editCtxt = (GoogleReaderActionCtxtPtr) userdata; GoogleReaderActionPtr action = editCtxt->action; nodePtr node = node_from_id (editCtxt->nodeId); gboolean failed = FALSE; google_reader_api_action_context_free (editCtxt); if (!node) { google_reader_api_action_free (action); return; /* probably got deleted before this callback */ } // FIXME: suboptimal check as some results are text, some XML, some JSON... if (!g_str_equal (result->data, "OK")) { if (result->data == NULL) { failed = TRUE; } else { if (node->source->type->api.json) { JsonParser *parser = json_parser_new (); if (!json_parser_load_from_data (parser, result->data, -1, NULL)) { debug0 (DEBUG_UPDATE, "Failed to parse JSON update"); failed = TRUE; } else { const gchar *error = json_get_string (json_parser_get_root (parser), "error"); if (error) { debug1 (DEBUG_UPDATE, "Request failed with error '%s'", error); failed = TRUE; } } // FIXME: also check for "errors" array g_object_unref (parser); } else { failed = TRUE; } } } if (action->callback) { action->response = result->data; action->callback (node->source, action, !failed); } google_reader_api_action_free (action); if (failed) { debug1 (DEBUG_UPDATE, "The edit action failed with result: %s\n", result->data); return; /** @todo start a timer for next processing */ } /* process anything else waiting on the edit queue */ google_reader_api_edit_process (node->source); } /* the following google_reader_api_* functions are simply functions that convert a GoogleReaderActionPtr to a updateRequestPtr */ static void google_reader_api_add_subscription (GoogleReaderActionPtr action, updateRequestPtr request, const gchar* token) { update_request_set_source (request, action->source->type->api.add_subscription); gchar *s_escaped = g_uri_escape_string (action->feedUrl, NULL, TRUE); request->postdata = g_strdup_printf (action->source->type->api.add_subscription_post, s_escaped, token); g_free (s_escaped); } static void google_reader_api_remove_subscription (GoogleReaderActionPtr action, updateRequestPtr request, const gchar* token) { update_request_set_source (request, action->source->type->api.remove_subscription); gchar* s_escaped = g_uri_escape_string (action->feedUrl, NULL, TRUE); g_assert (!request->postdata); request->postdata = g_strdup_printf (action->source->type->api.remove_subscription_post, s_escaped, token); g_free (s_escaped); } static void google_reader_api_add_label (GoogleReaderActionPtr action, updateRequestPtr request, const gchar* token) { update_request_set_source (request, action->source->type->api.edit_add_label); gchar* s_escaped = g_uri_escape_string (action->feedUrl, NULL, TRUE); gchar *a_escaped = g_uri_escape_string (action->label, NULL, TRUE); request->postdata = g_strdup_printf (action->source->type->api.edit_add_label_post, s_escaped, a_escaped, token); g_free (a_escaped); g_free (s_escaped); } static void google_reader_api_edit_tag (GoogleReaderActionPtr action, updateRequestPtr request, const gchar *token) { update_request_set_source (request, action->source->type->api.edit_tag); const gchar* prefix = "feed"; gchar* s_escaped = g_uri_escape_string (action->feedUrl, NULL, TRUE); gchar* a_escaped = NULL; gchar* i_escaped = g_uri_escape_string (action->guid, NULL, TRUE);; gchar* postdata = NULL; /* * If the source of the item is a feed then the source *id* will be of * the form tag:google.com,2005:reader/feed/http://foo.com/bar * If the item is a shared link it is of the form * tag:google.com,2005:reader/user//source/com.google/link * It is possible that there are items other thank link that has * the ../user/.. id. The GR API requires the strings after ..:reader/ * while GoogleReaderAction only gives me after :reader/feed/ (or * :reader/user/ as the case might be). I therefore need to guess * the prefix ('feed/' or 'user/') from just this information. */ if (strstr(action->feedUrl, "://") == NULL) prefix = "user" ; if (action->actionType == EDIT_ACTION_MARK_UNREAD) { a_escaped = g_uri_escape_string (GOOGLE_READER_TAG_KEPT_UNREAD, NULL, TRUE); gchar *r_escaped = g_uri_escape_string (GOOGLE_READER_TAG_READ, NULL, TRUE); postdata = g_strdup_printf (action->source->type->api.edit_tag_ar_tag_post, i_escaped, prefix, s_escaped, a_escaped, r_escaped, token); g_free (r_escaped); } else if (action->actionType == EDIT_ACTION_MARK_READ) { a_escaped = g_uri_escape_string (GOOGLE_READER_TAG_READ, NULL, TRUE); postdata = g_strdup_printf (action->source->type->api.edit_tag_add_post, i_escaped, prefix, s_escaped, a_escaped, token); } else if (action->actionType == EDIT_ACTION_TRACKING_MARK_UNREAD) { a_escaped = g_uri_escape_string (GOOGLE_READER_TAG_TRACKING_KEPT_UNREAD, NULL, TRUE); postdata = g_strdup_printf (action->source->type->api.edit_tag_add_post, i_escaped, prefix, s_escaped, a_escaped, token); } else if (action->actionType == EDIT_ACTION_MARK_STARRED) { a_escaped = g_uri_escape_string (GOOGLE_READER_TAG_STARRED, NULL, TRUE) ; postdata = g_strdup_printf (action->source->type->api.edit_tag_add_post, i_escaped, prefix, s_escaped, a_escaped, token); } else if (action->actionType == EDIT_ACTION_MARK_UNSTARRED) { gchar* r_escaped = g_uri_escape_string(GOOGLE_READER_TAG_STARRED, NULL, TRUE); postdata = g_strdup_printf (action->source->type->api.edit_tag_remove_post, i_escaped, prefix, s_escaped, r_escaped, token); } else g_assert (FALSE); g_free (s_escaped); g_free (a_escaped); g_free (i_escaped); request->postdata = postdata; } static void google_reader_api_edit_token_cb (const struct updateResult * const result, gpointer userdata, updateFlags flags) { nodePtr node; const gchar* token; GoogleReaderActionPtr action; updateRequestPtr request; if (result->httpstatus != 200 || result->data == NULL) { /* FIXME: What is the behaviour that should go here? */ return; } node = node_from_id ((gchar*) userdata); g_free (userdata); if (!node) return; token = result->data; if (!node->source || g_queue_is_empty (node->source->actionQueue)) return; action = g_queue_peek_head (node->source->actionQueue); request = update_request_new (); request->updateState = update_state_copy (node->subscription->updateState); request->options = update_options_copy (node->subscription->updateOptions) ; update_request_set_auth_value (request, node->source->authToken); if (action->actionType == EDIT_ACTION_MARK_READ || action->actionType == EDIT_ACTION_MARK_UNREAD || action->actionType == EDIT_ACTION_TRACKING_MARK_UNREAD || action->actionType == EDIT_ACTION_MARK_STARRED || action->actionType == EDIT_ACTION_MARK_UNSTARRED) google_reader_api_edit_tag (action, request, token); else if (action->actionType == EDIT_ACTION_ADD_SUBSCRIPTION) google_reader_api_add_subscription (action, request, token); else if (action->actionType == EDIT_ACTION_REMOVE_SUBSCRIPTION) google_reader_api_remove_subscription (action, request, token); else if (action->actionType == EDIT_ACTION_ADD_LABEL) google_reader_api_add_label (action, request, token); debug1 (DEBUG_UPDATE, "google_reader_api: postdata [%s]", request->postdata); update_execute_request (node->source, request, google_reader_api_edit_action_complete, google_reader_api_action_context_new(node->source, action), 0); action = g_queue_pop_head (node->source->actionQueue); } void google_reader_api_edit_process (nodeSourcePtr source) { updateRequestPtr request; g_assert (source); if (g_queue_is_empty (source->actionQueue)) return; /* * Google reader has a system of tokens. So first, I need to request a * token from google, before I can make the actual edit request. The * code here is the token code, the actual edit commands are in * google_reader_api_edit_token_cb */ request = update_request_new (); request->updateState = update_state_copy (source->root->subscription->updateState); request->options = update_options_copy (source->root->subscription->updateOptions); request->source = g_strdup (source->type->api.token); update_request_set_auth_value(request, source->authToken); update_execute_request (source, request, google_reader_api_edit_token_cb, g_strdup(source->root->id), 0); } static void google_reader_api_edit_push_ (nodeSourcePtr source, GoogleReaderActionPtr action, gboolean head) { g_assert (source->actionQueue); action->source = source; if (head) g_queue_push_head (source->actionQueue, action); else g_queue_push_tail (source->actionQueue, action); } static void google_reader_api_edit_push (nodeSourcePtr source, GoogleReaderActionPtr action, gboolean head) { g_assert (source); g_assert (source->actionQueue); google_reader_api_edit_push_ (source, action, head); /** @todo any flags I should specify? */ if (source->loginState == NODE_SOURCE_STATE_NONE) subscription_update (source->root->subscription, NODE_SOURCE_UPDATE_ONLY_LOGIN); else if (source->loginState == NODE_SOURCE_STATE_ACTIVE) google_reader_api_edit_process (source); } static void update_read_state_callback (nodeSourcePtr source, GoogleReaderActionPtr action, gboolean success) { if (!success) debug0 (DEBUG_UPDATE, "Failed to change item state!"); } void google_reader_api_edit_mark_read (nodeSourcePtr source, const gchar *guid, const gchar *feedUrl, gboolean newStatus) { GoogleReaderActionPtr action; action = google_reader_api_action_new (newStatus?EDIT_ACTION_MARK_READ:EDIT_ACTION_MARK_UNREAD); action->guid = g_strdup (guid); action->feedUrl = g_strdup (feedUrl); action->callback = update_read_state_callback; google_reader_api_edit_push (source, action, FALSE); if (newStatus == FALSE) { /* * According to the Google Reader API, to mark an item unread, * I also need to mark it as tracking-kept-unread in a separate * network call. */ action = google_reader_api_action_new (EDIT_ACTION_TRACKING_MARK_UNREAD); action->guid = g_strdup (guid); action->feedUrl = g_strdup (feedUrl); google_reader_api_edit_push (source, action, FALSE); } } static void update_starred_state_callback(nodeSourcePtr source, GoogleReaderActionPtr action, gboolean success) { if (!success) debug0 (DEBUG_UPDATE, "Failed to change item state!"); } void google_reader_api_edit_mark_starred (nodeSourcePtr source, const gchar *guid, const gchar *feedUrl, gboolean newStatus) { GoogleReaderActionPtr action = google_reader_api_action_new (newStatus?EDIT_ACTION_MARK_STARRED:EDIT_ACTION_MARK_UNSTARRED); action->guid = g_strdup (guid); action->feedUrl = g_strdup (feedUrl); action->callback = update_starred_state_callback; google_reader_api_edit_push (source, action, FALSE); } static void google_reader_api_edit_add_subscription_complete (nodeSourcePtr source, GoogleReaderActionPtr action) { /* * It is possible that remote changed the name of the URL that * was sent to it. In that case, we need to recover the URL * from the list. But a node with the old URL has already * been created. Allow the subscription update call to fix that. */ GSList* cur = source->root->children ; for(; cur; cur = g_slist_next (cur)) { nodePtr node = (nodePtr) cur->data; if (node->subscription) { if (g_str_equal (node->subscription->source, action->feedUrl)) { subscription_set_source (node->subscription, ""); feedlist_node_added (node); } } } subscription_update (source->root->subscription, NODE_SOURCE_UPDATE_ONLY_LIST); } static void google_reader_api_edit_add_subscription2_cb (nodeSourcePtr source, GoogleReaderActionPtr action, gboolean success) { google_reader_api_edit_add_subscription_complete (source, action); } /* Subscription callback #1 (to set label (folder) before updating the feed list) */ static void google_reader_api_edit_add_subscription_cb (nodeSourcePtr source, GoogleReaderActionPtr action, gboolean success) { if (success) { if (action->label) { /* Extract returned new feed id (FIXME: is this only TheOldReader specific?) */ const gchar *id = NULL; JsonParser *parser = json_parser_new (); if (!json_parser_load_from_data (parser, action->response, -1, NULL)) { debug0 (DEBUG_UPDATE, "Failed to parse JSON response"); } else { id = json_get_string (json_parser_get_root (parser), "streamId"); if (!id) debug0 (DEBUG_UPDATE, "ERROR: Found no 'streamId' in response. Cannot set folder label!"); } if (id) { GoogleReaderActionPtr a = google_reader_api_action_new (EDIT_ACTION_ADD_LABEL); a->feedUrl = g_strdup (id); a->label = g_strdup (action->label); a->callback = google_reader_api_edit_add_subscription2_cb; google_reader_api_edit_push (source, a, TRUE); } g_object_unref (parser); } else { google_reader_api_edit_add_subscription_complete (source, action); } } else { debug0 (DEBUG_UPDATE, "Failed to subscribe"); // FIXME: real error handling (dialog...) } } void google_reader_api_edit_add_subscription (nodeSourcePtr source, const gchar* feedUrl, const gchar *label) { GoogleReaderActionPtr action = google_reader_api_action_new (EDIT_ACTION_ADD_SUBSCRIPTION); action->feedUrl = g_strdup (feedUrl); action->label = g_strdup (label); action->callback = google_reader_api_edit_add_subscription_cb; google_reader_api_edit_push (source, action, TRUE); } static void google_reader_api_edit_remove_callback (nodeSourcePtr source, GoogleReaderActionPtr action, gboolean success) { if (success) { /* * The node was removed from the feedlist, but could have * returned because of an update before this edit request * completed. No cleaner way to handle this. */ GSList* cur = source->root->children ; for(; cur; cur = g_slist_next (cur)) { nodePtr node = (nodePtr) cur->data ; if (g_str_equal (node->subscription->source, action->feedUrl)) { feedlist_node_removed (node); return; } } } else debug0 (DEBUG_UPDATE, "Failed to remove subscription"); } void google_reader_api_edit_remove_subscription (nodeSourcePtr source, const gchar* feedUrl) { GoogleReaderActionPtr action = google_reader_api_action_new (EDIT_ACTION_REMOVE_SUBSCRIPTION); action->feedUrl = g_strdup (feedUrl); action->callback = google_reader_api_edit_remove_callback; google_reader_api_edit_push (source, action, TRUE); } gboolean google_reader_api_edit_is_in_queue (nodeSourcePtr source, const gchar* guid) { /* this is inefficient, but works for the time being */ GList *cur = source->actionQueue->head; for(; cur; cur = g_list_next (cur)) { GoogleReaderActionPtr action = cur->data; if (action->guid && g_str_equal (action->guid, guid)) return TRUE; } return FALSE; } liferea-1.12.7/src/fl_sources/google_reader_api_edit.h000066400000000000000000000061401352135647700227670ustar00rootroot00000000000000/** * @file google_reader_api_edit.h Google Reader API syncing support * * Copyright (C) 2008 Arnold Noronha * Copyright (C) 2015 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _REEDAH_SOURCE_EDIT_H #define _REEDAH_SOURCE_EDIT_H #include "fl_sources/node_source.h" #include /** * Process the waiting edits on the edit queue. Call this if the state of * the nodeSource has changed. * * @param gsource The nodeSource whose editQueue should be processed. */ void google_reader_api_edit_process (nodeSourcePtr gsource); /** Edit wrappers */ /** * Mark the given item as read. * * @param gsource The nodeSource structure * @param guid The guid of the item whose status is to be edited * @param feedUrl The feedUrl of the feed containing the item. * @param newStatus The new read status of the item (TRUE for read) */ void google_reader_api_edit_mark_read (nodeSourcePtr gsource, const gchar* guid, const gchar* feedUrl, gboolean newStatus); /** * Mark the given item as starred. * * @param gsource The nodeSource structure * @param guid The guid of the item whose status is to be edited * @param feedUrl The feedUrl of the feed containing the item. * @param newStatus The new read status of the item (TRUE for read) */ void google_reader_api_edit_mark_starred (nodeSourcePtr gsource, const gchar *guid, const gchar *feedUrl, gboolean newStatus); /** * Add a subscription to the google source. * * @param gsource The nodeSource structure * @param feedUrl the feed to add * @param label label for new feed (or NULL) */ void google_reader_api_edit_add_subscription (nodeSourcePtr gsource, const gchar* feedUrl, const gchar* label); /** * Remove a subscription from the google source. * * @param gsource The nodeSource structure * @param feedUrl the feed to remove */ void google_reader_api_edit_remove_subscription (nodeSourcePtr gsource, const gchar* feedUrl); /** * Add a category for a subscription * * @param gsource The nodeSource structure * @param feedUrl the feed to set the category */ void google_reader_api_edit_add_label (nodeSourcePtr gsource, const gchar* feedUrl, const gchar *label); /** * See if an item with give guid is being modified * in the queue. * * @param nodeSource the nodeSource structure * @param guid the guid of the item */ gboolean google_reader_api_edit_is_in_queue (nodeSourcePtr gsource, const gchar* guid); #endif liferea-1.12.7/src/fl_sources/google_source.c000066400000000000000000000071451352135647700211700ustar00rootroot00000000000000/** * @file google_source.c Google reader feed list source support * * Copyright (C) 2007-2013 Lars Windolf * Copyright (C) 2008 Arnold Noronha * Copyright (C) 2011 Peter Oliver * Copyright (C) 2011 Sergey Snitsaruk * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "fl_sources/google_source.h" #include #include #include #include #include "common.h" #include "debug.h" #include "feedlist.h" #include "item_state.h" #include "metadata.h" #include "node.h" #include "subscription.h" #include "update.h" #include "xml.h" #include "ui/liferea_dialog.h" #include "fl_sources/node_source.h" #include "fl_sources/opml_source.h" /** default Google reader subscription list update interval = once a day */ #define GOOGLE_SOURCE_UPDATE_INTERVAL 60*60*24 /** create a google source with given node as root */ static GoogleSourcePtr google_source_new (nodePtr node) { GoogleSourcePtr source = g_new0 (struct GoogleSource, 1) ; return source; } static void google_source_free (GoogleSourcePtr gsource) { update_job_cancel_by_owner (gsource); g_free (gsource); } /* node source type implementation */ static void google_source_auto_update (nodePtr node) { } static void google_source_init (void) { metadata_type_register ("GoogleBroadcastOrigFeed", METADATA_TYPE_URL); metadata_type_register ("sharedby", METADATA_TYPE_TEXT); } static void google_source_deinit (void) { } static void google_source_import (nodePtr node) { opml_source_import (node); if (!node->data) node->data = (gpointer) google_source_new (node); } static void google_source_cleanup (nodePtr node) { GoogleSourcePtr reader = (GoogleSourcePtr) node->data; google_source_free(reader); node->data = NULL ; } /** * Convert all subscriptions of a google source to local feeds * * @param node The node to migrate (not the nodeSource!) */ static void google_source_convert_to_local (nodePtr node) { /* Nothing to do when migrating */ } /* node source type definition */ static struct nodeSourceType nst = { .id = "fl_google", .name = N_("Google Reader"), .capabilities = NODE_SOURCE_CAPABILITY_CONVERT_TO_LOCAL, .source_type_init = google_source_init, .source_type_deinit = google_source_deinit, .source_new = NULL, .source_delete = opml_source_remove, .source_import = google_source_import, .source_export = opml_source_export, .source_get_feedlist = opml_source_get_feedlist, .source_auto_update = google_source_auto_update, .free = google_source_cleanup, .item_set_flag = NULL, .item_mark_read = NULL, .add_folder = NULL, .add_subscription = NULL, .remove_node = NULL, .convert_to_local = google_source_convert_to_local }; nodeSourceTypePtr google_source_get_type (void) { nst.feedSubscriptionType = feed_get_subscription_type (); return &nst; } liferea-1.12.7/src/fl_sources/google_source.h000066400000000000000000000023331352135647700211670ustar00rootroot00000000000000/** * @file google_source.h Google Reader feed list source support * * Copyright (C) 2007-2013 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _GOOGLE_SOURCE_H #define _GOOGLE_SOURCE_H #include "fl_sources/node_source.h" /** * A nodeSource specific for keeping dead Google Reader sources */ typedef struct GoogleSource { /* No data anymore, since this is a dummy only */ } *GoogleSourcePtr; /** * @returns Google Reader source type implementation info. */ nodeSourceTypePtr google_source_get_type (void); #endif liferea-1.12.7/src/fl_sources/json_api_mapper.c000066400000000000000000000103471352135647700215000ustar00rootroot00000000000000/** * @file json_api_mapper.c data mapper for JSON APIs * * Copyright (C) 2013 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "json_api_mapper.h" #include #include "debug.h" #include "item.h" #include "metadata.h" #include "xml.h" JsonNode * json_api_get_node (JsonNode *parent, const gchar *mapping) { JsonNode *node = parent; gchar **step; gchar **steps = g_strsplit (g_strdup (mapping), "/", 0); step = steps; if (!*step) return node; while (*(step + 1) && node) { node = json_get_node (node, *step); step++; } g_strfreev (steps); return node; } const gchar * json_api_get_string (JsonNode *parent, const gchar *mapping) { JsonNode *node; const gchar *field; if (!parent || !mapping) return NULL; node = json_api_get_node (parent, mapping); if (!node) return NULL; field = strrchr (mapping, '/'); if (!field) field = mapping; else field++; return json_get_string (node, field); } gint json_api_get_int (JsonNode *parent, const gchar *mapping) { JsonNode *node; const gchar *field; if (!parent || !mapping) return 0; node = json_api_get_node (parent, mapping); if (!node) return 0; field = strrchr (mapping, '/'); if (!field) field = mapping; else field++; return json_get_int (node, field); } gboolean json_api_get_bool (JsonNode *parent, const gchar *mapping) { JsonNode *node; const gchar *field; if (!parent || !mapping) return FALSE; node = json_api_get_node (parent, mapping); if (!node) return FALSE; field = strrchr (mapping, '/'); if (!field) field = mapping; else field++; return json_get_bool (node, field); } GList * json_api_get_items (const gchar *json, const gchar *root, jsonApiMapping *mapping, jsonApiItemCallbackFunc callback) { GList *items = NULL; JsonParser *parser = json_parser_new (); if (json_parser_load_from_data (parser, json, -1, NULL)) { JsonArray *array = json_node_get_array (json_get_node (json_parser_get_root (parser), root)); GList *elements = json_array_get_elements (array); GList *iter = elements; debug1 (DEBUG_PARSING, "JSON API: found items root node \"%s\"", root); while (iter) { JsonNode *node = (JsonNode *)iter->data; itemPtr item = item_new (); /* Parse default feeds */ item_set_id (item, json_api_get_string (node, mapping->id)); item_set_title (item, json_api_get_string (node, mapping->title)); item_set_source (item, json_api_get_string (node, mapping->link)); item->time = json_api_get_int (node, mapping->updated); item->readStatus = json_api_get_bool (node, mapping->read); item->flagStatus = json_api_get_bool (node, mapping->flag); if (mapping->negateRead) item->readStatus = !item->readStatus; /* Handling encoded content */ const gchar *content; gchar *xhtml; content = json_api_get_string (node, mapping->description); if (mapping->xhtml) { xhtml = xhtml_extract_from_string (content, NULL); item_set_description (item, xhtml); xmlFree (xhtml); } else { item_set_description (item, content); } /* Optional meta data */ const gchar *tmp = json_api_get_string (node, mapping->author); if (tmp) item->metadata = metadata_list_append (item->metadata, "author", tmp); items = g_list_append (items, (gpointer)item); /* Allow optional item callback to process stuff */ if (callback) (*callback)(node, item); iter = g_list_next (iter); } g_list_free (elements); g_object_unref (parser); } else { debug1 (DEBUG_PARSING, "Could not parse JSON \"%s\"", json); } return items; } liferea-1.12.7/src/fl_sources/json_api_mapper.h000066400000000000000000000044141352135647700215030ustar00rootroot00000000000000/** * @file json_api_mapper.h data mapper for JSON APIs * * Copyright (C) 2013 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _JSON_API_MAPPER_H #define _JSON_API_MAPPER_H #include "item.h" #include "json.h" typedef struct jsonApiMapping { const gchar *id; /**< list of location steps to id field */ const gchar *title; /**< list of location steps to title field */ const gchar *link; /**< list of location steps to link field */ const gchar *description; /**< list of location steps to description field */ const gchar *updated; /**< list of location steps to updated field */ const gchar *author; /**< list of location steps to author field */ const gchar *read; /**< list of location steps to read field */ const gchar *flag; /**< list of location steps to flagged/marked/starred field */ gboolean negateRead; /**< TRUE if read status is to be negated (i.e. is "unread flag") */ gboolean xhtml; /**< TRUE if description field is XHTML */ } jsonApiMapping; typedef void (*jsonApiItemCallbackFunc)(JsonNode *node, itemPtr item); /** * Extracts all items from a JSON document. * * @param json the JSON document to parse * @param root the name of the root node (e.g. "items") * @param mapping hash table defining location steps and logic * @param callback optional callback function to process item node * for everything that cannot be easily mapped * * @returns a list of items (all to be freed with item_free()) or NULL */ GList * json_api_get_items (const gchar *json, const gchar *root, jsonApiMapping *mapping, jsonApiItemCallbackFunc callback); #endif liferea-1.12.7/src/fl_sources/node_source.c000066400000000000000000000454001352135647700206350ustar00rootroot00000000000000/* * @file node_source.c generic node source provider implementation * * Copyright (C) 2005-2018 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "fl_sources/node_source.h" #include #include #include #include "common.h" #include "db.h" #include "debug.h" #include "feed.h" #include "feedlist.h" #include "folder.h" #include "item_state.h" #include "node.h" #include "node_type.h" #include "plugins_engine.h" #include "ui/icons.h" #include "ui/liferea_dialog.h" #include "ui/ui_common.h" #include "ui/feed_list_node.h" #include "fl_sources/default_source.h" #include "fl_sources/dummy_source.h" #include "fl_sources/google_source.h" #include "fl_sources/opml_source.h" #include "fl_sources/reedah_source.h" #include "fl_sources/theoldreader_source.h" #include "fl_sources/ttrss_source.h" #include "fl_sources/node_source_activatable.h" static GSList *nodeSourceTypes = NULL; static PeasExtensionSet *extensions = NULL; nodePtr node_source_root_from_node (nodePtr node) { while (node->parent->source == node->source) node = node->parent; return node; } static nodeSourceTypePtr node_source_type_find (const gchar *typeStr, guint capabilities) { GSList *iter = nodeSourceTypes; while (iter) { nodeSourceTypePtr type = (nodeSourceTypePtr)iter->data; if (((NULL == typeStr) || !strcmp(type->id, typeStr)) && ((0 == capabilities) || (type->capabilities & capabilities))) return type; iter = g_slist_next (iter); } g_print ("Could not find source type \"%s\"\n!", typeStr); return NULL; } gboolean node_source_type_register (nodeSourceTypePtr type) { debug1 (DEBUG_PARSING, "Registering node source type %s", type->name); /* allow the plugin to initialize */ type->source_type_init (); /* Check if Google reader clones provide all API methods */ if(type->capabilities & NODE_SOURCE_CAPABILITY_GOOGLE_READER_API) { g_assert (type->api.unread_count); g_assert (type->api.subscription_list); g_assert (type->api.add_subscription); g_assert (type->api.add_subscription_post); g_assert (type->api.remove_subscription); g_assert (type->api.remove_subscription_post); g_assert (type->api.edit_add_label); g_assert (type->api.edit_add_label_post); g_assert (type->api.edit_tag); g_assert (type->api.edit_tag_add_post); g_assert (type->api.edit_tag_remove_post); g_assert (type->api.edit_tag_ar_tag_post); g_assert (type->api.token); } nodeSourceTypes = g_slist_append (nodeSourceTypes, type); return TRUE; } nodePtr node_source_setup_root (void) { nodePtr rootNode; nodeSourceTypePtr type; debug_enter ("node_source_setup_root"); /* we need to register all source types once before doing anything... */ node_source_type_register (default_source_get_type ()); node_source_type_register (dummy_source_get_type ()); node_source_type_register (opml_source_get_type ()); node_source_type_register (google_source_get_type ()); node_source_type_register (reedah_source_get_type ()); node_source_type_register (ttrss_source_get_type ()); node_source_type_register (theoldreader_source_get_type ()); extensions = peas_extension_set_new (PEAS_ENGINE (liferea_plugins_engine_get_default ()), LIFEREA_NODE_SOURCE_ACTIVATABLE_TYPE, NULL); liferea_plugins_engine_set_default_signals (extensions, NULL); type = node_source_type_find (NULL, NODE_SOURCE_CAPABILITY_IS_ROOT); if (!type) g_error ("No root capable node source found!"); rootNode = node_new (root_get_node_type()); rootNode->title = g_strdup ("root"); rootNode->source = g_new0 (struct nodeSource, 1); rootNode->source->root = rootNode; rootNode->source->type = type; type->source_import (rootNode); debug_exit ("node_source_setup_root"); return rootNode; } static void node_source_set_feed_subscription_type (nodePtr folder, subscriptionTypePtr type) { GSList *iter; for (iter = folder->children; iter; iter = g_slist_next(iter)) { nodePtr node = (nodePtr) iter->data; if (node->subscription) node->subscription->type = type; /* Recurse for hierarchic nodes... */ node_source_set_feed_subscription_type (node, type); } } static void node_source_import (nodePtr node, nodePtr parent, xmlNodePtr xml, gboolean trusted) { nodeSourceTypePtr type; xmlChar *typeStr = NULL; debug_enter ("node_source_import"); typeStr = xmlGetProp (xml, BAD_CAST"sourceType"); if (!typeStr) typeStr = xmlGetProp (xml, BAD_CAST"pluginType"); /* for migration only */ if (typeStr) { debug2 (DEBUG_CACHE, "creating node source instance (type=%s,id=%s)", typeStr, node->id); node->available = FALSE; /* scan for matching node source and create new instance */ type = node_source_type_find (typeStr, 0); if (!type) { /* Source type is not available for some reason, but we need a representation to keep the node source in the feed list. So we load a dummy source type instead and save the real source id in the unused node's data field */ type = node_source_type_find (NODE_SOURCE_TYPE_DUMMY_ID, 0); g_assert (NULL != type); node->data = g_strdup (typeStr); } node->available = TRUE; node->source = NULL; node_source_new (node, type, NULL); node_set_subscription (node, subscription_import (xml, trusted)); type->source_import (node); /* Set subscription type for all child nodes imported */ node_source_set_feed_subscription_type (node, type->feedSubscriptionType); if (!strcmp (typeStr, "fl_bloglines")) { g_print ("Removing obsolete Bloglines subscription."); feedlist_node_removed (node); } } else { g_print ("No source type given for node \"%s\". Ignoring it.", node_get_title (node)); } debug_exit ("node_source_import"); } static void node_source_export (nodePtr node, xmlNodePtr xml, gboolean trusted) { debug_enter ("node_source_export"); debug2 (DEBUG_CACHE, "node source export for node %s, id=%s", node->title, NODE_SOURCE_TYPE (node)->id); /* If the node source type was loaded using the dummy node source type we need to restore the original node source type id from temporarily saved into node->data */ if (!strcmp (NODE_SOURCE_TYPE (node)->id, NODE_SOURCE_TYPE_DUMMY_ID)) xmlNewProp (xml, BAD_CAST"sourceType", BAD_CAST (node->data)); else xmlNewProp (xml, BAD_CAST"sourceType", BAD_CAST (NODE_SOURCE_TYPE(node)->id)); subscription_export (node->subscription, xml, trusted); debug_exit("node_source_export"); } void node_source_new (nodePtr node, nodeSourceTypePtr type, const gchar *url) { subscriptionPtr subscription; g_assert (NULL == node->source); node->source = g_new0 (struct nodeSource, 1); node->source->root = node; node->source->type = type; node->source->loginState = NODE_SOURCE_STATE_NONE; node->source->actionQueue = g_queue_new (); node_set_title (node, type->name); if (url) { subscription = subscription_new (url, NULL, NULL); node_set_subscription (node, subscription); subscription->type = node->source->type->sourceSubscriptionType; } } void node_source_set_state (nodePtr node, gint newState) { debug3 (DEBUG_UPDATE, "node source '%s' now in state %d (was %d)", node->id, newState, node->source->loginState); /* State transition actions below... */ if (newState == NODE_SOURCE_STATE_ACTIVE) node->source->authFailures = 0; if (newState == NODE_SOURCE_STATE_NONE) { node->source->authFailures++; node->available = FALSE; } if (node->source->authFailures >= NODE_SOURCE_MAX_AUTH_FAILURES) newState = NODE_SOURCE_STATE_NO_AUTH; node->source->loginState = newState; } void node_source_set_auth_token (nodePtr node, gchar *token) { g_assert (!node->source->authToken); debug2 (DEBUG_UPDATE, "node source \"%s\" Auth token found: %s", node->id, token); node->source->authToken = token; node_source_set_state (node, NODE_SOURCE_STATE_ACTIVE); } /* source instance creation dialog */ static void on_node_source_type_selected (GtkTreeSelection *selection, gpointer user_data) { GtkTreeIter iter; GtkTreeModel *model; if (gtk_tree_selection_get_selected (selection, &model, &iter)) gtk_widget_set_sensitive (GTK_WIDGET (user_data), TRUE); else gtk_widget_set_sensitive (GTK_WIDGET (user_data), FALSE); } static void on_node_source_type_response (GtkDialog *dialog, gint response_id, gpointer user_data) { GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; nodeSourceTypePtr type; if (response_id == GTK_RESPONSE_OK) { selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (liferea_dialog_lookup (GTK_WIDGET (dialog), "type_list"))); g_assert (NULL != selection); if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gtk_tree_model_get (model, &iter, 1, &type, -1); if (type) type->source_new (); } } gtk_widget_destroy (GTK_WIDGET (dialog)); } static gboolean feed_list_node_source_type_dialog (void) { GSList *iter = nodeSourceTypes; GtkWidget *dialog, *treeview; GtkTreeStore *treestore; GtkCellRenderer *renderer; GtkTreeIter treeiter; nodeSourceTypePtr type; if (!nodeSourceTypes) { ui_show_error_box (_("No feed list source types found!")); return FALSE; } /* set up the dialog */ dialog = liferea_dialog_new ("node_source"); treestore = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_POINTER); /* add available feed list source to treestore */ while (iter) { type = (nodeSourceTypePtr) iter->data; if (type->capabilities & NODE_SOURCE_CAPABILITY_DYNAMIC_CREATION) { gtk_tree_store_append (treestore, &treeiter, NULL); gtk_tree_store_set (treestore, &treeiter, 0, type->name, 1, type, -1); } iter = g_slist_next (iter); } treeview = liferea_dialog_lookup (dialog, "type_list"); g_assert (NULL != treeview); renderer = gtk_cell_renderer_text_new (); g_object_set (renderer, "wrap-width", 400, NULL); g_object_set (renderer, "wrap-mode", PANGO_WRAP_WORD, NULL); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview), -1, _("Source Type"), renderer, "markup", 0, NULL); gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (treestore)); g_object_unref (treestore); gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)), GTK_SELECTION_SINGLE); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (on_node_source_type_response), NULL); g_signal_connect (G_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview))), "changed", G_CALLBACK (on_node_source_type_selected), liferea_dialog_lookup (dialog, "ok_button")); return TRUE; } void node_source_update (nodePtr node) { if (node->subscription) { /* Reset NODE_SOURCE_STATE_NO_AUTH as this is a manual user interaction and no auto-update so we can query for credentials again. */ if (node->source->loginState == NODE_SOURCE_STATE_NO_AUTH) node_source_set_state (node, NODE_SOURCE_STATE_NONE); subscription_update (node->subscription, 0); /* Note that node sources are required to auto-update child nodes themselves once login and feed list update is fine. */ } else { /* for default source */ node_foreach_child_data (node, node_update_subscription, GUINT_TO_POINTER (0)); } } void node_source_auto_update (nodePtr node) { NODE_SOURCE_TYPE (node)->source_auto_update (node); } static gboolean node_source_is_logged_in (nodePtr node) { if (FALSE == (NODE_SOURCE_TYPE (node)->capabilities & NODE_SOURCE_CAPABILITY_CAN_LOGIN)) return TRUE; if (node->source->loginState != NODE_SOURCE_STATE_ACTIVE) ui_show_error_box (_("Login for '%s' has not yet completed! Please wait until login is done."), node->title); return node->source->loginState == NODE_SOURCE_STATE_ACTIVE; } nodePtr node_source_add_subscription (nodePtr node, subscriptionPtr subscription) { if (!node_source_is_logged_in (node)) return NULL; if (NODE_SOURCE_TYPE (node)->add_subscription) return NODE_SOURCE_TYPE (node)->add_subscription (node, subscription); else g_print ("node_source_add_subscription(): called on node source type that doesn't implement me!"); return NULL; } nodePtr node_source_add_folder (nodePtr node, const gchar *title) { if (!node_source_is_logged_in (node)) return NULL; if (NODE_SOURCE_TYPE (node)->add_folder) return NODE_SOURCE_TYPE (node)->add_folder (node, title); else g_print ("node_source_add_folder(): called on node source type that doesn't implement me!"); return NULL; } void node_source_update_folder (nodePtr node, nodePtr folder) { if (!node_source_is_logged_in (node)) return; if (!folder) folder = node->source->root; if (node->parent != folder) { debug2 (DEBUG_UPDATE, "Moving node \"%s\" to folder \"%s\"", node->title, folder->title); node_reparent (node, folder); } } nodePtr node_source_find_or_create_folder (nodePtr parent, const gchar *id, const gchar *name) { nodePtr folder = NULL; gchar *folderNodeId; if (!id) return parent->source->root; /* No id means folder is root node */ folderNodeId = g_strdup_printf ("%s-folder-%s", NODE_SOURCE_TYPE (parent->source->root)->id, id); folder = node_from_id (folderNodeId); if (!folder) { folder = node_new (folder_get_node_type ()); node_set_id (folder, folderNodeId); node_set_title (folder, name); node_set_parent (folder, parent, -1); feedlist_node_imported (folder); subscription_update (folder->subscription, FEED_REQ_RESET_TITLE | FEED_REQ_PRIORITY_HIGH); } return folder; } void node_source_remove_node (nodePtr node, nodePtr child) { if (!node_source_is_logged_in (node)) return; g_assert (child != node); g_assert (child != child->source->root); if (NODE_SOURCE_TYPE (node)->remove_node) NODE_SOURCE_TYPE (node)->remove_node (node, child); else g_print ("node_source_remove_node(): called on node source type that doesn't implement me!"); } void node_source_item_mark_read (nodePtr node, itemPtr item, gboolean newState) { /* Item read state changes are optional for node source implementations. If they are supported the implementation has to call item_read_state_changed(), otherwise we do call it here. */ if (NODE_SOURCE_TYPE (node)->item_mark_read) NODE_SOURCE_TYPE (node)->item_mark_read (node, item, newState); else item_read_state_changed (item, newState); } void node_source_item_set_flag (nodePtr node, itemPtr item, gboolean newState) { /* Item flag state changes are optional for node source implementations. If they are supported the implementation has to call item_flag_state_changed(), otherwise we do call it here. */ if (NODE_SOURCE_TYPE (node)->item_set_flag) NODE_SOURCE_TYPE (node)->item_set_flag (node, item, newState); else item_flag_state_changed (item, newState); } static void node_source_convert_to_local_child_node (nodePtr node) { /* Ensure to remove special subscription types and cancel updates Note: we expect that all feeds already have the subscription URL set. This might need to be done by the node type specific convert_to_local() method! */ if (node->subscription) { update_job_cancel_by_owner ((gpointer)node); update_job_cancel_by_owner ((gpointer)node->subscription); debug2 (DEBUG_UPDATE, "Converting feed: %s = %s\n", node->title, node->subscription->source); node->subscription->type = feed_get_subscription_type (); } if (IS_FOLDER (node)) node_foreach_child (node, node_source_convert_to_local_child_node); node->source = ((nodePtr)feedlist_get_root ())->source; } void node_source_convert_to_local (nodePtr node) { g_assert (node == node->source->root); /* Preparation */ update_job_cancel_by_owner ((gpointer)node); update_job_cancel_by_owner ((gpointer)node->subscription); update_job_cancel_by_owner ((gpointer)node->source); /* Give the node source type the chance to do things ... */ if (NULL != NODE_SOURCE_TYPE (node)->convert_to_local) NODE_SOURCE_TYPE (node)->convert_to_local (node); /* Perform conversion */ debug0 (DEBUG_UPDATE, "Converting root node to folder..."); node->source = ((nodePtr)feedlist_get_root ())->source; node->type = folder_get_node_type (); node->subscription = NULL; /* leaking subscription is ok */ node->data = NULL; /* leaking data is ok */ node_foreach_child (node, node_source_convert_to_local_child_node); feedlist_schedule_save (); /* FIXME: something is not perfect, because if you immediately remove the subscription tree afterwards there is a double free */ ui_show_info_box (_("The '%s' subscription was successfully converted to local feeds!"), node->title); } /* implementation of the node type interface */ static void node_source_remove (nodePtr node) { if (!node_source_is_logged_in (node)) return; g_assert (node == node->source->root); if (NULL != NODE_SOURCE_TYPE (node)->source_delete) NODE_SOURCE_TYPE (node)->source_delete (node); feed_list_node_remove_node (node); } static void node_source_save (nodePtr node) { node_foreach_child (node, node_save); } static void node_source_free (nodePtr node) { if (NULL != NODE_SOURCE_TYPE (node)->free) NODE_SOURCE_TYPE (node)->free (node); g_free (node->source->authToken); g_free (node->source); node->source = NULL; } nodeTypePtr node_source_get_node_type (void) { static nodeTypePtr nodeType; if (!nodeType) { /* derive the node source node type from the folder node type */ nodeType = (nodeTypePtr) g_new0 (struct nodeType, 1); nodeType->id = "source"; nodeType->icon = icon_get (ICON_DEFAULT); nodeType->capabilities = NODE_CAPABILITY_SHOW_UNREAD_COUNT | NODE_CAPABILITY_SHOW_ITEM_FAVICONS | NODE_CAPABILITY_UPDATE_CHILDS | NODE_CAPABILITY_UPDATE | NODE_CAPABILITY_UPDATE_FAVICON | NODE_CAPABILITY_ADD_CHILDS | NODE_CAPABILITY_REMOVE_CHILDS; nodeType->import = node_source_import; nodeType->export = node_source_export; nodeType->load = folder_get_node_type()->load; nodeType->save = node_source_save; nodeType->update_counters = folder_get_node_type()->update_counters; nodeType->remove = node_source_remove; nodeType->render = node_default_render; nodeType->request_add = feed_list_node_source_type_dialog; nodeType->request_properties = feed_list_node_rename; nodeType->free = node_source_free; } return nodeType; } liferea-1.12.7/src/fl_sources/node_source.h000066400000000000000000000333271352135647700206470ustar00rootroot00000000000000/* * @file node_source.h generic node source interface * * Copyright (C) 2005-2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NODE_SOURCE_H #define _NODE_SOURCE_H #include #include #include "node.h" #include "node_type.h" #include "subscription_type.h" #include "fl_sources/google_reader_api.h" /* Liferea allows to have different sources in the feed list. These sources are called "node sources" henceforth. Node sources can (but do not need to) be single instance only. Node sources do provide a subtree of the feed list that can be read-only or not. A node source might allow or not allow to add sub folders and reorder (DnD) folder contents. A node source might allow hierarchic grouping of its subtree or not. These properties are determined by the node source type capability flags. The node source concept itself is a node type. The implementation of this node type can be found in node_source.c. The default node source type must be capable of serving as the root node for all other source types. This mean it has to ensure to load all other node source instances at their insertion nodes in the feed list. Each source type has to be able to serve user requests and is responsible for keeping its feed list node's states up-to-date. A source type implementation can omit all callbacks marked as optional. */ typedef enum { NODE_SOURCE_CAPABILITY_IS_ROOT = (1<<0), /*<< flag only for default feed list source */ NODE_SOURCE_CAPABILITY_DYNAMIC_CREATION = (1<<1), /*<< feed list source is user created */ NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST = (1<<2), /*<< the feed list tree of the source can be changed */ NODE_SOURCE_CAPABILITY_ADD_FEED = (1<<3), /*<< feeds can be added to the source */ NODE_SOURCE_CAPABILITY_ADD_FOLDER = (1<<4), /*<< folders can be added to the source */ NODE_SOURCE_CAPABILITY_HIERARCHIC_FEEDLIST = (1<<5), /*<< the feed list tree of the source can have hierarchic folders */ NODE_SOURCE_CAPABILITY_ITEM_STATE_SYNC = (1<<6), /*<< the item state can and should be sync'ed with remote */ NODE_SOURCE_CAPABILITY_CONVERT_TO_LOCAL = (1<<7), /*<< node sources of this type can be converted to internal subscription lists */ NODE_SOURCE_CAPABILITY_GOOGLE_READER_API = (1<<8), /*<< node sources of this type are Google Reader clones */ NODE_SOURCE_CAPABILITY_CAN_LOGIN = (1<<9) /*<< node source needs login (means loginState member is to be used) */ } nodeSourceCapability; /* Node source state model */ typedef enum { NODE_SOURCE_STATE_NONE = 0, /*<< no authentication tried so far */ NODE_SOURCE_STATE_IN_PROGRESS, /*<< authentication in progress */ NODE_SOURCE_STATE_ACTIVE, /*<< authentication succeeded */ NODE_SOURCE_STATE_NO_AUTH, /*<< authentication has failed */ NODE_SOURCE_STATE_MIGRATE, /*<< source will be migrated, do not do anything anymore! */ } nodeSourceState; /* Node source subscription update flags */ typedef enum { /* * Update only the subscription list, and not each node underneath it. * Note: Uses higher 16 bits to avoid conflict. */ NODE_SOURCE_UPDATE_ONLY_LIST = (1<<16), /* * Only login, do not do any updates. */ NODE_SOURCE_UPDATE_ONLY_LOGIN = (1<<17) } nodeSourceUpdate; /* * Number of auth failures after which we stop bothering the user while * auto-updating until he manually updates again. */ #define NODE_SOURCE_MAX_AUTH_FAILURES 3 /* feed list node source type */ typedef struct nodeSourceType { const gchar *id; /*<< a unique feed list source type identifier */ const gchar *name; /*<< a descriptive source name (for preferences and menus) */ gulong capabilities; /*<< bitmask of feed list source capabilities */ googleReaderApi api; /*<< OPTIONAL endpoint definitions for Google Reader like JSON API */ /* The subscription type for all child nodes that are subscriptions */ subscriptionTypePtr feedSubscriptionType; /* The subscription type for the source itself (can be NULL) */ subscriptionTypePtr sourceSubscriptionType; /* source type loading and unloading methods */ void (*source_type_init)(void); void (*source_type_deinit)(void); /* * This OPTIONAL callback is used to create an instance * of the implemented source type. It is to be called by * the parent source node_request_add_*() implementation. * Mandatory for all sources except the root source. */ void (*source_new)(void); /* * This OPTIONAL callback is used to delete an instance * of the implemented source type. It is to be called * by the parent source node_remove() implementation. * Mandatory for all sources except the root provider source. */ void (*source_delete)(nodePtr node); /* * This MANDATORY method is called when the source is to * create the feed list subtree attached to the source root * node. */ void (*source_import)(nodePtr node); /* * This MANDATORY method is called when the source is to * save it's feed list subtree (if necessary at all). This * is not a request to save the data of the attached nodes! */ void (*source_export)(nodePtr node); /* * This MANDATORY method is called to get an OPML representation * of the feedlist of the given node source. Returns a newly * allocated filename string that is to be freed by the * caller. */ gchar * (*source_get_feedlist)(nodePtr node); /* * This MANDATARY method is called to request the source to update * its subscriptions list and the child subscriptions according * the its update interval. */ void (*source_auto_update)(nodePtr node); /* * Frees all data of the given node source instance. To be called * during node_free() for a source node. */ void (*free) (nodePtr node); /* * Changes the flag state of an item. This is to allow node source type * implementations to synchronize remote item states. * * This is an OPTIONAL method. */ void (*item_set_flag) (nodePtr node, itemPtr item, gboolean newState); /* * Mark an item as read. This is to allow node source type * implementations to synchronize remote item states. * * This is an OPTIONAL method. */ void (*item_mark_read) (nodePtr node, itemPtr item, gboolean newState); /* * Add a new folder to the feed list provided by node * source. OPTIONAL, but must be implemented when * NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST and * NODE_SOURCE_CAPABILITY_HIERARCHIC_FEEDLIST are set. */ nodePtr (*add_folder) (nodePtr node, const gchar *title); /* * Add a new subscription to the feed list provided * by the node source. OPTIONAL method, that must be implemented * when NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST is set. * * The implementation could propagate the added subscription * to a remote feed list service. * * The implementation MUST create and return a new child node * setup with the given subscription which might be changed as necessary. * * The returned node will be automatically added to the feed list UI. * Initial update and state saving will be triggered automatically. */ nodePtr (*add_subscription) (nodePtr node, struct subscription *subscription); /* * Removes an existing node (subscription or folder) from the feed list * provided by the node source. OPTIONAL method that must be * implemented when NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST is set. */ void (*remove_node) (nodePtr node, nodePtr child); /* * Converts all subscriptions to default source subscriptions. * * This is an OPTIONAL method. */ void (*convert_to_local) (nodePtr node); } *nodeSourceTypePtr; /* feed list source instance */ typedef struct nodeSource { nodeSourceTypePtr type; /*<< node source type of this source instance */ nodePtr root; /*<< insertion node of this node source instance */ GQueue *actionQueue; /*<< queue for async actions */ gint loginState; /*<< The current login state */ gchar *authToken; /*<< The authorization token */ gint authFailures; /*<< Number of authentication failures */ } *nodeSourcePtr; /* Use this to cast the node source type from a node structure. */ #define NODE_SOURCE_TYPE(node) ((nodeSourcePtr)(node->source))->type #define NODE_SOURCE_TYPE_DUMMY_ID "fl_dummy" /** * node_source_root_from_node: (skip) * @node: any child node * * Get the root node of a feed list source for any given child node. * * Returns: node source root node */ nodePtr node_source_root_from_node (nodePtr node); /** * node_source_setup_root: (skip) * * Scans the source type list for the root source provider. * If found creates a new root source and starts it's import. * * Returns: a newly created root node */ nodePtr node_source_setup_root (void); /** * node_source_new: (skip) * @node: a newly created node * @nodeSourceType: the node source type * @url: subscription URL * * Creates a new source and assigns it to the given new node. * To be used to prepare a source node before adding it to the * feed list. This method takes care of setting the proper source * subscription type and setting up the subscription if url != NULL. * The caller needs set additional auth info for the subscription. */ void node_source_new (nodePtr node, nodeSourceTypePtr nodeSourceType, const gchar *url); /** * node_source_set_state: (skip) * @node: the node source node * @newState: the new state * * Change state of the node source by node */ void node_source_set_state (nodePtr node, gint newState); /** * node_source_set_auth_token: (skip) * @node: a node * @token: a string * * Store any type of authentication token (e.g. a cookie or session id) * * FIXME: maybe drop this in favour of node metadata */ void node_source_set_auth_token (nodePtr node, gchar *token); /** * node_source_update: (skip) * @node: the source node * * Force the source to update its subscription list and * the child subscriptions themselves. */ void node_source_update (nodePtr node); /** * node_source_auto_update: (skip) * @node: the source node * * Request the source to update its subscription list and * the child subscriptions if necessary according to the * update interval of the source. */ void node_source_auto_update (nodePtr node); /** * node_source_add_subscription: (skip) * @node: the source node * @subscription: the new subscription * * Called when a new subscription has been added to the node source. * * Returns: a new node intialized with the new subscription */ nodePtr node_source_add_subscription (nodePtr node, struct subscription *subscription); /** * node_source_remove_node: (skip) * @node: the source node * @child: the child node to remove * * Called when an existing subscription is to be removed from a node source. */ void node_source_remove_node (nodePtr node, nodePtr child); /** * node_source_add_folder: (skip) * @node: the source node * @title: the folder title * * Called when a new folder is to be added to a node source feed list. * * Returns: a new node representing the new folder */ nodePtr node_source_add_folder (nodePtr node, const gchar *title); /** * node_source_update_folder: (skip) * @node: any node * @folder: the target folder * * Called to update a nodes folder. If current folder != given folder * the node will be reparented. */ void node_source_update_folder (nodePtr node, nodePtr folder); /** * node_source_find_or_create_folder: (skip) * @parent: Parent folder (or source root node) * @id: Folder/category id (or NULL) * @label: Folder display name * * Find a folder by the name under parent or create it. * * If a node source doesn't provide ids the category display name should be * used as id. The worst thing happening then is to evenly named categories * being merged into one (which the user can easily workaround by renaming * on the remote side). * * Returns: a valid nodePtr */ nodePtr node_source_find_or_create_folder (nodePtr parent, const gchar *id, const gchar *label); /** * node_source_item_mark_read: (skip) * @node: the source node * @item: the affected item * @newState: the new item read state * * Called when the read state of an item changes. */ void node_source_item_mark_read (nodePtr node, itemPtr item, gboolean newState); /** * node_source_set_item_flag: (skip) * @node: the source node * @item: the affected item * @newState: the new item flag state * * Called when the flag state of an item changes. */ void node_source_item_set_flag (nodePtr node, itemPtr item, gboolean newState); /** * node_source_convert_to_local: (skip) * @node: the source node * * Converts all subscriptions to default source subscriptions. */ void node_source_convert_to_local (nodePtr node); /** * node_source_type_register: (skip) * @type: the type to register * * Registers a new node source type. Needs to be called before feed list import! * To be used only via NodeSourceTypeActivatable */ gboolean node_source_type_register (nodeSourceTypePtr type); /* implementation of the node type interface */ #define IS_NODE_SOURCE(node) (node->type == node_source_get_node_type ()) /** * node_source_get_node_type: (skip) * * Returns: the node source node type implementation. */ nodeTypePtr node_source_get_node_type (void); #endif liferea-1.12.7/src/fl_sources/node_source_activatable.c000066400000000000000000000041101352135647700231650ustar00rootroot00000000000000/* * @file node_type_activatable.c Node Source Plugin Type * * Copyright (C) 2015 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "node_source_activatable.h" /** * SECTION:node_source_activatable * @short_description: Interface for activatable extensions providing a new node source type * @see_also: #PeasExtensionSet * * #LifereaNodeSourceActivatable is an interface which should be implemented by * extensions that want to a new node source type (usually online news aggregators) **/ G_DEFINE_INTERFACE (LifereaNodeSourceActivatable, liferea_node_source_activatable, G_TYPE_OBJECT) void liferea_node_source_activatable_default_init (LifereaNodeSourceActivatableInterface *iface) { /* No properties yet */ } void liferea_node_source_activatable_activate (LifereaNodeSourceActivatable * activatable) { LifereaNodeSourceActivatableInterface *iface; g_return_if_fail (IS_LIFEREA_NODE_SOURCE_ACTIVATABLE (activatable)); iface = LIFEREA_NODE_SOURCE_ACTIVATABLE_GET_IFACE (activatable); if (iface->activate) iface->activate (activatable); } void liferea_node_source_activatable_deactivate (LifereaNodeSourceActivatable * activatable) { LifereaNodeSourceActivatableInterface *iface; g_return_if_fail (IS_LIFEREA_NODE_SOURCE_ACTIVATABLE (activatable)); iface = LIFEREA_NODE_SOURCE_ACTIVATABLE_GET_IFACE (activatable); if (iface->deactivate) iface->deactivate (activatable); } liferea-1.12.7/src/fl_sources/node_source_activatable.h000066400000000000000000000045331352135647700232030ustar00rootroot00000000000000/* * @file node_source_activatable.h Node Source Plugin Type * * Copyright (C) 2015 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _LIFEREA_NODE_SOURCE_ACTIVATABLE_H__ #define _LIFEREA_NODE_SOURCE_ACTIVATABLE_H__ #include #include G_BEGIN_DECLS #define LIFEREA_NODE_SOURCE_ACTIVATABLE_TYPE (liferea_node_source_activatable_get_type ()) #define LIFEREA_NODE_SOURCE_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIFEREA_NODE_SOURCE_ACTIVATABLE_TYPE, LifereaNodeSourceActivatable)) #define LIFEREA_NODE_SOURCE_ACTIVATABLE_IFACE(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), LIFEREA_NODE_SOURCE_ACTIVATABLE_TYPE, LifereaNodeSourceActivatableInterface)) #define IS_LIFEREA_NODE_SOURCE_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LIFEREA_NODE_SOURCE_ACTIVATABLE_TYPE)) #define LIFEREA_NODE_SOURCE_ACTIVATABLE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), LIFEREA_NODE_SOURCE_ACTIVATABLE_TYPE, LifereaNodeSourceActivatableInterface)) typedef struct _LifereaNodeSourceActivatable LifereaNodeSourceActivatable; typedef struct _LifereaNodeSourceActivatableInterface LifereaNodeSourceActivatableInterface; struct _LifereaNodeSourceActivatableInterface { GTypeInterface g_iface; void (*activate) (LifereaNodeSourceActivatable * activatable); void (*deactivate) (LifereaNodeSourceActivatable * activatable); }; GType liferea_node_source_activatable_get_type (void) G_GNUC_CONST; void liferea_node_source_activatable_activate (LifereaNodeSourceActivatable *activatable); void liferea_node_source_activatable_deactivate (LifereaNodeSourceActivatable *activatable); G_END_DECLS #endif /* __LIFEREA_NODE_SOURCE_ACTIVATABLE_H__ */ liferea-1.12.7/src/fl_sources/opml_source.c000066400000000000000000000263721352135647700206660ustar00rootroot00000000000000/** * @file opml_source.c OPML Planet/Blogroll feed list source * * Copyright (C) 2006-2016 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "fl_sources/opml_source.h" #include #include "common.h" #include "debug.h" #include "export.h" #include "feed.h" #include "feedlist.h" #include "folder.h" #include "node.h" #include "xml.h" #include "ui/icons.h" #include "ui/liferea_dialog.h" #include "ui/ui_common.h" /** default OPML update interval = once a day */ #define OPML_SOURCE_UPDATE_INTERVAL 60*60*24 /* OPML subscription list helper functions */ typedef struct mergeCtxt { nodePtr rootNode; /**< root node of the OPML feed list source */ nodePtr parent; /**< currently processed feed list node */ xmlNodePtr xmlNode; /**< currently processed XML node of old OPML doc */ } *mergeCtxtPtr; static void opml_source_merge_feed (xmlNodePtr match, gpointer user_data) { mergeCtxtPtr mergeCtxt = (mergeCtxtPtr)user_data; xmlChar *url, *title; gchar *expr; nodePtr node = NULL; url = xmlGetProp (match, "xmlUrl"); title = xmlGetProp (match, "title"); if (!title) title = xmlGetProp (match, "description"); if (!title) title = xmlGetProp (match, "text"); if (!title && !url) return; if (url) expr = g_strdup_printf ("//outline[@xmlUrl = '%s']", url); else expr = g_strdup_printf ("//outline[@title = '%s']", title); if (!xpath_find (mergeCtxt->xmlNode, expr)) { debug2(DEBUG_UPDATE, "adding %s (%s)", title, url); if (url) { node = node_new (feed_get_node_type ()); node_set_data (node, feed_new ()); node_set_subscription (node, subscription_new (url, NULL, NULL)); } else { node = node_new (folder_get_node_type ()); } node_set_title (node, title); node_set_parent (node, mergeCtxt->rootNode, -1); feedlist_node_imported (node); subscription_update (node->subscription, FEED_REQ_RESET_TITLE | FEED_REQ_PRIORITY_HIGH); } /* Recursion if this is a folder */ if (!url) { if (!node) { /* if the folder node wasn't created above it must already exist and we search it in the parents children list */ GSList *iter = mergeCtxt->parent->children; while (iter) { if (g_str_equal (title, node_get_title (iter->data))) node = iter->data; iter = g_slist_next (iter); } } if (node) { mergeCtxtPtr mc = g_new0 (struct mergeCtxt, 1); mc->rootNode = mergeCtxt->rootNode; mc->parent = node; mc->xmlNode = mergeCtxt->xmlNode; // FIXME: must be correct child! xpath_foreach_match (match, "./outline", opml_source_merge_feed, (gpointer)mc); g_free (mc); } else { g_print ("opml_source_merge_feed(): bad! bad! very bad!"); } } g_free (expr); xmlFree (title); xmlFree (url); } static void opml_source_check_for_removal (nodePtr node, gpointer user_data) { gchar *expr = NULL; if (IS_FEED (node)) { expr = g_strdup_printf ("//outline[ @xmlUrl='%s' ]", subscription_get_source (node->subscription)); } else if (IS_FOLDER (node)) { node_foreach_child_data (node, opml_source_check_for_removal, user_data); expr = g_strdup_printf ("//outline[ (@title='%s') or (@text='%s') or (@description='%s')]", node->title, node->title, node->title); } else { g_print ("opml_source_check_for_removal(): This should never happen..."); return; } if (!xpath_find ((xmlNodePtr)user_data, expr)) { debug1 (DEBUG_UPDATE, "removing %s...", node_get_title (node)); feedlist_node_removed (node); } else { debug1 (DEBUG_UPDATE, "keeping %s...", node_get_title (node)); } g_free (expr); } /* OPML subscription type implementation */ static gboolean opml_subscription_prepare_update_request (subscriptionPtr subscription, struct updateRequest *request) { /* Nothing to do here for simple OPML subscriptions */ return TRUE; } static void opml_subscription_process_update_result (subscriptionPtr subscription, const struct updateResult * const result, updateFlags flags) { nodePtr node = subscription->node; mergeCtxtPtr mergeCtxt; xmlDocPtr doc, oldDoc; xmlNodePtr root, title; debug1 (DEBUG_UPDATE, "OPML download finished data=%d", result->data); node->available = FALSE; if (result->data) { doc = xml_parse (result->data, result->size, NULL); if (doc) { gchar *filename; root = xmlDocGetRootElement (doc); /* Go through all existing nodes and remove those whose URLs are not in new feed list. Also removes those URLs from the list that have corresponding existing nodes. */ node_foreach_child_data (node, opml_source_check_for_removal, (gpointer)root); opml_source_export (node); /* save new feed list tree to disk to ensure correct document in next step */ /* Merge up-to-date OPML feed list. */ filename = opml_source_get_feedlist (node); oldDoc = xmlParseFile (filename); g_free (filename); mergeCtxt = g_new0 (struct mergeCtxt, 1); mergeCtxt->rootNode = node; mergeCtxt->parent = node; mergeCtxt->xmlNode = xmlDocGetRootElement (oldDoc); if (g_str_equal (node_get_title (node), OPML_SOURCE_DEFAULT_TITLE)) { title = xpath_find (root, "/opml/head/title"); if (title) { xmlChar *titleStr = xmlNodeListGetString(title->doc, title->xmlChildrenNode, 1); if (titleStr) { node_set_title (node, titleStr); xmlFree (titleStr); } } } xpath_foreach_match (root, "/opml/body/outline", opml_source_merge_feed, (gpointer)mergeCtxt); g_free (mergeCtxt); xmlFreeDoc (oldDoc); xmlFreeDoc (doc); opml_source_export (node); /* save new feed list tree to disk */ node->available = TRUE; } else { g_print ("Cannot parse downloaded OPML document!"); } } node_foreach_child_data (node, node_update_subscription, GUINT_TO_POINTER (0)); } /* subscription type definition */ static struct subscriptionType opmlSubscriptionType = { opml_subscription_prepare_update_request, opml_subscription_process_update_result }; /* OPML source type implementation */ static void ui_opml_source_get_source_url (void); gchar * opml_source_get_feedlist (nodePtr node) { return common_create_cache_filename ("plugins", node->id, "opml"); } void opml_source_import (nodePtr node) { gchar *filename; debug_enter ("opml_source_import"); /* We only ship an icon for opml, not for other sources */ if (g_str_equal (NODE_SOURCE_TYPE (node)->id, "fl_opml")) node->icon = icon_create_from_file ("fl_opml.png"); debug1 (DEBUG_CACHE, "starting import of opml source instance (id=%s)", node->id); filename = opml_source_get_feedlist (node); if (g_file_test (filename, G_FILE_TEST_EXISTS)) { import_OPML_feedlist (filename, node, FALSE, TRUE); } else { g_print ("cannot open \"%s\"", filename); node->available = FALSE; } g_free (filename); subscription_set_update_interval (node->subscription, OPML_SOURCE_UPDATE_INTERVAL); node->subscription->type = &opmlSubscriptionType; debug_exit ("opml_source_import"); } void opml_source_export (nodePtr node) { gchar *filename; debug_enter ("opml_source_export"); /* Although the OPML structure won't change, it needs to be saved so that the feed ids are saved to disk after the first import or updates of the source OPML. */ g_assert (node == node->source->root); filename = opml_source_get_feedlist (node); export_OPML_feedlist (filename, node, TRUE); g_free (filename); debug1 (DEBUG_CACHE, "adding OPML source: title=%s", node_get_title(node)); debug_exit ("opml_source_export"); } void opml_source_remove (nodePtr node) { gchar *filename; /* step 1: delete all child nodes */ node_foreach_child (node, feedlist_node_removed); g_assert (!node->children); /* step 2: delete source instance OPML cache file */ filename = opml_source_get_feedlist (node); unlink (filename); g_free (filename); } static void opml_source_auto_update (nodePtr node) { GTimeVal now; g_get_current_time (&now); /* do daily updates for the feed list and feed updates according to the default interval */ if (node->subscription->updateState->lastPoll.tv_sec + OPML_SOURCE_UPDATE_INTERVAL <= now.tv_sec) node_source_update (node); } static void opml_source_init(void) { } static void opml_source_deinit(void) { } /* node source type definition */ static struct nodeSourceType nst = { .id = "fl_opml", .name = N_("Planet, BlogRoll, OPML"), .sourceSubscriptionType = &opmlSubscriptionType, .capabilities = NODE_SOURCE_CAPABILITY_DYNAMIC_CREATION, .source_type_init = opml_source_init, .source_type_deinit = opml_source_deinit, .source_new = ui_opml_source_get_source_url, .source_delete = opml_source_remove, .source_import = opml_source_import, .source_export = opml_source_export, .source_get_feedlist = opml_source_get_feedlist, .source_auto_update = opml_source_auto_update, .free = NULL, .item_set_flag = NULL, .item_mark_read = NULL, .add_folder = NULL, .add_subscription = NULL, .remove_node = NULL, .convert_to_local = NULL }; nodeSourceTypePtr opml_source_get_type (void) { nst.feedSubscriptionType = feed_get_subscription_type (); return &nst; } /* GUI callbacks */ static void on_opml_source_selected (GtkDialog *dialog, gint response_id, gpointer user_data) { nodePtr node; if (response_id == GTK_RESPONSE_OK) { node = node_new (node_source_get_node_type ()); node_set_title (node, OPML_SOURCE_DEFAULT_TITLE); node_source_new (node, opml_source_get_type (), gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (GTK_WIDGET (dialog), "location_entry")))); feedlist_node_added (node); node_source_update (node); } gtk_widget_destroy (GTK_WIDGET (dialog)); } static void on_opml_file_selected (const gchar *filename, gpointer user_data) { GtkWidget *dialog = GTK_WIDGET (user_data); if (filename && dialog) gtk_entry_set_text (GTK_ENTRY (liferea_dialog_lookup (dialog, "location_entry")), g_strdup(filename)); } static void on_opml_file_choose_clicked (GtkButton *button, gpointer user_data) { ui_choose_file (_("Choose OPML File"), _("_Open"), FALSE, on_opml_file_selected, NULL, NULL, "*.opml|*.xml", _("OPML Files"), user_data); } static void ui_opml_source_get_source_url (void) { GtkWidget *dialog, *button; dialog = liferea_dialog_new ("opml_source"); button = liferea_dialog_lookup (dialog, "select_button"); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (on_opml_source_selected), NULL); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (on_opml_file_choose_clicked), dialog); } liferea-1.12.7/src/fl_sources/opml_source.h000066400000000000000000000033321352135647700206620ustar00rootroot00000000000000/** * @file opml_source.h OPML Planet/Blogroll feed list provider * * Copyright (C) 2005-2009 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _OPML_SOURCE_H #define _OPML_SOURCE_H #include "node.h" #include "subscription_type.h" #include "fl_sources/node_source.h" #define OPML_SOURCE_DEFAULT_TITLE _("New OPML Subscription") /* General OPML source handling functions */ /** * Determine OPML cache file name. * * @param node the node of the OPML source * * @returns newly allocated filename */ gchar * opml_source_get_feedlist(nodePtr node); /** * Imports an OPML source. * * @param node the node of the OPML source */ void opml_source_import(nodePtr node); /** * Exports an OPML source. * * @param node the node of the OPML source */ void opml_source_export(nodePtr node); /** * Removes a OPML source. * * @param node the node of the OPML source */ void opml_source_remove(nodePtr node); /** * Returns OPML source type implementation info. */ nodeSourceTypePtr opml_source_get_type(void); #endif liferea-1.12.7/src/fl_sources/reedah_source.c000066400000000000000000000263341352135647700211450ustar00rootroot00000000000000/** * @file reedah_source.c Reedah source support * * Copyright (C) 2007-2016 Lars Windolf * Copyright (C) 2008 Arnold Noronha * Copyright (C) 2011 Peter Oliver * Copyright (C) 2011 Sergey Snitsaruk * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "fl_sources/reedah_source.h" #include #include #include #include #include "common.h" #include "debug.h" #include "feedlist.h" #include "item_state.h" #include "metadata.h" #include "node.h" #include "subscription.h" #include "update.h" #include "xml.h" #include "ui/auth_dialog.h" #include "ui/liferea_dialog.h" #include "fl_sources/google_reader_api_edit.h" #include "fl_sources/node_source.h" #include "fl_sources/opml_source.h" #include "fl_sources/reedah_source_feed_list.h" /** default Reedah subscription list update interval = once a day */ #define NODE_SOURCE_UPDATE_INTERVAL 60*60*24 /** create a Reedah source with given node as root */ static ReedahSourcePtr reedah_source_new (nodePtr node) { ReedahSourcePtr source = g_new0 (struct ReedahSource, 1) ; source->root = node; source->lastTimestampMap = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); return source; } static void reedah_source_free (ReedahSourcePtr source) { if (!source) return; update_job_cancel_by_owner (source); g_hash_table_unref (source->lastTimestampMap); g_free (source); } static void reedah_source_login_cb (const struct updateResult * const result, gpointer userdata, updateFlags flags) { nodePtr node = (nodePtr) userdata; gchar *tmp = NULL; subscriptionPtr subscription = node->subscription; debug1 (DEBUG_UPDATE, "Reedah login processing... %s", result->data); if (result->data && result->httpstatus == 200) tmp = strstr (result->data, "Auth="); if (tmp) { gchar *ttmp = tmp; tmp = strchr (tmp, '\n'); if (tmp) *tmp = '\0'; node_source_set_auth_token (node, g_strdup_printf ("GoogleLogin auth=%s", ttmp + 5)); /* now that we are authenticated trigger updating to start data retrieval */ if (!(flags & NODE_SOURCE_UPDATE_ONLY_LOGIN)) subscription_update (subscription, flags); /* process any edits waiting in queue */ google_reader_api_edit_process (node->source); } else { debug0 (DEBUG_UPDATE, "Reedah login failed! no Auth token found in result!"); g_free (subscription->updateError); subscription->updateError = g_strdup (_("Login failed!")); node_source_set_state (node, NODE_SOURCE_STATE_NO_AUTH); auth_dialog_new (subscription, flags); } } /** * Perform a login to Reedah, if the login completes the * ReedahSource will have a valid Auth token and will have loginStatus to * NODE_SOURCE_LOGIN_ACTIVE. */ void reedah_source_login (ReedahSourcePtr source, guint32 flags) { gchar *username, *password; updateRequestPtr request; subscriptionPtr subscription = source->root->subscription; if (source->root->source->loginState != NODE_SOURCE_STATE_NONE) { /* this should not happen, as of now, we assume the session * doesn't expire. */ debug1(DEBUG_UPDATE, "Logging in while login state is %d\n", source->root->source->loginState); } request = update_request_new (); update_request_set_source (request, REEDAH_READER_LOGIN_URL); /* escape user and password as both are passed using an URI */ username = g_uri_escape_string (subscription->updateOptions->username, NULL, TRUE); password = g_uri_escape_string (subscription->updateOptions->password, NULL, TRUE); request->postdata = g_strdup_printf (REEDAH_READER_LOGIN_POST, username, password); request->options = update_options_copy (subscription->updateOptions); g_free (username); g_free (password); node_source_set_state (source->root, NODE_SOURCE_STATE_IN_PROGRESS); update_execute_request (source, request, reedah_source_login_cb, source->root, flags); } /* node source type implementation */ static void reedah_source_auto_update (nodePtr node) { GTimeVal now; ReedahSourcePtr source = (ReedahSourcePtr) node->data; if (node->source->loginState == NODE_SOURCE_STATE_NONE) { node_source_update (node); return; } if (node->source->loginState == NODE_SOURCE_STATE_IN_PROGRESS) return; /* the update will start automatically anyway */ debug0 (DEBUG_UPDATE, "reedah_source_auto_update()"); g_get_current_time (&now); /* do daily updates for the feed list and feed updates according to the default interval */ if (node->subscription->updateState->lastPoll.tv_sec + NODE_SOURCE_UPDATE_INTERVAL <= now.tv_sec) { subscription_update (node->subscription, 0); g_get_current_time (&source->lastQuickUpdate); } else if (source->lastQuickUpdate.tv_sec + REEDAH_SOURCE_QUICK_UPDATE_INTERVAL <= now.tv_sec) { reedah_source_opml_quick_update (source); google_reader_api_edit_process (node->source); g_get_current_time (&source->lastQuickUpdate); } } static void reedah_source_init (void) { metadata_type_register ("reedah-feed-id", METADATA_TYPE_TEXT); } static void reedah_source_deinit (void) { } static void reedah_source_import (nodePtr node) { opml_source_import (node); node->subscription->updateInterval = -1; node->subscription->type = node->source->type->sourceSubscriptionType; if (!node->data) node->data = (gpointer) reedah_source_new (node); } static nodePtr reedah_source_add_subscription (nodePtr node, subscriptionPtr subscription) { // FIXME: determine correct category from parent folder name google_reader_api_edit_add_subscription (node_source_root_from_node (node)->data, subscription->source, NULL); // FIXME: leaking subscription? // FIXME: somehow the async subscribing doesn't cause the feed list to update return NULL; } static void reedah_source_remove_node (nodePtr node, nodePtr child) { gchar *url; ReedahSourcePtr source = node->data; if (child == node) { feedlist_node_removed (child); return; } url = g_strdup (child->subscription->source); feedlist_node_removed (child); /* propagate the removal only if there aren't other copies */ if (!feedlist_find_node (source->root, NODE_BY_URL, url)) google_reader_api_edit_remove_subscription (node->source, url); g_free (source); } /* GUI callbacks */ static void on_reedah_source_selected (GtkDialog *dialog, gint response_id, gpointer user_data) { nodePtr node; if (response_id == GTK_RESPONSE_OK) { node = node_new (node_source_get_node_type ()); node_source_new (node, reedah_source_get_type (), "http://www.reedah.com/reader"); subscription_set_auth_info (node->subscription, gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (GTK_WIDGET(dialog), "userEntry"))), gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (GTK_WIDGET(dialog), "passwordEntry")))); node->data = reedah_source_new (node); feedlist_node_added (node); node_source_update (node); } gtk_widget_destroy (GTK_WIDGET (dialog)); } static void ui_reedah_source_get_account_info (void) { GtkWidget *dialog; dialog = liferea_dialog_new ("reedah_source"); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (on_reedah_source_selected), NULL); } static void reedah_source_cleanup (nodePtr node) { ReedahSourcePtr reader = (ReedahSourcePtr) node->data; reedah_source_free(reader); node->data = NULL ; } static void reedah_source_item_set_flag (nodePtr node, itemPtr item, gboolean newStatus) { google_reader_api_edit_mark_starred (node->source, item->sourceId, node->subscription->source, newStatus); item_flag_state_changed (item, newStatus); } static void reedah_source_item_mark_read (nodePtr node, itemPtr item, gboolean newStatus) { google_reader_api_edit_mark_read (node->source, item->sourceId, node->subscription->source, newStatus); item_read_state_changed (item, newStatus); } /** * Convert all subscriptions of a Reedah source to local feeds * * @param node The node to migrate (not the nodeSource!) */ static void reedah_source_convert_to_local (nodePtr node) { node_source_set_state (node, NODE_SOURCE_STATE_MIGRATE); } /* node source type definition */ extern struct subscriptionType reedahSourceFeedSubscriptionType; extern struct subscriptionType reedahSourceOpmlSubscriptionType; #define BASE_URL "http://www.reedah.com/reader/api/0/" static struct nodeSourceType nst = { .id = "fl_reedah", .name = N_("Reedah"), .capabilities = NODE_SOURCE_CAPABILITY_DYNAMIC_CREATION | NODE_SOURCE_CAPABILITY_CAN_LOGIN | NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST | NODE_SOURCE_CAPABILITY_ADD_FEED | NODE_SOURCE_CAPABILITY_ITEM_STATE_SYNC | NODE_SOURCE_CAPABILITY_CONVERT_TO_LOCAL | NODE_SOURCE_CAPABILITY_GOOGLE_READER_API, .api.subscription_list = BASE_URL "subscription/list", .api.unread_count = BASE_URL "unread-count?all=true&client=liferea", .api.token = BASE_URL "token", .api.add_subscription = BASE_URL "subscription/edit?client=liferea", .api.add_subscription_post = "s=feed%%2F%s&i=null&ac=subscribe&T=%s", .api.remove_subscription = BASE_URL "subscription/edit?client=liferea", .api.remove_subscription_post = "s=feed%%2F%s&i=null&ac=unsubscribe&T=%s", .api.edit_tag = BASE_URL "edit-tag?client=liferea", .api.edit_tag_add_post = "i=%s&s=%s%%2F%s&a=%s&ac=edit-tags&T=%s&async=true", .api.edit_tag_remove_post = "i=%s&s=%s%%2F%s&r=%s&ac=edit-tags&T=%s&async=true", .api.edit_tag_ar_tag_post = "i=%s&s=%s%%2F%s&a=%s&r=%s&ac=edit-tags&T=%s&async=true", .api.edit_add_label = BASE_URL "edit?client=liferea", .api.edit_add_label_post = "s=%s%%2F%s&a=%s&ac=edit&T=%s&async=true", .feedSubscriptionType = &reedahSourceFeedSubscriptionType, .sourceSubscriptionType = &reedahSourceOpmlSubscriptionType, .source_type_init = reedah_source_init, .source_type_deinit = reedah_source_deinit, .source_new = ui_reedah_source_get_account_info, .source_delete = opml_source_remove, .source_import = reedah_source_import, .source_export = opml_source_export, .source_get_feedlist = opml_source_get_feedlist, .source_auto_update = reedah_source_auto_update, .free = reedah_source_cleanup, .item_set_flag = reedah_source_item_set_flag, .item_mark_read = reedah_source_item_mark_read, .add_folder = NULL, .add_subscription = reedah_source_add_subscription, .remove_node = reedah_source_remove_node, .convert_to_local = reedah_source_convert_to_local }; nodeSourceTypePtr reedah_source_get_type (void) { return &nst; } liferea-1.12.7/src/fl_sources/reedah_source.h000066400000000000000000000064711352135647700211520ustar00rootroot00000000000000/** * @file reedah_source.h Reedah feed list source support * * Copyright (C) 2007-2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _REEDAH_SOURCE_H #define _REEDAH_SOURCE_H #include "fl_sources/node_source.h" /** * A nodeSource specific for Reedah */ typedef struct ReedahSource { nodePtr root; /**< the root node in the feed list */ /** * A map from a subscription source to a timestamp when it was last * updated according to API */ GHashTable *lastTimestampMap; /** * A timestamp when the last Quick update took place. */ GTimeVal lastQuickUpdate; } *ReedahSourcePtr; /** * API documentation, Reedah is closely modelled after Google Reader, the * differences are outlined under the first link, the second is a documentation * of the original Google Reader API. * * @see https://www.reedah.com/developers.php * @see http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI */ /** * Reedah Login API. * @param Email The account email id. * @param Passwd The account password. * @return The return data has a line "Auth=xxxx" which will be used as an * Authorization header in future requests. */ #define REEDAH_READER_LOGIN_URL "https://www.reedah.com/accounts/ClientLogin" #define REEDAH_READER_LOGIN_POST "service=reader&Email=%s&Passwd=%s&source=liferea&continue=http://www.reedah.com" /** Interval (in seconds) for doing a Quick Update: 10min */ #define REEDAH_SOURCE_QUICK_UPDATE_INTERVAL 600 /** * @returns Reedah source type implementation info. */ nodeSourceTypePtr reedah_source_get_type (void); /** * Find a child node with the given feed source URL. * * @param gsource ReedahSource * @param source a feed source URL to search * * @returns a node (or NULL) */ nodePtr reedah_source_get_node_from_source (ReedahSourcePtr gsource, const gchar* source); /** * Tries to update the entire source quickly, by updating only those feeds * which are known to be updated. Suitable for g_timeout_add. This is an * internal function. * * @param data A pointer to a node id of the source. This pointer will * be g_free'd if the update fails. * * @returns FALSE on update failure */ gboolean reedah_source_quick_update_timeout (gpointer gsource); /** * Migrate a google source child-node from a Liferea 1.4 style read-only * google source nodes. * * @param node The node to migrate (not the nodeSource!) */ void reedah_source_migrate_node (nodePtr node); /** * Perform login for the given Google source. * * @param gsource a ReedahSource * @param flags network request flags */ void reedah_source_login (ReedahSourcePtr gsource, guint32 flags); #endif liferea-1.12.7/src/fl_sources/reedah_source_feed.c000066400000000000000000000152771352135647700221340ustar00rootroot00000000000000/** * @file theoldreader_source_feed.c TheOldReader feed subscription routines * * Copyright (C) 2013-2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "common.h" #include "debug.h" #include "db.h" #include "feedlist.h" #include "item_state.h" #include "itemlist.h" #include "json.h" #include "json_api_mapper.h" #include "metadata.h" #include "node.h" #include "reedah_source.h" #include "subscription.h" #include "xml.h" void reedah_source_migrate_node (nodePtr node) { /* scan the node for bad ID's, if so, brutally remove the node */ itemSetPtr itemset = node_get_itemset (node); GList *iter = itemset->ids; for (; iter; iter = g_list_next (iter)) { itemPtr item = item_load (GPOINTER_TO_UINT (iter->data)); if (item && item->sourceId) { if (!g_str_has_prefix(item->sourceId, "tag:google.com")) { debug1(DEBUG_UPDATE, "Item with sourceId [%s] will be deleted.", item->sourceId); db_item_remove(GPOINTER_TO_UINT(iter->data)); } } if (item) item_unload (item); } /* cleanup */ itemset_free (itemset); } static void reedah_item_callback (JsonNode *node, itemPtr item) { JsonNode *canonical, *categories; GList *elements, *iter; /* Determine link: path is "canonical[0]/@href" */ canonical = json_get_node (node, "canonical"); if (canonical && JSON_NODE_TYPE (canonical) == JSON_NODE_ARRAY) { iter = elements = json_array_get_elements (json_node_get_array (canonical)); while (iter) { const gchar *href = json_get_string ((JsonNode *)iter->data, "href"); if (href) { item_set_source (item, href); break; } iter = g_list_next (iter); } g_list_free (elements); } /* Determine read state: check for category with ".*state/com.google/read" */ categories = json_get_node (node, "categories"); if (categories && JSON_NODE_TYPE (categories) == JSON_NODE_ARRAY) { iter = elements = json_array_get_elements (json_node_get_array (canonical)); while (iter) { const gchar *category = json_node_get_string ((JsonNode *)iter->data); if (category) { item->readStatus = (strstr (category, "state\\/com.google\\/read") != NULL); break; } iter = g_list_next (iter); } g_list_free (elements); } } static void reedah_feed_subscription_process_update_result (subscriptionPtr subscription, const struct updateResult* const result, updateFlags flags) { if (result->data && result->httpstatus == 200) { GList *items = NULL; jsonApiMapping mapping; /* We expect to get something like this [{"crawlTimeMsec":"1375821312282", "id"::"tag:google.com,reader:2005\/item\/4ee371db36f84de2", "categories":["user\/15724899091976567759\/state\/com.google\/reading-list", "user\/15724899091976567759\/state\/com.google\/fresh"], "title":"Firefox 23 Arrives With New Logo, Mixed Content Blocker, and Network Monitor", "published":1375813680, "updated":1375821312, "alternate":[{"href":"http://rss.slashdot.org/~r/Slashdot/slashdot/~3/Q4450FchLQo/story01.htm","type":"text/html"}], "canonical":[{"href":"http://slashdot.feedsportal.com/c/35028/f/647410/s/2fa2b59c/sc[...]", "type":"text/html"}], "summary":{"direction":"ltr","content":"An anonymous reader writes [...]"}, "author":"Soulskill", "origin":{"streamId":"feed/http://rss.slashdot.org/Slashdot/slashdot","title":"Slashdot", "htmlurl":"http://slashdot.org/" }, [...] */ /* Note: The link and read status cannot be mapped as there might be multiple ones so the callback helper function extracts the first from the array */ mapping.id = "id"; mapping.title = "title"; mapping.link = NULL; mapping.description = "summary/content"; mapping.read = NULL; mapping.updated = "updated"; mapping.author = "author"; mapping.flag = "marked"; mapping.xhtml = TRUE; mapping.negateRead = TRUE; items = json_api_get_items (result->data, "items", &mapping, &reedah_item_callback); /* merge against feed cache */ if (items) { itemSetPtr itemSet = node_get_itemset (subscription->node); subscription->node->newCount = itemset_merge_items (itemSet, items, TRUE /* feed valid */, FALSE /* markAsRead */); itemlist_merge_itemset (itemSet); itemset_free (itemSet); subscription->node->available = TRUE; } else { subscription->node->available = FALSE; g_string_append (((feedPtr)subscription->node->data)->parseErrors, _("Could not parse JSON returned by Reedah API!")); } } else { subscription->node->available = FALSE; } } static gboolean reedah_feed_subscription_prepare_update_request (subscriptionPtr subscription, struct updateRequest *request) { debug0 (DEBUG_UPDATE, "preparing Reedah feed subscription for update\n"); ReedahSourcePtr source = (ReedahSourcePtr) node_source_root_from_node (subscription->node)->data; g_assert(source); if (source->root->source->loginState == NODE_SOURCE_STATE_NONE) { subscription_update (node_source_root_from_node (subscription->node)->subscription, 0) ; return FALSE; } if (!metadata_list_get (subscription->metadata, "reedah-feed-id")) { g_print ("Skipping Reedah feed '%s' (%s) without id!", subscription->source, subscription->node->id); return FALSE; } debug0 (DEBUG_UPDATE, "Setting cookies for a Reedah subscription"); gchar* source_escaped = g_uri_escape_string(metadata_list_get (subscription->metadata, "reedah-feed-id"), NULL, TRUE); // FIXME: move to .h // FIXME: do not use 30 gchar* newUrl = g_strdup_printf ("http://www.reedah.com/reader/api/0/stream/contents/%s?client=liferea&n=30", source_escaped); update_request_set_source (request, newUrl); g_free (newUrl); g_free (source_escaped); update_request_set_auth_value (request, source->root->source->authToken); return TRUE; } struct subscriptionType reedahSourceFeedSubscriptionType = { reedah_feed_subscription_prepare_update_request, reedah_feed_subscription_process_update_result }; liferea-1.12.7/src/fl_sources/reedah_source_feed_list.c000066400000000000000000000237411352135647700231620ustar00rootroot00000000000000/** * @file reedah_source_feed_list.c Reedah feed list handling routines * * Copyright (C) 2013-2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "reedah_source_feed_list.h" #include #include #include "common.h" #include "db.h" #include "debug.h" #include "feedlist.h" #include "folder.h" #include "json.h" #include "metadata.h" #include "node.h" #include "subscription.h" #include "xml.h" // FIXME #include "fl_sources/opml_source.h" #include "fl_sources/reedah_source.h" static void reedah_source_check_node_for_removal (nodePtr node, gpointer user_data) { JsonArray *array = (JsonArray *)user_data; GList *iter, *elements; gboolean found = FALSE; if (IS_FOLDER (node)) { /* Auto-remove folders if they do not have children */ if (!node->children) feedlist_node_removed (node); node_foreach_child_data (node, reedah_source_check_node_for_removal, user_data); } else { elements = iter = json_array_get_elements (array); while (iter) { JsonNode *json_node = (JsonNode *)iter->data; // FIXME: Compare with unescaped string if (g_str_equal (node->subscription->source, json_get_string (json_node, "id") + 5)) { debug1 (DEBUG_UPDATE, "node: %s", node->subscription->source); found = TRUE; break; } iter = g_list_next (iter); } g_list_free (elements); if (!found) feedlist_node_removed (node); } } /* subscription list merging functions */ static void reedah_source_merge_feed (ReedahSourcePtr source, const gchar *url, const gchar *title, const gchar *id, nodePtr folder) { nodePtr node; node = feedlist_find_node (source->root, NODE_BY_URL, url); if (!node) { debug2 (DEBUG_UPDATE, "adding %s (%s)", title, url); node = node_new (feed_get_node_type ()); node_set_title (node, title); node_set_data (node, feed_new ()); node_set_subscription (node, subscription_new (url, NULL, NULL)); node->subscription->type = source->root->source->type->feedSubscriptionType; /* Save Reedah feed id which we need to fetch items... */ node->subscription->metadata = metadata_list_append (node->subscription->metadata, "reedah-feed-id", id); db_subscription_update (node->subscription); node_set_parent (node, source->root, -1); feedlist_node_imported (node); /** * @todo mark the ones as read immediately after this is done * the feed as retrieved by this has the read and unread * status inherently. */ subscription_update (node->subscription, FEED_REQ_RESET_TITLE | FEED_REQ_PRIORITY_HIGH); subscription_update_favicon (node->subscription); } else { node_source_update_folder (node, folder); } } /* OPML subscription type implementation */ static void reedah_subscription_opml_cb (subscriptionPtr subscription, const struct updateResult * const result, updateFlags flags) { ReedahSourcePtr source = (ReedahSourcePtr) subscription->node->data; subscription->updateJob = NULL; // FIXME: the following code is very similar to ttrss! if (result->data && result->httpstatus == 200) { JsonParser *parser = json_parser_new (); if (json_parser_load_from_data (parser, result->data, -1, NULL)) { JsonArray *array = json_node_get_array (json_get_node (json_parser_get_root (parser), "subscriptions")); GList *iter, *elements, *citer, *celements; /* We expect something like this: [{"id":"feed\/http:\/\/rss.slashdot.org\/Slashdot\/slashdot", "title":"Slashdot", "categories":[], "firstitemmsec":"1368112925514", "htmlUrl":"null"}, ... Note that the data doesn't contain an URL. We recover it from the id field. */ elements = iter = json_array_get_elements (array); /* Add all new nodes we find */ while (iter) { JsonNode *categories, *node = (JsonNode *)iter->data; nodePtr folder = NULL; /* Check for categories, if there use first one as folder */ categories = json_get_node (node, "categories"); if (categories && JSON_NODE_TYPE (categories) == JSON_NODE_ARRAY) { citer = celements = json_array_get_elements (json_node_get_array (categories)); while (citer) { const gchar *label = json_get_string ((JsonNode *)citer->data, "label"); if (label) { folder = node_source_find_or_create_folder (source->root, label, label); break; } citer = g_list_next (citer); } g_list_free (celements); } /* ignore everything without a feed url */ if (json_get_string (node, "id")) { reedah_source_merge_feed (source, json_get_string (node, "id") + 5, // FIXME: Unescape string! json_get_string (node, "title"), json_get_string (node, "id"), folder); } iter = g_list_next (iter); } g_list_free (elements); /* Remove old nodes we cannot find anymore */ node_foreach_child_data (source->root, reedah_source_check_node_for_removal, array); /* Save new subscription tree to OPML cache file */ opml_source_export (subscription->node); subscription->node->available = TRUE; } else { g_print ("Invalid JSON returned on Reedah feed list request! >>>%s<<<", result->data); } g_object_unref (parser); } else { subscription->node->available = FALSE; debug0 (DEBUG_UPDATE, "reedah_subscription_cb(): ERROR: failed to get subscription list!"); } if (!(flags & NODE_SOURCE_UPDATE_ONLY_LIST)) node_foreach_child_data (subscription->node, node_update_subscription, GUINT_TO_POINTER (0)); } /** functions for an efficient updating mechanism */ static void reedah_source_opml_quick_update_helper (xmlNodePtr match, gpointer userdata) { ReedahSourcePtr gsource = (ReedahSourcePtr) userdata; xmlNodePtr xmlNode; xmlChar *id, *newestItemTimestamp; nodePtr node = NULL; const gchar *oldNewestItemTimestamp; xmlNode = xpath_find (match, "./string[@name='id']"); id = xmlNodeGetContent (xmlNode); if (g_str_has_prefix (id, "feed/")) node = feedlist_find_node (gsource->root, NODE_BY_URL, id + strlen ("feed/")); else { xmlFree (id); return; } if (node == NULL) { xmlFree (id); return; } xmlNode = xpath_find (match, "./number[@name='newestItemTimestampUsec']"); newestItemTimestamp = xmlNodeGetContent (xmlNode); oldNewestItemTimestamp = g_hash_table_lookup (gsource->lastTimestampMap, node->subscription->source); if (!oldNewestItemTimestamp || (newestItemTimestamp && !g_str_equal (newestItemTimestamp, oldNewestItemTimestamp))) { debug3(DEBUG_UPDATE, "ReedahSource: auto-updating %s " "[oldtimestamp%s, timestamp %s]", id, oldNewestItemTimestamp, newestItemTimestamp); g_hash_table_insert (gsource->lastTimestampMap, g_strdup (node->subscription->source), g_strdup (newestItemTimestamp)); subscription_update (node->subscription, 0); } xmlFree (newestItemTimestamp); xmlFree (id); } static void reedah_source_opml_quick_update_cb (const struct updateResult* const result, gpointer userdata, updateFlags flags) { ReedahSourcePtr gsource = (ReedahSourcePtr) userdata; xmlDocPtr doc; if (!result->data) { /* what do I do? */ debug0 (DEBUG_UPDATE, "ReedahSource: Unable to get unread counts, this update is aborted."); return; } doc = xml_parse (result->data, result->size, NULL); if (!doc) { debug0 (DEBUG_UPDATE, "ReedahSource: The XML failed to parse, maybe the session has expired. (FIXME)"); return; } xpath_foreach_match (xmlDocGetRootElement (doc), "/object/list[@name='unreadcounts']/object", reedah_source_opml_quick_update_helper, gsource); xmlFreeDoc (doc); } gboolean reedah_source_opml_quick_update(ReedahSourcePtr source) { updateRequestPtr request = update_request_new (); request->updateState = update_state_copy (source->root->subscription->updateState); request->options = update_options_copy (source->root->subscription->updateOptions); update_request_set_source (request, source->root->source->type->api.unread_count); update_request_set_auth_value(request, source->root->source->authToken); update_execute_request (source, request, reedah_source_opml_quick_update_cb, source, 0); return TRUE; } static void reedah_source_opml_subscription_process_update_result (subscriptionPtr subscription, const struct updateResult * const result, updateFlags flags) { reedah_subscription_opml_cb (subscription, result, flags); } static gboolean reedah_source_opml_subscription_prepare_update_request (subscriptionPtr subscription, struct updateRequest *request) { nodePtr node = subscription->node; ReedahSourcePtr source = (ReedahSourcePtr)node->data; g_assert(node->source); if (node->source->loginState == NODE_SOURCE_STATE_NONE) { debug0(DEBUG_UPDATE, "ReedahSource: login"); reedah_source_login (source, 0) ; return FALSE; } debug1 (DEBUG_UPDATE, "updating Reedah subscription (node id %s)", node->id); update_request_set_source (request, node->source->type->api.subscription_list); update_request_set_auth_value (request, node->source->authToken); return TRUE; } /* OPML subscription type definition */ struct subscriptionType reedahSourceOpmlSubscriptionType = { reedah_source_opml_subscription_prepare_update_request, reedah_source_opml_subscription_process_update_result }; liferea-1.12.7/src/fl_sources/reedah_source_feed_list.h000066400000000000000000000024301352135647700231570ustar00rootroot00000000000000/** * @file reedah_source_feed_list.h Reedah feed list handling * * Copyright (C) 2013-2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "fl_sources/reedah_source.h" /** * Find a node by the source id. * * @param gsource the Reedah source * @param source the feed id to find * * @returns a node (or NULL) */ nodePtr reedah_source_opml_get_node_by_source(ReedahSourcePtr gsource, const gchar *source); /** * Perform a quick update of the Reedah source. * * @param gsource the Reedah source */ gboolean reedah_source_opml_quick_update (ReedahSourcePtr gsource); liferea-1.12.7/src/fl_sources/theoldreader_source.c000066400000000000000000000304561352135647700223570ustar00rootroot00000000000000/** * @file theoldreader_source.c TheOldReader feed list source support * * Copyright (C) 2007-2016 Lars Windolf * Copyright (C) 2008 Arnold Noronha * Copyright (C) 2011 Peter Oliver * Copyright (C) 2011 Sergey Snitsaruk * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "fl_sources/theoldreader_source.h" #include #include #include "common.h" #include "debug.h" #include "feedlist.h" #include "folder.h" #include "item_state.h" #include "metadata.h" #include "node.h" #include "subscription.h" #include "update.h" #include "ui/auth_dialog.h" #include "ui/liferea_dialog.h" #include "fl_sources/node_source.h" #include "fl_sources/opml_source.h" #include "fl_sources/google_reader_api_edit.h" #include "fl_sources/theoldreader_source_feed_list.h" /** default TheOldReader subscription list update interval = once a day */ #define THEOLDREADER_SOURCE_UPDATE_INTERVAL 60*60*24 /** create a source with given node as root */ static TheOldReaderSourcePtr theoldreader_source_new (nodePtr node) { TheOldReaderSourcePtr source = g_new0 (struct TheOldReaderSource, 1) ; source->root = node; source->lastTimestampMap = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); source->folderToCategory = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); return source; } static void theoldreader_source_free (TheOldReaderSourcePtr source) { if (!source) return; update_job_cancel_by_owner (source); g_hash_table_unref (source->lastTimestampMap); g_hash_table_destroy (source->folderToCategory); g_free (source); } static void theoldreader_source_login_cb (const struct updateResult * const result, gpointer userdata, updateFlags flags) { nodePtr node = (nodePtr) userdata; gchar *tmp = NULL; subscriptionPtr subscription = node->subscription; debug1 (DEBUG_UPDATE, "TheOldReader login processing... %s", result->data); if (result->data && result->httpstatus == 200) tmp = strstr (result->data, "Auth="); if (tmp) { gchar *ttmp = tmp; tmp = strchr (tmp, '\n'); if (tmp) *tmp = '\0'; node_source_set_auth_token (node, g_strdup_printf ("GoogleLogin auth=%s", ttmp + 5)); /* now that we are authenticated trigger updating to start data retrieval */ if (!(flags & NODE_SOURCE_UPDATE_ONLY_LOGIN)) subscription_update (subscription, flags); /* process any edits waiting in queue */ google_reader_api_edit_process (node->source); } else { debug0 (DEBUG_UPDATE, "TheOldReader login failed! no Auth token found in result!"); subscription->node->available = FALSE; g_free (subscription->updateError); subscription->updateError = g_strdup (_("Login failed!")); node_source_set_state (node, NODE_SOURCE_STATE_NO_AUTH); auth_dialog_new (subscription, flags); } } /** * Perform a login to TheOldReader, if the login completes the * TheOldReaderSource will have a valid Auth token and will have loginStatus to * NODE_SOURCE_LOGIN_ACTIVE. */ void theoldreader_source_login (TheOldReaderSourcePtr source, guint32 flags) { gchar *username, *password; updateRequestPtr request; subscriptionPtr subscription = source->root->subscription; if (source->root->source->loginState != NODE_SOURCE_STATE_NONE) { /* this should not happen, as of now, we assume the session * doesn't expire. */ debug1(DEBUG_UPDATE, "Logging in while login state is %d\n", source->root->source->loginState); } request = update_request_new (); update_request_set_source (request, THEOLDREADER_READER_LOGIN_URL); /* escape user and password as both are passed using an URI */ username = g_uri_escape_string (subscription->updateOptions->username, NULL, TRUE); password = g_uri_escape_string (subscription->updateOptions->password, NULL, TRUE); request->postdata = g_strdup_printf (THEOLDREADER_READER_LOGIN_POST, username, password); request->options = update_options_copy (subscription->updateOptions); g_free (username); g_free (password); node_source_set_state (source->root, NODE_SOURCE_STATE_IN_PROGRESS); update_execute_request (source, request, theoldreader_source_login_cb, source->root, flags); } /* node source type implementation */ static void theoldreader_source_auto_update (nodePtr node) { GTimeVal now; TheOldReaderSourcePtr source = (TheOldReaderSourcePtr) node->data; if (node->source->loginState == NODE_SOURCE_STATE_NONE) { node_source_update (node); return; } if (node->source->loginState == NODE_SOURCE_STATE_IN_PROGRESS) return; /* the update will start automatically anyway */ g_get_current_time (&now); /* do daily updates for the feed list and feed updates according to the default interval */ /* if (node->subscription->updateState->lastPoll.tv_sec + NODE_SOURCE_UPDATE_INTERVAL <= now.tv_sec) { subscription_update (node->subscription, 0); g_get_current_time (&source->lastQuickUpdate); } else if (source->lastQuickUpdate.tv_sec + NODE_SOURCE_QUICK_UPDATE_INTERVAL <= now.tv_sec) { theoldreader_source_opml_quick_update (source); google_reader_api_edit_process (node->source); g_get_current_time (&source->lastQuickUpdate); }*/ // FIXME: Don't do below, but above logic! if (source->lastQuickUpdate.tv_sec + THEOLDREADER_SOURCE_QUICK_UPDATE_INTERVAL <= now.tv_sec) { subscription_update (node->subscription, 0); g_get_current_time (&source->lastQuickUpdate); } } static void theoldreader_source_init (void) { metadata_type_register ("theoldreader-feed-id", METADATA_TYPE_TEXT); } static void theoldreader_source_deinit (void) { } static void theoldreader_source_import (nodePtr node) { opml_source_import (node); node->subscription->updateInterval = -1; node->subscription->type = node->source->type->sourceSubscriptionType; if (!node->data) node->data = (gpointer) theoldreader_source_new (node); } static nodePtr theoldreader_source_add_subscription (nodePtr root, subscriptionPtr subscription) { nodePtr parent; gchar *categoryId = NULL; TheOldReaderSourcePtr source = (TheOldReaderSourcePtr)root->data; /* Determine correct category from selected folder name */ parent = feedlist_get_selected (); if (parent) { if (parent->subscription) parent = parent->parent; categoryId = g_hash_table_lookup (source->folderToCategory, parent->id); } google_reader_api_edit_add_subscription (root->source, subscription->source, categoryId); // FIXME: leaking subscription? // FIXME: somehow the async subscribing doesn't cause the feed list to update return NULL; } static void theoldreader_source_remove_node (nodePtr node, nodePtr child) { gchar *url; TheOldReaderSourcePtr source = (TheOldReaderSourcePtr) node->data; if (child == node) { feedlist_node_removed (child); return; } url = g_strdup (child->subscription->source); feedlist_node_removed (child); /* propagate the removal only if there aren't other copies */ if (!feedlist_find_node (source->root, NODE_BY_URL, url)) google_reader_api_edit_remove_subscription (node->source, url); g_free (url); } /* GUI callbacks */ static void on_theoldreader_source_selected (GtkDialog *dialog, gint response_id, gpointer user_data) { nodePtr node; if (response_id == GTK_RESPONSE_OK) { node = node_new (node_source_get_node_type ()); node_source_new (node, theoldreader_source_get_type (), "http://theoldreader.com/reader"); subscription_set_auth_info (node->subscription, gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (GTK_WIDGET(dialog), "userEntry"))), gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (GTK_WIDGET(dialog), "passwordEntry")))); node->data = theoldreader_source_new (node); feedlist_node_added (node); node_source_update (node); } gtk_widget_destroy (GTK_WIDGET (dialog)); } static void ui_theoldreader_source_get_account_info (void) { GtkWidget *dialog; dialog = liferea_dialog_new ("theoldreader_source"); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (on_theoldreader_source_selected), NULL); } static void theoldreader_source_cleanup (nodePtr node) { TheOldReaderSourcePtr reader = (TheOldReaderSourcePtr) node->data; theoldreader_source_free(reader); node->data = NULL; } static void theoldreader_source_item_set_flag (nodePtr node, itemPtr item, gboolean newStatus) { google_reader_api_edit_mark_starred (node->source, item->sourceId, node->subscription->source, newStatus); item_flag_state_changed (item, newStatus); } static void theoldreader_source_item_mark_read (nodePtr node, itemPtr item, gboolean newStatus) { google_reader_api_edit_mark_read (node->source, item->sourceId, node->subscription->source, newStatus); item_read_state_changed (item, newStatus); } /** * Convert all subscriptions of a google source to local feeds * * @param node The node to migrate (not the nodeSource!) */ static void theoldreader_source_convert_to_local (nodePtr node) { node_source_set_state (node, NODE_SOURCE_STATE_MIGRATE); } /* node source type definition */ extern struct subscriptionType theOldReaderSourceFeedSubscriptionType; extern struct subscriptionType theOldReaderSourceOpmlSubscriptionType; #define BASE_URL "https://theoldreader.com/reader/api/0/" static struct nodeSourceType nst = { .id = "fl_theoldreader", .name = N_("TheOldReader"), .capabilities = NODE_SOURCE_CAPABILITY_DYNAMIC_CREATION | NODE_SOURCE_CAPABILITY_CAN_LOGIN | NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST | NODE_SOURCE_CAPABILITY_ADD_FEED | NODE_SOURCE_CAPABILITY_ADD_FOLDER | NODE_SOURCE_CAPABILITY_ITEM_STATE_SYNC | NODE_SOURCE_CAPABILITY_CONVERT_TO_LOCAL | NODE_SOURCE_CAPABILITY_GOOGLE_READER_API, .api.json = TRUE, .api.subscription_list = BASE_URL "subscription/list?output=json", .api.unread_count = BASE_URL "unread-count?all=true&client=liferea", .api.token = BASE_URL "token", .api.add_subscription = BASE_URL "subscription/edit?client=liferea", .api.add_subscription_post = "s=feed%%2F%s&ac=subscribe&T=%s", .api.remove_subscription = BASE_URL "subscription/edit?client=liferea", .api.remove_subscription_post = "s=feed%%2F%s&ac=unsubscribe&T=%s", .api.edit_tag = BASE_URL "edit-tag?client=liferea", .api.edit_tag_add_post = "i=%s&s=%s%%2F%s&a=%s&ac=edit-tags&T=%s&async=true", .api.edit_tag_remove_post = "i=%s&s=%s%%2F%s&r=%s&ac=edit-tags&T=%s&async=true", .api.edit_tag_ar_tag_post = "i=%s&s=%s%%2F%s&a=%s&r=%s&ac=edit-tags&T=%s&async=true", .api.edit_add_label = BASE_URL "subscription/edit?client=liferea", .api.edit_add_label_post = "s=%s&a=%s&ac=edit&T=%s", .feedSubscriptionType = &theOldReaderSourceFeedSubscriptionType, .sourceSubscriptionType = &theOldReaderSourceOpmlSubscriptionType, .source_type_init = theoldreader_source_init, .source_type_deinit = theoldreader_source_deinit, .source_new = ui_theoldreader_source_get_account_info, .source_delete = opml_source_remove, .source_import = theoldreader_source_import, .source_export = opml_source_export, .source_get_feedlist = opml_source_get_feedlist, .source_auto_update = theoldreader_source_auto_update, .free = theoldreader_source_cleanup, .item_set_flag = theoldreader_source_item_set_flag, .item_mark_read = theoldreader_source_item_mark_read, .add_folder = NULL, .add_subscription = theoldreader_source_add_subscription, .remove_node = theoldreader_source_remove_node, .convert_to_local = theoldreader_source_convert_to_local }; nodeSourceTypePtr theoldreader_source_get_type (void) { return &nst; } liferea-1.12.7/src/fl_sources/theoldreader_source.h000066400000000000000000000067101352135647700223600ustar00rootroot00000000000000/** * @file theoldreader_source.h TheOldReader feed list source support * * Copyright (C) 2007-2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _THEOLDREADER_SOURCE_H #define _THEOLDREADER_SOURCE_H #include "fl_sources/node_source.h" /** * A nodeSource specific for TheOldReader */ typedef struct TheOldReaderSource { nodePtr root; /**< the root node in the feed list */ /** * A map from a subscription source to a timestamp when it was last * updated (provided by Google). */ GHashTable *lastTimestampMap; /** * A timestamp when the last Quick update took place. */ GTimeVal lastQuickUpdate; GHashTable *folderToCategory; /**< Lookup hash for folder node id to TTRSS category id */ } *TheOldReaderSourcePtr; /** * TheOldReader API URL's * In each of the following, the _URL indicates the URL to use, and _POST * indicates the corresponging postdata to send. * @see https://github.com/krasnoukhov/theoldreader-api */ /** * TheOldReader Login api. * @param Email The google account email id. * @param Passwd The google account password. * @return The return data has a line "Auth=xxxx" which will be used as an * Authorization header in future requests. */ #define THEOLDREADER_READER_LOGIN_URL "https://theoldreader.com/accounts/ClientLogin" #define THEOLDREADER_READER_LOGIN_POST "service=reader&Email=%s&Passwd=%s&source=liferea&continue=http://theoldreader.com" /** Interval (in seconds) for doing a Quick Update: 10min */ #define THEOLDREADER_SOURCE_QUICK_UPDATE_INTERVAL 600 /** * @returns TheOldReader source type implementation info. */ nodeSourceTypePtr theoldreader_source_get_type (void); /** * Find a child node with the given feed source URL. * * @param gsource TheOldReaderSource * @param source a feed source URL to search * * @returns a node (or NULL) */ nodePtr theoldreader_source_get_node_from_source (TheOldReaderSourcePtr gsource, const gchar* source); /** * Tries to update the entire source quickly, by updating only those feeds * which are known to be updated. Suitable for g_timeout_add. This is an * internal function. * * @param data A pointer to a node id of the source. This pointer will * be g_free'd if the update fails. * * @returns FALSE on update failure */ gboolean theoldreader_source_quick_update_timeout (gpointer gsource); /** * Migrate a google source child-node from a Liferea 1.4 style read-only * google source nodes. * * @param node The node to migrate (not the nodeSource!) */ void theoldreader_source_migrate_node (nodePtr node); /** * Perform login for the given Google source. * * @param gsource a TheOldReaderSource * @param flags network request flags */ void theoldreader_source_login (TheOldReaderSourcePtr gsource, guint32 flags); #endif liferea-1.12.7/src/fl_sources/theoldreader_source_feed.c000066400000000000000000000161661352135647700233440ustar00rootroot00000000000000/** * @file theoldreader_source_feed.c TheOldReader feed subscription routines * * Copyright (C) 2008 Arnold Noronha * Copyright (C) 2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "common.h" #include "debug.h" #include "xml.h" #include "feedlist.h" #include "google_reader_api_edit.h" #include "theoldreader_source.h" #include "subscription.h" #include "node.h" #include "metadata.h" #include "db.h" #include "item_state.h" void theoldreader_source_migrate_node (nodePtr node) { /* scan the node for bad ID's, if so, brutally remove the node */ itemSetPtr itemset = node_get_itemset (node); GList *iter = itemset->ids; for (; iter; iter = g_list_next (iter)) { itemPtr item = item_load (GPOINTER_TO_UINT (iter->data)); if (item && item->sourceId) { // FIXME: does this work? if (!g_str_has_prefix(item->sourceId, "tag:google.com")) { debug1(DEBUG_UPDATE, "Item with sourceId [%s] will be deleted.", item->sourceId); db_item_remove(GPOINTER_TO_UINT(iter->data)); } } if (item) item_unload (item); } /* cleanup */ itemset_free (itemset); } static itemPtr theoldreader_source_load_item_from_sourceid (nodePtr node, gchar *sourceId, GHashTable *cache) { gpointer ret = g_hash_table_lookup (cache, sourceId); itemSetPtr itemset; int num = g_hash_table_size (cache); GList *iter; itemPtr item = NULL; if (ret) return item_load (GPOINTER_TO_UINT (ret)); /* skip the top 'num' entries */ itemset = node_get_itemset (node); iter = itemset->ids; while (num--) iter = g_list_next (iter); for (; iter; iter = g_list_next (iter)) { item = item_load (GPOINTER_TO_UINT (iter->data)); if (item) { if (item->sourceId) { /* save to cache */ g_hash_table_insert (cache, g_strdup(item->sourceId), (gpointer) item->id); if (g_str_equal (item->sourceId, sourceId)) { itemset_free (itemset); return item; } } item_unload (item); } } g_print ("Could not find item for %s!", sourceId); itemset_free (itemset); return NULL; } static void theoldreader_source_item_retrieve_status (const xmlNodePtr entry, subscriptionPtr subscription, GHashTable *cache) { xmlNodePtr xml; nodePtr node = subscription->node; xmlChar *id = NULL; gboolean read = FALSE; xml = entry->children; g_assert (xml); /* Note: at the moment TheOldReader doesn't exposed a "starred" label like Google Reader did. It also doesn't expose the like feature it implements. Therefore we cannot sync the flagged state with TheOldReader. */ for (xml = entry->children; xml; xml = xml->next) { if (g_str_equal (xml->name, "id")) id = xmlNodeGetContent (xml); if (g_str_equal (xml->name, "category")) { xmlChar* label = xmlGetProp (xml, "label"); if (!label) continue; if (g_str_equal (label, "read")) read = TRUE; xmlFree (label); } } if (!id) { g_print ("Skipping item without id in theoldreader_source_item_retrieve_status()!"); return; } itemPtr item = theoldreader_source_load_item_from_sourceid (node, id, cache); if (item && item->sourceId) { if (g_str_equal (item->sourceId, id) && !google_reader_api_edit_is_in_queue(node->source, id)) { if (item->readStatus != read) item_read_state_changed (item, read); } } if (item) item_unload (item); xmlFree (id); } static void theoldreader_feed_subscription_process_update_result (subscriptionPtr subscription, const struct updateResult* const result, updateFlags flags) { gchar *id; debug_start_measurement (DEBUG_UPDATE); /* Save old subscription metadata which contains "theoldreader-feed-id" which is mission critical and the feed parser currently drops all previous metadata :-( */ id = g_strdup (metadata_list_get (subscription->metadata, "theoldreader-feed-id")); /* Always do standard feed parsing to get the items... */ feed_get_subscription_type ()->process_update_result (subscription, result, flags); /* Set remote id again */ metadata_list_set (&subscription->metadata, "theoldreader-feed-id", id); g_free (id); if (!result->data) return; xmlDocPtr doc = xml_parse (result->data, result->size, NULL); if (doc) { xmlNodePtr root = xmlDocGetRootElement (doc); xmlNodePtr entry = root->children ; GHashTable *cache = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); while (entry) { if (!g_str_equal (entry->name, "entry")) { entry = entry->next; continue; /* not an entry */ } theoldreader_source_item_retrieve_status (entry, subscription, cache); entry = entry->next; } g_hash_table_unref (cache); xmlFreeDoc (doc); } else { debug0 (DEBUG_UPDATE, "theoldreader_feed_subscription_process_update_result(): Couldn't parse XML!"); g_print ("theoldreader_feed_subscription_process_update_result(): Couldn't parse XML!"); } debug_end_measurement (DEBUG_UPDATE, "theoldreader_feed_subscription_process_update_result"); } static gboolean theoldreader_feed_subscription_prepare_update_request (subscriptionPtr subscription, struct updateRequest *request) { debug0 (DEBUG_UPDATE, "preparing TheOldReader feed subscription for update"); TheOldReaderSourcePtr source = (TheOldReaderSourcePtr) node_source_root_from_node (subscription->node)->data; g_assert (source); if (source->root->source->loginState == NODE_SOURCE_STATE_NONE) { subscription_update (node_source_root_from_node (subscription->node)->subscription, 0) ; return FALSE; } if (!metadata_list_get (subscription->metadata, "theoldreader-feed-id")) { g_print ("Skipping TheOldReader feed '%s' (%s) without id!", subscription->source, subscription->node->id); return FALSE; } debug1 (DEBUG_UPDATE, "Setting cookies for a TheOldReader subscription '%s'", subscription->source); gchar* source_escaped = g_uri_escape_string(request->source, NULL, TRUE); gchar* newUrl = g_strdup_printf ("http://theoldreader.com/reader/atom/%s", metadata_list_get (subscription->metadata, "theoldreader-feed-id")); update_request_set_source (request, newUrl); g_free (newUrl); g_free (source_escaped); update_request_set_auth_value (request, subscription->node->source->authToken); return TRUE; } struct subscriptionType theOldReaderSourceFeedSubscriptionType = { theoldreader_feed_subscription_prepare_update_request, theoldreader_feed_subscription_process_update_result }; liferea-1.12.7/src/fl_sources/theoldreader_source_feed_list.c000066400000000000000000000175141352135647700243750ustar00rootroot00000000000000/** * @file theoldreader_source_feed_list.c TheOldReader feed list handling * * Copyright (C) 2013-2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "theoldreader_source_feed_list.h" #include #include #include "common.h" #include "db.h" #include "debug.h" #include "feedlist.h" #include "folder.h" #include "json.h" #include "metadata.h" #include "node.h" #include "subscription.h" #include "xml.h" #include "fl_sources/opml_source.h" #include "fl_sources/theoldreader_source.h" static void theoldreader_source_check_node_for_removal (nodePtr node, gpointer user_data) { JsonArray *array = (JsonArray *)user_data; GList *iter, *elements; gboolean found = FALSE; if (IS_FOLDER (node)) { /* Auto-remove folders if they do not have children */ if (!node->children) feedlist_node_removed (node); node_foreach_child_data (node, theoldreader_source_check_node_for_removal, user_data); } else { elements = iter = json_array_get_elements (array); while (iter) { JsonNode *json_node = (JsonNode *)iter->data; if (g_str_equal (node->subscription->source, json_get_string (json_node, "url"))) { debug1 (DEBUG_UPDATE, "node: %s", node->subscription->source); found = TRUE; break; } iter = g_list_next (iter); } g_list_free (elements); if (!found) feedlist_node_removed (node); } } static void theoldreader_source_merge_feed (TheOldReaderSourcePtr source, const gchar *url, const gchar *title, const gchar *id, nodePtr folder) { nodePtr node; node = feedlist_find_node (source->root, NODE_BY_URL, url); if (!node) { debug2 (DEBUG_UPDATE, "adding %s (%s)", title, url); node = node_new (feed_get_node_type ()); node_set_title (node, title); node_set_data (node, feed_new ()); node_set_subscription (node, subscription_new (url, NULL, NULL)); node->subscription->type = source->root->source->type->feedSubscriptionType; /* Save TheOldReader feed id which we need to fetch items... */ node->subscription->metadata = metadata_list_append (node->subscription->metadata, "theoldreader-feed-id", id); db_subscription_update (node->subscription); node_set_parent (node, folder?folder:source->root, -1); feedlist_node_imported (node); /** * @todo mark the ones as read immediately after this is done * the feed as retrieved by this has the read and unread * status inherently. */ subscription_update (node->subscription, FEED_REQ_RESET_TITLE | FEED_REQ_PRIORITY_HIGH); subscription_update_favicon (node->subscription); } else { node_source_update_folder (node, folder); } } /* JSON subscription list processing implementation */ static void theoldreader_subscription_cb (subscriptionPtr subscription, const struct updateResult * const result, updateFlags flags) { TheOldReaderSourcePtr source = (TheOldReaderSourcePtr) subscription->node->data; debug1 (DEBUG_UPDATE,"theoldreader_subscription_cb(): %s", result->data); subscription->updateJob = NULL; // FIXME: the following code is very similar to ttrss! if (result->data && result->httpstatus == 200) { JsonParser *parser = json_parser_new (); if (json_parser_load_from_data (parser, result->data, -1, NULL)) { JsonArray *array = json_node_get_array (json_get_node (json_parser_get_root (parser), "subscriptions")); GList *iter, *elements, *citer, *celements; /* We expect something like this: [{"id":"feed/51d49b79d1716c7b18000025", "title":"LZone", "categories":[{"id":"user/-/label/myfolder","label":"myfolder"}], "sortid":"51d49b79d1716c7b18000025", "firstitemmsec":"1371403150181", "url":"https://lzone.de/rss.xml", "htmlUrl":"https://lzone.de", "iconUrl":"http://s.yeoldereader.com/system/uploads/feed/picture/5152/884a/4dce/57aa/7e00/icon_0a6a.ico"}, ... */ elements = iter = json_array_get_elements (array); /* Add all new nodes we find */ while (iter) { JsonNode *categories, *node = (JsonNode *)iter->data; nodePtr folder = NULL; /* Check for categories, if there use first one as folder */ categories = json_get_node (node, "categories"); if (categories && JSON_NODE_TYPE (categories) == JSON_NODE_ARRAY) { citer = celements = json_array_get_elements (json_node_get_array (categories)); while (citer) { const gchar *label = json_get_string ((JsonNode *)citer->data, "label"); const gchar *id = json_get_string ((JsonNode *)citer->data, "id"); if (label) { folder = node_source_find_or_create_folder (source->root, label, label); /* Store category id also for folder (needed when subscribing new feeds) */ g_hash_table_insert (source->folderToCategory, g_strdup (folder->id), g_strdup (id)); break; } citer = g_list_next (citer); } g_list_free (celements); } /* ignore everything without a feed url */ if (json_get_string (node, "url")) { theoldreader_source_merge_feed (source, json_get_string (node, "url"), json_get_string (node, "title"), json_get_string (node, "id"), folder); } iter = g_list_next (iter); } g_list_free (elements); /* Remove old nodes we cannot find anymore */ node_foreach_child_data (source->root, theoldreader_source_check_node_for_removal, array); /* Save new subscription tree to OPML cache file */ opml_source_export (subscription->node); subscription->node->available = TRUE; } else { g_print ("Invalid JSON returned on TheOldReader request! >>>%s<<<", result->data); } g_object_unref (parser); } else { subscription->node->available = FALSE; debug0 (DEBUG_UPDATE, "theoldreader_subscription_cb(): ERROR: failed to get subscription list!"); } if (!(flags & NODE_SOURCE_UPDATE_ONLY_LIST)) node_foreach_child_data (subscription->node, node_update_subscription, GUINT_TO_POINTER (0)); } static void theoldreader_source_opml_subscription_process_update_result (subscriptionPtr subscription, const struct updateResult * const result, updateFlags flags) { theoldreader_subscription_cb (subscription, result, flags); } static gboolean theoldreader_source_opml_subscription_prepare_update_request (subscriptionPtr subscription, struct updateRequest *request) { nodePtr node = subscription->node; g_assert(node->source); if (node->source->loginState == NODE_SOURCE_STATE_NONE) { debug0 (DEBUG_UPDATE, "TheOldReaderSource: login"); theoldreader_source_login (node->data, 0); return FALSE; } debug1 (DEBUG_UPDATE, "updating TheOldReader subscription (node id %s)", node->id); update_request_set_source (request, node->source->type->api.subscription_list); update_request_set_auth_value (request, node->source->authToken); return TRUE; } /* OPML subscription type definition */ struct subscriptionType theOldReaderSourceOpmlSubscriptionType = { theoldreader_source_opml_subscription_prepare_update_request, theoldreader_source_opml_subscription_process_update_result }; liferea-1.12.7/src/fl_sources/theoldreader_source_feed_list.h000066400000000000000000000024101352135647700243670ustar00rootroot00000000000000/** * Copyright (C) 2009 Adrian Bunk * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "fl_sources/theoldreader_source.h" /** * Find a node by the source id. * * @param gsource the TheOldReader source * @param source the feed id to find * * @returns a node (or NULL) */ nodePtr theoldreader_source_opml_get_node_by_source(TheOldReaderSourcePtr gsource, const gchar *source); /** * Perform a quick update of the TheOldReader source. * * @param gsource the TheOldReader source */ gboolean theoldreader_source_opml_quick_update (TheOldReaderSourcePtr gsource); liferea-1.12.7/src/fl_sources/ttrss_source.c000066400000000000000000000355171352135647700210770ustar00rootroot00000000000000/** * @file ttrss_source.c Tiny Tiny RSS feed list source support * * Copyright (C) 2010-2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "fl_sources/ttrss_source.h" #include #include #include #include #include "common.h" #include "debug.h" #include "db.h" #include "feedlist.h" #include "item_state.h" #include "json.h" #include "metadata.h" #include "node.h" #include "subscription.h" #include "update.h" #include "ui/auth_dialog.h" #include "ui/ui_common.h" #include "ui/liferea_dialog.h" #include "fl_sources/node_source.h" #include "fl_sources/opml_source.h" /** Initialize a TinyTinyRSS source with given node as root */ static ttrssSourcePtr ttrss_source_new (nodePtr node) { ttrssSourcePtr source = g_new0 (struct ttrssSource, 1) ; source->root = node; source->apiLevel = 0; source->categories = g_hash_table_new (g_direct_hash, g_direct_equal); source->folderToCategory = g_hash_table_new (g_str_hash, g_str_equal); return source; } static void ttrss_source_free (ttrssSourcePtr source) { if (!source) return; update_job_cancel_by_owner (source); g_hash_table_destroy (source->categories); g_hash_table_destroy (source->folderToCategory); g_free (source->session_id); g_free (source); } static void ttrss_source_set_login_error (ttrssSourcePtr source, gchar *msg) { g_free (source->root->subscription->updateError); source->root->subscription->updateError = msg; source->root->available = FALSE; g_print ("TinyTinyRSS login failed: error '%s'!\n", msg); node_source_set_state (source->root, NODE_SOURCE_STATE_NONE); } static void ttrss_source_login_cb (const struct updateResult * const result, gpointer userdata, updateFlags flags) { ttrssSourcePtr source = (ttrssSourcePtr) userdata; subscriptionPtr subscription = source->root->subscription; JsonParser *parser; debug1 (DEBUG_UPDATE, "TinyTinyRSS login processing... >>>%s<<<", result->data); g_assert (!source->session_id); if (!(result->data && result->httpstatus == 200)) { ttrss_source_set_login_error (source, g_strdup_printf ("Login request failed with HTTP error %d", result->httpstatus)); return; } parser = json_parser_new (); if (!json_parser_load_from_data (parser, result->data, -1, NULL)) { ttrss_source_set_login_error (source, g_strdup ("Invalid JSON returned on login!")); return; } JsonNode *node = json_parser_get_root (parser); /* Check for API specified error... */ if (json_get_string (json_get_node (node, "content"), "error")) { const gchar *error = json_get_string (json_get_node (node, "content"), "error"); ttrss_source_set_login_error (source, g_strdup (error)); if (g_str_equal (error, "LOGIN_ERROR")) auth_dialog_new (source->root->subscription, flags); return; } /* Success! Get SID and API Level. */ source->apiLevel = json_get_int (json_get_node (node, "content"), "api_level"); source->session_id = g_strdup (json_get_string (json_get_node (node, "content"), "session_id")); if (source->session_id) { debug2 (DEBUG_UPDATE, "TinyTinyRSS Found session_id: >>>%s<<< (API level %d)!", source->session_id, source->apiLevel); node_source_set_state (subscription->node, NODE_SOURCE_STATE_ACTIVE); if (!(flags & NODE_SOURCE_UPDATE_ONLY_LOGIN)) subscription_update (subscription, flags); } else { ttrss_source_set_login_error (source, g_strdup_printf ("No session_id found in response!\n%s", result->data)); } g_object_unref (parser); } /** * Perform a login to tt-rss, if the login completes the ttrssSource will * have a valid sid and will have loginStatus NODE_SOURCE_LOGIN_ACTIVE. */ void ttrss_source_login (ttrssSourcePtr source, guint32 flags) { gchar *username, *password, *source_uri; updateRequestPtr request; subscriptionPtr subscription = source->root->subscription; if (source->root->source->loginState != NODE_SOURCE_STATE_NONE) { /* this should not happen, as of now, we assume the session doesn't expire. */ debug1 (DEBUG_UPDATE, "Logging in while login state is %d", source->root->source->loginState); } request = update_request_new (); /* escape user and password for JSON call */ username = g_strescape (subscription->updateOptions->username, NULL); password = g_strescape (subscription->updateOptions->password, NULL); source->url = metadata_list_get (subscription->metadata, "ttrss-url"); if (!source->url) { ttrss_source_set_login_error (source, g_strdup ("Fatal: We've lost the TinyTinyRSS server URL! Please re-subscribe!")); return; } source_uri = g_strdup_printf (TTRSS_URL, source->url); update_request_set_source (request, source_uri); g_free (source_uri); request->options = update_options_copy (subscription->updateOptions); request->postdata = g_strdup_printf (TTRSS_JSON_LOGIN, username, password); g_free (username); g_free (password); node_source_set_state (source->root, NODE_SOURCE_STATE_IN_PROGRESS); update_execute_request (source, request, ttrss_source_login_cb, source, flags); } /* node source type implementation */ static void ttrss_source_auto_update (nodePtr node) { if (node->source->loginState == NODE_SOURCE_STATE_NONE) { node_source_update (node); return; } if (node->source->loginState == NODE_SOURCE_STATE_IN_PROGRESS) return; /* the update will start automatically anyway */ debug0 (DEBUG_UPDATE, "ttrss_source_auto_update()"); subscription_auto_update (node->subscription); } static void ttrss_source_init (void) { metadata_type_register ("ttrss-url", METADATA_TYPE_URL); metadata_type_register ("ttrss-feed-id", METADATA_TYPE_TEXT); } static void ttrss_source_deinit (void) { } static void ttrss_source_import (nodePtr node) { opml_source_import (node); node->subscription->updateInterval = -1; node->subscription->type = node->source->type->sourceSubscriptionType; if (!node->data) node->data = (gpointer) ttrss_source_new (node); } static void ttrss_source_subscribe_cb (const struct updateResult * const result, gpointer userdata, updateFlags flags) { subscriptionPtr subscription = (subscriptionPtr) userdata; debug2 (DEBUG_UPDATE, "TinyTinyRSS subscribe result processing... status:%d >>>%s<<<", result->httpstatus, result->data); if (200 != result->httpstatus) { ui_show_error_box (_("TinyTinyRSS HTTP API not reachable!")); return; } /* Result should be {"seq":0,"status":0,"content":{"status":{"code":1}}} */ // FIXME: poor mans matching if (!strstr (result->data, "\"code\":1")) { ui_show_error_box (_("TinyTinyRSS subscribing to feed failed! Check if you really passed a feed URL!")); return; } /* As TinyTinyRSS does not return the id of the newly subscribed feed we need to reload the entire feed list. */ node_source_update (subscription->node->source->root); } static nodePtr ttrss_source_add_subscription (nodePtr root, subscriptionPtr subscription) { nodePtr parent; gchar *username, *password; ttrssSourcePtr source = (ttrssSourcePtr)root->data; updateRequestPtr request; gint categoryId = 0; /* Determine correct category from selected folder name */ parent = feedlist_get_selected (); if (parent) { if (parent->subscription) parent = parent->parent; categoryId = GPOINTER_TO_INT (g_hash_table_lookup (source->folderToCategory, parent->id)); } /* escape user and password for JSON call */ username = g_strescape (root->subscription->updateOptions->username, NULL); password = g_strescape (root->subscription->updateOptions->password, NULL); request = update_request_new (); request->options = update_options_copy (root->subscription->updateOptions); request->postdata = g_strdup_printf (TTRSS_JSON_SUBSCRIBE, source->session_id, subscription->source, categoryId, username, password); update_request_set_source (request, g_strdup_printf (TTRSS_URL, source->url)); update_execute_request (source, request, ttrss_source_subscribe_cb, source, 0 /* flags */); g_free (username); g_free (password); // FIXME: leaking subscription? return NULL; } static void ttrss_source_remove_node_cb (const struct updateResult * const result, gpointer userdata, updateFlags flags) { nodePtr node = (nodePtr) userdata; debug2 (DEBUG_UPDATE, "TinyTinyRSS remove node result processing... status:%d >>>%s<<<", result->httpstatus, result->data); if (200 != result->httpstatus) { ui_show_error_box (_("TinyTinyRSS HTTP API not reachable!")); return; } /* We expect the following {"seq":0,"status":0,"content":{"status":"OK"}} */ // FIXME: poor mans matching if (!strstr (result->data, "\"status\":0")) { ui_show_error_box (_("TinyTinyRSS unsubscribing feed failed!")); return; } feedlist_node_removed (node); } static void ttrss_source_remove_node (nodePtr root, nodePtr node) { ttrssSourcePtr source = (ttrssSourcePtr)root->data; updateRequestPtr request; const gchar *id; // FIXME: Check for login? if (source->apiLevel < 5) { ui_show_info_box (_("This TinyTinyRSS version does not support removing feeds. Upgrade to version %s or later!"), "1.7.6"); return; } id = metadata_list_get (node->subscription->metadata, "ttrss-feed-id"); if (!id) { g_print ("Cannot remove node on remote side as ttrss-feed-id is unknown!"); return; } request = update_request_new (); request->options = update_options_copy (root->subscription->updateOptions); request->postdata = g_strdup_printf (TTRSS_JSON_UNSUBSCRIBE, source->session_id, id); update_request_set_source (request, g_strdup_printf (TTRSS_URL, source->url)); update_execute_request (source, request, ttrss_source_remove_node_cb, node, 0 /* flags */); } /* GUI callbacks */ static void on_ttrss_source_selected (GtkDialog *dialog, gint response_id, gpointer user_data) { if (response_id == GTK_RESPONSE_OK) { nodePtr node; node = node_new (node_source_get_node_type ()); node_source_new (node, ttrss_source_get_type (), ""); /* This is a bit ugly: we need to prevent the tt-rss base URL from being lost by unwanted permanent redirects on the getFeeds call, so we save it as the homepage meta data value... */ metadata_list_set (&node->subscription->metadata, "ttrss-url", gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (GTK_WIDGET (dialog), "serverUrlEntry")))); subscription_set_auth_info (node->subscription, gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (GTK_WIDGET(dialog), "userEntry"))), gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (GTK_WIDGET(dialog), "passwordEntry")))); node->data = (gpointer)ttrss_source_new (node); feedlist_node_added (node); node_source_update (node); db_node_update (node); /* because of metadate_list_set() above */ } gtk_widget_destroy (GTK_WIDGET (dialog)); } static void ui_ttrss_source_get_account_info (void) { GtkWidget *dialog; dialog = liferea_dialog_new ("ttrss_source"); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (on_ttrss_source_selected), NULL); } static void ttrss_source_cleanup (nodePtr node) { ttrssSourcePtr source = (ttrssSourcePtr) node->data; ttrss_source_free (source); node->data = NULL; } static void ttrss_source_remote_update_cb (const struct updateResult * const result, gpointer userdata, updateFlags flags) { debug2 (DEBUG_UPDATE, "TinyTinyRSS update result processing... status:%d >>>%s<<<", result->httpstatus, result->data); } /* FIXME: Only simple synchronous item change requests... Get async! */ static void ttrss_source_item_set_flag (nodePtr node, itemPtr item, gboolean newStatus) { nodePtr root = node_source_root_from_node (node); ttrssSourcePtr source = (ttrssSourcePtr)root->data; updateRequestPtr request; request = update_request_new (); request->options = update_options_copy (root->subscription->updateOptions); request->postdata = g_strdup_printf (TTRSS_JSON_UPDATE_ITEM_FLAG, source->session_id, item_get_id(item), newStatus?1:0 ); update_request_set_source (request, g_strdup_printf (TTRSS_URL, source->url)); update_execute_request (source, request, ttrss_source_remote_update_cb, source, 0 /* flags */); item_flag_state_changed (item, newStatus); } static void ttrss_source_item_mark_read (nodePtr node, itemPtr item, gboolean newStatus) { nodePtr root = node_source_root_from_node (node); ttrssSourcePtr source = (ttrssSourcePtr)root->data; updateRequestPtr request; request = update_request_new (); request->options = update_options_copy (root->subscription->updateOptions); request->postdata = g_strdup_printf (TTRSS_JSON_UPDATE_ITEM_UNREAD, source->session_id, item_get_id(item), newStatus?0:1 ); update_request_set_source (request, g_strdup_printf (TTRSS_URL, source->url)); update_execute_request (source, request, ttrss_source_remote_update_cb, source, 0 /* flags */); item_read_state_changed (item, newStatus); } /* node source type definition */ extern struct subscriptionType ttrssSourceFeedSubscriptionType; extern struct subscriptionType ttrssSourceSubscriptionType; static struct nodeSourceType nst = { .id = "fl_ttrss", .name = N_("Tiny Tiny RSS"), .capabilities = NODE_SOURCE_CAPABILITY_DYNAMIC_CREATION | NODE_SOURCE_CAPABILITY_CAN_LOGIN | NODE_SOURCE_CAPABILITY_ITEM_STATE_SYNC | NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST | NODE_SOURCE_CAPABILITY_ADD_FEED, .feedSubscriptionType = &ttrssSourceFeedSubscriptionType, .sourceSubscriptionType = &ttrssSourceSubscriptionType, .source_type_init = ttrss_source_init, .source_type_deinit = ttrss_source_deinit, .source_new = ui_ttrss_source_get_account_info, .source_delete = opml_source_remove, .source_import = ttrss_source_import, .source_export = opml_source_export, .source_get_feedlist = opml_source_get_feedlist, .source_auto_update = ttrss_source_auto_update, .free = ttrss_source_cleanup, .item_set_flag = ttrss_source_item_set_flag, .item_mark_read = ttrss_source_item_mark_read, .add_folder = NULL, /* not supported by current tt-rss JSON API (v1.8) */ .add_subscription = ttrss_source_add_subscription, .remove_node = ttrss_source_remove_node, .convert_to_local = NULL /* FIXME: implement me to allow data migration from tt-rss! */ }; nodeSourceTypePtr ttrss_source_get_type (void) { return &nst; } liferea-1.12.7/src/fl_sources/ttrss_source.h000066400000000000000000000076421352135647700211020ustar00rootroot00000000000000/** * @file ttrss_source.h Tiny Tiny RSS feed list source support * * Copyright (C) 2010-2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _TTRSS_SOURCE_H #define _TTRSS_SOURCE_H #include #include "fl_sources/node_source.h" /** * A nodeSource specific for tt-rss */ typedef struct ttrssSource { nodePtr root; /**< the root node in the feed list */ gchar *session_id; /**< the current session id */ const gchar *url; /**< the API base URL */ gint apiLevel; /**< The API level reported by the instance (or 0) */ GHashTable *categories; /**< Lookup hash for TTRSS feed id to TTRSS category id */ GHashTable *folderToCategory; /**< Lookup hash for folder node id to TTRSS category id */ } *ttrssSourcePtr; /** * TinyTinyRSS JSON API is documented here: * * http://tt-rss.org/redmine/projects/tt-rss/wiki/JsonApiReference */ #define TTRSS_URL "%s/api/" /** * TinyTinyRSS Login API * * @param user The tt-rss account id * @param passwd The tt-rss account password * * @returns {"session_id":"xxx"} or {"error":"xxx"} */ #define TTRSS_JSON_LOGIN "{\"op\":\"login\", \"user\":\"%s\", \"password\":\"%s\"}" /** * Fetch TinyTinyRSS feed list. * * @param sid session id * * @returns JSON feed list */ #define TTRSS_JSON_SUBSCRIPTION_LIST "{\"op\":\"getFeeds\", \"sid\":\"%s\", \"cat_id\":\"-3\", \"include_nested\":\"true\"}" /** * Add a subscription to TinyTinyRSS * * @param sid session id * @param feed_url URL * @param category_id category id (or 0) * @param login user name * @param password password */ #define TTRSS_JSON_SUBSCRIBE "{\"op\":\"subscribeToFeed\", \"sid\":\"%s\", \"feed_url\":\"%s\", \"category_id\":%d, \"login\":\"%s\", \"password\":\"%s\"}" /** * Removes a subscription from TinyTinyRSS * * @param sid session id * @param feed_id TinyTinyRSS feed id */ #define TTRSS_JSON_UNSUBSCRIBE "{\"op\":\"unsubscribeFeed\", \"sid\":\"%s\", \"feed_id\":\"%s\"}" /** * Fetch tt-rss categories list (default is fetching it tree like) * * @returns JSON categories list */ #define TTRSS_JSON_CATEGORIES_LIST "{\"op\":\"getFeedTree\", \"sid\":\"%s\", \"include_empty\":\"true\"}" /** * Fetch TinyTinyRSS headlines for a given feed. * * @param sid session id * @param feed_id tt-rss feed id * @param limit feed cache size * * @returns JSON feed list */ #define TTRSS_JSON_HEADLINES "{\"op\":\"getHeadlines\", \"sid\":\"%s\", \"feed_id\":\"%s\", \"limit\":\"%d\", \"show_content\":\"true\", \"view_mode\":\"all_articles\", \"include_attachments\":\"true\"}" /** * Toggle item flag state. * * @param sid session id * @param item_id tt-rss item id * @param mode 0 = unflagged, 1 = flagged */ #define TTRSS_JSON_UPDATE_ITEM_FLAG "{\"op\":\"updateArticle\", \"sid\":\"%s\", \"article_ids\":\"%s\", \"mode\":\"%d\", \"field\":\"0\"}" /** * Toggle item read state. * * @param sid session id * @param item_id tt-rss item id * @param mode 0 = read, 1 = unread */ #define TTRSS_JSON_UPDATE_ITEM_UNREAD "{\"op\":\"updateArticle\", \"sid\":\"%s\", \"article_ids\":\"%s\", \"mode\":\"%d\", \"field\":\"2\"}" /** * Returns ttss source type implementation info. */ nodeSourceTypePtr ttrss_source_get_type (void); void ttrss_source_login (ttrssSourcePtr source, guint32 flags); #endif liferea-1.12.7/src/fl_sources/ttrss_source_feed.c000066400000000000000000000144671352135647700220630ustar00rootroot00000000000000/** * @file ttrss_source_feed.c Tiny Tiny RSS feed subscription routines * * Copyright (C) 2010-2013 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "common.h" #include "db.h" #include "debug.h" #include "enclosure.h" #include "feedlist.h" #include "itemlist.h" #include "itemset.h" #include "json.h" #include "metadata.h" #include "subscription.h" #include "xml.h" #include "fl_sources/ttrss_source.h" static void ttrss_feed_subscription_process_update_result (subscriptionPtr subscription, const struct updateResult* const result, updateFlags flags) { if (result->data && result->httpstatus == 200) { JsonParser *parser = json_parser_new (); if (json_parser_load_from_data (parser, result->data, -1, NULL)) { JsonArray *array = json_node_get_array (json_get_node (json_parser_get_root (parser), "content")); JsonNode *attachments; GList *elements = json_array_get_elements (array); GList *iter = elements; GList *items = NULL; /* We expect to get something like this [{"id":118, "unread":true, "marked":false, "updated":1287927675, "is_updated":false, "title":"IBM Says New ...", "link":"http:\/\/rss.slashdot.org\/~r\/Slashdot\/slashdot\/~3\/ALuhNKO3NV4\/story01.htm", "feed_id":"5", "content":"coondoggie writes ..." }, {"id":117, "unread":true, "marked":false, "updated":1287923814, [...] */ while (iter) { JsonNode *node = (JsonNode *)iter->data; itemPtr item = item_new (); gchar *id; const gchar *content; gchar *xhtml; id = g_strdup_printf ("%" G_GINT64_FORMAT, json_get_int (node, "id")); item_set_id (item, id); g_free (id); item_set_title (item, json_get_string (node, "title")); item_set_source (item, json_get_string (node, "link")); content = json_get_string (node, "content"); xhtml = xhtml_extract_from_string (content, NULL); item_set_description (item, xhtml); xmlFree (xhtml); item->time = json_get_int (node, "updated"); if (json_get_bool (node, "unread")) { item->readStatus = FALSE; } else { item->readStatus = TRUE; } if (json_get_bool (node, "marked")) item->flagStatus = TRUE; /* Extract enclosures */ attachments = json_get_node (node, "attachments"); if (attachments && JSON_NODE_TYPE (attachments) == JSON_NODE_ARRAY) { GList *aiter, *alist; alist = aiter = json_array_get_elements (json_node_get_array (attachments)); while (aiter) { JsonNode *enc_node = (JsonNode *)aiter->data; /* attachment nodes should look like this: {"id":"1562", "content_url":"http:\/\/...", "content_type":"audio\/mpeg", "post_id":"44572", "title":"...", "duration":"29446311"}] */ if (json_get_string (enc_node, "content_url") && json_get_string (enc_node, "content_type")) { gchar *encStr = enclosure_values_to_string ( json_get_string (enc_node, "content_url"), json_get_string (enc_node, "content_type"), 0 /* length unknown to TinyTiny RSS*/, FALSE /* not yet downloaded */); item->metadata = metadata_list_append (item->metadata, "enclosure", encStr); item->hasEnclosure = TRUE; g_free (encStr); } aiter = g_list_next (aiter); } g_list_free (alist); } items = g_list_append (items, (gpointer)item); iter = g_list_next (iter); } g_list_free (elements); /* merge against feed cache */ if (items) { itemSetPtr itemSet = node_get_itemset (subscription->node); subscription->node->newCount = itemset_merge_items (itemSet, items, TRUE /* feed valid */, FALSE /* markAsRead */); itemlist_merge_itemset (itemSet); itemset_free (itemSet); } subscription->node->available = TRUE; } else { subscription->node->available = FALSE; g_string_append (((feedPtr)subscription->node->data)->parseErrors, _("Could not parse JSON returned by TinyTinyRSS API!")); } g_object_unref (parser); } else { subscription->node->available = FALSE; } } static gboolean ttrss_feed_subscription_prepare_update_request (subscriptionPtr subscription, struct updateRequest *request) { nodePtr root = node_source_root_from_node (subscription->node); ttrssSourcePtr source = (ttrssSourcePtr) root->data; const gchar *feed_id; gchar *source_name; gint fetchCount; debug0 (DEBUG_UPDATE, "TinyTinyRSS preparing feed subscription for update"); g_assert(root->source); if (root->source->loginState == NODE_SOURCE_STATE_NONE) { subscription_update (root->subscription, 0); return FALSE; } feed_id = metadata_list_get (subscription->metadata, "ttrss-feed-id"); if (!feed_id) { g_print ("Dropping TinyTinyRSS feed without id! (%s)", subscription->node->title); feedlist_node_removed (subscription->node); return FALSE; } /* We can always max out as TinyTinyRSS does limit results itself */ fetchCount = feed_get_max_item_count (subscription->node); request->postdata = g_strdup_printf (TTRSS_JSON_HEADLINES, source->session_id, feed_id, fetchCount); source_name = g_strdup_printf (TTRSS_URL, source->url); update_request_set_source (request, source_name); g_free (source_name); return TRUE; } struct subscriptionType ttrssSourceFeedSubscriptionType = { ttrss_feed_subscription_prepare_update_request, ttrss_feed_subscription_process_update_result }; liferea-1.12.7/src/fl_sources/ttrss_source_feed_list.c000066400000000000000000000344771352135647700231210ustar00rootroot00000000000000/** * @file ttrss_source_feed_list.c tt-rss feed list handling routines. * * Copyright (C) 2010-2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ttrss_source_feed_list.h" #include #include #include "common.h" #include "db.h" #include "debug.h" #include "feedlist.h" #include "folder.h" #include "json.h" #include "metadata.h" #include "node.h" #include "subscription.h" #include "fl_sources/opml_source.h" #include "fl_sources/ttrss_source.h" /* subscription list merging functions */ static void ttrss_source_check_node_for_removal (nodePtr node, gpointer user_data) { JsonArray *array = (JsonArray *)user_data; GList *iter, *elements; gboolean found = FALSE; if (IS_FOLDER (node)) { /* Auto-remove folders if they do not have children */ if (!node->children) feedlist_node_removed (node); node_foreach_child_data (node, ttrss_source_check_node_for_removal, user_data); } else { elements = iter = json_array_get_elements (array); while (iter) { JsonNode *json_node = (JsonNode *)iter->data; if (g_str_equal (node->subscription->source, json_get_string (json_node, "feed_url"))) { debug1 (DEBUG_UPDATE, "node: %s", node->subscription->source); found = TRUE; break; } iter = g_list_next (iter); } g_list_free (elements); if (!found) feedlist_node_removed (node); } } static void ttrss_source_merge_feed (ttrssSourcePtr source, const gchar *url, const gchar *title, gint64 id, nodePtr folder) { nodePtr node; gchar *tmp; /* check if node to be merged already exists */ node = feedlist_find_node (source->root, NODE_BY_URL, url); if (!node) { debug2 (DEBUG_UPDATE, "adding %s (%s)", title, url); node = node_new (feed_get_node_type ()); node_set_title (node, title); node_set_data (node, feed_new ()); node_set_subscription (node, subscription_new (url, NULL, NULL)); node->subscription->type = source->root->source->type->feedSubscriptionType; /* Save tt-rss feed id which we need to fetch items... */ tmp = g_strdup_printf ("%" G_GINT64_FORMAT, id); metadata_list_set (&node->subscription->metadata, "ttrss-feed-id", tmp); g_free (tmp); node_set_parent (node, folder?folder:source->root, -1); feedlist_node_imported (node); /** * @todo mark the ones as read immediately after this is done * the feed as retrieved by this has the read and unread * status inherently. */ subscription_update (node->subscription, FEED_REQ_RESET_TITLE | FEED_REQ_PRIORITY_HIGH); subscription_update_favicon (node->subscription); /* Important: we must not loose the feed id! */ db_subscription_update (node->subscription); } else { node_source_update_folder (node, folder); } } /* source subscription type implementation */ static void ttrss_source_subscription_list_cb (const struct updateResult * const result, gpointer user_data, guint32 flags) { subscriptionPtr subscription = (subscriptionPtr) user_data; ttrssSourcePtr source = (ttrssSourcePtr) subscription->node->data; debug1 (DEBUG_UPDATE,"ttrss_subscription_cb(): %s", result->data); subscription->updateJob = NULL; if (result->data && result->httpstatus == 200) { JsonParser *parser = json_parser_new (); if (json_parser_load_from_data (parser, result->data, -1, NULL)) { JsonNode *content = json_get_node (json_parser_get_root (parser), "content"); JsonArray *array; GList *iter, *elements; /* We expect something like this: [ {"feed_url":"http://feeds.arstechnica.com/arstechnica/everything", "title":"Ars Technica", "id":6, "unread":20, "has_icon":true, "cat_id":0, "last_updated":1287853210}, {"feed_url":"http://rss.slashdot.org/Slashdot/slashdot", "title":"Slashdot", "id":5, "unread":33, "has_icon":true, "cat_id":0, "last_updated":1287853206}, [...] Or an error message that could look like this: {"seq":null,"status":1,"content":{"error":"NOT_LOGGED_IN"}} */ if (!content || (JSON_NODE_TYPE (content) != JSON_NODE_ARRAY)) { debug0 (DEBUG_UPDATE, "ttrss_subscription_cb(): Failed to get subscription list!"); subscription->node->available = FALSE; return; } array = json_node_get_array (content); elements = iter = json_array_get_elements (array); /* Add all new nodes we find */ while (iter) { JsonNode *node = (JsonNode *)iter->data; /* Get category id */ gchar *category = NULL; gint cat_id = json_get_int (node, "cat_id"); if (cat_id > 0) category = g_strdup_printf ("%d", cat_id); /* ignore everything without a feed url */ if (json_get_string (node, "feed_url")) { ttrss_source_merge_feed (source, json_get_string (node, "feed_url"), json_get_string (node, "title"), json_get_int (node, "id"), node_source_find_or_create_folder (source->root, category, NULL)); } iter = g_list_next (iter); } g_list_free (elements); /* Remove old nodes we cannot find anymore */ node_foreach_child_data (source->root, ttrss_source_check_node_for_removal, array); /* Save new subscription tree to OPML cache file */ opml_source_export (subscription->node); subscription->node->available = TRUE; } else { g_print ("Invalid JSON returned on TinyTinyRSSS request! >>>%s<<<", result->data); } g_object_unref (parser); } else { subscription->node->available = FALSE; debug0 (DEBUG_UPDATE, "ttrss_subscription_cb(): ERROR: failed to get TinyTinyRSS subscription list!"); } if (!(flags & NODE_SOURCE_UPDATE_ONLY_LIST)) node_foreach_child_data (subscription->node, node_update_subscription, GUINT_TO_POINTER (0)); } static void ttrss_source_update_subscription_list (ttrssSourcePtr source, subscriptionPtr subscription) { updateRequestPtr request; gchar *source_uri; request = update_request_new (); request->updateState = update_state_copy (subscription->updateState); request->options = update_options_copy (subscription->updateOptions); source_uri = g_strdup_printf (TTRSS_URL, source->url); update_request_set_source (request, source_uri); g_free (source_uri); request->postdata = g_strdup_printf (TTRSS_JSON_SUBSCRIPTION_LIST, source->session_id); subscription->updateJob = update_execute_request (subscription, request, ttrss_source_subscription_list_cb, subscription, 0); } static void ttrss_source_merge_categories (ttrssSourcePtr source, nodePtr parent, gint parentId, JsonNode *items) { JsonArray *array = json_node_get_array (items); GList *iter, *elements; elements = iter = json_array_get_elements (array); while (iter) { JsonNode *node = (JsonNode *)iter->data; gint id = json_get_int (node, "bare_id"); if (id > 0) { const gchar *type = json_get_string (node, "type"); const gchar *name = json_get_string (node, "name"); /* ignore everything without a name or bare_id */ if (name) { /* Process child categories */ if (type && g_str_equal (type, "category")) { nodePtr folder; gchar *folderId = g_strdup_printf ("%d", id); debug2 (DEBUG_UPDATE, "TinyTinyRSS category id=%ld name=%s", id, name); folder = node_source_find_or_create_folder (parent, folderId, name); g_free (folderId); /* Process child categories ... */ if (json_get_node (node, "items")) { /* Store category id also for folder (needed when subscribing new feeds) */ g_hash_table_insert (source->folderToCategory, g_strdup (folder->id), GINT_TO_POINTER (id)); /* Recurse... */ ttrss_source_merge_categories (source, folder, id, json_get_node (node, "items")); } /* Process child feeds */ } else { debug3 (DEBUG_UPDATE, "TinyTinyRSS feed=%s folder=%d (%ld)", name, parentId, id); g_hash_table_insert (source->categories, GINT_TO_POINTER (id), GINT_TO_POINTER (parentId)); } } } iter = g_list_next (iter); } g_list_free (elements); } static void ttrss_subscription_process_update_result (subscriptionPtr subscription, const struct updateResult * const result, updateFlags flags) { ttrssSourcePtr source = (ttrssSourcePtr) subscription->node->data; debug1 (DEBUG_UPDATE, "ttrss_subscription_process_update_result: %s", result->data); if (result->data && result->httpstatus == 200) { JsonParser *parser = json_parser_new (); if (json_parser_load_from_data (parser, result->data, -1, NULL)) { JsonNode *content = json_get_node (json_parser_get_root (parser), "content"); JsonNode *categories, *items; /* We expect something like this: {"categories":{"identifier":"id","label":"name","items":[ {"id":"CAT:-1","items":[ {"id":"FEED:-4","name":"All articles","unread":1547,"type":"feed","error":"","updated":"","icon":"images\/tag.png","bare_id":-4,"auxcounter":0}, {"id":"FEED:-3","name":"Fresh articles","unread":0,"type":"feed","error":"","updated":"","icon":"images\/fresh.png","bare_id":-3,"auxcounter":0}, {"id":"FEED:-1","name":"Starred articles","unread":0,"type":"feed","error":"","updated":"","icon":"images\/mark_set.svg","bare_id":-1,"auxcounter":0}, {"id":"FEED:-2","name":"Published articles","unread":0,"type":"feed","error":"","updated":"","icon":"images\/pub_set.svg","bare_id":-2,"auxcounter":0}, {"id":"FEED:0","name":"Archived articles","unread":0,"type":"feed","error":"","updated":"","icon":"images\/archive.png","bare_id":0,"auxcounter":0}, {"id":"FEED:-6","name":"Recently read","unread":0,"type":"feed","error":"","updated":"","icon":"images\/recently_read.png","bare_id":-6,"auxcounter":0}], "name":"Special","type":"category","unread":0,"bare_id":-1}, {"id":"CAT:1","bare_id":1,"auxcounter":0,"name":"OSS","items":[ {"id":"CAT:2","bare_id":2,"name":"News","items":[ {"id":"FEED:4","bare_id":4,"auxcounter":0,"name":"Tiny Tiny RSS: Forum","checkbox":false,"unread":0,"error":"","icon":false,"param":"Jan 03, 13:15"}, {"id":"FEED:3","bare_id":3,"auxcounter":0,"name":"Tiny Tiny RSS: New Releases","checkbox":false,"unread":0,"error":"","icon":false,"param":"Jan 03, 13:15"}], "checkbox":false,"type":"category","unread":0,"child_unread":0,"auxcounter":0,"param":"(2 feeds)"}, {"id":"FEED:6","bare_id":6,"auxcounter":0,"name":"Ars Technica","checkbox":false,"unread":0,"error":"","icon":"feed-icons\/6.ico","param":"Sep 18, 20:43"}, {"id":"FEED:7","bare_id":7,"auxcounter":0,"name":"LZone","checkbox":false,"unread":0,"error":"","icon":"feed-icons\/7.ico","param":"Jul 06, 23:09"}], "checkbox":false,"type":"category","unread":0,"child_unread":0,"param":"(4 feeds)"}, {"id":"CAT:0","bare_id":0,"auxcounter":0,"name":"Uncategorized","items":[ {"id":"FEED:5","bare_id":5,"auxcounter":0,"name":"Slashdot","checkbox":false,"error":"","icon":false,"param":"Jan 03, 13:15","unread":0,"type":"feed"}], "type":"category","checkbox":false,"unread":0,"child_unread":0,"param":"(1 feed)"}]}}} So we need to: - ignore all negative categories - treat feeds in category #0 as root level feeds - traverse all categories > #1 - remember category ids in source->categories hash As we need to perform a subscription list anyway we can ignore all feed infos */ if (!content) { debug0 (DEBUG_UPDATE, "ttrss_subscription_process_update_result(): Failed to get subscription list!"); subscription->node->available = FALSE; return; } categories = json_get_node (content, "categories"); if (!categories) { debug0 (DEBUG_UPDATE, "ttrss_subscription_process_update_result(): Failed to get categories list: no 'categories' element found!"); subscription->node->available = FALSE; return; } items = json_get_node (categories, "items"); if (!items || (JSON_NODE_TYPE (items) != JSON_NODE_ARRAY)) { debug0 (DEBUG_UPDATE, "ttrss_subscription_process_update_result(): Failed to get categories list: no 'categories' element found!"); subscription->node->available = FALSE; return; } /* Process categories tree recursively */ g_hash_table_remove_all (source->categories); ttrss_source_merge_categories (source, source->root, 0, items); /* And trigger the actual feed fetching */ ttrss_source_update_subscription_list (source, subscription); } else { g_print ("Invalid JSON returned on TinyTinyRSS request! >>>%s<<<", result->data); } g_object_unref (parser); } else { subscription->node->available = FALSE; debug0 (DEBUG_UPDATE, "ttrss_subscription_process_update_result(): Failed to get categories list!"); } } static gboolean ttrss_subscription_prepare_update_request (subscriptionPtr subscription, struct updateRequest *request) { nodePtr node = subscription->node; ttrssSourcePtr source = (ttrssSourcePtr) subscription->node->data; gchar *source_uri; debug0 (DEBUG_UPDATE, "ttrss_subscription_prepare_update_request"); g_assert (node->source); if (node->source->loginState == NODE_SOURCE_STATE_NONE) { debug0 (DEBUG_UPDATE, "TinyTinyRSS login"); ttrss_source_login (source, 0); return FALSE; } debug1 (DEBUG_UPDATE, "TinyTinyRSS updating subscription (node id %s)", node->id); /* Updating the TinyTinyRSS subscription means updating the list of categories and the list of feeds in 2 requests and if the installation is not self-updating to run a remote update for each feed before fetching it's items */ source_uri = g_strdup_printf (TTRSS_URL, source->url); update_request_set_source (request, source_uri); g_free (source_uri); request->postdata = g_strdup_printf (TTRSS_JSON_CATEGORIES_LIST, source->session_id); return TRUE; } /* OPML subscription type definition */ struct subscriptionType ttrssSourceSubscriptionType = { ttrss_subscription_prepare_update_request, ttrss_subscription_process_update_result }; liferea-1.12.7/src/fl_sources/ttrss_source_feed_list.h000066400000000000000000000017041352135647700231110ustar00rootroot00000000000000/** * @file ttrss_source_feed_list.h tt-rss source feed list handling * * Copyright (C) 2010 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _TTRSS_SOURCE_FEED_LIST #define _TTRSS_SOURCE_FEED_LIST #include "fl_sources/ttrss_source.h" #endif liferea-1.12.7/src/folder.c000066400000000000000000000102461352135647700154370ustar00rootroot00000000000000/** * @file folder.c sub folders for hierarchic node sources * * Copyright (C) 2006-2016 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "folder.h" #include "common.h" #include "debug.h" #include "feedlist.h" #include "itemset.h" #include "node.h" #include "vfolder.h" #include "ui/icons.h" #include "ui/ui_folder.h" #include "ui/feed_list_node.h" /* Note: The folder node type implements the behaviour of a folder like node in the feed list. The two most important features are viewing the unread items of all child feeds and displaying the aggregated unread count of all child feeds. The folder node type does not implement the hierarchy of the feed list! */ static void folder_merge_child_items (nodePtr node, gpointer user_data) { itemSetPtr folderItemSet = (itemSetPtr)user_data; itemSetPtr nodeItemSet; if (IS_VFOLDER (node)) return; nodeItemSet = node_get_itemset (node); folderItemSet->ids = g_list_concat (folderItemSet->ids, nodeItemSet->ids); nodeItemSet->ids = NULL; itemset_free (nodeItemSet); } static itemSetPtr folder_load (nodePtr node) { itemSetPtr itemSet; itemSet = g_new0 (struct itemSet, 1); itemSet->nodeId = node->id; node_foreach_child_data (node, folder_merge_child_items, itemSet); return itemSet; } static void folder_import (nodePtr node, nodePtr parent, xmlNodePtr cur, gboolean trusted) { /* Folders have no special properties to be imported. */ } static void folder_export (nodePtr node, xmlNodePtr cur, gboolean trusted) { /* Folders have no special properties to be exported. */ } static void folder_save (nodePtr node) { /* A folder has no own state but must give all childs the chance to save theirs */ node_foreach_child (node, node_save); } static void folder_add_child_update_counters (nodePtr node, gpointer user_data) { guint *unreadCount = (guint *)user_data; *unreadCount += node->unreadCount; } static void folder_update_counters (nodePtr node) { /* We never need a total item count for folders. Only the total unread count is interesting */ node->itemCount = 0; node->unreadCount = 0; node_foreach_child_data (node, folder_add_child_update_counters, &node->unreadCount); } static void folder_remove (nodePtr node) { /* Ensure that there are no children anymore */ g_assert (!node->children); } nodeTypePtr folder_get_node_type (void) { static struct nodeType fnti = { NODE_CAPABILITY_SHOW_ITEM_FAVICONS | NODE_CAPABILITY_ADD_CHILDS | NODE_CAPABILITY_REMOVE_CHILDS | NODE_CAPABILITY_SUBFOLDERS | NODE_CAPABILITY_REORDER | NODE_CAPABILITY_SHOW_UNREAD_COUNT | NODE_CAPABILITY_UPDATE_CHILDS | NODE_CAPABILITY_EXPORT, "folder", NULL, folder_import, folder_export, folder_load, folder_save, folder_update_counters, folder_remove, node_default_render, ui_folder_add, feed_list_node_rename, NULL }; fnti.icon = icon_get (ICON_FOLDER); return &fnti; } nodeTypePtr root_get_node_type (void) { /* the root node is identical to the folder type, just a different node type... */ static struct nodeType rnti = { NODE_CAPABILITY_ADD_CHILDS | NODE_CAPABILITY_REMOVE_CHILDS | NODE_CAPABILITY_SUBFOLDERS | NODE_CAPABILITY_REORDER | NODE_CAPABILITY_SHOW_UNREAD_COUNT | NODE_CAPABILITY_UPDATE_CHILDS | NODE_CAPABILITY_EXPORT, "root", NULL, /* and no need for an icon */ folder_import, folder_export, folder_load, folder_save, folder_update_counters, folder_remove, node_default_render, ui_folder_add, feed_list_node_rename, NULL }; return &rnti; } liferea-1.12.7/src/folder.h000066400000000000000000000030651352135647700154450ustar00rootroot00000000000000/** * @file folder.h sub folders for hierarchic node soures * * Copyright (C) 2006-2008 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _FOLDER_H #define _FOLDER_H #include "node_type.h" #define IS_FOLDER(node) (node->type == folder_get_node_type ()) /* Liferea supports different node sources in the feed list tree. Some of those can be organized by sub folders implemented by this node type. The root node of the Liferea feed list tree is the implemented as a special folder and therefore shares almost all of the folder functionality. Being a read/write enabled folder it allows to add other node sources as childs. */ /** * Returns the implementation of the folder node type. */ nodeTypePtr folder_get_node_type(void); /** * Returns the implementation of the root node type. */ nodeTypePtr root_get_node_type(void); #endif liferea-1.12.7/src/html.c000066400000000000000000000200351352135647700151250ustar00rootroot00000000000000/** * @file html.c HTML parsing * * Copyright (C) 2004 ahmed el-helw * Copyright (C) 2004-2017 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "common.h" #include "debug.h" #include "html.h" #include "xml.h" enum { LINK_FAVICON, LINK_RSS_ALTERNATE, LINK_AMPHTML }; /** * Fetch attribute of a html tag string */ static gchar * getAttrib (const gchar* str, gchar *attrib_name) { gchar *res; const gchar *tmp, *tmp2; size_t len = 0; gchar quote; /*debug1(DEBUG_PARSING, "fetching href %s", str); */ tmp = common_strcasestr (str, attrib_name); if (!tmp) return NULL; tmp += 5; /* skip spaces up to the first quote. This is really slightly wrong. SGML allows unquoted atributes, but not if they contain slashes, so 99% of all URIs will require quotes. */ while (*tmp != '\"' && *tmp != '\'') { if (*tmp == '>' || *tmp == '\0' || !isspace(*tmp)) return NULL; tmp++; } quote = *tmp; /* The type of quote mark used to delimit the arg */ tmp++; tmp2 = tmp; while ((*tmp2 != quote && *(tmp2-1) != '\\') && /* Escaped quote*/ *tmp2 != '\0') tmp2++, len++; res = g_strndup (tmp, len); return res; } static gchar * checkLinkRef (const gchar* str, gint linkType) { gchar *res; res = getAttrib(str, "href"); if (linkType == LINK_FAVICON) { /* The type attribute is optional, so don't check for it, * as according to the W3C, it must be must be png, gif or * ico anyway: http://www.w3.org/2005/10/howto-favicon * Instead, do stronger checks for the rel attribute. */ if (((NULL != common_strcasestr (str, "rel=\"shortcut icon\"")) || (NULL != common_strcasestr (str, "rel=\"icon\"")) || (NULL != common_strcasestr (str, "rel=\'shortcut icon\'")) || (NULL != common_strcasestr (str, "rel=\'icon\'"))) /*&& ((NULL != common_strcasestr (str, "image/x-icon")) || (NULL != common_strcasestr (str, "image/png")) || (NULL != common_strcasestr (str, "image/gif")))*/) return res; } else if (linkType == LINK_RSS_ALTERNATE) { if ((common_strcasestr (str, "alternate") != NULL) && ((common_strcasestr (str, "text/xml") != NULL) || (common_strcasestr (str, "rss+xml") != NULL) || (common_strcasestr (str, "rdf+xml") != NULL) || (common_strcasestr (str, "atom+xml") != NULL))) return res; } else if (linkType == LINK_AMPHTML) { if (common_strcasestr (str, "amphtml") != NULL) return res; } g_free (res); return NULL; } /** * Search tag in a html content, return link of the tag pointed by href */ static gchar * search_tag_link(const gchar* data, const gchar *tagName, gchar** tagEnd) { gchar *ptr; const gchar *tmp = data; gchar *result = NULL; gchar *res; gchar *tstr; gchar *endptr; gchar *tagname_start; if (tagEnd) *tagEnd = NULL; tagname_start = g_strconcat("<", tagName, NULL); ptr = common_strcasestr (tmp, tagname_start); g_free(tagname_start); if (!ptr) return NULL; endptr = strchr (ptr, '>'); if (!endptr) return NULL; *endptr = '\0'; tstr = g_strdup (ptr); *endptr = '>'; res = getAttrib(tstr, "href"); g_free (tstr); result = res; if (tagEnd) { endptr++; *tagEnd = endptr; } if (result) { /* URIs can contain escaped things.... * All ampersands must be escaped, for example */ result = unhtmlize (result); } return result; } static gchar * search_links (const gchar* data, gint linkType) { gchar *ptr; const gchar *tmp = data; gchar *result = NULL; gchar *res; gchar *tstr; gchar *endptr; while (1) { ptr = common_strcasestr (tmp, "'); if (!endptr) return NULL; *endptr = '\0'; tstr = g_strdup (ptr); *endptr = '>'; res = checkLinkRef (tstr, linkType); g_free (tstr); if (res) { result = res; break; /* deactivated as long as we support only subscribing to the first found link (BTW this code crashes on sites like Groklaw!) gchar* t; if(result == NULL) result = res; else { t = g_strdup_printf("%s\n%s", result, res); g_free(res); g_free(result); result = t; }*/ } tmp = endptr; } result = unhtmlize (result); /* URIs can contain escaped things.... All ampersands must be escaped, for example */ return result; } gchar * html_auto_discover_feed (const gchar* data, const gchar *baseUri) { gchar *res, *tmp; const gchar *baseU; baseU = search_tag_link(data, "base", NULL); if (!baseU) baseU = baseUri; debug0 (DEBUG_UPDATE, "searching through link tags"); res = search_links (data, LINK_RSS_ALTERNATE); debug1 (DEBUG_UPDATE, "search result: %s", res?res:"none found"); if (res) { /* turn relative URIs into absolute URIs */ tmp = res; res = common_build_url (res, baseU); g_free (tmp); } return res; } gchar * html_discover_favicon (const gchar * data, const gchar * baseUri) { gchar *res, *tmp; debug0 (DEBUG_UPDATE, "searching through link tags"); res = search_links (data, LINK_FAVICON); debug1 (DEBUG_UPDATE, "search result: %s", res? res : "none found"); if (res) { /* turn relative URIs into absolute URIs */ tmp = res; res = common_build_url (res, baseUri); g_free (tmp); } return res; } /* Black and whitelisting patterns inspired by Mozillas Reader mode matching */ static GRegex *unlikelyCandidates = NULL; static GRegex *maybeCandidates = NULL; #define UNLIKELY_CANDIDATES "author|author-line|published|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|foot|header|legends|menu|modal|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote" #define MAYBE_CANDIDATES "and|article|body|column|main|shadow" static void html_article_clean (xmlNodePtr node) { xmlNodePtr cur; GError *err = NULL; // Setup regexes if (!unlikelyCandidates) { unlikelyCandidates = g_regex_new (UNLIKELY_CANDIDATES, G_REGEX_CASELESS | G_REGEX_UNGREEDY | G_REGEX_DOTALL | G_REGEX_OPTIMIZE, 0, &err); maybeCandidates = g_regex_new (MAYBE_CANDIDATES , G_REGEX_CASELESS | G_REGEX_UNGREEDY | G_REGEX_DOTALL | G_REGEX_OPTIMIZE, 0, &err); } cur = node->xmlChildrenNode; while (cur) { gchar *class, *id; xmlNodePtr unlink = NULL; if (!cur->name || cur->type != XML_ELEMENT_NODE) { cur = cur->next; continue; } if (g_str_equal (cur->name , "h1")) unlink = cur; class = xml_get_attribute (cur, "class"); id = xml_get_attribute (cur, "id"); if ((class && g_regex_match (unlikelyCandidates, class, 0, NULL) && !g_regex_match (maybeCandidates, class, 0, NULL)) || (id && g_regex_match (unlikelyCandidates, id, 0, NULL) && !g_regex_match (maybeCandidates, id, 0, NULL))) unlink = cur; if (!unlink) html_article_clean (cur); cur = cur->next; if (unlink) xmlUnlinkNode (unlink); g_free (class); g_free (id); } } gchar * html_get_article (const gchar *data, const gchar *baseUri) { xmlDocPtr doc; xmlNodePtr node; doc = xhtml_parse ((gchar *)data, (size_t)strlen(data)); if (!doc) return NULL; // Find article, we only expect a single article... node = xpath_find (xmlDocGetRootElement (doc), "//article"); if (!node) return NULL; html_article_clean (node); return xhtml_extract (node, 1, baseUri); } gchar * html_get_amp_url (const gchar *data) { return search_links (data, LINK_AMPHTML); } liferea-1.12.7/src/html.h000066400000000000000000000042311352135647700151320ustar00rootroot00000000000000/** * @file html.h HTML parsing * * Copyright (C) 2004 ahmed el-helw * Copyright (C) 2017 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _HTML_H #define _HTML_H #include /** * html_auto_discover_feed: * * HTML feed auto discovery function. Searches the * passed HTML document for feed links and returns * one if at least one link could be found. * * @data: HTML source * @baseUri: URI that relative links will be based off of * Returns: feed URL or NULL. Must be freed by caller. */ gchar * html_auto_discover_feed(const gchar* data, const gchar *baseUri); /** * html_discover_favicon: * * Search for favicon links in a HTML file's head section * * @data: HTML source * @baseUri: URI of the downloaded HTML used to resolve relative URIs * Returns: URL of the favicon, or NULL. Must be freed by caller. */ gchar * html_discover_favicon(const gchar* data, const gchar *baseUri); /** * html_get_article: * * Parse HTML as XML to check wether it contains an HTML5 article. * * @data: the HTML to check * @baseUri: URI of the downloaded HTML used to resolve relative URIs * * Returns: XHTML fragment representing the article or NULL */ gchar * html_get_article(const gchar *data, const gchar *baseUri); /** * html_get_amp_url: * * Parse HTML and return AMP URL if found * * @data: the HTML to check * * Returns: AMP URL or NULL. Must be free'd by caller */ gchar * html_get_amp_url(const gchar *data); #endif liferea-1.12.7/src/htmlview.c000066400000000000000000000264401352135647700160260ustar00rootroot00000000000000/** * @file htmlview.c item view interface for HTML rendering * * Copyright (C) 2006-2010 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "common.h" #include "debug.h" #include "feed.h" #include "folder.h" #include "htmlview.h" #include "item.h" #include "itemlist.h" #include "render.h" #include "vfolder.h" #include "ui/liferea_htmlview.h" // FIXME: namespace clash of LifereaHtmlView *htmlview and htmlView_priv // clearly shows the need to merge htmlview.c and src/ui/ui_htmlview.c, // maybe with a separate a HTML cache object... static struct htmlView_priv { GHashTable *chunkHash; /**< cache of HTML chunks of all displayed items */ GSList *orderedChunks; /**< ordered list of chunks */ nodePtr node; /**< the node whose items are displayed */ guint missingContent; /**< counter for items without content */ } htmlView_priv; typedef struct htmlChunk { gulong id; /**< item id */ gchar *html; /**< the rendered HTML (or NULL if not yet rendered) */ time_t date; /**< date as sorting criteria */ } *htmlChunkPtr; static void htmlview_chunk_free (htmlChunkPtr chunk) { g_free (chunk->html); g_free (chunk); } static gint htmlview_chunk_sort (gconstpointer a, gconstpointer b) { return (((htmlChunkPtr)a)->date) - (((htmlChunkPtr)b)->date); } void htmlview_init (void) { htmlView_priv.chunkHash = NULL; htmlView_priv.orderedChunks = NULL; htmlview_clear (); } void htmlview_clear (void) { if (htmlView_priv.chunkHash) g_hash_table_destroy (htmlView_priv.chunkHash); GSList *iter = htmlView_priv.orderedChunks; while (iter) { htmlview_chunk_free (iter->data); iter = g_slist_next (iter); } if (htmlView_priv.orderedChunks) g_slist_free (htmlView_priv.orderedChunks); htmlView_priv.chunkHash = g_hash_table_new (g_direct_hash, g_direct_equal); htmlView_priv.orderedChunks = NULL; htmlView_priv.missingContent = 0; } void htmlview_set_displayed_node (nodePtr node) { g_assert (0 == g_hash_table_size (htmlView_priv.chunkHash)); htmlView_priv.node = node; } gboolean htmlview_contains_id (gulong id) { gpointer chunk; chunk = g_hash_table_lookup (htmlView_priv.chunkHash, GUINT_TO_POINTER (id)); return (chunk?TRUE:FALSE); } void htmlview_add_item (itemPtr item) { htmlChunkPtr chunk; debug1 (DEBUG_HTML, "HTML view: adding \"%s\"", item_get_title (item)); chunk = g_new0 (struct htmlChunk, 1); chunk->id = item->id; g_hash_table_insert (htmlView_priv.chunkHash, GUINT_TO_POINTER (item->id), chunk); htmlView_priv.orderedChunks = g_slist_insert_sorted (htmlView_priv.orderedChunks, chunk, htmlview_chunk_sort); if (!item_get_description (item) || (0 == strlen (item_get_description (item)))) htmlView_priv.missingContent++; } void htmlview_remove_item (itemPtr item) { htmlChunkPtr chunk; debug1 (DEBUG_HTML, "HTML view: removing \"%s\"", item_get_title (item)); chunk = g_hash_table_lookup (htmlView_priv.chunkHash, GUINT_TO_POINTER (item->id)); if (chunk) { g_hash_table_remove (htmlView_priv.chunkHash, GUINT_TO_POINTER (item->id)); htmlView_priv.orderedChunks = g_slist_remove (htmlView_priv.orderedChunks, chunk); htmlview_chunk_free (chunk); } } void htmlview_select_item (itemPtr item) { debug1(DEBUG_HTML, "HTML view: selecting \"%s\"", item?item_get_title(item):"none"); /* nothing to do... */ } void htmlview_update_item (itemPtr item) { htmlChunkPtr chunk; /* ensure rerendering on next update by replace old HTML chunk with NULL */ chunk = (htmlChunkPtr) g_hash_table_lookup (htmlView_priv.chunkHash, GUINT_TO_POINTER (item->id)); if (chunk) { g_free (chunk->html); chunk->html = NULL; } } void htmlview_update_all_items (void) { GSList *iter = htmlView_priv.orderedChunks; while (iter) { htmlChunkPtr chunk = (htmlChunkPtr)iter->data; g_free (chunk->html); chunk->html = NULL; iter = g_slist_next (iter); } } static const gchar * htmlview_get_item_direction(itemPtr item) { if (item_get_title (item)) return (common_get_text_direction (item_get_title (item))); if (item_get_description (item)) return (common_get_text_direction (item_get_description (item))); /* what can we do? */ return ("ltr"); } static gchar * htmlview_render_item (itemPtr item, guint viewMode, gboolean summaryMode) { renderParamPtr params; gchar *output = NULL, *baseUrl = NULL; nodePtr node; xmlDocPtr doc; xmlNodePtr xmlNode; const gchar *text_direction = NULL; gboolean isMergedItemset; debug_enter ("htmlview_render_item"); /* don't use node from htmlView_priv as this would be wrong for folders and other merged item sets */ node = node_from_id (item->nodeId); isMergedItemset = (node != htmlView_priv.node); /* do the XML serialization */ doc = xmlNewDoc (BAD_CAST "1.0"); xmlNode = xmlNewDocNode (doc, NULL, BAD_CAST "itemset", NULL); xmlDocSetRootElement (doc, xmlNode); item_to_xml(item, xmlDocGetRootElement (doc)); text_direction = htmlview_get_item_direction (item); if (IS_FEED (node)) { xmlNodePtr feed; feed = xmlNewChild (xmlDocGetRootElement (doc), NULL, BAD_CAST "feed", NULL); feed_to_xml (node, feed); } /* do the XSLT rendering */ params = render_parameter_new (); if (NULL != node_get_base_url (node)) { baseUrl = (gchar *) common_uri_escape ( BAD_CAST node_get_base_url (node)); render_parameter_add (params, "baseUrl='%s'", baseUrl); } render_parameter_add (params, "summary='%d'", summaryMode?1:0); render_parameter_add (params, "showFeedName='%d'", isMergedItemset?1:0); render_parameter_add (params, "single='%d'", (viewMode == ITEMVIEW_SINGLE_ITEM)?1:0); render_parameter_add (params, "txtDirection='%s'", text_direction); render_parameter_add (params, "appDirection='%s'", common_get_app_direction ()); output = render_xml (doc, "item", params); /* For debugging use: xmlSaveFormatFile("/tmp/test.xml", doc, 1); */ xmlFreeDoc (doc); g_free (baseUrl); debug_exit ("htmlview_render_item"); return output; } void htmlview_start_output (GString *buffer, const gchar *base, gboolean css, gboolean script) { g_string_append (buffer, "\n"); g_string_append (buffer, "\n"); g_string_append (buffer, "\n"); g_string_append (buffer, ""); if (base) { gchar *escBase = g_markup_escape_text (base, -1); g_string_append (buffer, "\n"); g_free (escBase); } if (css) g_string_append (buffer, render_get_css (TRUE /* external CSS supported */)); /* add predefined scripts to be used for item menu */ if (script) { g_string_append (buffer, ""); } g_string_append (buffer, ""); } void htmlview_finish_output (GString *buffer) { g_string_append (buffer, ""); } void htmlview_update (LifereaHtmlView *htmlview, itemViewMode mode) { GSList *iter; GString *output; itemPtr item = NULL; gchar *baseURL = NULL; gboolean summaryMode; /* determine base URL */ switch (mode) { case ITEMVIEW_SINGLE_ITEM: item = itemlist_get_selected (); if(item) { baseURL = (gchar *)node_get_base_url (node_from_id (item->nodeId)); item_unload (item); } break; default: if (htmlView_priv.node) baseURL = (gchar *) node_get_base_url (htmlView_priv.node); break; } if (baseURL) baseURL = g_markup_escape_text (baseURL, -1); output = g_string_new (NULL); htmlview_start_output (output, baseURL, TRUE, TRUE); /* HTML view updating means checking which items need to be updated, render them and then concatenate everything from cache and output it */ switch (mode) { case ITEMVIEW_SINGLE_ITEM: item = itemlist_get_selected (); if (item) { gchar *html = htmlview_render_item (item, mode, FALSE); if (html) { g_string_append (output, html); g_free (html); } item_unload (item); } break; case ITEMVIEW_ALL_ITEMS: /* Output optimization for feeds without item content. This is not done for folders, because we only support all items in summary mode or all in detailed mode. With folder item sets displaying everything in summary because of only a single feed without item descriptions would make no sense. */ summaryMode = (NULL != htmlView_priv.node) && !IS_FOLDER (htmlView_priv.node) && !IS_VFOLDER (htmlView_priv.node) && (htmlView_priv.missingContent > 3); /* concatenate all items */ iter = htmlView_priv.orderedChunks; while (iter) { /* try to retrieve item HTML chunk from cache */ htmlChunkPtr chunk = (htmlChunkPtr)iter->data; /* if not found: render new item now and add to cache */ if (!chunk->html) { item = item_load (chunk->id); if (item) { debug1 (DEBUG_HTML, "rendering item to HTML view: >>>%s<<<", item_get_title (item)); chunk->html = htmlview_render_item (item, mode, summaryMode); item_unload (item); } } if (chunk->html) g_string_append (output, chunk->html); iter = g_slist_next (iter); } break; case ITEMVIEW_NODE_INFO: { gchar *html; if (htmlView_priv.node) { html = node_render (htmlView_priv.node); if (html) { g_string_append (output, html); g_free (html); } } } break; default: g_warning ("HTML view: invalid viewing mode!!!"); break; } htmlview_finish_output (output); debug1 (DEBUG_HTML, "writing %d bytes to HTML view", strlen (output->str)); liferea_htmlview_write (htmlview, output->str, baseURL); g_string_free (output, TRUE); g_free (baseURL); } liferea-1.12.7/src/htmlview.h000066400000000000000000000066451352135647700160400ustar00rootroot00000000000000/** * @file htmlview.h item view interface for HTML rendering * * Copyright (C) 2006-2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _HTMLVIEW_H #define _HTMLVIEW_H #include "item.h" #include "node.h" #include "ui/itemview.h" #include "ui/liferea_htmlview.h" /* interface for item and item set HTML rendering */ /** * Initialize the HTML view */ void htmlview_init (void); /** * To be called to clear the HTML view */ void htmlview_clear (void); /** * Prepares the HTML view for displaying items of the given node. * * @param node the node whose items will be rendered */ void htmlview_set_displayed_node (nodePtr node); /** * htmlview_contains_id: * @id: an item id * * Returns: TRUE if the item is in the list of items to be displayed */ gboolean htmlview_contains_id (gulong id); /** * Adds an item to the HTML view for rendering. The item must belong * to the item set that was announced with htmlview_set_displayed_node(). * * This method _DOES NOT_ update the rendering output. * * @param item the item to add to the rendering output */ void htmlview_add_item (itemPtr item); /** * Removes a given item from the HTML view rendering. * * This method _DOES NOT_ update the rendering output. * * @param item the item to remove from the rendering output */ void htmlview_remove_item (itemPtr item); /** * Updates the output of the selected item in the HTML view rendering. * * This method _DOES NOT_ update the rendering output. * * @param item the item to mark for update */ void htmlview_select_item (itemPtr item); /** * Updates the output of a given item in the HTML view rendering. * * This method _DOES NOT_ update the rendering output. * * @param item the item to mark for update */ void htmlview_update_item (itemPtr item); /** * Like htmlview_update_item(), processes all items. */ void htmlview_update_all_items (void); /** * Renders all added items to the given HTML view. To be called * after one or more calls of htmlview_(add|remove|update)_item. * * @param htmlview HTML view to render to * @param mode item view mode */ void htmlview_update (LifereaHtmlView *htmlview, itemViewMode mode); /** helper methods for HTML output */ /** * Function to add HTML source header to create a valid HTML source. * * @param buffer buffer to add the HTML to * @param base base URL of HTML content * @param css TRUE if CSS definitions are to be added * @param script TRUE if item menu scripts are to be added */ void htmlview_start_output (GString *buffer, const gchar *base, gboolean css, gboolean script); /** * Function to add HTML source footer to create a valid HTML source. * * @param buffer buffer to add the HTML to */ void htmlview_finish_output (GString *buffer); #endif liferea-1.12.7/src/item.c000066400000000000000000000174221352135647700151250ustar00rootroot00000000000000/** * @file item.c item handling * * Copyright (C) 2003-2017 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "item.h" #include #include #include "comments.h" #include "common.h" #include "date.h" #include "db.h" #include "debug.h" #include "metadata.h" #include "xml.h" itemPtr item_new (void) { itemPtr item; item = g_new0 (struct item, 1); item->popupStatus = TRUE; return item; } itemPtr item_load (gulong id) { return db_item_load (id); } itemPtr item_copy (itemPtr item) { itemPtr copy = item_new (); item_set_title (copy, item->title); item_set_source (copy, item->source); item_set_description (copy, item->description); item_set_id (copy, item->sourceId); copy->updateStatus = item->updateStatus; copy->readStatus = item->readStatus; copy->popupStatus = FALSE; copy->flagStatus = item->flagStatus; copy->time = item->time; copy->validGuid = item->validGuid; copy->hasEnclosure = item->hasEnclosure; /* the following line allows state propagation in item.c */ copy->nodeId = NULL; copy->sourceNr = item->id; /* this copies metadata */ copy->metadata = metadata_list_copy (item->metadata); /* no deep copy of comments necessary as they are automatically retrieved when reading the article */ return copy; } void item_set_title (itemPtr item, const gchar * title) { g_free (item->title); if (title) item->title = g_strstrip (g_strdelimit (g_strdup (title), "\r\n", ' ')); else item->title = g_strdup (""); } void item_set_description (itemPtr item, const gchar *description) { if (!description) return; if (item->description) if (!(strlen (description) > strlen (item->description))) return; g_free (item->description); item->description = g_strdup (description); } void item_set_source (itemPtr item, const gchar * source) { g_free (item->source); if (source) item->source = g_strstrip (g_strdup (source)); else item->source = NULL; } void item_set_id (itemPtr item, const gchar * id) { g_free (item->sourceId); item->sourceId = g_strdup (id); } const gchar * item_get_id(itemPtr item) { return item->sourceId; } const gchar * item_get_title(itemPtr item) {return item->title; } const gchar * item_get_description(itemPtr item) { return item->description; } const gchar * item_get_source(itemPtr item) { return item->source; } static GRegex *whitespace_strip_re = NULL; gchar * item_get_teaser (itemPtr item) { gchar *input, *tmpDesc; gchar *teaser = NULL; if (!whitespace_strip_re) { whitespace_strip_re = g_regex_new ("(\n+|\\s\\s+)", G_REGEX_MULTILINE, 0, NULL); g_assert (NULL != whitespace_strip_re); } input = unxmlize (g_strdup (item->description)); tmpDesc = g_regex_replace_literal (whitespace_strip_re, input, -1, 0, " ", 0, NULL); if (strlen (tmpDesc) > 200) { // Truncate hard at pos 200 and search backward for a space tmpDesc[200] = 0; gchar *last_space = g_strrstr (tmpDesc, " "); if (last_space) { *last_space = 0; teaser = tmpDesc; } } if (!teaser) return NULL; teaser = g_strstrip (g_markup_escape_text (teaser, -1)); g_free (input); g_free (tmpDesc); return teaser; } gchar * item_make_link (itemPtr item) { const gchar *src; gchar *link; src = item_get_source (item); if (!src) return NULL; /* check for absolute URL */ if (strstr (src, "://")) { link = g_strdup (src); } else { const gchar * base = item_get_base_url (item); link = (gchar *) common_build_url (src, base); if (!link) { debug0 (DEBUG_PARSING, "Feed contains relative link and invalid base URL"); return NULL; } } return link; } void item_unload (itemPtr item) { g_free (item->title); g_free (item->source); g_free (item->sourceId); g_free (item->description); g_free (item->commentFeedId); g_free (item->nodeId); g_free (item->parentNodeId); g_assert (NULL == item->tmpdata); /* should be free after rendering */ metadata_list_free (item->metadata); g_free (item); } const gchar * item_get_base_url (itemPtr item) { /* item->node is always the source node for the item never a search folder or folder */ return node_get_base_url (node_from_id (item->nodeId)); } void item_to_xml (itemPtr item, gpointer xmlNode) { xmlNodePtr parentNode = (xmlNodePtr)xmlNode; xmlNodePtr duplicatesNode; xmlNodePtr itemNode; gchar *tmp; gchar *tmp2; itemNode = xmlNewChild (parentNode, NULL, BAD_CAST "item", NULL); g_return_if_fail (itemNode); xmlNewTextChild (itemNode, NULL, BAD_CAST "title", BAD_CAST (item_get_title (item)?item_get_title (item):"")); if (item_get_description (item)) { /* Prefer full article over feed inline content */ const gchar *content = metadata_list_get (item->metadata, "richContent"); if (NULL == content) content = item_get_description (item); tmp = xhtml_strip_dhtml (content); tmp2 = xhtml_strip_unsupported_tags (tmp); xmlNewTextChild (itemNode, NULL, BAD_CAST "description", BAD_CAST tmp2); g_free (tmp); g_free (tmp2); } if (item_get_source (item)) xmlNewTextChild (itemNode, NULL, BAD_CAST "source", BAD_CAST item_get_source (item)); tmp = g_strdup_printf ("%ld", item->id); xmlNewTextChild (itemNode, NULL, BAD_CAST "nr", BAD_CAST tmp); g_free (tmp); tmp = g_strdup_printf ("%d", item->readStatus?1:0); xmlNewTextChild (itemNode, NULL, BAD_CAST "readStatus", BAD_CAST tmp); g_free (tmp); tmp = g_strdup_printf ("%d", item->updateStatus?1:0); xmlNewTextChild (itemNode, NULL, BAD_CAST "updateStatus", BAD_CAST tmp); g_free (tmp); tmp = g_strdup_printf ("%d", item->flagStatus?1:0); xmlNewTextChild (itemNode, NULL, BAD_CAST "mark", BAD_CAST tmp); g_free (tmp); tmp = g_strdup_printf ("%ld", item->time); xmlNewTextChild (itemNode, NULL, BAD_CAST "time", BAD_CAST tmp); g_free (tmp); tmp = date_format (item->time, NULL); xmlNewTextChild (itemNode, NULL, BAD_CAST "timestr", BAD_CAST tmp); g_free (tmp); if (item->validGuid) { GSList *iter, *duplicates; duplicatesNode = xmlNewChild(itemNode, NULL, BAD_CAST "duplicates", NULL); duplicates = iter = db_item_get_duplicates(item->sourceId); while (iter) { gulong id = GPOINTER_TO_UINT (iter->data); itemPtr duplicate = item_load (id); if (duplicate) { nodePtr duplicateNode = node_from_id (duplicate->nodeId); if (duplicateNode && (item->id != duplicate->id)) xmlNewTextChild (duplicatesNode, NULL, BAD_CAST "duplicateNode", BAD_CAST node_get_title (duplicateNode)); item_unload (duplicate); } iter = g_slist_next (iter); } g_slist_free (duplicates); } xmlNewTextChild (itemNode, NULL, BAD_CAST "sourceId", BAD_CAST item->nodeId); tmp = g_strdup_printf ("%ld", item->id); xmlNewTextChild (itemNode, NULL, BAD_CAST "sourceNr", BAD_CAST tmp); g_free (tmp); metadata_add_xml_nodes (item->metadata, itemNode); nodePtr feedNode = node_from_id (item->parentNodeId); if (feedNode) { feedPtr feed = (feedPtr)feedNode->data; if (feed) { if (!feed->ignoreComments) { if (item->commentFeedId) comments_to_xml (itemNode, item->commentFeedId); } else { xmlNewTextChild (itemNode, NULL, BAD_CAST "commentsSuppressed", BAD_CAST "true"); } } } } liferea-1.12.7/src/item.h000066400000000000000000000143251352135647700151310ustar00rootroot00000000000000/* * @file item.h item handling * * Copyright (C) 2003-2017 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _ITEM_H #define _ITEM_H #include /* Currently Liferea knows only a single type of items used for the itemset types feed, folder and search folder. So each feed list type provider must provide it's data using the item interface. */ /* ------------------------------------------------------------ */ /* item interface */ /* ------------------------------------------------------------ */ /* * An item stores a particular entry in a feed or a search. * Each item belongs to an item set. An itemset is a collection * of items. There are different item set types (e.g. feed, * folder,vfolder or plugin). Each item has a source node. * The item set node and the item source node is different * for folders and vfolders. */ typedef struct item { gulong id; /*<< internally unique item id */ /* those fields should not be accessed directly. Accessors are provided. */ gboolean readStatus; /*<< TRUE if the item has been read */ gboolean popupStatus; /*<< TRUE if the item was downloaded and is yet to be displayed by the popup notification feature */ gboolean updateStatus; /*<< TRUE if the item content was updated */ gboolean flagStatus; /*<< TRUE if the item has been flagged */ gboolean hasEnclosure; /*<< TRUE if this item has at least one enclosure */ gchar *title; /*<< Title */ gchar *source; /*<< URL to the post online */ gchar *sourceId; /*<< "Unique" syndication item identifier, for example in RSS */ gboolean validGuid; /*<< TRUE if id of this item is a GUID and can be used for duplicate detection */ gchar *description; /*<< XHTML string containing the item's description */ GSList *metadata; /*<< Metadata of this item */ GHashTable *tmpdata; /*<< Temporary data hash used during stateful parsing */ gint64 time; /*<< Last modified date of the headline */ gchar *commentFeedId; /*<< Id of the comment feed of this item (or NULL if there is no comment feed) */ /* comment item properties */ gulong parentItemId; /*<< Id of the parent item the item belongs to(or 0 if no comment item) */ gboolean isComment; /*<< TRUE if item is from a comment feed */ /* item source properties */ gchar *nodeId; /*<< Node id the containing node. Might be a comment feed id. */ gchar *parentNodeId; /*<< Real parent node id. Always a feed list node id. */ gulong sourceNr; /*<< Either equal to nr or the number of the item this one is a copy of */ /* remote states used during sync of remote accounts */ gboolean remoteReadStatus; /*<< TRUE if the remote copy of the item has been read */ gboolean remoteFlagStatus; /*<< TRUE if the remote copy of the item has been flagged */ } *itemPtr; /** * item_new: (skip) * Allocates a new item structure. * * Returns: (transfer full): the new structure */ itemPtr item_new(void); /** * item_load: (skip) * @id: item id to load * * Returns the item structure for the given item id or * NULL if no such item does exist. The caller has to free * the item with item_unload() once it is not used anymore. * * Returns: (transfer full) (nullable): item structure */ itemPtr item_load(gulong id); /** * item_copy: (skip) * @item: the item to copy * * Method to create a copy of an item. The copy will be * linked to the original item to allow state update * propagation (to be used with vfolders). * * Returns: (transfer full): copy of the item. */ itemPtr item_copy(itemPtr item); /** * item_get_base_url: (skip) * @item: the item * * Returns the base URL for the given item. * * Returns: base URL */ const gchar * item_get_base_url(itemPtr item); /** * item_unload: (skip) * @item: the item to unload * * Free the memory used by an itempointer. The item needs to be * removed from the itemlist before calling this function. * */ void item_unload(itemPtr item); /* methods to access properties */ /* Returns the id of item. */ const gchar * item_get_id(itemPtr item); /* Returns the title of item. */ const gchar * item_get_title(itemPtr item); /* Returns the description of item. */ const gchar * item_get_description(itemPtr item); /* Returns the source of item. */ const gchar * item_get_source(itemPtr item); /** * item_get_teaser: (skip) * @item: the item * * Create a plain text teaser from the item description * * Returns: (transfer full): newly allocated string to be free'd using g_free() (or NULL) */ gchar * item_get_teaser(itemPtr item); /** * item_make_link: (skip) * @item: the item * * Returns the resolved link for the item. * * Returns: (transfer full): newly allocated URI to be free'd using g_free() */ gchar * item_make_link(itemPtr item); /* Sets the item title */ void item_set_title(itemPtr item, const gchar * title); /** * item_set_description: (skip) * @item: the item * @description: the content * * Sets the item description. If called more than once it * will merge the new description against the old one deciding * on the best to keep. * */ void item_set_description (itemPtr item, const gchar *description); /* Sets the item source */ void item_set_source(itemPtr item, const gchar * source); /* Sets the item id */ void item_set_id(itemPtr item, const gchar * id); /** * item_to_xml: (skip) * @item: the item to save to cache * @parentNode: the xmlNodePtr to add to * * Adds an XML node to the given feed item list node. * */ void item_to_xml (itemPtr item, gpointer parentNode); #endif liferea-1.12.7/src/item_history.c000066400000000000000000000056361352135647700167120ustar00rootroot00000000000000/** * @file item_history.c tracking recently viewed items * * Copyright (C) 2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "item_history.h" #include #include "ui/liferea_shell.h" #define MAX_HISTORY_SIZE 250 static struct itemHistory { GList *items; /**< FIFO list of all items viewed */ GList *current; /**< the currently list element */ guint lastId; /**< Avoid duplicate add */ } *itemHistory = NULL; void item_history_add (guint id) { if (!itemHistory) itemHistory = g_new0 (struct itemHistory, 1); /* Duplicate add by some selection effect */ if (itemHistory->lastId == id) return; /* Duplicate add by history navigation */ if (itemHistory->current && GPOINTER_TO_UINT (itemHistory->current->data) == id) return; itemHistory->items = g_list_append (itemHistory->items, GUINT_TO_POINTER (id)); itemHistory->current = g_list_last (itemHistory->items); itemHistory->lastId = id; /* if list has reached max size remove first element */ if (g_list_length (itemHistory->items) > MAX_HISTORY_SIZE) itemHistory->items = g_list_remove (itemHistory->items, itemHistory->items); liferea_shell_update_history_actions (); } itemPtr item_history_get_next (void) { itemPtr item = NULL; if (!itemHistory->current) return NULL; while (!item && item_history_has_next ()) { itemHistory->current = g_list_next (itemHistory->current); item = item_load (GPOINTER_TO_UINT (itemHistory->current->data)); } liferea_shell_update_history_actions (); return item; } itemPtr item_history_get_previous (void) { itemPtr item = NULL; if (!itemHistory->current) return NULL; while (!item && item_history_has_previous ()) { itemHistory->current = g_list_previous (itemHistory->current); item = item_load (GPOINTER_TO_UINT (itemHistory->current->data)); } liferea_shell_update_history_actions (); return item; } gboolean item_history_has_next (void) { if (!itemHistory || !itemHistory->items) return FALSE; if (g_list_last (itemHistory->items) == itemHistory->current) return FALSE; return TRUE; } gboolean item_history_has_previous (void) { if (!itemHistory || !itemHistory->items) return FALSE; if (itemHistory->items == itemHistory->current) return FALSE; return TRUE; } liferea-1.12.7/src/item_history.h000066400000000000000000000032021352135647700167020ustar00rootroot00000000000000/** * @file item_history.h tracking recently viewed items * * Copyright (C) 2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _ITEM_HISTORY #define _ITEM_HISTORY #include "item.h" /** * Add a new item to the item history stack. * * @param id the id of the item to add */ void item_history_add (guint id); /** * Returns the previous item in the item history. * * @returns an item (or NULL) to be free'd with item_unload() */ itemPtr item_history_get_previous (void); /** * Returns the next item in history. * * @returns an item (or NULL) to be free'd with item_unload() */ itemPtr item_history_get_next (void); /** * Check whether a previous item exists in the item history. * * @returns TRUE if there is an item */ gboolean item_history_has_previous (void); /** * Check whether a following item exists in the item history. * * @returns TRUE if there is an item */ gboolean item_history_has_next (void); #endif liferea-1.12.7/src/item_loader.c000066400000000000000000000066751352135647700164630ustar00rootroot00000000000000/** * @file item_loader.c Asynchronously loading items * * Copyright (C) 2011 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "item_loader.h" #define ITEM_LOADER_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), ITEM_LOADER_TYPE, ItemLoaderPrivate)) struct ItemLoaderPrivate { fetchCallbackPtr fetchCallback; /**< the function to call after each item fetch */ gpointer fetchCallbackData; /**< user data for the fetch callback */ nodePtr node; /**< the node we are loading items for */ guint idleId; /**< fetch callback source id */ }; enum { ITEM_BATCH_FETCHED, FINISHED, LAST_SIGNAL }; static guint item_loader_signals[LAST_SIGNAL] = { 0 }; static GObjectClass *parent_class = NULL; G_DEFINE_TYPE (ItemLoader, item_loader, G_TYPE_OBJECT); static void item_loader_finalize (GObject *object) { ItemLoader *il = ITEM_LOADER (object); if (il->priv->idleId) { g_source_remove (il->priv->idleId); il->priv->idleId = 0; } G_OBJECT_CLASS (parent_class)->finalize (object); } static void item_loader_class_init (ItemLoaderClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = item_loader_finalize; item_loader_signals[ITEM_BATCH_FETCHED] = g_signal_new ("item-batch-fetched", G_OBJECT_CLASS_TYPE (object_class), (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION), 0, NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); item_loader_signals[FINISHED] = g_signal_new ("finished", G_OBJECT_CLASS_TYPE (object_class), (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION), 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); g_type_class_add_private (object_class, sizeof(ItemLoaderPrivate)); } static void item_loader_init (ItemLoader *il) { il->priv = ITEM_LOADER_GET_PRIVATE (il); } nodePtr item_loader_get_node (ItemLoader *il) { return il->priv->node; } static gboolean item_loader_fetch (gpointer user_data) { ItemLoader *il = ITEM_LOADER (user_data); GSList *resultItems = NULL; gboolean result; result = (*il->priv->fetchCallback)(il->priv->fetchCallbackData, &resultItems); if (result) g_signal_emit_by_name (il, "item-batch-fetched", resultItems); else { il->priv->idleId = 0; g_signal_emit_by_name (il, "finished"); } return result; } void item_loader_start (ItemLoader *il) { il->priv->idleId = g_idle_add (item_loader_fetch, il); } ItemLoader * item_loader_new (fetchCallbackPtr fetchCallback, nodePtr node, gpointer fetchCallbackData) { ItemLoader *il; il = ITEM_LOADER (g_object_new (ITEM_LOADER_TYPE, NULL)); il->priv->node = node; il->priv->fetchCallback = fetchCallback; il->priv->fetchCallbackData = fetchCallbackData; return il; } liferea-1.12.7/src/item_loader.h000066400000000000000000000061711352135647700164570ustar00rootroot00000000000000/** * @file item_loader.h Interface for asynchronous item loading * * Copyright (C) 2011 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _ITEM_LOADER_H #define _ITEM_LOADER_H #include #include "node.h" /* ItemLoader concept: an ItemLoader instance runs a fetch callback repeatedly collecting the items the fetch callback provides. One each fetch when there were items the loader emits a callback with the itemset as parameter for an item view to present. */ typedef struct ItemLoaderPrivate ItemLoaderPrivate; typedef struct ItemLoader { GObject parent; /*< private >*/ ItemLoaderPrivate *priv; } ItemLoader; typedef struct ItemLoaderClass { GObjectClass parent; } ItemLoaderClass; GType item_loader_get_type (void); #define ITEM_LOADER_TYPE (item_loader_get_type ()) #define ITEM_LOADER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ITEM_LOADER_TYPE, ItemLoader)) #define ITEM_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ITEM_LOADER_TYPE, ItemLoaderClass)) #define IS_ITEM_LOADER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), ITEM_LOADER_TYPE)) #define IS_ITEM_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ITEM_LOADER_TYPE)) #define ITEM_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ITEM_LOADER_TYPE, ItemLoaderClass)) /** * Definition of item loader fetch callback to be * implemented by specific item loaders. This callback * is called multiple times to fetch item batches. The * batch size is determined by the specific implementation. * * @param user_data ItemLoader type specific data * @param items Result items (to be free'd by caller) * * @returns FALSE if loading has finished */ typedef gboolean (*fetchCallbackPtr)(gpointer user_data, GSList **items); /** * Set up a new item loader with a specific fetch function. * * @param fetchCallback the item fetching function * @param node the node we are loading items for * @param user_data ItemLoader type specific data * * @returns the new ItemLoader instance */ ItemLoader * item_loader_new (fetchCallbackPtr fetchCallback, nodePtr node, gpointer user_data); /** * Returns the node an item loader is loading items for. * * @param il the item loader * * @returns node */ nodePtr item_loader_get_node (ItemLoader *il); /** * Starts the item loader to load items with idle priority. * * @param il the item loader */ void item_loader_start (ItemLoader *il); #endif liferea-1.12.7/src/item_state.c000066400000000000000000000117541352135647700163270ustar00rootroot00000000000000/** * @file item_state.c item state controller * * Copyright (C) 2007-2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "db.h" #include "debug.h" #include "feedlist.h" #include "item.h" #include "item_state.h" #include "itemset.h" #include "itemlist.h" #include "node.h" #include "vfolder.h" #include "fl_sources/node_source.h" static void item_state_set_recount_flag (nodePtr node) { node->needsRecount = TRUE; } void item_set_flag_state (itemPtr item, gboolean newState) { if (newState == item->flagStatus) return; node_source_item_set_flag (node_from_id (item->nodeId), item, newState); } void item_flag_state_changed (itemPtr item, gboolean newState) { /* 1. set value in memory */ item->flagStatus = newState; /* 2. save state to DB */ db_item_state_update (item); /* 3. update vfolder counters */ vfolder_foreach (node_update_counters); /* 4. update item list GUI state */ itemlist_update_item (item); /* no duplicate state propagation to avoid copies in the "Important" search folder */ } void item_set_read_state (itemPtr item, gboolean newState) { /* Read and update state are coupled insofar as they are changed by the same user actions. So we do something here if either the read state has changed or the updated flag is set (which is always just reset). */ if (newState == item->readStatus && !item->updateStatus) return; node_source_item_mark_read (node_from_id (item->nodeId), item, newState); } void item_read_state_changed (itemPtr item, gboolean newState) { nodePtr node; debug_start_measurement (DEBUG_GUI); /* 1. set values in memory */ item->readStatus = newState; item->updateStatus = FALSE; /* 2. apply to DB */ db_item_state_update (item); /* 3. propagate to vfolders */ vfolder_foreach (node_update_counters); /* 4. update item list GUI state */ itemlist_update_item (item); /* 5. updated feed list unread counters */ node = node_from_id (item->nodeId); node_update_counters (node); /* 6. duplicate state propagation */ if (item->validGuid) { GSList *duplicates, *iter; duplicates = iter = db_item_get_duplicates (item->sourceId); while (iter) { itemPtr duplicate = item_load (GPOINTER_TO_UINT (iter->data)); /* The check on node_from_id() is an evil workaround to handle "lost" items in the DB that have no associated node in the feed list. This should be fixed by having the feed list in the DB too, so we can clean up correctly after crashes. */ if (duplicate && duplicate->id != item->id && node_from_id (duplicate->nodeId)) { item_set_read_state (duplicate, newState); } if (duplicate) item_unload (duplicate); iter = g_slist_next (iter); } g_slist_free (duplicates); } debug_end_measurement (DEBUG_GUI, "set read status"); } /** * In difference to all the other item state handling methods * item_state_set_all_read does not immediately apply the * changes to the GUI because it is usually called recursively * and would be to slow. Instead the node structure flag for * recounting is set. By calling feedlist_update() afterwards * those recounts are executed and applied to the GUI. */ void itemset_mark_read (nodePtr node) { itemSetPtr itemSet; itemSet = node_get_itemset (node); GList *iter = itemSet->ids; while (iter) { gulong id = GPOINTER_TO_UINT (iter->data); itemPtr item = item_load (id); if (item) { if (!item->readStatus) { nodePtr node = node_from_id (item->nodeId); if (node) { item_state_set_recount_flag (node); node_source_item_mark_read (node, item, TRUE); } debug_start_measurement (DEBUG_GUI); GSList *duplicates = db_item_get_duplicate_nodes (item->sourceId); GSList *duplicate = duplicates; while (duplicate) { gchar *nodeId = (gchar *)duplicate->data; nodePtr affectedNode = node_from_id (nodeId); if (affectedNode) item_state_set_recount_flag (affectedNode); g_free (nodeId); duplicate = g_slist_next (duplicate); } g_slist_free(duplicates); debug_end_measurement (DEBUG_GUI, "mark read of duplicates"); } item_unload (item); } iter = g_list_next (iter); } // FIXME: why not call itemset_free (itemSet); here? Crashes! } void item_state_set_all_popup (const gchar *nodeId) { db_itemset_mark_all_popup (nodeId); /* No GUI updating necessary... */ } liferea-1.12.7/src/item_state.h000066400000000000000000000041211352135647700163220ustar00rootroot00000000000000/** * @file item_state.c item state controller interface * * Copyright (C) 2007-2008 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _ITEM_STATE_H #define _ITEM_STATE_H #include "item.h" #include "node.h" /** * Request to change the flag state of the given item. * * @param item the item * @param newState new flag state */ void item_set_flag_state (itemPtr item, gboolean newState); /** * Notifies the item list controller that the flag * state of the given item has changed. * * @param item the item * @param newState new flag state */ void item_flag_state_changed (itemPtr item, gboolean newState); /** * Request to change the read state of the given item. * * @param item the item * @param newState new read state */ void item_set_read_state (itemPtr item, gboolean newState); /** * Notifies the item list controller that the read * state of the given item has changed. * * @param item the item * @param newState new read status */ void item_read_state_changed (itemPtr item, gboolean newState); /** * Requests to mark read all items in the given nodes item list. * * @param nodeId the node whose item list is to be modified */ void itemset_mark_read (nodePtr node); /** * Resets the popup flag for all items of the given item set. * * @param nodeId the node whose item list is to be modified */ void item_state_set_all_popup (const gchar *nodeId); #endif liferea-1.12.7/src/itemlist.c000066400000000000000000000464641352135647700160310ustar00rootroot00000000000000/* * @file itemlist.c item list handling * * Copyright (C) 2004-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "comments.h" #include "common.h" #include "conf.h" #include "db.h" #include "debug.h" #include "feed.h" #include "feedlist.h" #include "folder.h" #include "item_history.h" #include "item_state.h" #include "itemlist.h" #include "itemset.h" #include "metadata.h" #include "node.h" #include "rule.h" #include "vfolder.h" #include "ui/item_list_view.h" #include "ui/itemview.h" #include "ui/liferea_shell.h" #include "ui/feed_list_view.h" #include "ui/liferea_htmlview.h" #include "ui/feed_list_node.h" /* The 'item list' is a controller for 'item view' and database backend. It manages the currently displayed 'node', realizes filtering by node and 'item set' rules, also duplicate elimination and provides synchronisation for backend and GUI access to the current itemset. The 'item list' provides methods to add/remove items from the 'item view' synchronously and allows registering 'item loaders' for asynchronous adding of item batches. The 'item list' does not handle item list rendering variants, which is done by the 'item view'. */ #define ITEMLIST_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), ITEMLIST_TYPE, ItemListPrivate)) struct ItemListPrivate { GHashTable *guids; /*<< list of GUID to avoid having duplicates in currently loaded list */ itemSetPtr filter; /*<< currently active filter rules */ nodePtr currentNode; /*<< the node whose own or its child items are currently displayed */ gulong selectedId; /*<< the currently selected (and displayed) item id */ nodeViewType viewMode; /*<< current viewing mode */ guint loading; /*<< if >0 prevents selection effects when loading the item list */ itemPtr invalidSelection; /*<< if set then the next selection might need to do an unselect first */ gboolean deferredRemove; /*<< TRUE if selected item needs to be removed from cache on unselecting */ gboolean deferredFilter; /*<< TRUE if selected item needs to be filtered on unselecting */ }; static GObjectClass *parent_class = NULL; static ItemList *itemlist = NULL; G_DEFINE_TYPE (ItemList, itemlist, G_TYPE_OBJECT); static void itemlist_init (ItemList *il) { /* 1. Prepare globally accessible singleton */ g_assert (NULL == itemlist); itemlist = il; itemlist->priv = ITEMLIST_GET_PRIVATE (il); } static void itemlist_duplicate_list_remove_item (itemPtr item) { if (!item->validGuid) return; if (!itemlist->priv->guids) return; g_hash_table_remove (itemlist->priv->guids, item->sourceId); } static void itemlist_duplicate_list_add_item (itemPtr item) { if (!item->validGuid) return; if (!itemlist->priv->guids) itemlist->priv->guids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); g_hash_table_insert (itemlist->priv->guids, g_strdup (item->sourceId), GUINT_TO_POINTER (item->id)); } static gboolean itemlist_duplicate_list_check_item (itemPtr item) { if (!itemlist->priv->guids || !item->validGuid) return TRUE; return (NULL == g_hash_table_lookup (itemlist->priv->guids, item->sourceId)); } static void itemlist_duplicate_list_free (void) { if (itemlist->priv->guids) { g_hash_table_destroy (itemlist->priv->guids); itemlist->priv->guids = NULL; } } static void itemlist_finalize (GObject *object) { itemset_free (itemlist->priv->filter); itemlist_duplicate_list_free (); G_OBJECT_CLASS (parent_class)->finalize (object); } static void itemlist_class_init (ItemListClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = itemlist_finalize; g_type_class_add_private (object_class, sizeof(ItemListPrivate)); } /* member wrappers */ itemPtr itemlist_get_selected (void) { return item_load(itemlist->priv->selectedId); } gulong itemlist_get_selected_id (void) { return itemlist->priv->selectedId; } static void itemlist_set_selected (itemPtr item) { itemlist->priv->selectedId = item?item->id:0; } nodePtr itemlist_get_displayed_node (void) { return itemlist->priv->currentNode; } /* called when unselecting the item or unloading the item list */ static void itemlist_check_for_deferred_action (void) { gulong id = itemlist->priv->selectedId; itemPtr item; if (id) { itemlist_set_selected (NULL); /* check for removals caused by itemlist filter rule */ if (itemlist->priv->deferredFilter) { itemlist->priv->deferredFilter = FALSE; item = item_load (id); itemview_remove_item (item); feed_list_node_update (item->nodeId); } /* check for removals caused by vfolder rules */ if (itemlist->priv->deferredRemove) { itemlist->priv->deferredRemove = FALSE; item = item_load (id); itemlist_remove_item (item); } } } // FIXME: is this an item set method? static gboolean itemlist_filter_check_item (itemPtr item) { /* use search folder rule list in case of a search folder */ if (itemlist->priv->currentNode && IS_VFOLDER (itemlist->priv->currentNode)) { vfolderPtr vfolder = (vfolderPtr)itemlist->priv->currentNode->data; return itemset_check_item (vfolder->itemset, item); } /* apply the item list filter if available */ if (itemlist->priv->filter) return itemset_check_item (itemlist->priv->filter, item); /* otherwise keep the item */ return TRUE; } static void itemlist_merge_item (itemPtr item) { if (!itemlist_duplicate_list_check_item (item)) return; if (!itemlist_filter_check_item (item)) return; itemlist_duplicate_list_add_item (item); itemview_add_item (item); } /* Helper method checking if the passed item set is relevant for the currently item list content. */ static gboolean itemlist_itemset_is_valid (itemSetPtr itemSet) { gint folder_display_mode; nodePtr node; node = node_from_id (itemSet->nodeId); if (!itemlist->priv->currentNode) return FALSE; /* Nothing to do if nothing is displayed */ if (!IS_VFOLDER (itemlist->priv->currentNode) && (itemlist->priv->currentNode != node) && !node_is_ancestor (itemlist->priv->currentNode, node)) return FALSE; /* Nothing to do if the item set does not belong to this node, or this is a search folder */ conf_get_int_value (FOLDER_DISPLAY_MODE, &folder_display_mode); if (IS_FOLDER (itemlist->priv->currentNode) && !folder_display_mode) return FALSE; /* Bail out if it is a folder without the recursive display preference set */ debug1 (DEBUG_GUI, "reloading item list with node \"%s\"", node_get_title (node)); return TRUE; } void itemlist_merge_itemset (itemSetPtr itemSet) { debug_enter ("itemlist_merge_itemset"); if (itemlist_itemset_is_valid (itemSet)) { debug_start_measurement (DEBUG_GUI); itemset_foreach (itemSet, itemlist_merge_item); itemview_update (); debug_end_measurement (DEBUG_GUI, "itemlist merge"); } debug_exit ("itemlist_merge_itemset"); } void itemlist_load (nodePtr node) { itemSetPtr itemSet; gint folder_display_mode; gboolean folder_display_hide_read; debug_enter ("itemlist_load"); g_return_if_fail (NULL != node); debug1 (DEBUG_GUI, "loading item list with node \"%s\"", node_get_title (node)); g_assert (!itemlist->priv->guids); g_assert (!itemlist->priv->filter); /* 1. Filter check. Don't continue if folder is selected and no folder viewing is configured. If folder viewing is enabled set up a "unread items only" rule depending on the prefences. */ /* for folders and other heirarchic nodes do filtering */ if (IS_FOLDER (node) || node->children) { liferea_shell_update_allitems_actions (FALSE, 0 != node->unreadCount); conf_get_int_value (FOLDER_DISPLAY_MODE, &folder_display_mode); if (!folder_display_mode) return; conf_get_bool_value (FOLDER_DISPLAY_HIDE_READ, &folder_display_hide_read); if (folder_display_hide_read) { itemlist->priv->filter = g_new0(struct itemSet, 1); itemlist->priv->filter->anyMatch = TRUE; itemset_add_rule (itemlist->priv->filter, "unread", "", TRUE); } } else { liferea_shell_update_allitems_actions (0 != node->itemCount, 0 != node->unreadCount); } itemlist->priv->loading++; itemlist->priv->viewMode = node_get_view_mode (node); itemview_set_layout (itemlist->priv->viewMode); /* Set the new displayed node... */ itemlist->priv->currentNode = node; itemview_set_displayed_node (itemlist->priv->currentNode); if (NODE_VIEW_MODE_COMBINED != node_get_view_mode (node)) itemview_set_mode (ITEMVIEW_NODE_INFO); else itemview_set_mode (ITEMVIEW_ALL_ITEMS); itemSet = node_get_itemset (itemlist->priv->currentNode); itemlist_merge_itemset (itemSet); if (!IS_VFOLDER (node)) /* FIXME: this is ugly! */ itemset_free (itemSet); itemlist->priv->loading--; debug_exit("itemlist_load"); } void itemlist_unload (gboolean markRead) { /* Always clear to ensure clearing on search */ itemview_clear (); if (itemlist->priv->currentNode) { itemview_set_displayed_node (NULL); /* 1. Postprocessing for previously selected node, this is necessary to realize reliable read marking when using condensed mode. It's important to do this only when the selection really changed. */ if (markRead && (2 == node_get_view_mode (itemlist->priv->currentNode))) feedlist_mark_all_read (itemlist->priv->currentNode); itemlist_check_for_deferred_action (); } itemlist_set_selected (NULL); itemlist_duplicate_list_free (); itemlist->priv->currentNode = NULL; itemset_free (itemlist->priv->filter); itemlist->priv->filter = NULL; } void itemlist_select_next_unread (void) { itemPtr result = NULL; /* If we are in combined mode we have to mark everything read or else we would never jump to the next feed, because no item will be selected and marked read... */ if (itemlist->priv->currentNode) { if (NODE_VIEW_MODE_COMBINED == node_get_view_mode (itemlist->priv->currentNode)) node_mark_all_read (itemlist->priv->currentNode); } itemlist->priv->loading++; /* prevent unwanted selections */ /* before scanning the feed list, we test if there is a unread item in the currently selected feed! */ result = itemview_find_unread_item (itemlist->priv->selectedId); /* If none is found we continue searching in the feed list */ if (!result) { nodePtr node; /* scan feed list and find first feed with unread items */ node = feedlist_find_unread_feed (feedlist_get_root ()); if (node) { /* load found feed */ feed_list_view_select (node); if (NODE_VIEW_MODE_COMBINED != node_get_view_mode (node)) result = itemview_find_unread_item (0); /* find first unread item */ } else { /* if we don't find a feed with unread items do nothing */ liferea_shell_set_status_bar (_("There are no unread items")); } } itemlist->priv->loading--; if (result) itemview_select_item (result); } /* menu commands */ void itemlist_toggle_flag (itemPtr item) { item_set_flag_state (item, !(item->flagStatus)); /* No itemview_update() to avoid disturbing HTML scroll state and media content */ } void itemlist_toggle_read_status (itemPtr item) { item_set_read_state (item, !(item->readStatus)); /* No itemview_update() to avoid disturbing HTML scroll state and media content */ } /* function to remove items due to item list filtering */ static void itemlist_hide_item (itemPtr item) { /* if the currently selected item should be removed we don't do it and set a flag to do it when unselecting */ if (itemlist->priv->selectedId != item->id) { itemview_remove_item (item); feed_list_node_update (item->nodeId); } else { itemlist->priv->deferredFilter = TRUE; /* update the item to show new state that forces later removal */ itemview_update_item (item); } } /* function to cancel deferred removal of selected item */ static void itemlist_unhide_item (itemPtr item) { itemlist->priv->deferredFilter = FALSE; } /* functions to remove items on remove requests */ /* hard unconditional item remove */ void itemlist_remove_item (itemPtr item) { if (itemlist->priv->selectedId == item->id) { itemlist_set_selected (NULL); itemlist->priv->deferredFilter = FALSE; itemlist->priv->deferredRemove = FALSE; } itemlist_duplicate_list_remove_item (item); itemview_remove_item (item); itemview_update (); db_item_remove (item->id); /* update feed list counters*/ vfolder_foreach (node_update_counters); node_update_counters (node_from_id (item->nodeId)); item_unload (item); } /* soft possibly delayed item remove */ static void itemlist_request_remove_item (itemPtr item) { /* if the currently selected item should be removed we don't do it and set a flag to do it when unselecting */ if (itemlist->priv->selectedId != item->id) { itemlist_remove_item (item); } else { itemlist->priv->deferredRemove = TRUE; /* update the item to show new state that forces later removal */ itemview_update_item (item); } } void itemlist_remove_items (itemSetPtr itemSet, GList *items) { GList *iter = items; while (iter) { itemPtr item = (itemPtr) iter->data; if (itemlist->priv->selectedId != item->id) { /* don't call itemlist_remove_item() here, because it's to slow */ itemview_remove_item (item); db_item_remove (item->id); } else { /* go the normal and selection-safe way to avoid disturbing the user */ itemlist_request_remove_item (item); } item_unload (item); iter = g_list_next (iter); } itemview_update (); vfolder_foreach (node_update_counters); node_update_counters (node_from_id (itemSet->nodeId)); } void itemlist_remove_all_items (nodePtr node) { if (node == itemlist->priv->currentNode) itemview_clear (); db_itemset_remove_all (node->id); if (node == itemlist->priv->currentNode) { itemview_update (); itemlist_duplicate_list_free (); } vfolder_foreach (node_update_counters); node_update_counters (node); } void itemlist_update_item (itemPtr item) { if (!itemlist_filter_check_item (item)) { itemlist_hide_item (item); return; } else { itemlist_unhide_item (item); } /* FIXME: this is tricky. It's possible that the item is * selected, but the itemview contains a webpage. In * that case, we don't want to reload the item. * So how to know whether the itemview contains the item? */ itemview_update_item (item); } /* mouse/keyboard interaction callbacks */ void itemlist_selection_changed (itemPtr item) { debug_enter ("itemlist_selection_changed"); debug_start_measurement (DEBUG_GUI); if (0 == itemlist->priv->loading) { /* folder&vfolder postprocessing to remove/filter unselected items no more matching the display rules because they have changed state */ itemlist_check_for_deferred_action (); debug1 (DEBUG_GUI, "item list selection changed to \"%s\"", item?item_get_title (item):"(null)"); itemlist_set_selected (item); /* set read and unset update status when selecting */ if (item) { gchar *link = NULL; nodePtr node = node_from_id (item->nodeId); item_set_read_state (item, TRUE); itemview_set_mode (ITEMVIEW_SINGLE_ITEM); if (node->loadItemLink && (link = item_make_link (item))) { itemview_launch_URL (link, TRUE /* force internal */); g_free (link); } else { if (IS_FEED(node) && !((feedPtr)node->data)->ignoreComments) comments_refresh (item); itemview_select_item (item); itemview_update (); } feed_list_node_update (item->nodeId); } feedlist_reset_new_item_count (); } if (item) item_unload (item); debug_end_measurement (DEBUG_GUI, "itemlist selection"); debug_exit ("itemlist_selection_changed"); } /* viewing mode callbacks */ guint itemlist_get_view_mode (void) { return itemlist->priv->viewMode; } void itemlist_set_view_mode (guint newMode) { nodePtr node; itemPtr item; itemlist->priv->viewMode = newMode; node = itemlist_get_displayed_node (); item = itemlist_get_selected (); if (node) { itemlist_unload (FALSE); node_set_view_mode (node, itemlist->priv->viewMode); itemview_set_layout (itemlist->priv->viewMode); itemlist_load (node); /* If there was an item selected, select it again since * itemlist_unload() unselects it. */ if (item && itemlist->priv->viewMode != NODE_VIEW_MODE_COMBINED) itemview_select_item (item); } if (item) item_unload (item); } void on_view_activate (GSimpleAction *action, GVariant *value, gpointer user_data) { const gchar *s_val = g_variant_get_string (value, NULL); gint val = 0; if (!g_strcmp0 ("normal",s_val)) { val = NODE_VIEW_MODE_NORMAL; } if (!g_strcmp0 ("wide",s_val)) { val = NODE_VIEW_MODE_WIDE; } if (!g_strcmp0 ("combined",s_val)) { val = NODE_VIEW_MODE_COMBINED; } itemlist_set_view_mode (val); g_simple_action_set_state (action, value); } static void itemlist_select_from_history (gboolean back) { itemPtr item; nodePtr node; if (back) item = item_history_get_previous (); else item = item_history_get_next (); if (!item) return; node = node_from_id (item->parentNodeId); if (!node) return; if (node != feedlist_get_selected ()) feed_list_view_select (node); if (NODE_VIEW_MODE_COMBINED == itemlist_get_view_mode ()) itemlist_set_view_mode (NODE_VIEW_MODE_NORMAL); itemview_select_item (item); item_unload (item); } void on_prev_read_item_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { itemlist_select_from_history (TRUE); } void on_next_read_item_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { itemlist_select_from_history (FALSE); } /* item loader methods */ static void itemlist_item_batch_fetched_cb (ItemLoader *il, GSList *items, gpointer user_data) { GSList *iter; if (item_loader_get_node (il) != itemlist->priv->currentNode) return; /* Bail on loader not matching selection */ debug0 (DEBUG_CACHE, "itemlist_item_batch_fetched_cb()"); iter = items; while (iter) { itemPtr item = (itemPtr)iter->data; itemlist_merge_item (item); item_unload (item); iter= g_slist_next (iter); } itemview_update(); g_slist_free (items); } static void itemlist_add_loader (ItemLoader *loader) { g_signal_connect (G_OBJECT (loader), "item-batch-fetched", G_CALLBACK (itemlist_item_batch_fetched_cb), NULL); item_loader_start (loader); } void itemlist_add_search_result (ItemLoader *loader) { nodeViewType viewMode; /* Ensure that we are in a useful viewing mode (3 paned) */ itemlist_unload (FALSE); viewMode = itemlist_get_view_mode (); if ((NODE_VIEW_MODE_NORMAL != viewMode) && (NODE_VIEW_MODE_WIDE != viewMode)) itemview_set_layout (NODE_VIEW_MODE_NORMAL); itemview_set_mode (ITEMVIEW_SINGLE_ITEM); /* Set current node to search result dummy node so that we except only items from the respective loader for the item view. */ itemlist->priv->currentNode = item_loader_get_node (loader); itemlist_add_loader (loader); } ItemList * itemlist_create (void) { return ITEMLIST (g_object_new (ITEMLIST_TYPE, NULL)); } liferea-1.12.7/src/itemlist.h000066400000000000000000000143741352135647700160310ustar00rootroot00000000000000/* * @file itemlist.h itemlist handling * * Copyright (C) 2004-2011 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _ITEMLIST_H #define _ITEMLIST_H #include #include "item.h" #include "item_loader.h" #include "itemset.h" G_BEGIN_DECLS #define ITEMLIST_TYPE (itemlist_get_type ()) #define ITEMLIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ITEMLIST_TYPE, ItemList)) #define ITEMLIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ITEMLIST_TYPE, ItemListClass)) #define IS_ITEMLIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ITEMLIST_TYPE)) #define IS_ITEMLIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ITEMLIST_TYPE)) typedef struct ItemList ItemList; typedef struct ItemListClass ItemListClass; typedef struct ItemListPrivate ItemListPrivate; struct ItemList { GObject parent; /*< private >*/ ItemListPrivate *priv; }; struct ItemListClass { GObjectClass parent_class; }; GType itemlist_get_type (void); /** * itemlist_create: (skip) * * Set up the item list. * * Returns: (transfer full): the item list instance */ ItemList * itemlist_create (void); /** * itemlist_get_displayed_node: (skip) * * Returns the currently displayed node. * * Returns: (transfer none) (nullable): displayed node (or NULL) */ struct node * itemlist_get_displayed_node (void); /** * itemlist_get_selected: (skip) * * Returns the currently selected and displayed item. * * Returns: (transfer full) (nullable): displayed item (or NULL) to be free'd using item_unload() */ itemPtr itemlist_get_selected (void); /** * itemlist_get_selected_id: * * Returns the id of the currently selected item. * * Returns: displayed item id (or 0) */ gulong itemlist_get_selected_id (void); /** * itemlist_merge_itemset: (skip) * @itemSet: the item set to be merged * * To be called whenever a feed was updated. If it is a somehow * displayed feed it is loaded this method decides if the * and how the item list GUI needs to be updated. * */ void itemlist_merge_itemset (itemSetPtr itemSet); /** * itemlist_load: (skip) * @node: the node * * Loads the passed nodes items into the item list. */ void itemlist_load (struct node *node); /** * itemlist_unload: (skip) * @markRead: if TRUE all items are marked as read * * Clears the item list. Unsets the currently * displayed item set. Optionally marks every item read. */ void itemlist_unload (gboolean markRead); /** * itemlist_set_view_mode: * @newMode: 0 = normal, 1 = wide, 2 = combined view * * Changes the viewing mode property of the item list. * Do not use this method to change the viewing mode * of a displayed node! */ void itemlist_set_view_mode (guint newMode); /** * itemlist_get_view_mode: * * Returns the viewing mode property of the currently displayed item set. * * Returns: viewing mode (0 = normal, 1 = wide, 2 = combined view) */ guint itemlist_get_view_mode (void); /** * on_view_activate: (skip) * @action: the action that emitted the signal * @value: string in a GVariant, representing the requested mode. * @user_data: unused * * Menu callback that toggles the different viewing modes * This is the 'change_state' callback for the "SetViewMode" action. */ void on_view_activate (GSimpleAction *action, GVariant *value, gpointer user_data); /** * on_prev_read_item_activate: (skip) * * Menu callback to select the previously read item from the item history */ void on_prev_read_item_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data); /** * on_next_read_item_activate: (skip) * * Menu callback to select the next read item from the item history */ void on_next_read_item_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data); /* item handling function */ void itemlist_update_item (itemPtr item); /** * itemlist_remove_item: (skip) * @item: the item * * To be called whenever the user wants to remove * a single item. If necessary the item will be unselected. * The item will be removed immediately. */ void itemlist_remove_item (itemPtr item); /** * itemlist_remove_items: (skip) * @itemSet: the item set from which items are to be removed * @items: the items to be removed * * To be called whenever some of the items of an item set * are to be removed. In difference to itemlist_remove_item() * this function will remove all items first and update the * GUI once. */ void itemlist_remove_items (itemSetPtr itemSet, GList *items); /** * itemlist_remove_all_items: (skip) * @node: the node whose item list is to be removed * * To be called whenever the user wants to remove * all items of a node. Item list selection will be * resetted. All items are removed immediately. */ void itemlist_remove_all_items (struct node *node); /** * itemlist_selection_changed: (skip) * @item: new selected item * * Called from GUI when item list selection changes. */ void itemlist_selection_changed (itemPtr item); /** * itemlist_select_next_unread: * * Tries to select the next unread item that is currently in the * item list. Or does nothing if there are no unread items left. */ void itemlist_select_next_unread (void); /** * itemlist_toggle_flag: (skip) * @item: the item * * Toggle the flag of the given item. */ void itemlist_toggle_flag (itemPtr item); /** * itemlist_toggle_read_status: (skip) * @item: the item * * Toggle the read status of the given item. */ void itemlist_toggle_read_status (itemPtr item); /** * itemlist_add_search_result: (skip) * @loader: the search result item loader * * Register a search result item loader. * */ void itemlist_add_search_result (ItemLoader *loader); G_END_DECLS #endif liferea-1.12.7/src/itemset.c000066400000000000000000000357051352135647700156450ustar00rootroot00000000000000/* * @file itemset.c handling sets of items * * Copyright (C) 2005-2017 Lars Windolf * Copyright (C) 2005-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "common.h" #include "conf.h" #include "db.h" #include "debug.h" #include "enclosure.h" #include "feed.h" #include "itemlist.h" #include "itemset.h" #include "metadata.h" #include "node.h" #include "rule.h" #include "vfolder.h" #include "fl_sources/node_source.h" void itemset_foreach (itemSetPtr itemSet, itemActionFunc callback) { GList *iter = itemSet->ids; while(iter) { itemPtr item = item_load (GPOINTER_TO_UINT (iter->data)); if (item) { (*callback) (item); item_unload (item); } iter = g_list_next (iter); } } // FIXME: this ought to be a subscription property! static guint itemset_get_max_item_count (itemSetPtr itemSet) { nodePtr node = node_from_id (itemSet->nodeId); if (node && IS_FEED (node)) return feed_get_max_item_count (node); return G_MAXUINT; } /** * itemset_generic_merge_check: (skip) * @items: existing items * @newItem: new item to merge * @maxChecks: maximum number of item checks * @allowUpdates: TRUE if item content update is to be * allowed for existing items * @allowStateChanges: TRUE if item state shall be * overwritten by source * * Generic merge logic suitable for feeds * * Returns: TRUE if merging instead of updating is necessary) */ static gboolean itemset_generic_merge_check (GList *items, itemPtr newItem, gint maxChecks, gboolean allowUpdates, gboolean allowStateChanges) { GList *oldItemIdIter = items; itemPtr oldItem = NULL; gboolean found, equal = FALSE; guint reason = 0; /* determine if we should add it... */ debug3 (DEBUG_CACHE, "check new item for merging: \"%s\", %i, %i", item_get_title (newItem), allowUpdates, allowStateChanges); /* compare to every existing item in this feed */ found = FALSE; while (oldItemIdIter) { oldItem = (itemPtr)(oldItemIdIter->data); /* try to compare the two items */ /* trivial case: one item has id the other doesn't -> they can't be equal */ if (((item_get_id (oldItem) == NULL) && (item_get_id (newItem) != NULL)) || ((item_get_id (oldItem) != NULL) && (item_get_id (newItem) == NULL))) { /* cannot be equal (different ids) so compare to next old item */ oldItemIdIter = g_list_next (oldItemIdIter); continue; } /* just for the case there are no ids: compare titles and HTML descriptions */ equal = TRUE; if (((item_get_title (oldItem) != NULL) && (item_get_title (newItem) != NULL)) && (0 != strcmp (item_get_title (oldItem), item_get_title (newItem)))) { equal = FALSE; reason |= 1; } if (((item_get_description (oldItem) != NULL) && (item_get_description (newItem) != NULL)) && (0 != strcmp (item_get_description(oldItem), item_get_description (newItem)))) { equal = FALSE; reason |= 2; } /* best case: they both have ids (position important: id check is useless without knowing if the items are different!) */ if (item_get_id (oldItem)) { if (0 == strcmp (item_get_id (oldItem), item_get_id (newItem))) { found = TRUE; if (allowStateChanges) { /* found corresponding item, check if they are REALLY equal (eg, read status may have changed) */ if(oldItem->readStatus != newItem->readStatus) { equal = FALSE; reason |= 4; } if(oldItem->flagStatus != newItem->flagStatus) { equal = FALSE; reason |= 8; } } break; } else { /* different ids, but the content might be still equal (e.g. empty) so we need to explicitly unset the equal flag !!! */ equal = FALSE; reason |= 16; } } if (equal) { found = TRUE; break; } oldItemIdIter = g_list_next (oldItemIdIter); } if (!found) { debug0 (DEBUG_CACHE, "-> item is to be added"); } else { /* if the item was found but has other contents -> update contents */ if (!equal) { if (allowUpdates) { /* no item_set_new_status() - we don't treat changed items as new items! */ item_set_title (oldItem, item_get_title (newItem)); /* don't use item_set_description as it does some unwanted length handling and we want to enforce the new description */ g_free (oldItem->description); oldItem->description = newItem->description; newItem->description = NULL; oldItem->time = newItem->time; oldItem->updateStatus = TRUE; // FIXME: this does not remove metadata from DB metadata_list_free (oldItem->metadata); oldItem->metadata = newItem->metadata; newItem->metadata = NULL; /* Only update item state for feed sources where it is necessary which means online accounts we sync against, but not normal online feeds where items have no read status. */ if (allowStateChanges) { /* To avoid notification spam from external sources: never set read items to unread again! */ if ((!oldItem->readStatus) && (newItem->readStatus)) oldItem->readStatus = newItem->readStatus; oldItem->flagStatus = newItem->flagStatus; } db_item_update (oldItem); debug1 (DEBUG_CACHE, "-> item already existing and was updated, reason %x", reason); } else { debug0 (DEBUG_CACHE, "-> item updates not merged because of parser errors"); } } else { debug0 (DEBUG_CACHE, "-> item already exists"); } } return !found; } static gboolean itemset_merge_item (itemSetPtr itemSet, GList *items, itemPtr item, gint maxChecks, gboolean allowUpdates) { gboolean allowStateChanges = FALSE; gboolean merge; nodePtr node; debug2 (DEBUG_UPDATE, "trying to merge \"%s\" to node id \"%s\"", item_get_title (item), itemSet->nodeId); g_assert (itemSet->nodeId); node = node_from_id (itemSet->nodeId); if (node) allowStateChanges = NODE_SOURCE_TYPE (node)->capabilities & NODE_SOURCE_CAPABILITY_ITEM_STATE_SYNC; /* first try to merge with existing item */ merge = itemset_generic_merge_check (items, item, maxChecks, allowUpdates, allowStateChanges); /* if it is a new item add it to the item set */ if (merge) { g_assert (!item->nodeId); g_assert (!item->id); item->nodeId = g_strdup (itemSet->nodeId); if (!item->parentNodeId) item->parentNodeId = g_strdup (itemSet->nodeId); /* step 1: write item to DB */ db_item_update (item); /* step 2: add to itemset */ itemSet->ids = g_list_prepend (itemSet->ids, GUINT_TO_POINTER (item->id)); /* step 3: trigger async enrichment of item description */ if (node && IS_FEED (node) && ((feedPtr)node->data)->html5Extract) feed_enrich_item (node->subscription, item); debug3 (DEBUG_UPDATE, "-> added \"%s\" (id=%d) to item set %p...", item_get_title (item), item->id, itemSet); /* step 4: duplicate detection, mark read if it is a duplicate */ if (item->validGuid) { GSList *iter, *duplicates; duplicates = iter = db_item_get_duplicates (item->sourceId); while (iter) { debug1 (DEBUG_UPDATE, "-> duplicate guid exists: #%lu", GPOINTER_TO_UINT (iter->data)); iter = g_slist_next (iter); } if (g_slist_length (duplicates) > 1) { item->readStatus = TRUE; /* no unread counting... */ item->popupStatus = FALSE; /* no notification... */ } g_slist_free (duplicates); } /* step 5: Check item for new enclosures to download */ if (node && (((feedPtr)node->data)->encAutoDownload)) { GSList *iter = metadata_list_get_values (item->metadata, "enclosure"); while (iter) { enclosurePtr enc = enclosure_from_string (iter->data); debug1 (DEBUG_UPDATE, "download enclosure (%s)", (gchar *)iter->data); enclosure_download (NULL, enc->url, FALSE /* non interactive */); iter = g_slist_next (iter); enclosure_free (enc); } } } else { debug2 (DEBUG_UPDATE, "-> not adding \"%s\" to node id \"%s\"...", item_get_title (item), itemSet->nodeId); item_unload (item); } return merge; } static gint itemset_sort_by_date (gconstpointer a, gconstpointer b) { itemPtr item1 = (itemPtr)a; itemPtr item2 = (itemPtr)b; g_assert(item1 && item2); /* We have a problem here if all items of the feed do have no date, then this comparison is useless. To avoid such a case we alternatively compare by item id (which should be an ever-increasing number) and thereby indicate merge order as a secondary order criterion */ if (item1->time == item2->time) { if (item1->id < item2->id) return 1; if (item1->id > item2->id) return -1; return 0; } if (item1->time < item2->time) return 1; if (item1->time > item2->time) return -1; return 0; } guint itemset_merge_items (itemSetPtr itemSet, GList *list, gboolean allowUpdates, gboolean markAsRead) { GList *iter, *droppedItems = NULL, *items = NULL; guint i, max, length, toBeDropped, newCount = 0, flagCount = 0; nodePtr node; debug_start_measurement (DEBUG_UPDATE); debug2 (DEBUG_UPDATE, "old item set %p of (node id=%s):", itemSet, itemSet->nodeId); /* 1. Preparation: determine effective maximum cache size The problem here is that the configured maximum cache size might not always be sufficient. We need to check border use cases in the following. */ length = g_list_length (list); max = itemset_get_max_item_count (itemSet); /* Preload all items for flag counting and later merging comparison */ iter = itemSet->ids; while (iter) { itemPtr item = item_load (GPOINTER_TO_UINT (iter->data)); if (item) { items = g_list_append (items, item); if (item->flagStatus) flagCount++; } iter = g_list_next (iter); } debug1(DEBUG_UPDATE, "current cache size: %d", g_list_length(itemSet->ids)); debug1(DEBUG_UPDATE, "current cache limit: %d", max); debug1(DEBUG_UPDATE, "downloaded feed size: %d", g_list_length(list)); debug1(DEBUG_UPDATE, "flag count: %d", flagCount); /* Case #1: Avoid having too many flagged items. We count the flagged items and check if they are fewer than - to ensure that all new items fit in a feed cache full of flagged items. This handling MUST NOT be invoked when the number of items is larger then the cache size, otherwise we would never remove any items for large feeds. */ if ((length < max) && (max < length + flagCount)) { max = flagCount + length; debug2 (DEBUG_UPDATE, "too many flagged items -> increasing cache limit to %u (node id=%s)", max, itemSet->nodeId); } /* 2. Avoid cache wrapping (if feed size > cache size) Truncate the new itemset if it is longer than the maximum cache size which could cause items to be dropped and added again on subsequent merges with the same feed content */ if (length > max) { debug2 (DEBUG_UPDATE, "item list too long (%u, max=%u) for merging!", length, max); /* reach max element */ for(i = 0, iter = list; (i < max) && iter; ++i) iter = g_list_next (iter); /* and remove all following elements */ while (iter) { itemPtr item = (itemPtr) iter->data; debug2 (DEBUG_UPDATE, "ignoring item nr %u (%s)...", ++i, item_get_title (item)); item_unload (item); iter = g_list_next (iter); list = g_list_remove (list, item); } } /* 3. Merge received items to existing item set Items are given in top to bottom display order. Adding them in this order would mean to reverse their order in the merged list, so merging needs to be done bottom to top. During this step the item list (items) may exceed the cache limit. */ iter = g_list_last (list); while (iter) { itemPtr item = (itemPtr)iter->data; if (markAsRead) item->readStatus = TRUE; if (itemset_merge_item (itemSet, items, item, length, allowUpdates)) { newCount++; items = g_list_prepend (items, iter->data); } iter = g_list_previous (iter); } g_list_free (list); vfolder_foreach (node_update_counters); node = node_from_id (itemSet->nodeId); if (node && (NODE_SOURCE_TYPE (node)->capabilities & NODE_SOURCE_CAPABILITY_ITEM_STATE_SYNC)) node_update_counters (node); debug1(DEBUG_UPDATE, "added %d new items", newCount); /* 4. Apply cache limit for effective item set size and unload older items as necessary. In this step it is important never to drop flagged items and to drop the oldest items only. */ if (g_list_length (items) > max) toBeDropped = g_list_length (items) - max; else toBeDropped = 0; debug3 (DEBUG_UPDATE, "%u new items, cache limit is %u -> dropping %u items", newCount, max, toBeDropped); items = g_list_sort (items, itemset_sort_by_date); iter = g_list_last (items); while (iter) { itemPtr item = (itemPtr) iter->data; if (toBeDropped > 0 && !item->flagStatus) { debug2 (DEBUG_UPDATE, "dropping item nr %u (%s)....", item->id, item_get_title (item)); droppedItems = g_list_append (droppedItems, item); /* no unloading here, it's done in itemlist_remove_items() */ toBeDropped--; } else { item_unload (item); } iter = g_list_previous (iter); } if (droppedItems) { itemlist_remove_items (itemSet, droppedItems); g_list_free (droppedItems); } /* 5. Sanity check to detect merging bugs */ if (g_list_length (items) > itemset_get_max_item_count (itemSet) + flagCount) debug0 (DEBUG_CACHE, "Fatal: Item merging bug! Resulting item list is too long! Cache limit does not work. This is a severe program bug!"); g_list_free (items); debug_end_measurement (DEBUG_UPDATE, "merge itemset"); return newCount; } gboolean itemset_check_item (itemSetPtr itemSet, itemPtr item) { gboolean result = TRUE; GSList *iter = itemSet->rules; while (iter) { rulePtr rule = (rulePtr) iter->data; ruleCheckFunc func = rule->ruleInfo->checkFunc; gboolean ruleResult = FALSE; ruleResult = (*func) (rule, item); result &= (rule->additive)?ruleResult:!ruleResult; if (itemSet->anyMatch && ruleResult) return TRUE; iter = g_slist_next (iter); } return result; } void itemset_add_rule (itemSetPtr itemSet, const gchar *ruleId, const gchar *value, gboolean additive) { rulePtr rule; rule = rule_new (ruleId, value, additive); if (rule) itemSet->rules = g_slist_append (itemSet->rules, rule); else g_warning ("unknown search folder rule id: \"%s\"", ruleId); } void itemset_free (itemSetPtr itemSet) { GSList *rule; if (!itemSet) return; rule = itemSet->rules; while (rule) { rule_free (rule->data); rule = g_slist_next (rule); } g_slist_free (itemSet->rules); g_list_free (itemSet->ids); g_free (itemSet); } liferea-1.12.7/src/itemset.h000066400000000000000000000061211352135647700156400ustar00rootroot00000000000000/* * @file itemset.h interface to handle sets of items * * Copyright (C) 2005-2012 Lars Windolf * Copyright (C) 2005-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _ITEMSET_H #define _ITEMSET_H #include "item.h" #include "rule.h" /* * The itemset interface processes item list actions * based on the item set type specified by the node * the item set belongs to. */ typedef struct itemSet { GSList *rules; /*<< list of rules each item matches */ gboolean anyMatch; /*<< TRUE means only one of the rules must match for item inclusion */ GList *ids; /*<< the list of item ids */ gchar *nodeId; /*<< the feed list node id this item set belongs to */ } *itemSetPtr; /* item set iterating interface */ typedef void (*itemActionFunc) (itemPtr item); /** * itemset_foreach: (skip) * @itemSet: the item set * @callback: the callback * * Calls the given callback for each of the items in the item set. */ void itemset_foreach (itemSetPtr itemSet, itemActionFunc callback); /** * itemset_merge_items: (skip) * @itemSet: the item set to merge into * @items: a list of items to merge * @allowUpdates: TRUE if older items may be replaced * @markAsRead: TRUE if all new items should be marked as read * * Merges the given item set into the item set of * the given node. Used for node updating. * * Returns: the number of new merged items */ guint itemset_merge_items(itemSetPtr itemSet, GList *items, gboolean allowUpdates, gboolean markAsRead); /** * itemset_check_item: (skip) * @itemSet: the itemSet * @item: the item * * Checks if the given item matches the rules of the given item set. * * Returns: TRUE if the item matches the rules of the item set */ gboolean itemset_check_item (itemSetPtr itemSet, itemPtr item); /** * itemset_add_rule: (skip) * @itemSet: the item set * @ruleId: id string for this rule type * @value: argument string for this rule * @additive: indicates positive or negative logic * * Method that creates and adds a rule to an item set. To be used * on loading time, when creating searches or when editing * search folder properties. */ void itemset_add_rule (itemSetPtr itemSet, const gchar *ruleId, const gchar *value, gboolean additive); /** * itemset_free: (skip) * @itemSet: the item set to free * * Frees the given item set and all items it contains. */ void itemset_free(itemSetPtr itemSet); #endif liferea-1.12.7/src/json.c000066400000000000000000000036411352135647700151360ustar00rootroot00000000000000/** * @file json.h simplification wrappers for libjson-glib * * Copyright (C) 2010 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "json.h" JsonNode * json_get_node (JsonNode *node, const gchar *keyName) { JsonObject *obj; JsonNode *key; obj = json_node_get_object (node); if (!obj) return NULL; key = json_object_get_member (obj, keyName); if (!key) return NULL; return key; } const gchar * json_get_string (JsonNode *node, const gchar *keyName) { JsonObject *obj; JsonNode *key; obj = json_node_get_object (node); if (!obj) return NULL; key = json_object_get_member (obj, keyName); if (!key) return NULL; return json_node_get_string (key); } gint64 json_get_int (JsonNode *node, const gchar *keyName) { JsonObject *obj; JsonNode *key; obj = json_node_get_object (node); if (!obj) return 0; key = json_object_get_member (obj, keyName); if (!key) return 0; return json_node_get_int (key); } gboolean json_get_bool (JsonNode *node, const gchar *keyName) { JsonObject *obj; JsonNode *key; obj = json_node_get_object (node); if (!obj) return FALSE; key = json_object_get_member (obj, keyName); if (!key) return FALSE; return json_node_get_boolean (key); } liferea-1.12.7/src/json.h000066400000000000000000000036501352135647700151430ustar00rootroot00000000000000/** * @file json.h simplification wrappers for libjson-glib * * Copyright (C) 2010 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _JSON_H #define _JSON_H #include #include /** * Query a simple json object node for a given subnode. * * @param node the Json node to check * @param keyName the name of the subnode * * @returns subnode (or NULL) */ JsonNode *json_get_node (JsonNode *node, const gchar *keyName); /** * Query a simple json object node for a given string key. * * @param obj the Json node to check * @param key the key to look up * * @returns value of the key (or NULL) */ const gchar * json_get_string (JsonNode *node, const gchar *key); /** * Query a simple json object node for a given numeric key. * * @param obj the Json node to check * @param key the key to look up * * @returns value of the key (no error handling!) */ gint64 json_get_int (JsonNode *node, const gchar *key); /** * Query a simple json object node for a given boolean key. * * @param obj the Json node to check * @param key the key to look up * * @returns value of the key (no error handling!) */ gboolean json_get_bool (JsonNode *node, const gchar *key); #endif liferea-1.12.7/src/liferea-add-feed.in000066400000000000000000000007461352135647700174120ustar00rootroot00000000000000#!/bin/sh # This script can be used to automatically add # subscriptions to Liferea. Just supply a valid # and correctly escaped feed URL as parameter. if [ $# -ne 1 ]; then echo "Wrong parameter count!" echo "" echo "Syntax: $0 " echo "" exit 1 fi URL=$1 if ! pgrep -x liferea >/dev/null 2>&1; then echo "Liferea is not running! You need to start it first." exit 1 fi NEWURL=`echo "$URL" | sed 's/feed\:https/https/'` @prefix@/bin/liferea --add-feed "$NEWURL" liferea-1.12.7/src/liferea_application.c000066400000000000000000000273311352135647700201610ustar00rootroot00000000000000/** * @file main.c Liferea startup * * Copyright (C) 2003-2018 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * * Some code like the command line handling was inspired by * * Pan - A Newsreader for Gtk+ * Copyright (C) 2002 Charles Kerr * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "liferea_application.h" #ifdef HAVE_CONFIG_H # include #endif #include #include "conf.h" #include "common.h" #include "db.h" #include "dbus.h" #include "debug.h" #include "feedlist.h" #include "social.h" #include "update.h" #include "xml.h" #include "ui/liferea_shell.h" #include struct _LifereaApplication { GtkApplication parent; gchar *initialStateOption; gint pluginsDisabled; LifereaDBus *dbus; gulong debug_flags; }; struct _LifereaApplicationClass { GtkApplicationClass parent; }; G_DEFINE_TYPE (LifereaApplication, liferea_application, GTK_TYPE_APPLICATION) static void liferea_application_finalize (GObject *gobject) { LifereaApplication *self = LIFEREA_APPLICATION(gobject); g_clear_object (&self->dbus); /* Chaining finalize from parent class. */ G_OBJECT_CLASS(liferea_application_parent_class)->finalize(gobject); } /* GApplication "open" callback for receiving feed-add requests from remote --add-feed option or * adding feeds passed as argument. */ static void on_app_open (GApplication *application, gpointer files, gint n_files, gchar *hint, gpointer user_data) { int i; GFile **uris = (GFile **)files; GtkApplication *gtk_app = GTK_APPLICATION (application); GList *list = gtk_application_get_windows (gtk_app); LifereaApplication *app = LIFEREA_APPLICATION (application); if (!list) liferea_shell_create (gtk_app, app->initialStateOption, app->pluginsDisabled); for (i=0;(idata)); gtk_window_present (GTK_WINDOW (list->data)); } else { liferea_shell_create (gtk_app, app->initialStateOption, app->pluginsDisabled); } css_filename = g_build_filename (PACKAGE_DATA_DIR, PACKAGE, "liferea.css", NULL); css_file = g_file_new_for_path (css_filename); provider = gtk_css_provider_new (); gtk_css_provider_load_from_file(provider, css_file, &error); if (G_UNLIKELY (!gtk_css_provider_load_from_file(provider, css_file, &error))) { g_critical ("Could not load CSS data: %s", error->message); g_clear_error (&error); } else { gtk_style_context_add_provider_for_screen ( gdk_screen_get_default(), GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } g_object_unref (provider); g_object_unref (css_file); g_free (css_filename); } /* Callback to the startup signal emitted only by the primary instance upon registration. */ static void on_app_startup (GApplication *gapp, gpointer user_data) { LifereaApplication *app = LIFEREA_APPLICATION (gapp); set_debug_level (app->debug_flags); /* Configuration necessary for network options, so it has to be initialized before update_init() */ conf_init (); /* We need to do the network initialization here to allow network-manager to be setup before gtk_init() */ update_init (); /* order is important! */ db_init (); /* initialize sqlite */ xml_init (); /* initialize libxml2 */ social_init (); /* initialize social bookmarking */ app->dbus = liferea_dbus_new (); } /* Callback to the "shutdown" signal emitted only on the primary instance; */ static void on_app_shutdown (GApplication *app, gpointer user_data) { GList *list; debug_enter ("liferea_shutdown"); /* order is important ! */ update_deinit (); /* When application is started as a service, it waits 10 seconds for a message. * If no message arrives, it will shutdown without having created a window. */ list = gtk_application_get_windows (GTK_APPLICATION (app)); if (list) { liferea_shell_destroy (); } db_deinit (); social_free (); conf_deinit (); debug_exit ("liferea_shutdown"); } static void show_version () { printf ("Liferea %s\n", VERSION); } static gboolean debug_entries_parse_callback (const gchar *option_name, const gchar *value, gpointer data, GError **error) { gulong *debug_flags = data; if (g_str_equal (option_name, "--debug-all")) { *debug_flags = 0xffff - DEBUG_VERBOSE - DEBUG_TRACE; } else if (g_str_equal (option_name, "--debug-cache")) { *debug_flags |= DEBUG_CACHE; } else if (g_str_equal (option_name, "--debug-conf")) { *debug_flags |= DEBUG_CONF; } else if (g_str_equal (option_name, "--debug-db")) { *debug_flags |= DEBUG_DB; } else if (g_str_equal (option_name, "--debug-gui")) { *debug_flags |= DEBUG_GUI; } else if (g_str_equal (option_name, "--debug-html")) { *debug_flags |= DEBUG_HTML; } else if (g_str_equal (option_name, "--debug-net")) { *debug_flags |= DEBUG_NET; } else if (g_str_equal (option_name, "--debug-parsing")) { *debug_flags |= DEBUG_PARSING; } else if (g_str_equal (option_name, "--debug-performance")) { *debug_flags |= DEBUG_PERF; } else if (g_str_equal (option_name, "--debug-trace")) { *debug_flags |= DEBUG_TRACE; } else if (g_str_equal (option_name, "--debug-update")) { *debug_flags |= DEBUG_UPDATE; } else if (g_str_equal (option_name, "--debug-vfolder")) { *debug_flags |= DEBUG_VFOLDER; } else if (g_str_equal (option_name, "--debug-verbose")) { *debug_flags |= DEBUG_VERBOSE; } else { return FALSE; } return TRUE; } static gint on_handle_local_options (GApplication *app, GVariantDict *options, gpointer user_data) { gchar *uri; if (g_variant_dict_lookup_value (options, "version", NULL)) { show_version (); return 0; /* Show version and exit */ } if (g_variant_dict_lookup (options, "add-feed", "s", &uri)) { GFile *uris[2]; uris[0] = g_file_new_for_uri (uri); uris[1] = NULL; g_application_register (app, NULL, NULL); g_application_open (G_APPLICATION (app), uris, 1, "feed-add"); g_object_unref (uris[0]); return -1; } return -1; } static void liferea_application_class_init (LifereaApplicationClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); gobject_class->finalize = liferea_application_finalize; } static void liferea_application_init (LifereaApplication *self) { GOptionGroup *debug; GOptionEntry entries[] = { { "mainwindow-state", 'w', 0, G_OPTION_ARG_STRING, &self->initialStateOption, N_("Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'"), N_("STATE") }, { "version", 'v', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, NULL, N_("Show version information and exit"), NULL }, { "add-feed", 'a', 0, G_OPTION_ARG_STRING, NULL, N_("Add a new subscription"), N_("uri") }, { "disable-plugins", 'p', 0, G_OPTION_FLAG_NONE, &self->pluginsDisabled, N_("Start with all plugins disabled"), NULL }, { NULL, 0, 0, 0, NULL, NULL, NULL } }; GOptionEntry debug_entries[] = { { "debug-all", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of all types"), NULL }, { "debug-cache", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages for the cache handling"), NULL }, { "debug-conf", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages for the configuration handling"), NULL }, { "debug-db", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of the database handling"), NULL }, { "debug-gui", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of all GUI functions"), NULL }, { "debug-html", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Enables HTML rendering debugging. Each time Liferea renders HTML output it will also dump the generated HTML into ~/.cache/liferea/output.xhtml"), NULL }, { "debug-net", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of all network activity"), NULL }, { "debug-parsing", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of all parsing functions"), NULL }, { "debug-performance", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages when a function takes too long to process"), NULL }, { "debug-trace", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages when entering/leaving functions"), NULL }, { "debug-update", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of the feed update processing"), NULL }, { "debug-vfolder", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print debugging messages of the search folder matching"), NULL }, { "debug-verbose", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, debug_entries_parse_callback, N_("Print verbose debugging messages"), NULL }, { NULL, 0, 0, 0, NULL, NULL, NULL } }; debug = g_option_group_new ("debug", _("Print debugging messages for the given topic"), _("Print debugging messages for the given topic"), &self->debug_flags, NULL); g_option_group_set_translation_domain(debug, GETTEXT_PACKAGE); g_option_group_add_entries (debug, debug_entries); g_application_add_main_option_entries (G_APPLICATION (self), entries); g_application_add_option_group (G_APPLICATION (self), debug); g_application_add_option_group (G_APPLICATION (self), g_irepository_get_option_group ()); g_signal_connect (G_OBJECT (self), "activate", G_CALLBACK (on_app_activate), NULL); g_signal_connect (G_OBJECT (self), "open", G_CALLBACK (on_app_open), NULL); g_signal_connect (G_OBJECT (self), "shutdown", G_CALLBACK (on_app_shutdown), NULL); g_signal_connect (G_OBJECT (self), "startup", G_CALLBACK (on_app_startup), NULL); g_signal_connect (G_OBJECT (self), "handle-local-options", G_CALLBACK (on_handle_local_options), NULL); } LifereaApplication * liferea_application_new(void) { return g_object_new (LIFEREA_TYPE_APPLICATION, "flags", G_APPLICATION_HANDLES_OPEN, "application-id", "net.sourceforge.liferea", NULL); } liferea-1.12.7/src/liferea_application.h000066400000000000000000000034121352135647700201600ustar00rootroot00000000000000/* * @file liferea_application.h LifereaApplication type * * Copyright (C) 2016 Leiaz * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _LIFEREA_APPLICATION_H #define _LIFEREA_APPLICATION_H #include #include #define LIFEREA_TYPE_APPLICATION (liferea_application_get_type ()) #define LIFEREA_APPLICATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIFEREA_TYPE_APPLICATION, LifereaApplication)) #define IS_LIFEREA_APPLICATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LIFEREA_APPLICATION_TYPE)) #define LIFEREA_APPLICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LIFEREA_TYPE_APPLICATION, LifereaApplicationClass)) #define IS_LIFEREA_APPLICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LIFEREA_TYPE_APPLICATION)) #define LIFEREA_APPLICATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LIFEREA_TYPE_APPLICATION, LifereaApplicationClass)) typedef struct _LifereaApplication LifereaApplication; typedef struct _LifereaApplicationClass LifereaApplicationClass; GType liferea_application_get_type (); LifereaApplication * liferea_application_new(); #endif liferea-1.12.7/src/main.c000066400000000000000000000040051352135647700151040ustar00rootroot00000000000000/** * @file main.c Liferea startup * * Copyright (C) 2003-2012 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include "common.h" #include "liferea_application.h" static LifereaApplication *liferea_app = NULL; gboolean liferea_shutdown_source_func (gpointer userdata) { g_application_quit (G_APPLICATION (liferea_app)); return FALSE; } void liferea_shutdown () { g_idle_add (liferea_shutdown_source_func, NULL); } static void signal_handler (int sig) { liferea_shutdown (); } int main (int argc, char *argv[]) { gint status; signal (SIGTERM, signal_handler); signal (SIGINT, signal_handler); #ifdef SIGHUP signal (SIGHUP, signal_handler); #endif #ifdef ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); #endif liferea_app = liferea_application_new (); g_set_prgname ("liferea"); g_set_application_name (_("Liferea")); gtk_window_set_default_icon_name ("liferea"); /* GTK theme support */ status = g_application_run (G_APPLICATION (liferea_app), argc, argv); g_object_unref (liferea_app); return status; } liferea-1.12.7/src/metadata.c000066400000000000000000000230651352135647700157470ustar00rootroot00000000000000/** * @file metadata.c handling of typed item and feed meta data * * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2004-2014 Lars Windolf * Copyright (C) 2015 Rich Coe * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "common.h" #include "debug.h" #include "metadata.h" #include "xml.h" /* Metadata in Liferea are ordered lists of key/value list pairs. Both feed list nodes and items can have a list of metadata assigned. Metadata date values are always text values but maybe of different type depending on their usage type. */ static GHashTable *metadataTypes = NULL; /**< hash table with all registered meta data types */ struct pair { gchar *strid; /** metadata type id */ GSList *data; /** list of metadata values */ }; /* register metadata types to check validity on adding */ static void metadata_init (void) { g_assert (NULL == metadataTypes); metadataTypes = g_hash_table_new (g_str_hash, g_str_equal); /* generic types */ metadata_type_register ("author", METADATA_TYPE_HTML); metadata_type_register ("contributor", METADATA_TYPE_HTML); metadata_type_register ("copyright", METADATA_TYPE_HTML); metadata_type_register ("language", METADATA_TYPE_HTML); metadata_type_register ("pubDate", METADATA_TYPE_TEXT); metadata_type_register ("contentUpdateDate", METADATA_TYPE_TEXT); metadata_type_register ("managingEditor", METADATA_TYPE_HTML); metadata_type_register ("webmaster", METADATA_TYPE_HTML); metadata_type_register ("feedgenerator", METADATA_TYPE_HTML); metadata_type_register ("imageUrl", METADATA_TYPE_URL); metadata_type_register ("icon", METADATA_TYPE_URL); metadata_type_register ("homepage", METADATA_TYPE_URL); metadata_type_register ("textInput", METADATA_TYPE_HTML); metadata_type_register ("errorReportsTo", METADATA_TYPE_HTML); metadata_type_register ("feedgeneratorUri", METADATA_TYPE_URL); metadata_type_register ("category", METADATA_TYPE_HTML); metadata_type_register ("enclosure", METADATA_TYPE_TEXT); metadata_type_register ("commentsUri", METADATA_TYPE_URL); metadata_type_register ("commentFeedUri", METADATA_TYPE_URL); metadata_type_register ("feedTitle", METADATA_TYPE_HTML); metadata_type_register ("description", METADATA_TYPE_HTML); metadata_type_register ("richContent", METADATA_TYPE_HTML); /* types for aggregation NS */ metadata_type_register ("agSource", METADATA_TYPE_URL); metadata_type_register ("agTimestamp", METADATA_TYPE_TEXT); /* types for blog channel */ metadata_type_register ("blogChannel", METADATA_TYPE_HTML); /* types for creative commons */ metadata_type_register ("license", METADATA_TYPE_HTML); /* types for Dublin Core (some dc tags are mapped to feed and item metadata types) */ metadata_type_register ("creator", METADATA_TYPE_HTML); metadata_type_register ("publisher", METADATA_TYPE_HTML); metadata_type_register ("type", METADATA_TYPE_HTML); metadata_type_register ("format", METADATA_TYPE_HTML); metadata_type_register ("identifier", METADATA_TYPE_HTML); metadata_type_register ("source", METADATA_TYPE_URL); metadata_type_register ("coverage", METADATA_TYPE_HTML); /* types for photo blogs */ metadata_type_register ("photo", METADATA_TYPE_URL); /* types for slash */ metadata_type_register ("slash", METADATA_TYPE_HTML); /* type for gravatars */ metadata_type_register ("gravatar", METADATA_TYPE_URL); /* for RSS 2.0 real source and newsbin real source info */ metadata_type_register ("realSourceUrl", METADATA_TYPE_URL); metadata_type_register ("realSourceTitle", METADATA_TYPE_URL); /* for trackback URL */ metadata_type_register ("related", METADATA_TYPE_URL); metadata_type_register ("via", METADATA_TYPE_URL); /* for georss:point */ metadata_type_register ("point", METADATA_TYPE_TEXT); return; } void metadata_type_register (const gchar *name, gint type) { if (!metadataTypes) metadata_init (); g_hash_table_insert (metadataTypes, (gpointer)name, GINT_TO_POINTER (type)); } gboolean metadata_is_type_registered (const gchar *strid) { if (!metadataTypes) metadata_init (); if (g_hash_table_lookup (metadataTypes, strid)) return TRUE; else return FALSE; } static gint metadata_get_type (const gchar *name) { gint type; if (!metadataTypes) metadata_init (); type = GPOINTER_TO_INT (g_hash_table_lookup (metadataTypes, (gpointer)name)); if (0 == type) g_warning ("Unknown metadata type: %s, please report this Liferea bug!", name); return type; } static gint metadata_value_cmp (gconstpointer a, gconstpointer b) { if (g_str_equal ((gchar *)a, (gchar *)b)) return 0; return 1; } GSList * metadata_list_append (GSList *metadata, const gchar *strid, const gchar *data) { GSList *iter = metadata; gchar *tmp, *checked_data = NULL; struct pair *p; if (!data) return metadata; /* lookup type and check format */ switch (metadata_get_type (strid)) { case METADATA_TYPE_TEXT: /* No check because renderer will process further */ checked_data = g_strdup (data); break; case METADATA_TYPE_URL: /* Simple sanity check to see if it doesn't break XML */ if (!strchr(data, '<') && !(strchr (data, '>')) && !(strchr (data, '&'))) { checked_data = g_strdup (data); } else { checked_data = common_uri_escape (data); } /* finally strip whitespace */ checked_data = g_strchomp (checked_data); break; default: g_warning ("Unknown metadata type: %s (id=%d), please report this Liferea bug! Treating as HTML.", strid, metadata_get_type (strid)); case METADATA_TYPE_HTML: /* Needs to check for proper XHTML */ if (xhtml_is_well_formed (data)) { tmp = g_strdup (data); } else { debug1 (DEBUG_PARSING, "not well formed HTML: %s", data); tmp = g_markup_escape_text (data, -1); debug1 (DEBUG_PARSING, "escaped as: %s", tmp); } /* And needs to remove DHTML */ checked_data = xhtml_strip_dhtml (tmp); g_free (tmp); break; } while (iter) { p = (struct pair*)iter->data; if (g_str_equal (p->strid, strid)) { /* Avoid duplicate values */ if (NULL == g_slist_find_custom (p->data, checked_data, metadata_value_cmp)) p->data = g_slist_append (p->data, checked_data); else g_free (checked_data); return metadata; } iter = iter->next; } p = g_new (struct pair, 1); p->strid = g_strdup (strid); p->data = g_slist_append (NULL, checked_data); metadata = g_slist_append (metadata, p); return metadata; } void metadata_list_set (GSList **metadata, const gchar *strid, const gchar *data) { GSList *iter = *metadata; struct pair *p; while (iter) { p = (struct pair*)iter->data; if (g_str_equal (p->strid, strid)) { g_slist_free_full (p->data, g_free); p->data = g_slist_append (NULL, g_strdup (data)); return; } iter = iter->next; } p = g_new (struct pair, 1); p->strid = g_strdup (strid); p->data = g_slist_append (NULL, g_strdup (data)); *metadata = g_slist_append (*metadata, p); } void metadata_list_foreach (GSList *metadata, metadataForeachFunc func, gpointer user_data) { GSList *list = metadata; guint index = 0; while (list) { struct pair *p = (struct pair*)list->data; GSList *values = (GSList *)p->data; while (values) { index++; (*func)(p->strid, values->data, index, user_data); values = g_slist_next (values); } list = list->next; } } GSList * metadata_list_get_values (GSList *metadata, const gchar *strid) { GSList *list = metadata; while (list) { struct pair *p = (struct pair*)list->data; if (g_str_equal (p->strid, strid)) return p->data; list = list->next; } return NULL; } const gchar * metadata_list_get (GSList *metadata, const gchar *strid) { GSList *values; values = metadata_list_get_values (metadata, strid); return values?values->data:NULL; } GSList * metadata_list_copy (GSList *list) { GSList *copy = NULL; GSList *iter2, *iter = list; struct pair *p; while (iter) { p = (struct pair*)iter->data; iter2 = p->data; while (iter2) { copy = metadata_list_append (copy, p->strid, iter2->data); iter2 = iter2->next; } iter = iter->next; } return copy; } void metadata_list_free (GSList *metadata) { GSList *iter = metadata; while (iter) { struct pair *p = (struct pair*)iter->data; g_slist_free_full (p->data, g_free); g_free (p->strid); g_free (p); iter = iter->next; } g_slist_free (metadata); } void metadata_add_xml_nodes (GSList *metadata, xmlNodePtr parentNode) { GSList *list = metadata; xmlNodePtr attribute; xmlNodePtr metadataNode = xmlNewChild (parentNode, NULL, "attributes", NULL); while (list) { struct pair *p = (struct pair*)list->data; GSList *list2 = p->data; while (list2) { attribute = xmlNewTextChild (metadataNode, NULL, "attribute", list2->data); xmlNewProp (attribute, "name", p->strid); list2 = list2->next; } list = list->next; } } liferea-1.12.7/src/metadata.h000066400000000000000000000120441352135647700157470ustar00rootroot00000000000000/** * @file metadata.h handling of typed item and feed metadata * * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2008 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _METADATA_H #define _METADATA_H #include #include #include "feed_parser.h" /* -------------------------------------------------------- */ /* interface definitions for namespace parsing handler */ /* -------------------------------------------------------- */ struct NsHandler; /** definition of various namespace tag handler */ typedef void (*registerNsFunc) (struct NsHandler *nsh, GHashTable *prefixhash, GHashTable *urihash); typedef void (*parseChannelTagFunc) (feedParserCtxtPtr ctxt, xmlNodePtr cur); typedef void (*parseItemTagFunc) (feedParserCtxtPtr ctxt, xmlNodePtr cur); /** struct used to register namespace handler */ typedef struct NsHandler { const gchar *prefix; /**< namespace prefix */ registerNsFunc registerNs; parseItemTagFunc parseItemTag; /**< item tag parsing method */ parseChannelTagFunc parseChannelTag; /**< channel tag parsing method */ } NsHandler; /** Metadata value types */ enum { METADATA_TYPE_TEXT = 1, /**< metadata can be any character data and needs escaping */ METADATA_TYPE_URL = 2, /**< metadata is an URL and guaranteed to be valid for use in XML */ METADATA_TYPE_HTML = 3 /**< metadata is XHTML content and valid to be embedded in XML */ }; /** * Register a metadata type. This allows type specific * sanity handling and detecting invalid metadata. * * @param name key name * @param type key type */ void metadata_type_register (const gchar *name, gint); /** * Checks whether a metadata type is registered * * @param strid the metadata type identifier * * @returns TRUE if the metadata type is registered, otherwise FALSE */ gboolean metadata_is_type_registered (const gchar *strid); /** * Appends a value to the value list of a specific metadata type * Don't mix this function with metadata_list_set() ! * * @param metadata the metadata list * @param strid the metadata type identifier * @param data data to add * * @returns the changed meta data list */ GSList * metadata_list_append(GSList *metadata, const gchar *strid, const gchar *data); /** * Sets (and overwrites if necessary) the value of a specific metadata type. * Don't mix this function with metadata_list_append() ! * * @param metadata the metadata list * @param strid the metadata type identifier * @param data data to add */ void metadata_list_set(GSList **metadata, const gchar *strid, const gchar *data); /** * Returns the first value of a given type from a specified metadata list. * Do use this function only for single instance types. * * @param metadata the metadata list * @param strid the metadata type identifier * * @returns the first value (or NULL) */ const gchar * metadata_list_get(GSList *metadata, const gchar *strid); /** * Definition of metadata foreach function * * @param key metadata type id * @param value metadata value * @param index metadata list ordering index * @param user_data user data */ typedef void (*metadataForeachFunc) (const gchar *key, const gchar *value, guint index, gpointer user_data); /** * Can be used to iterate over all key/value pairs of the given metadata list. * * @param metadata the metadata list * @param func callback function * @param user_data data to be passed to func */ void metadata_list_foreach(GSList *metadata, metadataForeachFunc func, gpointer user_data); /** * Returns a list of all values of a given type from a specified metadata list. * * @param metadata the metadata list * @param strid the metadata type identifier * * @returns a list of values (or NULL) */ GSList * metadata_list_get_values(GSList *metadata, const gchar *strid); /** * Creates a copy of a given metadata list. * * @param metadata the metadata list * * @returns the new list */ GSList * metadata_list_copy(GSList *list); /** * Frees all memory allocated by the given metadata list. * * @param metadata the metadata list */ void metadata_list_free(GSList *metadata); /** * Adds the given metadata list to a given XML document node. * To be used for saving feed metadata to cache. * * @param metadata the metadata list * @param parentNode the XML node */ void metadata_add_xml_nodes(GSList *metadata, xmlNodePtr parentNode); #endif liferea-1.12.7/src/migrate.c000066400000000000000000000103161352135647700156120ustar00rootroot00000000000000/** * @file migrate.c migration between different cache versions * * Copyright (C) 2007-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "migrate.h" #include #include #include #include "common.h" #include "db.h" #include "debug.h" #include "export.h" /** * Copy a from $HOME//subdir to a target directory /subdir. * * @param from relative base path in $HOME (e.g. ".liferea_1.4") * @param to absolute target base path (e.g. "/home/joe/.config") * @param subdir subdir to copy from source to destination (can be empty string) */ static void migrate_copy_dir (const gchar *from, const gchar *to, const gchar *subdir) { gchar *fromDirname, *toDirname; gchar *srcfile, *destfile; GDir *dir; g_print ("Processing %s%s...\n", from, subdir); fromDirname = g_build_filename (g_get_home_dir (), from, subdir, NULL); toDirname = g_build_filename (to, subdir, NULL); dir = g_dir_open (fromDirname, 0, NULL); while (NULL != (srcfile = (gchar *)g_dir_read_name (dir))) { destfile = g_build_filename (toDirname, srcfile, NULL); srcfile = g_build_filename (fromDirname, srcfile, NULL); if (g_file_test (srcfile, G_FILE_TEST_IS_REGULAR)) { g_print ("copying %s\n to %s\n", srcfile, destfile); common_copy_file (srcfile, destfile); } else { g_print("skipping %s\n", srcfile); } g_free (destfile); g_free (srcfile); } g_dir_close(dir); g_free (fromDirname); g_free (toDirname); } static void migrate_from_14plus (const gchar *oldBaseDir, nodePtr node) { GFile *sourceDbFile, *targetDbFile; gchar *newConfigDir, *newCacheDir, *newDataDir, *oldCacheDir, *filename; g_print("Performing %s -> XDG cache migration...\n", oldBaseDir); /* 1.) Close already loaded DB */ db_deinit (); /* 2.) Copy all files */ newCacheDir = g_build_filename (g_get_user_cache_dir(), "liferea", NULL); newConfigDir = g_build_filename (g_get_user_config_dir(), "liferea", NULL); newDataDir = g_build_filename (g_get_user_data_dir(), "liferea", NULL); oldCacheDir = g_build_filename (oldBaseDir, "cache", NULL); migrate_copy_dir (oldBaseDir, newConfigDir, ""); migrate_copy_dir (oldCacheDir, newCacheDir, G_DIR_SEPARATOR_S "favicons"); migrate_copy_dir (oldCacheDir, newCacheDir, G_DIR_SEPARATOR_S "plugins"); /* 3.) Move DB to from new config dir to cache dir instead (this is caused by the batch copy in step 2.) */ sourceDbFile = g_file_new_for_path (g_build_filename (newConfigDir, "liferea.db", NULL)); targetDbFile = g_file_new_for_path (g_build_filename (newDataDir, "liferea.db", NULL)); g_file_move (sourceDbFile, targetDbFile, G_FILE_COPY_OVERWRITE, NULL, NULL, NULL, NULL); g_object_unref (sourceDbFile); g_object_unref (targetDbFile); /* 3.) And reopen the copied DB */ db_init (); /* 4.) Migrate file feed list into DB */ filename = common_create_config_filename ("feedlist.opml"); if (!import_OPML_feedlist (filename, node, FALSE, TRUE)) g_error ("Fatal: Feed list migration failed!"); g_free (filename); g_free (newConfigDir); g_free (newCacheDir); g_free (oldCacheDir); } void migration_execute (migrationMode mode, nodePtr node) { switch (mode) { case MIGRATION_FROM_14: migrate_from_14plus (".liferea_1.4", node); break; case MIGRATION_FROM_16: migrate_from_14plus (".liferea_1.6", node); break; case MIGRATION_FROM_18: migrate_from_14plus (".liferea_1.8", node); break; case MIGRATION_MODE_INVALID: default: g_error ("Invalid migration mode!"); return; break; } } liferea-1.12.7/src/migrate.h000066400000000000000000000023171352135647700156210ustar00rootroot00000000000000/** * @file migrate.h migration between different cache versions * * Copyright (C) 2007-2011 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _MIGRATE_H #define _MIGRATE_H #include "node.h" typedef enum { MIGRATION_MODE_INVALID = 0, MIGRATION_FROM_14, MIGRATION_FROM_16, MIGRATION_FROM_18 } migrationMode; /** * Performs a migration for the given migration mode. * * @param mode migration mode * @param node feed list root node */ void migration_execute (migrationMode mode, nodePtr node); #endif liferea-1.12.7/src/net.c000066400000000000000000000403111352135647700147460ustar00rootroot00000000000000/** * @file net.c HTTP network access using libsoup * * Copyright (C) 2007-2015 Lars Windolf * Copyright (C) 2009 Emilio Pozuelo Monfort * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "net.h" #include #include #include #include #include #include #include #include "common.h" #include "conf.h" #include "debug.h" #define HOMEPAGE "https://lzone.de/liferea/" static SoupSession *session = NULL; /* Session configured for preferences */ static SoupSession *session2 = NULL; /* Session for "Don't use proxy feature" */ static ProxyDetectMode proxymode = PROXY_DETECT_MODE_AUTO; static gchar *proxyname = NULL; static gchar *proxyusername = NULL; static gchar *proxypassword = NULL; static int proxyport = 0; static void network_process_redirect_callback (SoupMessage *msg, gpointer user_data) { updateJobPtr job = (updateJobPtr)user_data; const gchar *location = NULL; SoupURI *newuri; if (301 == msg->status_code || 308 == msg->status_code) { location = soup_message_headers_get_one (msg->response_headers, "Location"); newuri = soup_uri_new (location); if (SOUP_URI_IS_VALID (newuri) && ! soup_uri_equal (newuri, soup_message_get_uri (msg))) { debug2 (DEBUG_NET, "\"%s\" permanently redirects to new location \"%s\"", soup_uri_to_string (soup_message_get_uri (msg), FALSE), soup_uri_to_string (newuri, FALSE)); job->result->returncode = msg->status_code; job->result->source = soup_uri_to_string (newuri, FALSE); } } } static void network_process_callback (SoupSession *session, SoupMessage *msg, gpointer user_data) { updateJobPtr job = (updateJobPtr)user_data; SoupDate *last_modified; const gchar *tmp = NULL; GHashTable *params; gboolean revalidated = FALSE; gint maxage; gint age; job->result->source = soup_uri_to_string (soup_message_get_uri(msg), FALSE); if (SOUP_STATUS_IS_TRANSPORT_ERROR (msg->status_code)) { job->result->returncode = msg->status_code; job->result->httpstatus = 0; } else { job->result->httpstatus = msg->status_code; } /* keep some request headers for revalidated responses */ revalidated = (304 == job->result->httpstatus); debug1 (DEBUG_NET, "download status code: %d", msg->status_code); debug1 (DEBUG_NET, "source after download: >>>%s<<<", job->result->source); job->result->data = g_memdup (msg->response_body->data, msg->response_body->length+1); job->result->size = (size_t)msg->response_body->length; debug1 (DEBUG_NET, "%d bytes downloaded", job->result->size); job->result->contentType = g_strdup (soup_message_headers_get_content_type (msg->response_headers, NULL)); /* Update last-modified date */ if (revalidated) { job->result->updateState->lastModified = update_state_get_lastmodified (job->request->updateState); } else { tmp = soup_message_headers_get_one (msg->response_headers, "Last-Modified"); if (tmp) { /* The string may be badly formatted, which will make * soup_date_new_from_string() return NULL */ last_modified = soup_date_new_from_string (tmp); if (last_modified) { job->result->updateState->lastModified = soup_date_to_time_t (last_modified); soup_date_free (last_modified); } } } /* Update ETag value */ if (revalidated) { job->result->updateState->etag = g_strdup (update_state_get_etag (job->request->updateState)); } else { tmp = soup_message_headers_get_one (msg->response_headers, "ETag"); if (tmp) { job->result->updateState->etag = g_strdup (tmp); } } /* Update cache max-age */ tmp = soup_message_headers_get_list (msg->response_headers, "Cache-Control"); if (tmp) { params = soup_header_parse_param_list (tmp); if (params) { tmp = g_hash_table_lookup (params, "max-age"); if (tmp) { maxage = atoi (tmp); if (0 < maxage) { /* subtract Age from max-age */ tmp = soup_message_headers_get_one (msg->response_headers, "Age"); if (tmp) { age = atoi (tmp); if (0 < age) { maxage = maxage - age; } } if (0 < maxage) { job->result->updateState->maxAgeMinutes = ceil ( (float) (maxage / 60)); } } } } soup_header_free_param_list (params); } update_process_finished_job (job); } static SoupURI * network_get_proxy_uri (void) { SoupURI *uri = NULL; if (!proxyname) return uri; uri = soup_uri_new (NULL); soup_uri_set_scheme (uri, SOUP_URI_SCHEME_HTTP); soup_uri_set_host (uri, proxyname); soup_uri_set_port (uri, proxyport); soup_uri_set_user (uri, proxyusername); soup_uri_set_password (uri, proxypassword); return uri; } /* Downloads a feed specified in the request structure, returns the downloaded data or NULL in the request structure. If the webserver reports a permanent redirection, the feed url will be modified and the old URL 'll be freed. The request structure will also contain the HTTP status and the last modified string. */ void network_process_request (const updateJobPtr job) { SoupMessage *msg; SoupDate *date; gboolean do_not_track = FALSE; g_assert (NULL != job->request); debug1 (DEBUG_NET, "downloading %s", job->request->source); if (job->request->postdata && (debug_level & DEBUG_VERBOSE) && (debug_level & DEBUG_NET)) debug1 (DEBUG_NET, " postdata=>>>%s<<<", job->request->postdata); /* Prepare the SoupMessage */ msg = soup_message_new (job->request->postdata ? SOUP_METHOD_POST : SOUP_METHOD_GET, job->request->source); if (!msg) { g_warning ("The request for %s could not be parsed!", job->request->source); return; } /* Set the postdata for the request */ if (job->request->postdata) { soup_message_set_request (msg, "application/x-www-form-urlencoded", SOUP_MEMORY_STATIC, /* libsoup won't free the postdata */ job->request->postdata, strlen (job->request->postdata)); } /* Set the If-Modified-Since: header */ if (job->request->updateState && update_state_get_lastmodified (job->request->updateState)) { gchar *datestr; date = soup_date_new_from_time_t (update_state_get_lastmodified (job->request->updateState)); datestr = soup_date_to_string (date, SOUP_DATE_HTTP); soup_message_headers_append (msg->request_headers, "If-Modified-Since", datestr); g_free (datestr); soup_date_free (date); } /* Set the If-None-Match header */ if (job->request->updateState && update_state_get_etag (job->request->updateState)) { soup_message_headers_append(msg->request_headers, "If-None-Match", update_state_get_etag (job->request->updateState)); } /* Set the I-AM header */ if (job->request->updateState && (update_state_get_lastmodified (job->request->updateState) || update_state_get_etag (job->request->updateState))) { soup_message_headers_append(msg->request_headers, "A-IM", "feed"); } /* Support HTTP content negotiation */ soup_message_headers_append(msg->request_headers, "Accept", "application/atom+xml,application/xml;q=0.9,text/xml;q=0.8,*/*;q=0.7"); /* Set the authentication */ if (!job->request->authValue && job->request->options && job->request->options->username && job->request->options->password) { SoupURI *uri = soup_message_get_uri (msg); soup_uri_set_user (uri, job->request->options->username); soup_uri_set_password (uri, job->request->options->password); } if (job->request->authValue) { soup_message_headers_append (msg->request_headers, "Authorization", job->request->authValue); } /* Add requested cookies */ if (job->request->updateState && job->request->updateState->cookies) { soup_message_headers_append (msg->request_headers, "Cookie", job->request->updateState->cookies); soup_message_disable_feature (msg, SOUP_TYPE_COOKIE_JAR); } /* TODO: Right now we send the msg, and if it requires authentication and * we didn't provide one, the petition fails and when the job is processed * it sees it needs authentication and displays a dialog, and if credentials * are entered, it queues a new job with auth credentials. Instead of that, * we should probably handle authentication directly here, connecting the * msg to a callback in case of 401 (see soup_message_add_status_code_handler()) * displaying the dialog ourselves, and requeing the msg if we get credentials */ /* Add Do Not Track header according to settings */ conf_get_bool_value (DO_NOT_TRACK, &do_not_track); if (do_not_track) soup_message_headers_append (msg->request_headers, "DNT", "1"); /* Process permanent redirects (update feed location) */ soup_message_add_status_code_handler (msg, "got_body", 301, (GCallback) network_process_redirect_callback, job); soup_message_add_status_code_handler (msg, "got_body", 308, (GCallback) network_process_redirect_callback, job); /* If the feed has "dont use a proxy" selected, use 'session2' which is non-proxy */ if (job->request->options && job->request->options->dontUseProxy) soup_session_queue_message (session2, msg, network_process_callback, job); else soup_session_queue_message (session, msg, network_process_callback, job); } static void network_authenticate ( SoupSession *session, SoupMessage *msg, SoupAuth *auth, gboolean retrying, gpointer data) { if (!retrying && msg->status_code == SOUP_STATUS_PROXY_UNAUTHORIZED) { soup_auth_authenticate (auth, g_strdup (proxyusername), g_strdup (proxypassword)); } // FIXME: Handle HTTP 401 too } static void network_set_soup_session_proxy (SoupSession *session, ProxyDetectMode mode, const gchar *host, guint port, const gchar *user, const gchar *password) { SoupURI *uri = NULL; switch (mode) { case PROXY_DETECT_MODE_AUTO: /* Sets proxy-resolver to the default resolver, this unsets proxy-uri. */ g_object_set (G_OBJECT (session), SOUP_SESSION_PROXY_RESOLVER, g_proxy_resolver_get_default (), NULL); break; case PROXY_DETECT_MODE_NONE: /* Sets proxy-resolver to NULL, this unsets proxy-uri. */ g_object_set (G_OBJECT (session), SOUP_SESSION_PROXY_RESOLVER, NULL, NULL); break; case PROXY_DETECT_MODE_MANUAL: uri = soup_uri_new (NULL); soup_uri_set_scheme (uri, SOUP_URI_SCHEME_HTTP); soup_uri_set_host (uri, host); soup_uri_set_port (uri, port); soup_uri_set_user (uri, user); soup_uri_set_password (uri, password); soup_uri_set_path (uri, "/"); if (SOUP_URI_IS_VALID (uri)) { /* Sets proxy-uri, this unsets proxy-resolver. */ g_object_set (G_OBJECT (session), SOUP_SESSION_PROXY_URI, uri, NULL); } soup_uri_free (uri); break; } } void network_init (void) { gchar *useragent; SoupCookieJar *cookies; gchar *filename; SoupLogger *logger; /* Set an appropriate user agent, * e.g. "Liferea/1.10.0 (Linux; https://lzone.de/liferea/) AppleWebKit (KHTML, like Gecko)" */ useragent = g_strdup_printf ("Liferea/%s (%s; %s) AppleWebKit (KHTML, like Gecko)", VERSION, OSNAME, HOMEPAGE); /* Session cookies */ filename = common_create_config_filename ("session_cookies.txt"); cookies = soup_cookie_jar_text_new (filename, TRUE); g_free (filename); /* Initialize libsoup */ session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, useragent, SOUP_SESSION_TIMEOUT, 120, SOUP_SESSION_IDLE_TIMEOUT, 30, SOUP_SESSION_ADD_FEATURE, cookies, SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_CONTENT_DECODER, NULL); session2 = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, useragent, SOUP_SESSION_TIMEOUT, 120, SOUP_SESSION_IDLE_TIMEOUT, 30, SOUP_SESSION_ADD_FEATURE, cookies, SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_CONTENT_DECODER, SOUP_SESSION_PROXY_URI, NULL, SOUP_SESSION_PROXY_RESOLVER, NULL, NULL); /* Only 'session' gets proxy, 'session2' is for non-proxy requests */ network_set_soup_session_proxy (session, network_get_proxy_detect_mode(), network_get_proxy_host (), network_get_proxy_port (), network_get_proxy_username (), network_get_proxy_password ()); g_signal_connect (session, "authenticate", G_CALLBACK (network_authenticate), NULL); /* Soup debugging */ if (debug_level & DEBUG_NET) { logger = soup_logger_new (SOUP_LOGGER_LOG_HEADERS, -1); soup_session_add_feature (session, SOUP_SESSION_FEATURE (logger)); } g_free (useragent); } void network_deinit (void) { g_free (proxyname); g_free (proxyusername); g_free (proxypassword); } ProxyDetectMode network_get_proxy_detect_mode (void) { return proxymode; } const gchar * network_get_proxy_host (void) { return proxyname; } guint network_get_proxy_port (void) { return proxyport; } const gchar * network_get_proxy_username (void) { return proxyusername; } const gchar * network_get_proxy_password (void) { return proxypassword; } extern void network_monitor_proxy_changed (void); void network_set_proxy (ProxyDetectMode mode, gchar *host, guint port, gchar *user, gchar *password) { g_free (proxyname); g_free (proxyusername); g_free (proxypassword); proxymode = mode; proxyname = host; proxyport = port; proxyusername = user; proxypassword = password; /* session will be NULL if we were called from conf_init() as that's called * before net_init() */ if (session) network_set_soup_session_proxy (session, mode, host, port, user, password); debug4 (DEBUG_NET, "proxy set to http://%s:%s@%s:%d", user, password, host, port); network_monitor_proxy_changed (); } const char * network_strerror (gint netstatus, gint httpstatus) { const gchar *tmp = NULL; int status = netstatus?netstatus:httpstatus; switch (status) { /* Some libsoup transport errors */ case SOUP_STATUS_NONE: tmp = _("The update request was cancelled"); break; case SOUP_STATUS_CANT_RESOLVE: tmp = _("Unable to resolve destination host name"); break; case SOUP_STATUS_CANT_RESOLVE_PROXY: tmp = _("Unable to resolve proxy host name"); break; case SOUP_STATUS_CANT_CONNECT: tmp = _("Unable to connect to remote host"); break; case SOUP_STATUS_CANT_CONNECT_PROXY: tmp = _("Unable to connect to proxy"); break; case SOUP_STATUS_SSL_FAILED: tmp = _("A network error occurred, or the other end closed the connection unexpectedly"); break; /* http 3xx redirection */ case SOUP_STATUS_MOVED_PERMANENTLY: tmp = _("The resource moved permanently to a new location"); break; /* http 4xx client error */ case SOUP_STATUS_UNAUTHORIZED: tmp = _("You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box"); break; case SOUP_STATUS_PAYMENT_REQUIRED: tmp = _("Payment required"); break; case SOUP_STATUS_FORBIDDEN: tmp = _("You're not allowed to access this resource"); break; case SOUP_STATUS_NOT_FOUND: tmp = _("Resource Not Found"); break; case SOUP_STATUS_METHOD_NOT_ALLOWED: tmp = _("Method Not Allowed"); break; case SOUP_STATUS_NOT_ACCEPTABLE: tmp = _("Not Acceptable"); break; case SOUP_STATUS_PROXY_UNAUTHORIZED: tmp = _("Proxy authentication required"); break; case SOUP_STATUS_REQUEST_TIMEOUT: tmp = _("Request timed out"); break; case SOUP_STATUS_GONE: tmp = _("Gone. Resource doesn't exist. Please unsubscribe!"); break; } if (!tmp) { if (SOUP_STATUS_IS_TRANSPORT_ERROR (status)) { tmp = _("There was an internal error in the update process"); } else if (SOUP_STATUS_IS_REDIRECTION (status)) { tmp = _("Feed not available: Server requested unsupported redirection!"); } else if (SOUP_STATUS_IS_CLIENT_ERROR (status)) { tmp = _("Client Error"); } else if (SOUP_STATUS_IS_SERVER_ERROR (status)) { tmp = _("Server Error"); } else { tmp = _("An unknown networking error happened!"); } } g_assert (tmp); return tmp; } liferea-1.12.7/src/net.h000066400000000000000000000056071352135647700147640ustar00rootroot00000000000000/** * @file net.h HTTP network access interface * * Copyright (C) 2007-2009 Lars Windolf * Copyright (C) 2009 Emilio Pozuelo Monfort * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NET_H #define _NET_H #include #include "update.h" /* Simple glue layer to abstract network code */ /** * Initialize HTTP client networking support. */ void network_init (void); /** * Cleanup HTTP client networking support. */ void network_deinit (void); typedef enum { PROXY_DETECT_MODE_AUTO = 0, /* Use system settings */ PROXY_DETECT_MODE_NONE, /* No Proxy */ PROXY_DETECT_MODE_MANUAL /* Manually configured proxy */ } ProxyDetectMode; /** * Configures the network client to use the given proxy * settings. If the host name is NULL then no proxy will * be used. * * @param mode indicate whether to use the system setting, no proxy or the following parameters. * @param host the new proxy host * @param port the new proxy port * @param user the new proxy username or NULL * @param password the new proxy password or NULL */ void network_set_proxy (ProxyDetectMode mode, gchar *host, guint port, gchar *user, gchar *password); /** * Returns the proxy detect mode. * */ ProxyDetectMode network_get_proxy_detect_mode (void); /** * Returns the currently configured proxy host. * * @returns the proxy host */ const gchar * network_get_proxy_host (void); /** * Returns the currently configured proxy port. * * @returns the proxy port */ guint network_get_proxy_port (void); /** * Returns the currently configured proxy user name * * @returns the proxy user name (or NULL) */ const gchar * network_get_proxy_username (void); /** * Returns the currently configured proxy password. * * @returns the proxy password (or NULL) */ const gchar * network_get_proxy_password (void); /** * Process the given update job. * * @param request the update request */ void network_process_request (const updateJobPtr const job); /** * Returns explanation string for the given network error code. * * @param netstatus network error status * @param httpstatus HTTP status code * * @returns explanation string */ const char * network_strerror (gint netstatus, gint httpstatus); #endif liferea-1.12.7/src/net_monitor.c000066400000000000000000000130061352135647700165160ustar00rootroot00000000000000/** * @file network_monitor.c network status monitor * * Copyright (C) 2009 Lars Windolf * Copyright (C) 2010 Emilio Pozuelo Monfort * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "net_monitor.h" #include #include "debug.h" #include "net.h" struct NetworkMonitorPrivate { GDBusConnection *conn; guint subscription_id; gboolean online; }; G_DEFINE_TYPE (NetworkMonitor, network_monitor, G_TYPE_OBJECT) enum { ONLINE_STATUS_CHANGED, PROXY_CHANGED, LAST_SIGNAL }; static guint network_monitor_signals[LAST_SIGNAL] = { 0 }; static GObjectClass *parent_class = NULL; static NetworkMonitor *network_monitor = NULL; static void network_monitor_finalize (GObject *object) { NetworkMonitor *self = NETWORK_MONITOR (object); debug0 (DEBUG_NET, "network manager: unregistering network state change callback"); if (self->priv->conn && self->priv->subscription_id) { g_dbus_connection_signal_unsubscribe (self->priv->conn, self->priv->subscription_id); } network_deinit (); G_OBJECT_CLASS (parent_class)->finalize (object); } static void network_monitor_class_init (NetworkMonitorClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = network_monitor_finalize; network_monitor_signals [ONLINE_STATUS_CHANGED] = g_signal_new ("online-status-changed", G_OBJECT_CLASS_TYPE (object_class), (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION), 0, NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN); network_monitor_signals [PROXY_CHANGED] = g_signal_new ("proxy-changed", G_OBJECT_CLASS_TYPE (object_class), (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION), 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); g_type_class_add_private (object_class, sizeof (NetworkMonitorPrivate)); } static gboolean is_nm_connected (guint state) { if (state == 60 || /* NM_STATE_CONNECTED_SITE */ state == 70) /* NM_STATE_CONNECTED_GLOBAL */ return TRUE; return FALSE; } static void on_network_state_changed_cb (GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data) { gboolean online = network_monitor_is_online (); guint state; g_variant_get (parameters, "(u)", &state); if (online && !is_nm_connected (state)) { debug0 (DEBUG_NET, "network manager: no network connection -> going offline"); network_monitor_set_online (FALSE); } else if (!online && is_nm_connected (state)) { debug0 (DEBUG_NET, "network manager: active connection -> going online"); network_monitor_set_online (TRUE); } } void network_monitor_set_online (gboolean mode) { if (network_monitor->priv->online != mode) { network_monitor->priv->online = mode; debug1 (DEBUG_NET, "Changing online mode to %s", mode?"online":"offline"); g_signal_emit (network_monitor, network_monitor_signals[ONLINE_STATUS_CHANGED], 0, mode); } } gboolean network_monitor_is_online (void) { if (!network_monitor) return FALSE; return network_monitor->priv->online; } void network_monitor_proxy_changed (void) { if (!network_monitor) return; g_signal_emit (network_monitor, network_monitor_signals[PROXY_CHANGED], 0, NULL); } static void on_bus_get_cb (GObject *source_object, GAsyncResult *result, gpointer user_data) { NetworkMonitor *self = NETWORK_MONITOR (user_data); GError *error = NULL; self->priv->conn = g_bus_get_finish (result, &error); if (!self->priv->conn) { debug1 (DEBUG_NET, "Could not connect to system bus: %s", error->message); g_error_free (error); return; } g_dbus_connection_set_exit_on_close (self->priv->conn, FALSE); debug0 (DEBUG_NET, "network manager: connecting to StateChanged signal"); self->priv->subscription_id = g_dbus_connection_signal_subscribe (self->priv->conn, "org.freedesktop.NetworkManager", "org.freedesktop.NetworkManager", "StateChanged", NULL, NULL, G_DBUS_SIGNAL_FLAGS_NONE, on_network_state_changed_cb, self, NULL); debug1 (DEBUG_NET, "network manager: connected to StateChanged signal: %s", self->priv->subscription_id ? "yes" : "no"); } static void network_monitor_init (NetworkMonitor *nm) { nm->priv = G_TYPE_INSTANCE_GET_PRIVATE (nm, NETWORK_MONITOR_TYPE, NetworkMonitorPrivate); nm->priv->online = TRUE; /* For now accessing the network monitor also sets up the network! */ network_init (); g_bus_get (G_BUS_TYPE_SYSTEM, NULL, on_bus_get_cb, nm); } NetworkMonitor * network_monitor_get (void) { if (G_UNLIKELY (!network_monitor)) network_monitor = NETWORK_MONITOR (g_object_new (NETWORK_MONITOR_TYPE, NULL)); return network_monitor; } liferea-1.12.7/src/net_monitor.h000066400000000000000000000046561352135647700165360ustar00rootroot00000000000000/** * @file network_monitor.c network status monitor * * Copyright (C) 2009 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NETWORK_MONITOR_H #define _NETWORK_MONITOR_H #include #include G_BEGIN_DECLS typedef struct NetworkMonitor NetworkMonitor; typedef struct NetworkMonitorClass NetworkMonitorClass; typedef struct NetworkMonitorPrivate NetworkMonitorPrivate; struct NetworkMonitor { GObject parent; /*< private >*/ NetworkMonitorPrivate *priv; }; struct NetworkMonitorClass { GObjectClass parent; }; GType network_monitor_get_type (void); #define NETWORK_MONITOR_TYPE (network_monitor_get_type ()) #define NETWORK_MONITOR(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), NETWORK_MONITOR_TYPE, NetworkMonitor)) #define NETWORK_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NETWORK_MONITOR_TYPE, NetworkMonitorClass)) #define IS_NETWORK_MONITOR(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), NETWORK_MONITOR_TYPE)) #define IS_NETWORK_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NETWORK_MONITOR_TYPE)) #define NETWORK_MONITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NETWORK_MONITOR_TYPE, NetworkMonitorClass)) /** * Returns the network monitor object. Creates it if * necessary first. * * @returns the network monitor */ NetworkMonitor* network_monitor_get (void); /** * Sets the online status according to mode. * * @param mode TRUE for online, FALSE for offline */ void network_monitor_set_online (gboolean mode); /** * Queries the online status. * * @return TRUE if online */ gboolean network_monitor_is_online (void); /** * Called by networking when proxy was changed. */ void network_monitor_proxy_changed (void); #endif liferea-1.12.7/src/newsbin.c000066400000000000000000000117531352135647700156350ustar00rootroot00000000000000/** * @file newsbin.c news bin node type implementation * * Copyright (C) 2006-2016 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "newsbin.h" #include #include "common.h" #include "db.h" #include "feed.h" #include "feedlist.h" #include "itemlist.h" #include "metadata.h" #include "render.h" #include "ui/icons.h" #include "ui/feed_list_node.h" #include "ui/liferea_dialog.h" static GtkWidget *newnewsbindialog = NULL; static GSList * newsbin_list = NULL; GSList * newsbin_get_list (void) { return newsbin_list; } static void newsbin_import (nodePtr node, nodePtr parent, xmlNodePtr cur, gboolean trusted) { feed_get_node_type ()->import (node, parent, cur, trusted); /* but we don't need a subscription (created by feed_import()) */ g_free (node->subscription); node->subscription = NULL; ((feedPtr)node->data)->cacheLimit = CACHE_UNLIMITED; newsbin_list = g_slist_append(newsbin_list, node); } static void newsbin_remove (nodePtr node) { newsbin_list = g_slist_remove(newsbin_list, node); feed_get_node_type()->remove(node); } static gchar * newsbin_render (nodePtr node) { gchar *output = NULL; xmlDocPtr doc; doc = feed_to_xml(node, NULL); output = render_xml(doc, "newsbin", NULL); xmlFreeDoc(doc); return output; } static gboolean ui_newsbin_add (void) { GtkWidget *nameentry; if (!newnewsbindialog || !G_IS_OBJECT (newnewsbindialog)) newnewsbindialog = liferea_dialog_new ("new_newsbin"); nameentry = liferea_dialog_lookup (newnewsbindialog, "newsbinnameentry"); gtk_entry_set_text (GTK_ENTRY (nameentry), ""); gtk_window_present (GTK_WINDOW (newnewsbindialog)); return TRUE; } void on_newnewsbinbtn_clicked (GtkButton *button, gpointer user_data) { nodePtr newsbin; newsbin = node_new (newsbin_get_node_type ()); node_set_title (newsbin, (gchar *)gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (newnewsbindialog, "newsbinnameentry")))); node_set_data (newsbin, (gpointer)feed_new ()); newsbin_list = g_slist_append(newsbin_list, newsbin); feedlist_node_added (newsbin); } void on_action_copy_to_newsbin (GSimpleAction *action, GVariant *parameter, gpointer user_data) { nodePtr newsbin; itemPtr item = NULL, copy; guint32 newsbin_index; guint64 item_id; gboolean maybe_item_id; g_variant_get (parameter, "(umt)", &newsbin_index, &maybe_item_id, &item_id); if (maybe_item_id) item = item_load (item_id); else item = itemlist_get_selected(); newsbin = g_slist_nth_data(newsbin_list, newsbin_index); if(item) { copy = item_copy(item); copy->nodeId = newsbin->id; /* necessary to become independent of original item */ copy->parentNodeId = g_strdup (item->nodeId); /* To avoid item doubling in vfolders we reset simple vfolder match attributes */ copy->readStatus = TRUE; copy->flagStatus = FALSE; /* To provide a hint in the rendered output what the orginial feed was the original website link/title are added */ if(!metadata_list_get (copy->metadata, "realSourceUrl")) metadata_list_set (&(copy->metadata), "realSourceUrl", node_get_base_url(node_from_id(item->nodeId))); if(!metadata_list_get (copy->metadata, "realSourceTitle")) metadata_list_set (&(copy->metadata), "realSourceTitle", node_get_title(node_from_id(item->nodeId))); /* do the same as in node_merge_item(s) */ db_item_update(copy); node_update_counters(newsbin); } } nodeTypePtr newsbin_get_node_type (void) { static nodeTypePtr nodeType; if (!nodeType) { /* derive the plugin node type from the folder node type */ nodeType = g_new0 (struct nodeType, 1); nodeType->capabilities = NODE_CAPABILITY_RECEIVE_ITEMS | NODE_CAPABILITY_SHOW_UNREAD_COUNT | NODE_CAPABILITY_SHOW_ITEM_COUNT; nodeType->id = "newsbin"; nodeType->icon = icon_get (ICON_NEWSBIN); nodeType->load = feed_get_node_type()->load; nodeType->import = newsbin_import; nodeType->export = feed_get_node_type()->export; nodeType->save = feed_get_node_type()->save; nodeType->update_counters = feed_get_node_type()->update_counters; nodeType->remove = newsbin_remove; nodeType->render = newsbin_render; nodeType->request_add = ui_newsbin_add; nodeType->request_properties = feed_list_node_rename; nodeType->free = feed_get_node_type()->free; } return nodeType; } liferea-1.12.7/src/newsbin.h000066400000000000000000000034621352135647700156400ustar00rootroot00000000000000/** * @file newsbin.h news bin node type implementation * * Copyright (C) 2006 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NEWSBIN_H #define _NEWSBIN_H #include #include "node_type.h" /** * Returns a list of the names of all news bins */ GSList * newsbin_get_list(void); /* UI callbacks */ void on_newnewsbinbtn_clicked(GtkButton *button, gpointer user_data); /** * on_action_copy_to_newsbin: (skip) * @action: the action that emitted the signal * @parameter: a GVariant of type "(umt)", first value is the index of the * newsbin in the list, second is optionnal item id. If no item id is * given the selected item is used. * @user_data: unused * * Activate callback for the "copy-item-to-newsbin" action. * Copy the selected item to the specified newsbin. */ void on_action_copy_to_newsbin(GSimpleAction *action, GVariant *parameter, gpointer user_data); /* implementation of the node type interface */ #define IS_NEWSBIN(node) (node->type == newsbin_get_node_type ()) /** * Returns the news bin node type implementation. */ nodeTypePtr newsbin_get_node_type (void); #endif liferea-1.12.7/src/node.c000066400000000000000000000312361352135647700151130ustar00rootroot00000000000000/* * @file node.c hierarchic feed list node handling * * Copyright (C) 2003-2016 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "common.h" #include "conf.h" #include "db.h" #include "debug.h" #include "favicon.h" #include "feedlist.h" #include "itemlist.h" #include "itemset.h" #include "item_state.h" #include "node.h" #include "node_view.h" #include "render.h" #include "update.h" #include "vfolder.h" #include "fl_sources/node_source.h" #include "ui/liferea_shell.h" #include "ui/feed_list_node.h" static GHashTable *nodes = NULL; /*<< node id -> node lookup table */ #define NODE_ID_LEN 7 nodePtr node_is_used_id (const gchar *id) { if (!id || !nodes) return NULL; return (nodePtr)g_hash_table_lookup (nodes, id); } gchar * node_new_id (void) { gchar *id; id = g_new0 (gchar, NODE_ID_LEN + 1); do { int i; for (i = 0; i < NODE_ID_LEN; i++) id[i] = (gchar)g_random_int_range ('a', 'z'); } while (NULL != node_is_used_id (id)); return id; } nodePtr node_from_id (const gchar *id) { nodePtr node; node = node_is_used_id (id); if (!node) debug1 (DEBUG_GUI, "Fatal: no node with id \"%s\" found!", id); return node; } nodePtr node_new (nodeTypePtr type) { nodePtr node; gchar *id; g_assert (NULL != type); node = g_new0 (struct node, 1); node->type = type; node->viewMode = NODE_VIEW_MODE_DEFAULT; node->sortColumn = NODE_VIEW_SORT_BY_TIME; node->sortReversed = TRUE; /* default sorting is newest date at top */ node->available = TRUE; id = node_new_id (); node_set_id (node, id); g_free (id); return node; } void node_set_data (nodePtr node, gpointer data) { g_assert (NULL == node->data); g_assert (NULL != node->type); node->data = data; } void node_set_subscription (nodePtr node, subscriptionPtr subscription) { g_assert (NULL == node->subscription); g_assert (NULL != node->type); node->subscription = subscription; subscription->node = node; /* Besides the favicon age we have no persistent update state field, so everything else goes NULL */ if (node->iconFile && !strstr(node->iconFile, "default.png")) { subscription->updateState->lastFaviconPoll.tv_sec = common_get_mod_time (node->iconFile); debug2 (DEBUG_UPDATE, "Setting last favicon poll time for %s to %lu", node->id, subscription->updateState->lastFaviconPoll.tv_sec); } } void node_update_subscription (nodePtr node, gpointer user_data) { if (node->source->root == node) { node_source_update (node); return; } if (node->subscription) subscription_update (node->subscription, GPOINTER_TO_UINT (user_data)); node_foreach_child_data (node, node_update_subscription, user_data); } void node_auto_update_subscription (nodePtr node) { if (node->source->root == node) { node_source_auto_update (node); return; } if (node->subscription) subscription_auto_update (node->subscription); node_foreach_child (node, node_auto_update_subscription); } void node_reset_update_counter (nodePtr node, GTimeVal *now) { subscription_reset_update_counter (node->subscription, now); node_foreach_child_data (node, node_reset_update_counter, now); } gboolean node_is_ancestor (nodePtr node1, nodePtr node2) { nodePtr tmp; tmp = node2->parent; while (tmp) { if (node1 == tmp) return TRUE; tmp = tmp->parent; } return FALSE; } void node_free (nodePtr node) { if (node->data && NODE_TYPE (node)->free) NODE_TYPE (node)->free (node); g_assert (NULL == node->children); g_hash_table_remove (nodes, node->id); update_job_cancel_by_owner (node); if (node->subscription) subscription_free (node->subscription); if (node->icon) g_object_unref (node->icon); g_free (node->iconFile); g_free (node->title); g_free (node->id); g_free (node); } static void node_calc_counters (nodePtr node) { /* Order is important! First update all children so that hierarchical nodes (folders and feed list sources) can determine their own unread count as the sum of all childs afterwards */ node_foreach_child (node, node_calc_counters); NODE_TYPE (node)->update_counters (node); } static void node_update_parent_counters (nodePtr node) { guint old; if (!node) return; old = node->unreadCount; NODE_TYPE (node)->update_counters (node); if (old != node->unreadCount) { feed_list_node_update (node->id); feedlist_new_items (0); /* add 0 new items, as 'new-items' signal updates unread items also */ } if (node->parent) node_update_parent_counters (node->parent); } void node_update_counters (nodePtr node) { guint oldUnreadCount = node->unreadCount; guint oldItemCount = node->itemCount; /* Update the node itself and its children */ node_calc_counters (node); if ((oldUnreadCount != node->unreadCount) || (oldItemCount != node->itemCount)) feed_list_node_update (node->id); /* Update the unread count of the parent nodes, usually they just add all child unread counters */ if (!IS_VFOLDER (node)) node_update_parent_counters (node->parent); } void node_update_favicon (nodePtr node) { if (NODE_TYPE (node)->capabilities & NODE_CAPABILITY_UPDATE_FAVICON) { debug1 (DEBUG_UPDATE, "favicon of node %s needs to be updated...", node->title); subscription_update_favicon (node->subscription); } /* Recursion */ if (node->children) node_foreach_child (node, node_update_favicon); } itemSetPtr node_get_itemset (nodePtr node) { return NODE_TYPE (node)->load (node); } void node_mark_all_read (nodePtr node) { if (!node) return; if ((node->unreadCount > 0) || (IS_VFOLDER (node))) { itemset_mark_read (node); node->unreadCount = 0; node->needsUpdate = TRUE; } if (node->children) node_foreach_child (node, node_mark_all_read); } gchar * node_render(nodePtr node) { return NODE_TYPE (node)->render (node); } /* import callbacks and helper functions */ void node_set_parent (nodePtr node, nodePtr parent, gint position) { g_assert (NULL != parent); parent->children = g_slist_insert (parent->children, node, position); node->parent = parent; /* new nodes may be provided by another node source, if not they are handled by the parents node source */ if (!node->source) node->source = parent->source; } void node_reparent (nodePtr node, nodePtr new_parent) { nodePtr old_parent; g_assert (NULL != new_parent); g_assert (NULL != node); debug2 (DEBUG_GUI, "Reparenting node '%s' to a parent '%s'", node_get_title(node), node_get_title(new_parent)); old_parent = node->parent; if (NULL != old_parent) old_parent->children = g_slist_remove (old_parent->children, node); new_parent->children = g_slist_insert (new_parent->children, node, -1); node->parent = new_parent; feed_list_node_remove_node (node); feed_list_node_add (node); } void node_remove (nodePtr node) { /* using itemlist_remove_all_items() ensures correct unread and item counters for all parent folders and matching search folders */ itemlist_remove_all_items (node); NODE_TYPE (node)->remove (node); } static xmlDocPtr node_to_xml (nodePtr node) { xmlDocPtr doc; xmlNodePtr rootNode; gchar *tmp; doc = xmlNewDoc("1.0"); rootNode = xmlNewDocNode(doc, NULL, "node", NULL); xmlDocSetRootElement(doc, rootNode); xmlNewTextChild(rootNode, NULL, "title", node_get_title(node)); tmp = g_strdup_printf("%u", node->unreadCount); xmlNewTextChild(rootNode, NULL, "unreadCount", tmp); g_free(tmp); tmp = g_strdup_printf("%u", g_slist_length(node->children)); xmlNewTextChild(rootNode, NULL, "children", tmp); g_free(tmp); return doc; } gchar * node_default_render (nodePtr node) { gchar *result; xmlDocPtr doc; doc = node_to_xml (node); result = render_xml (doc, NODE_TYPE(node)->id, NULL); xmlFreeDoc (doc); return result; } /* helper functions to be used with node_foreach* */ void node_save(nodePtr node) { NODE_TYPE(node)->save(node); } /* node attributes encapsulation */ void node_set_title (nodePtr node, const gchar *title) { g_free (node->title); node->title = g_strstrip (g_strdelimit (g_strdup (title), "\r\n", ' ')); } const gchar * node_get_title (nodePtr node) { return node->title; } void node_load_icon (nodePtr node) { /* Load pixbuf for all widget based rendering */ if (node->icon) g_object_unref (node->icon); node->icon = favicon_load_from_cache (node->id, 32); /* Create filename for HTML rendering */ g_free (node->iconFile); if (node->icon) node->iconFile = common_create_cache_filename ("favicons", node->id, "png"); else node->iconFile = g_build_filename (PACKAGE_DATA_DIR, PACKAGE, "pixmaps", "default.png", NULL); } /* determines the nodes favicon or default icon */ gpointer node_get_icon (nodePtr node) { if (!node->icon) return (gpointer) NODE_TYPE(node)->icon; return node->icon; } const gchar * node_get_favicon_file (nodePtr node) { return node->iconFile; } void node_set_id (nodePtr node, const gchar *id) { if (!nodes) nodes = g_hash_table_new(g_str_hash, g_str_equal); if (node->id) { g_hash_table_remove (nodes, node->id); g_free (node->id); } node->id = g_strdup (id); g_hash_table_insert (nodes, node->id, node); } const gchar * node_get_id (nodePtr node) { return node->id; } gboolean node_set_sort_column (nodePtr node, nodeViewSortType sortColumn, gboolean reversed) { if (node->sortColumn == sortColumn && node->sortReversed == reversed) return FALSE; node->sortColumn = sortColumn; node->sortReversed = reversed; return TRUE; } void node_set_view_mode (nodePtr node, nodeViewType viewMode) { gint defaultViewMode; /* To allow users to select a default viewing mode for the layout we need to store only exceptions from this mode, which is why we compare the mode to be set with the default and if it's equal we just set NODE_VIEW_MODE_DEFAULT. This allows to not OPML export the viewMode attribute for nodes the are in default viewing mode, which then allows to follow a switch in the preference to a new default viewing mode. This of course also means that the we use some state on each changing of the view mode preference. */ conf_get_int_value (DEFAULT_VIEW_MODE, &defaultViewMode); if (viewMode != (nodeViewType)defaultViewMode) node->viewMode = viewMode; else node->viewMode = NODE_VIEW_MODE_DEFAULT; } nodeViewType node_get_view_mode (nodePtr node) { gint defaultViewMode; conf_get_int_value (DEFAULT_VIEW_MODE, &defaultViewMode); if (NODE_VIEW_MODE_DEFAULT == node->viewMode) return defaultViewMode; else return node->viewMode; } const gchar * node_get_base_url(nodePtr node) { const gchar *baseUrl = NULL; if (node->subscription) { baseUrl = subscription_get_homepage (node->subscription); if (!baseUrl) baseUrl = subscription_get_source (node->subscription); } /* prevent feed scraping commands to end up as base URI */ if (!((baseUrl != NULL) && (baseUrl[0] != '|') && (strstr(baseUrl, "://") != NULL))) baseUrl = NULL; return baseUrl; } gboolean node_can_add_child_feed (nodePtr node) { g_assert (node->source->root); if (!(NODE_TYPE (node->source->root)->capabilities & NODE_CAPABILITY_ADD_CHILDS)) return FALSE; return (NODE_SOURCE_TYPE (node)->capabilities & NODE_SOURCE_CAPABILITY_ADD_FEED); } gboolean node_can_add_child_folder (nodePtr node) { g_assert (node->source->root); if (!(NODE_TYPE (node->source->root)->capabilities & NODE_CAPABILITY_ADD_CHILDS)) return FALSE; return (NODE_SOURCE_TYPE (node)->capabilities & NODE_SOURCE_CAPABILITY_ADD_FOLDER); } /* node children iterating interface */ void node_foreach_child_full (nodePtr node, gpointer func, gint params, gpointer user_data) { GSList *children, *iter; g_assert (NULL != node); /* We need to copy because func might modify the list */ iter = children = g_slist_copy (node->children); while (iter) { nodePtr childNode = (nodePtr)iter->data; /* Apply the method to the child */ if (0 == params) ((nodeActionFunc)func) (childNode); else ((nodeActionDataFunc)func) (childNode, user_data); /* Never descend! */ iter = g_slist_next (iter); } g_slist_free (children); } liferea-1.12.7/src/node.h000066400000000000000000000306411352135647700151170ustar00rootroot00000000000000/* * @file node.h hierarchic feed list node interface * * Copyright (C) 2003-2015 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NODE_H #define _NODE_H #include "itemset.h" #include "node_view.h" /* Liferea's GUI consists of three parts. Feed list, item list and HTML view. The feed list is a view of some or all available nodes. The feed list allows nodes of different types defining different UI behaviours. According to the node's type this interface propagates user interaction to the feed list node type implementation and allows the implementation to change the nodes state. This interface is to hide the node type and node source type complexity for the GUI, scripting and updating functionality. */ /* generic feed list node structure */ typedef struct node { gpointer data; /*<< node type specific data structure */ struct subscription *subscription; /*<< subscription attached to this node (or NULL) */ struct nodeType *type; /*<< node type implementation */ struct nodeSource *source; /*<< the feed list source handling this node */ gchar *iconFile; /*<< the path of the favicon file */ /* feed list state properties of this node */ struct node *parent; /*<< the parent node (or NULL if at root level) */ GSList *children; /*<< ordered list of node children */ gchar *id; /*<< unique node identifier string */ guint itemCount; /*<< number of items */ guint unreadCount; /*<< number of unread items */ guint popupCount; /*<< number of items to be notified */ guint newCount; /*<< number of recently downloaded items */ gchar *title; /*<< the label of the node in the feed list */ gpointer icon; /*<< favicon GdkPixBuf (or NULL) */ gboolean available; /*<< availability of this node (usually the last downloading state) */ gboolean expanded; /*<< expansion state (for nodes with childs) */ /* item list state properties of this node */ nodeViewType viewMode; /*<< Viewing mode for this node (one of NODE_VIEW_MODE_*) */ nodeViewSortType sortColumn; /*<< Node specific item view sort attribute. */ gboolean sortReversed; /*<< Sort in the reverse order? */ /* rendering behaviour of this node */ gboolean loadItemLink; /*<< if TRUE do automatically load the item link into the HTML pane */ /* current state of this node */ gboolean needsUpdate; /*<< if TRUE: the item list has changed and the nodes feed list representation needs to be updated */ gboolean needsRecount; /*<< if TRUE: the number of unread/total items is currently unknown and needs recounting */ } *nodePtr; /** * node_new: (skip) * Creates a new node structure. * * Returns: (transfer full): the new node */ nodePtr node_new (struct nodeType *type); /** * node_is_used_id: (skip) * @id: the node id to check * * Can be used to check whether an id is used or not. * * Returns: (transfer none) (nullable): the node with the given id (or NULL) */ nodePtr node_is_used_id (const gchar *id); /** * node_from_id: (skip) * @id: the node id to look up * * Node lookup by node id. Will report an error if the queried * id does not exist. * * Returns: (transfer none) (nullable): the node with the given id (or NULL) */ nodePtr node_from_id (const gchar *id); /** * node_set_parent: (skip) * @node: the node * @parent: (nullable): the parent node (optional can be NULL) * @position: insert position (optional can be 0) * * Sets a nodes parent. If no parent node is given the * parent node of the currently selected feed or the * selected folder will be used. * * To be used before calling feedlist_node_added() */ void node_set_parent (nodePtr node, nodePtr parent, gint position); /** * node_reparent: (skip) * @node: the node * @new_parent: nodes new parent * * Set a node's new parent and update UI. If a node already has a parent, * it will be removed from its parent children list. */ void node_reparent (nodePtr node, nodePtr new_parent); /** * node_remove: (skip) * @node: the node * * Removes all data associated with the given node. */ void node_remove (nodePtr node); /** * node_set_data: (skip) * @node: the node to attach to * @data: the structure * * Attaches a data structure to the given node. */ void node_set_data(nodePtr node, gpointer data); /** * node_set_subscription: (skip) * @node: the node * @subscription: the subscription * * Attaches the subscription to the given node. */ void node_set_subscription (nodePtr node, struct subscription *subscription); /** * node_update_subscription: (skip) * @node: the node * @user_data: update flags * * Helper function to be used with node_foreach_child() * to mass-update subscriptions. */ void node_update_subscription (nodePtr node, gpointer user_data); /** * node_auto_update_subscription: (skip) * @node: the node * * Helper function to be used with node_foreach_child() * to mass-auto-update subscriptions. */ void node_auto_update_subscription (nodePtr node); /** * node_reset_update_counter: (skip) * @node: the node * @now: the current timestamp * * Helper function to be used with node_foreach_child() * to mass-auto-update subscriptions. */ void node_reset_update_counter (nodePtr node, GTimeVal *now); /** * node_is_ancestor: (skip) * @node1: the possible ancestor * @node2: the possible child * * Determines whether node1 is an ancestor of node2 * * Returns: TRUE if node1 is ancestor of node2 */ gboolean node_is_ancestor(nodePtr node1, nodePtr node2); /** * node_get_title: (skip) * @node: the node * * Query the node's title for the feed list. * * Returns: the title */ const gchar * node_get_title(nodePtr node); /** * node_set_title: (skip) * @node: the node * @title: the title * * Sets the node's title for the feed list. */ void node_set_title(nodePtr node, const gchar *title); /** * node_update_counters: (skip) * @node: the node * * Update the number of items and unread items of a node from * the DB. This method ensures propagation to parent folders. */ void node_update_counters(nodePtr node); /** * node_mark_all_read: (skip) * @node: the node to process * * Recursively marks all items of the given node as read. */ void node_mark_all_read(nodePtr node); /** * node_set_icon: (skip) * @node: the node * @icon: (nullable): a pixmap or NULL * * Assigns a new pixmaps as the favicon representing this node. */ void node_set_icon(nodePtr node, gpointer icon); /** * node_get_icon: (skip) * * Returns an appropriate icon for the given node. If the node * is unavailable the "unavailable" icon will be returned. If * the node is available an existing favicon or the node type * specific default icon will be returned. * * Returns: (nullable): a pixmap or NULL */ gpointer node_get_icon (nodePtr node); /** * node_get_large_icon: (skip) * * Returns a large icon for the node. Does not return any default * icons like node_get_icon() does. * * Returns: (nullable): a pixmap or NULL */ gpointer node_get_large_icon (nodePtr node); /** * node_get_favicon_file: (skip) * @node: the node * * Returns the name of the favicon cache file for the given node. * If there is no favicon a default icon file name will be returned. * * Returns: a file name */ const gchar * node_get_favicon_file(nodePtr node); /** * node_new_id: * * Returns a new unused unique node id. * * Returns: (transfer full): new id (to be free'd using g_free) */ gchar * node_new_id (void); /** * node_get_id: (skip) * @node: the node * * Query the unique id string of the node. * * Returns: id string */ const gchar *node_get_id (nodePtr node); /** * node_set_id: (skip) * @node: the node * @id: the id string * * Set the unique id string of the node. */ void node_set_id(nodePtr node, const gchar *id); /** * node_free: (skip) * @node: the node to free * * Frees a given node structure. */ void node_free(nodePtr node); /** * node_default_render: (skip) * @node: the node to render * * Helper function for generic node rendering. Performs * a generic node serialization to XML and passes the * generated XML source document to the XSLT stylesheet * with the same name as the node type id. * * Returns: XHTML string */ gchar * node_default_render(nodePtr node); /** * node_save: (skip) * @node: the node * * Saves the given node to cache. */ void node_save(nodePtr node); /** * node_get_itemset: (skip) * @node: the node * * Loads all items of the given node into memory. * The caller needs to free the item set using itemset_free() * * Returns: the item set */ itemSetPtr node_get_itemset(nodePtr node); /** * node_render: (skip) * @node: the node * * Node content rendering * * Returns: string with node rendered in HTML */ gchar * node_render(nodePtr node); /** * node_update_favicon: (skip) * @node: the node * * Called when updating favicons is requested. */ void node_update_favicon (nodePtr node); /** * node_load_icon: (skip) * @node: the node * * Load node icon in memory. Should be called only once on startup * and when the node icon has changed. */ void node_load_icon (nodePtr node); /** * node_set_sort_column: (skip) * @node: the node * @sortColumn: sort column id * @reversed: TRUE if order should be reversed * * Change/Set the sort column of a given node. * * Returns: TRUE if the passed settings were different from the previous ones */ gboolean node_set_sort_column (nodePtr node, nodeViewSortType sortColumn, gboolean reversed); /** * node_set_view_mode: (skip) * @node: the node * @newMode: viewing mode (NODE_VIEW_MODE_*) * * Change/Set the viewing mode of a given node. */ void node_set_view_mode(nodePtr node, nodeViewType newMode); /** * node_get_view_mode: (skip) * @node: the node * * Query the effective viewing mode setting of a given mode. * When node viewing mode is set to default it will return the * configured default. * * Returns: viewing mode (NODE_VIEW_MODE_*) */ nodeViewType node_get_view_mode(nodePtr node); /** * node_get_base_url: (skip) * @node: the node * * Returns the base URL for the given node. * If it is a mixed item set NULL will be returned. * * Returns: base URL */ const gchar * node_get_base_url(nodePtr node); /** * node_can_add_child_feed: (skip) * @node: the node * * Query whether a feed be added to the given node. * * Returns: TRUE if a feed can be added */ gboolean node_can_add_child_feed (nodePtr node); /** * node_can_add_child_folder: (skip) * @node: the node * * Query whether a folder be added to the given node. * * Returns: TRUE if a folder can be added */ gboolean node_can_add_child_folder (nodePtr node); /* child nodes iterating interface */ typedef void (*nodeActionFunc) (nodePtr node); typedef void (*nodeActionDataFunc) (nodePtr node, gpointer user_data); /* * Do not call this method directly! Do use * node_foreach_child() or node_foreach_child_data()! */ void node_foreach_child_full(nodePtr ptr, gpointer func, gint params, gpointer user_data); /** * node_foreach_child: (skip) * @node: node pointer whose children should be processed * @func: the function to process all found elements * * Helper function to call node methods for all * children of a given node. The given function may * modify the children list. */ #define node_foreach_child(node, func) node_foreach_child_full(node,func,0,NULL) /** * node_foreach_child_data: (skip) * @node: node pointer whose children should be processed * @func: the function to process all found elements * @user_data: specifies the second argument that func should be passed * * Helper function to call node methods for all * children of a given node. The given function may * modify the children list. */ #define node_foreach_child_data(node, func, user_data) node_foreach_child_full(node,func,1,user_data) #endif liferea-1.12.7/src/node_type.c000066400000000000000000000056641352135647700161620ustar00rootroot00000000000000/** * @file node_type.c node type handling * * Copyright (C) 2007-2008 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "node_type.h" #include "feed.h" #include "feed_parser.h" #include "feedlist.h" #include "folder.h" #include "newsbin.h" #include "node.h" #include "vfolder.h" #include "fl_sources/node_source.h" static GSList *nodeTypes = NULL; static void node_type_register (nodeTypePtr nodeType) { /* all attributes and methods except free() are mandatory! */ g_assert (nodeType->id); g_assert (nodeType->import); g_assert (nodeType->export); g_assert (nodeType->load); g_assert (nodeType->save); g_assert (nodeType->update_counters); g_assert (nodeType->remove); g_assert (nodeType->render); g_assert (nodeType->request_add); g_assert (nodeType->request_properties); nodeTypes = g_slist_append (nodeTypes, (gpointer)nodeType); } const gchar * node_type_to_str (nodePtr node) { /* To distinguish different feed formats (Atom, RSS...) we do return different type identifiers for feed subscriptions... */ if (IS_FEED (node)) { g_assert (NULL != node->data); return feed_type_fhp_to_str (((feedPtr)(node->data))->fhp); } return NODE_TYPE (node)->id; } nodeTypePtr node_str_to_type (const gchar *str) { GSList *iter; g_assert (NULL != str); /* initialize known node types the first time... */ if (!nodeTypes) { node_type_register (feed_get_node_type ()); node_type_register (root_get_node_type ()); node_type_register (folder_get_node_type ()); node_type_register (vfolder_get_node_type ()); node_type_register (node_source_get_node_type ()); node_type_register (newsbin_get_node_type ()); } if (g_str_equal (str, "")) /* type maybe "" if initial download is not yet done */ return feed_get_node_type (); if (NULL != feed_type_str_to_fhp (str)) return feed_get_node_type (); /* check against all node types */ iter = nodeTypes; while (iter) { if (g_str_equal (str, ((nodeTypePtr)iter->data)->id)) return (nodeTypePtr)iter->data; iter = g_slist_next (iter); } return NULL; } /* Interactive node adding (e.g. feed menu->new subscription) */ gboolean node_type_request_interactive_add (nodeTypePtr nodeType) { if (!feedlist_is_writable ()) return FALSE; return nodeType->request_add (); } liferea-1.12.7/src/node_type.h000066400000000000000000000077451352135647700161710ustar00rootroot00000000000000/** * @file node_type.h node type interface * * Copyright (C) 2007-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NODE_TYPE_H #define _NODE_TYPE_H #include "node.h" #include #include /** node type capabilities */ enum { NODE_CAPABILITY_SHOW_ITEM_FAVICONS = (1<<0), /**< display favicons in item list (useful for recursively viewed leaf node) */ NODE_CAPABILITY_ADD_CHILDS = (1<<1), /**< allows adding new childs */ NODE_CAPABILITY_REMOVE_CHILDS = (1<<2), /**< allows removing it's childs */ NODE_CAPABILITY_SUBFOLDERS = (1<<3), /**< allows creating/removing sub folders */ NODE_CAPABILITY_REMOVE_ITEMS = (1<<5), /**< allows removing of single items */ NODE_CAPABILITY_RECEIVE_ITEMS = (1<<6), /**< is a DnD target for item copies */ NODE_CAPABILITY_REORDER = (1<<7), /**< allows DnD to reorder childs */ NODE_CAPABILITY_SHOW_UNREAD_COUNT = (1<<8), /**< display the unread item count in the feed list */ NODE_CAPABILITY_SHOW_ITEM_COUNT = (1<<9), /**< display the absolute item count in the feed list */ NODE_CAPABILITY_UPDATE = (1<<10), /**< node type always has a subscription and can be updated */ NODE_CAPABILITY_UPDATE_CHILDS = (1<<11), /**< childs of this node type can be updated */ NODE_CAPABILITY_UPDATE_FAVICON = (1<<12), /**< this node allows downloading a favicon */ NODE_CAPABILITY_EXPORT = (1<<13) /**< nodes of this type can be exported safely to OPML */ }; /** * Liferea supports different types of nodes in the feed * list. The type of a feed list node determines how the user * can interact with it. */ /** node type interface */ typedef struct nodeType { gulong capabilities; /**< bitmask of node type capabilities */ const gchar *id; /**< type id (used for type attribute in OPML export) */ const GIcon *icon; /**< default icon for nodes of this type (if no favicon available) */ /* For method documentation see the wrappers defined below! All methods are mandatory for each node type. */ void (*import) (nodePtr node, nodePtr parent, xmlNodePtr cur, gboolean trusted); void (*export) (nodePtr node, xmlNodePtr cur, gboolean trusted); itemSetPtr (*load) (nodePtr node); void (*save) (nodePtr node); void (*update_counters) (nodePtr node); void (*remove) (nodePtr node); gchar * (*render) (nodePtr node); gboolean (*request_add) (void); void (*request_properties) (nodePtr node); /** * Called to allow node type to clean up it's specific data. * The node structure itself is destroyed after this call. * * @param node the node */ void (*free) (nodePtr node); } *nodeTypePtr; #define NODE_TYPE(node) (node->type) /** * Maps node type to string. For feed nodes * it maps to the feed type string. * * @param node the node * * @returns type string (or NULL if unknown) */ const gchar *node_type_to_str (nodePtr node); /** * Maps node type string to type constant. * * @param type str the node type as string * * @returns node type */ nodeTypePtr node_str_to_type (const gchar *str); /** * Interactive node adding (e.g. feed menu->new subscription), * launches some dialog that upon success adds a feed of the * given type. * * @param nodeType the node type * * @returns TRUE on success */ gboolean node_type_request_interactive_add (nodeTypePtr nodeType); #endif liferea-1.12.7/src/node_view.h000066400000000000000000000022311352135647700161430ustar00rootroot00000000000000/* * @file node_view.h node view modes * * Copyright (C) 2009-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NODE_VIEW_H #define _NODE_VIEW_H typedef enum { NODE_VIEW_MODE_NORMAL = 0, NODE_VIEW_MODE_WIDE = 1, NODE_VIEW_MODE_COMBINED = 2, NODE_VIEW_MODE_DEFAULT, } nodeViewType; typedef enum { NODE_VIEW_SORT_BY_TIME = 0, /* default */ NODE_VIEW_SORT_BY_TITLE, NODE_VIEW_SORT_BY_PARENT, NODE_VIEW_SORT_BY_STATE } nodeViewSortType; #endif liferea-1.12.7/src/parsers/000077500000000000000000000000001352135647700154745ustar00rootroot00000000000000liferea-1.12.7/src/parsers/Makefile.am000066400000000000000000000015771352135647700175420ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in AM_CPPFLAGS = \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ -DPACKAGE_LIB_DIR=\""$(libdir)"\" \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ -I$(top_srcdir)/src \ $(PACKAGE_CFLAGS) noinst_LIBRARIES = libliparsers.a libliparsers_a_CFLAGS = $(PACKAGE_FLAGS) libliparsers_a_SOURCES = \ atom10.c atom10.h \ cdf_channel.c cdf_channel.h \ cdf_item.c cdf_item.h \ ns_admin.c ns_admin.h \ ns_ag.c ns_ag.h \ ns_blogChannel.c ns_blogChannel.h \ ns_cC.c ns_cC.h \ ns_content.c ns_content.h \ ns_dc.c ns_dc.h \ ns_georss.c ns_georss.h \ ns_itunes.c ns_itunes.h \ ns_media.c ns_media.h \ ns_photo.c ns_photo.h \ ns_slash.c ns_slash.h \ ns_syn.c ns_syn.h \ ns_trackback.c ns_trackback.h \ ns_wfw.c ns_wfw.h \ pie_entry.c pie_entry.h \ pie_feed.c pie_feed.h \ rss_channel.c rss_channel.h \ rss_item.c rss_item.h liferea-1.12.7/src/parsers/atom10.c000066400000000000000000000645611352135647700167550ustar00rootroot00000000000000/** * @file atom10.c Atom 1.0 Parser * * Copyright (C) 2005-2006 Nathan Conrad * Copyright (C) 2003-2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "atom10.h" #include #include "common.h" #include "date.h" #include "debug.h" #include "enclosure.h" #include "feed_parser.h" #include "feedlist.h" #include "ns_admin.h" #include "ns_ag.h" #include "ns_blogChannel.h" #include "ns_cC.h" #include "ns_content.h" #include "ns_dc.h" #include "ns_georss.h" #include "ns_itunes.h" #include "ns_photo.h" #include "ns_media.h" #include "ns_slash.h" #include "ns_syn.h" #include "ns_trackback.h" #include "ns_wfw.h" #include "metadata.h" #include "subscription.h" #include "xml.h" #define ATOM10_NS BAD_CAST"http://www.w3.org/2005/Atom" /* to store the ATOMNsHandler structs for all supported RDF namespace handlers */ GHashTable *atom10_nstable = NULL; GHashTable *ns_atom10_ns_uri_table = NULL; struct atom10ParserState { gboolean errorDetected; }; typedef void (*atom10ElementParserFunc) (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state); static gchar * atom10_mark_up_text_content (gchar* content) { gchar **tokens; gchar **token; gchar *str, *old_str; if (!content) return NULL; if (!*content) return g_strdup (content); tokens = g_strsplit (content, "\n\n", 0); if (!tokens[0]) { /* No tokens */ str = g_strdup(""); } else if (!tokens[1]) { /* One token */ str = g_markup_escape_text (tokens[0], -1); } else { /* Many tokens */ token = tokens; while (*token) { old_str = *token; str = g_strchug (g_strchomp (*token)); /* WARNING: modifies the token string*/ if (str[0] != '\0') { *token = g_markup_printf_escaped ("

%s

", str); g_free (old_str); } else { **token = '\0'; /* Erase the particular token because it is blank */ } token++; } str = g_strjoinv ("\n", tokens); } g_strfreev (tokens); return str; } /** * This parses an Atom content construct. * * @param cur the XML node to be parsed * @param ctxt a valid feed parser context * @returns g_strduped string which must be freed by the caller. */ static gchar * atom10_parse_content_construct (xmlNodePtr cur, feedParserCtxtPtr ctxt) { gchar *ret = NULL; if (xmlHasNsProp (cur, BAD_CAST"src", NULL )) { /* RFC 4287 says a feed must have a summary when there's a src attribute in the content (and the content therefore empty). We are already parsing the summary separately. RFC 4287 also says an entry must contain one link element with rel="alternate", so there's no point in parsing src and setting it as link. */ ret = NULL; } else { gchar *type; /* determine encoding mode */ type = xml_get_ns_attribute (cur, "type", NULL); /* Contents need to be de-encoded and should not contain sub-tags.*/ if (type && (g_str_equal (type,"html") || !g_ascii_strcasecmp (type, "text/html"))) { ret = xhtml_extract (cur, 0, NULL); } else if (!type || !strcmp (type, "text") || !strncasecmp (type, "text/",5)) { gchar *tmp; /* Assume that "text/ *" files can be directly displayed.. kinda stated in the RFC */ ret = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); g_strchug (g_strchomp (ret)); if (!type || !strcasecmp (type, "text")) tmp = atom10_mark_up_text_content (ret); else tmp = g_markup_printf_escaped ("
%s
", ret); g_free (ret); ret = tmp; } else if (!strcmp(type,"xhtml") || !g_ascii_strcasecmp (type, "application/xhtml+xml")) { /* The spec says to only show the contents of the div tag that MUST be present */ ret = xhtml_extract (cur, 2, NULL); } else { /* Do nothing on unsupported content types. This allows summaries to be used. */ ret = NULL; } g_free (type); } return ret; } /** * Parse Atom 1.0 text tags of all sorts. * * @param htmlified If set to 1, then HTML is returned. * When set to 0, All HTML tags are removed * * @returns an escaped version of a text construct. */ static gchar * atom10_parse_text_construct (xmlNodePtr cur, gboolean htmlified) { gchar *type, *tmp, *ret = NULL; /* determine encoding mode */ type = xml_get_ns_attribute (cur, "type", NULL); /* not sure what MIME types are necessary... */ /* This that need to be de-encoded and should not contain sub-tags.*/ if (!type || !strcmp(type, "text")) { ret = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); if (ret) { g_strchug (g_strchomp (ret)); if (htmlified) { tmp = atom10_mark_up_text_content (ret); g_free (ret); ret = tmp; } } } else if (!strcmp(type, "html")) { ret = xhtml_extract (cur, 0, NULL); if (!htmlified) ret = unhtmlize (unxmlize (ret)); } else if (!strcmp (type, "xhtml")) { /* The spec says to show the contents of the div tag that MUST be present */ ret = xhtml_extract (cur, 2, NULL); if (!htmlified) ret = unhtmlize (ret); } else { /* Invalid Atom feed */ ret = g_strdup ("This attribute was invalidly specified in this Atom feed."); } g_free (type); return ret; } static gchar * atom10_parse_person_construct (xmlNodePtr cur) { gchar *tmp = NULL; gchar *name = NULL, *uri = NULL, *email = NULL; gboolean invalid = FALSE; cur = cur->xmlChildrenNode; while (cur) { if (NULL == cur->name || cur->type != XML_ELEMENT_NODE || cur->ns == NULL || cur->ns->href == NULL) { cur = cur->next; continue; } if (xmlStrEqual (cur->ns->href, ATOM10_NS)) { if (xmlStrEqual (cur->name, BAD_CAST"name")) { g_free (name); name = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); } if (xmlStrEqual (cur->name, BAD_CAST"email")) { if (email) invalid = TRUE; g_free(email); tmp = (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1); email = g_markup_printf_escaped (" - %s", tmp, tmp); g_free(tmp); } if (xmlStrEqual(cur->name, BAD_CAST"uri")) { if (uri) invalid = TRUE; g_free (uri); tmp = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); uri = g_markup_printf_escaped (" (%s)", tmp, _("Website")); g_free (tmp); } } else { /* FIXME: handle extension elements here */ } cur = cur->next; } if (!name) invalid = TRUE; if (!invalid) tmp = g_strdup_printf ("%s%s%s", name, uri?uri:"", email?email:""); else tmp = NULL; g_free (uri); g_free (email); g_free (name); return tmp; } /* Note: this function is called for both item and feed context */ static gchar * atom10_parse_link (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *href, *alternate = NULL; href = xml_get_ns_attribute (cur, "href", NULL); if (href) { xmlChar *baseURL = xmlNodeGetBase (cur->doc, cur); gchar *url, *relation, *type, *escTitle = NULL, *title; const gchar *feedURL = subscription_get_homepage (ctxt->subscription); if (!baseURL && feedURL && feedURL[0] != '|' && strstr (feedURL, "://")) baseURL = xmlStrdup (BAD_CAST (feedURL)); url = (gchar *)common_build_url (href, (gchar *)baseURL); type = xml_get_ns_attribute (cur, "type", NULL); relation = xml_get_ns_attribute (cur, "rel", NULL); title = xml_get_ns_attribute (cur, "title", NULL); if (title) escTitle = g_markup_escape_text (title, -1); if (!xmlHasNsProp (cur, BAD_CAST"rel", NULL) || !relation || g_str_equal (relation, BAD_CAST"alternate")) { alternate = g_strdup (url); } else if (g_str_equal (relation, "self")) { alternate = g_strdup (url); } else if (g_str_equal (relation, "replies")) { if (!type || g_str_equal (type, BAD_CAST"application/atom+xml")) { gchar *commentUri = (gchar *)common_build_url ((gchar *)url, subscription_get_homepage (ctxt->subscription)); if (ctxt->item) metadata_list_set (&ctxt->item->metadata, "commentFeedUri", commentUri); g_free (commentUri); } } else if (g_str_equal (relation, "enclosure")) { if (ctxt->item) { gsize length = 0; gchar *lengthStr = xml_get_ns_attribute (cur, "length", NULL); if (lengthStr) length = atol (lengthStr); g_free (lengthStr); gchar *encStr = enclosure_values_to_string (url, type, length, FALSE /* not yet downloaded */); ctxt->item->metadata = metadata_list_append (ctxt->item->metadata, "enclosure", encStr); ctxt->item->hasEnclosure = TRUE; g_free (encStr); } } else if (g_str_equal (relation, "related") || g_str_equal (relation, "via")) { if (ctxt->item) ctxt->item->metadata = metadata_list_append (ctxt->item->metadata, relation, url); } else { /* g_warning ("Unhandled Atom link with unexpected relation \"%s\"\n", relation); */ } xmlFree (title); xmlFree (baseURL); g_free (escTitle); g_free (url); g_free(relation); g_free(type); g_free(href); } else { /* FIXME: @href is required, this document is not valid Atom */; } return alternate; } static void atom10_parse_entry_author (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *author; author = atom10_parse_person_construct (cur); if (author) { ctxt->item->metadata = metadata_list_append (ctxt->item->metadata, "author", author); g_free (author); } } static void atom10_parse_entry_category (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *category = NULL; category = xml_get_ns_attribute (cur, "label", NULL); if (!category) category = xml_get_ns_attribute (cur, "term", NULL); if (category) { gchar *escaped = g_markup_escape_text (category, -1); /* Black-list some categories used by Google Reader clone online readers that should not be visible to the end-user */ if (!g_str_equal (category, "reading-list") && !g_str_equal (category, "read") && !strstr(category, "user/-/label/")) ctxt->item->metadata = metadata_list_append (ctxt->item->metadata, "category", escaped); g_free (escaped); xmlFree (category); } } static void atom10_parse_entry_content (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *content; content = atom10_parse_content_construct (cur, ctxt); if (content) { item_set_description (ctxt->item, content); g_free (content); } } static void atom10_parse_entry_contributor (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *contributor; contributor = atom10_parse_person_construct (cur); if (contributor) { ctxt->item->metadata = metadata_list_append (ctxt->item->metadata, "contributor", contributor); g_free (contributor); } } static void atom10_parse_entry_id (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *id; id = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); if (id) { if (strlen (id) > 0) { item_set_id (ctxt->item, id); ctxt->item->validGuid = TRUE; } g_free (id); } } static void atom10_parse_entry_link (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *href; href = atom10_parse_link (cur, ctxt, state); if (href) { item_set_source (ctxt->item, href); g_free (href); } } static void atom10_parse_entry_published (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *datestr; datestr = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); if (datestr) { ctxt->item->time = date_parse_ISO8601 (datestr); ctxt->item->metadata = metadata_list_append (ctxt->item->metadata, "pubDate", datestr); g_free (datestr); } } static void atom10_parse_entry_rights (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *rights; rights = atom10_parse_text_construct (cur, FALSE); if (rights) { ctxt->item->metadata = metadata_list_append (ctxt->item->metadata, "copyright", rights); g_free (rights); } } /* can be used for short text descriptions, if there is no description we show the content */ static void atom10_parse_entry_summary (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *summary; summary = atom10_parse_text_construct (cur, TRUE); if (summary) { item_set_description (ctxt->item, summary); g_free (summary); } /* FIXME: set a flag to show a "Read more" link to the user; but where? */ } static void atom10_parse_entry_title (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *title; title = atom10_parse_text_construct(cur, FALSE); if (title) { item_set_title (ctxt->item, title); g_free (title); } } static void atom10_parse_entry_updated (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *datestr; datestr = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); /* if pubDate is already set, don't overwrite it */ if (datestr && !metadata_list_get(ctxt->item->metadata, "pubDate")) { ctxt->item->time = date_parse_ISO8601 (datestr); ctxt->item->metadata = metadata_list_append (ctxt->item->metadata, "contentUpdateDate", datestr); } g_free (datestr); } /* tag support, FIXME: base64 not supported */ /* method to parse standard tags for each item element */ static itemPtr atom10_parse_entry (feedParserCtxtPtr ctxt, xmlNodePtr cur) { NsHandler *nsh; parseItemTagFunc pf; atom10ElementParserFunc func; static GHashTable *entryElementHash = NULL; if (!entryElementHash) { entryElementHash = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_insert (entryElementHash, "author", &atom10_parse_entry_author); g_hash_table_insert (entryElementHash, "category", &atom10_parse_entry_category); g_hash_table_insert (entryElementHash, "content", &atom10_parse_entry_content); g_hash_table_insert (entryElementHash, "contributor", &atom10_parse_entry_contributor); g_hash_table_insert (entryElementHash, "id", &atom10_parse_entry_id); g_hash_table_insert (entryElementHash, "link", &atom10_parse_entry_link); g_hash_table_insert (entryElementHash, "published", &atom10_parse_entry_published); g_hash_table_insert (entryElementHash, "rights", &atom10_parse_entry_rights); /* FIXME: Parse "source" */ g_hash_table_insert (entryElementHash, "summary", &atom10_parse_entry_summary); g_hash_table_insert (entryElementHash, "title", &atom10_parse_entry_title); g_hash_table_insert (entryElementHash, "updated", &atom10_parse_entry_updated); } ctxt->item = item_new (); cur = cur->xmlChildrenNode; while (cur) { if (cur->type != XML_ELEMENT_NODE || cur->name == NULL || cur->ns == NULL) { cur = cur->next; continue; } if ((cur->ns->href && (nsh = (NsHandler *)g_hash_table_lookup (ns_atom10_ns_uri_table, (gpointer)cur->ns->href))) || (cur->ns->prefix && (nsh = (NsHandler *)g_hash_table_lookup (atom10_nstable, (gpointer)cur->ns->prefix)))) { pf = nsh->parseItemTag; if (pf) (*pf) (ctxt, cur); cur = cur->next; continue; } /* check namespace of this tag */ if (!cur->ns->href) { /* This is an invalid feed... no idea what to do with the current element */ debug1 (DEBUG_PARSING, "element with no namespace found in atom feed (%s)!", cur->name); cur = cur->next; continue; } if (xmlStrcmp(cur->ns->href, ATOM10_NS)) { debug1(DEBUG_PARSING, "unknown namespace %s found!", cur->ns->href); cur = cur->next; continue; } /* At this point, the namespace must be the Atom 1.0 namespace */ func = g_hash_table_lookup (entryElementHash, cur->name); if (func) { (*func) (cur, ctxt, NULL); } else { debug1 (DEBUG_PARSING, "unknown entry element \"%s\" found", cur->name); } cur = cur->next; } /* after parsing we fill the infos into the itemPtr structure */ ctxt->item->readStatus = FALSE; if (0 == ctxt->item->time) ctxt->item->time = ctxt->feed->time; return ctxt->item; } static void atom10_parse_feed_author (xmlNodePtr cur, feedParserCtxtPtr ctxt, itemPtr ip, struct atom10ParserState *state) { /* parse feed author */ gchar *author = atom10_parse_person_construct (cur); if (author) { ctxt->subscription->metadata = metadata_list_append (ctxt->subscription->metadata, "author", author); g_free (author); } /* FIXME: make item parsing use this author if not specified elsewhere */ } static void atom10_parse_feed_category (xmlNodePtr cur, feedParserCtxtPtr ctxt, itemPtr ip, struct atom10ParserState *state) { gchar *label = NULL; label = xml_get_ns_attribute (cur, "label", NULL); if (!label) label = xml_get_ns_attribute (cur, "term", NULL); if (label) { gchar *escaped = g_markup_escape_text (label, -1); ctxt->subscription->metadata = metadata_list_append (ctxt->subscription->metadata, "category", escaped); g_free (escaped); xmlFree (label); } } static void atom10_parse_feed_contributor (xmlNodePtr cur, feedParserCtxtPtr ctxt, itemPtr ip, struct atom10ParserState *state) { /* parse feed contributors */ gchar *contributer = atom10_parse_person_construct (cur); if (contributer) { ctxt->subscription->metadata = metadata_list_append (ctxt->subscription->metadata, "contributor", contributer); g_free (contributer); } } static void atom10_parse_feed_generator (xmlNodePtr cur, feedParserCtxtPtr ctxt, itemPtr ip, struct atom10ParserState *state) { gchar *ret, *version, *tmp = NULL, *uri; ret = unhtmlize ((gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1)); if (ret && ret[0] != '\0') { version = xml_get_ns_attribute (cur, "version", NULL); if (version) { tmp = g_strdup_printf ("%s %s", ret, version); g_free (ret); g_free (version); ret = tmp; } uri = xml_get_ns_attribute (cur, "uri", NULL); if (uri) { tmp = g_markup_printf_escaped ("%s", uri, ret); g_free (uri); g_free (ret); ret = tmp; } ctxt->subscription->metadata = metadata_list_append (ctxt->subscription->metadata, "feedgenerator", tmp); } g_free (ret); } static void atom10_parse_feed_icon (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *icon_uri; icon_uri = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); if (icon_uri) { debug1 (DEBUG_PARSING, "icon URI found in atom feed: %s", icon_uri); ctxt->subscription->metadata = metadata_list_append (ctxt->subscription->metadata, "icon", icon_uri); } } static void atom10_parse_feed_id (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { /* FIXME: Parse ID, but I'm not sure where Liferea would use it */ } static void atom10_parse_feed_link (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *href; href = atom10_parse_link (cur, ctxt, state); if (href) { xmlChar *baseURL = xmlNodeGetBase (cur->doc, xmlDocGetRootElement (cur->doc)); subscription_set_homepage (ctxt->subscription, href); /* Set the default base to the feed's HTML URL if not set yet */ if (baseURL == NULL) xmlNodeSetBase (xmlDocGetRootElement (cur->doc), (xmlChar *)href); else xmlFree (baseURL); g_free (href); } } static void atom10_parse_feed_logo (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *logoUrl; logoUrl = atom10_parse_text_construct (cur, FALSE); if (logoUrl) { metadata_list_set (&ctxt->subscription->metadata, "imageUrl", logoUrl); g_free (logoUrl); } } static void atom10_parse_feed_rights (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *rights; rights = atom10_parse_text_construct (cur, FALSE); if (rights) { ctxt->subscription->metadata = metadata_list_append (ctxt->subscription->metadata, "copyright", rights); g_free (rights); } } static void atom10_parse_feed_subtitle (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *subtitle; subtitle = atom10_parse_text_construct (cur, TRUE); if (subtitle) { metadata_list_set (&ctxt->subscription->metadata, "description", subtitle); g_free (subtitle); } } static void atom10_parse_feed_title (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *title; title = atom10_parse_text_construct(cur, FALSE); if (title) { if (ctxt->title) g_free (ctxt->title); ctxt->title = title; } } /* Sort items in descending date order (newer items first). */ static gint atom10_item_sort_by_date (gconstpointer a, gconstpointer b) { itemPtr item1 = (itemPtr)a; itemPtr item2 = (itemPtr)b; g_assert (item1 && item2); if (item1->time == item2->time) { /* Items identical.. can we distinguish further? */ return 0; } if (item1->time < item2->time) return 1; if (item1->time > item2->time) return -1; return 0; } static void atom10_parse_feed_updated (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *timestamp; timestamp = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); if (timestamp) { ctxt->subscription->metadata = metadata_list_append (ctxt->subscription->metadata, "contentUpdateDate", timestamp); ctxt->feed->time = date_parse_ISO8601 (timestamp); g_free (timestamp); } } /* reads a Atom feed URL and returns a new channel structure (even if the feed could not be read) */ static void atom10_parse_feed (feedParserCtxtPtr ctxt, xmlNodePtr cur) { NsHandler *nsh; parseChannelTagFunc pf; atom10ElementParserFunc func; static GHashTable *feedElementHash = NULL; if(!feedElementHash) { feedElementHash = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_insert (feedElementHash, "author", &atom10_parse_feed_author); g_hash_table_insert (feedElementHash, "category", &atom10_parse_feed_category); g_hash_table_insert (feedElementHash, "contributor", &atom10_parse_feed_contributor); g_hash_table_insert (feedElementHash, "generator", &atom10_parse_feed_generator); g_hash_table_insert (feedElementHash, "icon", &atom10_parse_feed_icon); g_hash_table_insert (feedElementHash, "id", &atom10_parse_feed_id); g_hash_table_insert (feedElementHash, "link", &atom10_parse_feed_link); g_hash_table_insert (feedElementHash, "logo", &atom10_parse_feed_logo); g_hash_table_insert (feedElementHash, "rights", &atom10_parse_feed_rights); g_hash_table_insert (feedElementHash, "subtitle", &atom10_parse_feed_subtitle); g_hash_table_insert (feedElementHash, "title", &atom10_parse_feed_title); g_hash_table_insert (feedElementHash, "updated", &atom10_parse_feed_updated); } while (TRUE) { if (xmlStrcmp (cur->name, BAD_CAST"feed")) { g_string_append (ctxt->feed->parseErrors, "

Could not find Atom 1.0 header!

"); break; } /* parse feed contents */ cur = cur->xmlChildrenNode; while (cur) { if (!cur->name || cur->type != XML_ELEMENT_NODE || !cur->ns) { cur = cur->next; continue; } /* check if supported namespace should handle the current tag by trying to determine a namespace handler */ nsh = NULL; if (cur->ns->href) nsh = (NsHandler *)g_hash_table_lookup (ns_atom10_ns_uri_table, (gpointer)cur->ns->href); if (cur->ns->prefix && !nsh) nsh = (NsHandler *)g_hash_table_lookup (atom10_nstable, (gpointer)cur->ns->prefix); if(nsh) { pf = nsh->parseChannelTag; if(pf) (*pf)(ctxt, cur); cur = cur->next; continue; } /* check namespace of this tag */ if (!cur->ns->href) { /* This is an invalid feed... no idea what to do with the current element */ debug1 (DEBUG_PARSING, "element with no namespace found in atom feed (%s)!", cur->name); cur = cur->next; continue; } if (xmlStrcmp (cur->ns->href, ATOM10_NS)) { debug1 (DEBUG_PARSING, "unknown namespace %s found in atom feed!", cur->ns->href); cur = cur->next; continue; } /* At this point, the namespace must be the Atom 1.0 namespace */ func = g_hash_table_lookup (feedElementHash, cur->name); if (func) { (*func) (cur, ctxt, NULL); } else if (xmlStrEqual (cur->name, BAD_CAST"entry")) { ctxt->item = atom10_parse_entry (ctxt, cur); if (ctxt->item) ctxt->items = g_list_insert_sorted (ctxt->items, ctxt->item, atom10_item_sort_by_date); } cur = cur->next; } /* FIXME: Maybe check to see that the required information was actually provided (persuant to the RFC). */ /* after parsing we fill in the infos into the feedPtr structure */ break; } } static gboolean atom10_format_check (xmlDocPtr doc, xmlNodePtr cur) { if (cur->name == NULL || cur->ns == NULL || cur->ns->href == NULL) return FALSE; return xmlStrEqual (cur->name, BAD_CAST"feed") && xmlStrEqual (cur->ns->href, ATOM10_NS); } static void atom10_add_ns_handler (NsHandler *handler) { g_assert (NULL != atom10_nstable); g_hash_table_insert (atom10_nstable, (gpointer)handler->prefix, handler); g_assert (handler->registerNs != NULL); handler->registerNs (handler, atom10_nstable, ns_atom10_ns_uri_table); } feedHandlerPtr atom10_init_feed_handler (void) { feedHandlerPtr fhp; fhp = g_new0 (struct feedHandler, 1); if (!atom10_nstable) { atom10_nstable = g_hash_table_new (g_str_hash, g_str_equal); ns_atom10_ns_uri_table = g_hash_table_new (g_str_hash, g_str_equal); /* register name space handlers */ atom10_add_ns_handler (ns_bC_get_handler ()); atom10_add_ns_handler (ns_dc_get_handler ()); atom10_add_ns_handler (ns_slash_get_handler ()); atom10_add_ns_handler (ns_content_get_handler ()); atom10_add_ns_handler (ns_syn_get_handler ()); atom10_add_ns_handler (ns_admin_get_handler ()); atom10_add_ns_handler (ns_ag_get_handler ()); atom10_add_ns_handler (ns_cC_get_handler ()); atom10_add_ns_handler (ns_photo_get_handler ()); atom10_add_ns_handler (ns_pb_get_handler ()); atom10_add_ns_handler (ns_wfw_get_handler ()); atom10_add_ns_handler (ns_media_get_handler ()); atom10_add_ns_handler (ns_trackback_get_handler ()); atom10_add_ns_handler (ns_georss_get_handler ()); } /* prepare feed handler structure */ fhp->typeStr = "atom"; fhp->feedParser = atom10_parse_feed; fhp->checkFormat = atom10_format_check; return fhp; } liferea-1.12.7/src/parsers/atom10.h000066400000000000000000000017701352135647700167530ustar00rootroot00000000000000/** * @file atom10.h Atom 1.0 Parser * * Copyright (C) 2005-2006 Nathan Conrad * Copyright (C) 2003-2008 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _ATOM10_H #define _ATOM10_H #include "feed_parser.h" feedHandlerPtr atom10_init_feed_handler(void); #endif liferea-1.12.7/src/parsers/cdf_channel.c000066400000000000000000000130611352135647700200650ustar00rootroot00000000000000/** * @file cdf_channel.c CDF channel parsing * * Copyright (C) 2003-2010 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* CDF is evil. There is only one outdated specification of it and its example is not even well-formed XML! Also, it seems to rely on things being case insensitive. Some people seem to make the tags capitalized, while others are like "Channel". */ #include "cdf_channel.h" #include #include #include #include #include "common.h" #include "feedlist.h" #include "cdf_item.h" #include "metadata.h" #include "xml.h" /* note: the tag order has to correspond with the CHANNEL_* defines in the header file */ static GHashTable *channelHash = NULL; /* method to parse standard tags for the channel element */ static void parseCDFChannel(feedParserCtxtPtr ctxt, xmlNodePtr cur, CDFChannelPtr cp) { gchar *tmp, *tmp2, *tmp3; cur = cur->xmlChildrenNode; while(cur) { if(!cur->name || cur->type != XML_ELEMENT_NODE) { cur = cur->next; continue; } if((!xmlStrcasecmp(cur->name, BAD_CAST"logo"))) { tmp = (gchar *)xmlGetProp(cur, BAD_CAST"HREF"); if(tmp) { tmp = (gchar *)xmlGetProp(cur, BAD_CAST"href"); metadata_list_set (&ctxt->subscription->metadata, "imageUrl", tmp); g_free(tmp); } } else if((!xmlStrcasecmp(cur->name, BAD_CAST"a"))) { xmlChar *value = xmlGetProp(cur, BAD_CAST"HREF"); if(value) { subscription_set_homepage (ctxt->subscription, (gchar *)value); xmlFree(value); } } else if((!xmlStrcasecmp(cur->name, BAD_CAST"item"))) { ctxt->item = parseCDFItem(ctxt, cur, cp); if(ctxt->item) { if(0 == ctxt->item->time) ctxt->item->time = cp->time; ctxt->items = g_list_append(ctxt->items, ctxt->item); } } else if(!xmlStrcasecmp(cur->name, BAD_CAST "title")) { tmp = (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, TRUE); if(tmp) { tmp = unhtmlize(tmp); if(ctxt->title) g_free(ctxt->title); ctxt->title = tmp; } } else if (!xmlStrcasecmp(cur->name, BAD_CAST "abstract")) { tmp = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, TRUE); if (tmp) { metadata_list_set (&ctxt->subscription->metadata, "description", tmp); xmlFree (tmp); } } else { tmp = g_ascii_strdown((gchar *)cur->name, -1); tmp2 = g_hash_table_lookup(channelHash, tmp); if(tmp2) { tmp3 = (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, TRUE); if(tmp3) { ctxt->subscription->metadata = metadata_list_append(ctxt->subscription->metadata, tmp2, tmp3); g_free(tmp3); } } g_free(tmp); } cur = cur->next; } } /* reads a CDF feed URL and returns a new channel structure (even if the feed could not be read) */ static void cdf_parse(feedParserCtxtPtr ctxt, xmlNodePtr cur) { CDFChannelPtr cp; cp = g_new0(struct CDFChannel, 1); do { /* note: we support only one flavour of CDF channels! We will only support the outer channel of the CDF feed. */ /* find outer channel tag */ while(cur) { if(cur->type == XML_ELEMENT_NODE && (!xmlStrcasecmp(cur->name, BAD_CAST"channel"))) { cur = cur->xmlChildrenNode; break; } cur = cur->next; } time(&(cp->time)); /* find first "real" channel tag */ while(cur) { if((!xmlStrcasecmp(cur->name, BAD_CAST"channel"))) { parseCDFChannel(ctxt, cur, cp); break; } cur = cur->next; } /* after parsing we fill in the infos into the subscription structure */ subscription_set_default_update_interval(ctxt->subscription, -1); g_free(cp); } while (FALSE); } static gboolean cdf_format_check(xmlDocPtr doc, xmlNodePtr cur) { /* avoid mistaking RSS 1.1 which also uses "Channel" as root tag */ if((NULL != cur->ns) && (NULL != cur->ns->href) && !xmlStrcmp(cur->ns->href, BAD_CAST"http://purl.org/net/rss1.1#")) return FALSE; if(!xmlStrcasecmp(cur->name, BAD_CAST"Channel")) return TRUE; return FALSE; } /* ---------------------------------------------------------------------------- */ /* initialization */ /* ---------------------------------------------------------------------------- */ #define CDF_CHANNEL_PUBDATE 4 #define CDF_CHANNEL_WEBMASTER 5 #define CDF_CHANNEL_CATEGORY 6 feedHandlerPtr cdf_init_feed_handler(void) { feedHandlerPtr fhp; fhp = g_new0(struct feedHandler, 1); /* there are no name space handlers! */ if (channelHash == NULL) { channelHash = g_hash_table_new(g_str_hash, g_str_equal); g_hash_table_insert(channelHash, "copyright", "copyright"); g_hash_table_insert(channelHash, "publicationdate", "lastBuildDate"); g_hash_table_insert(channelHash, "publisher", "managingEditor"); g_hash_table_insert(channelHash, "category", "category"); } /* prepare feed handler structure */ fhp->typeStr = "cdf"; fhp->feedParser = cdf_parse; fhp->checkFormat = cdf_format_check; return fhp; } liferea-1.12.7/src/parsers/cdf_channel.h000066400000000000000000000021201352135647700200640ustar00rootroot00000000000000/** * @file cdf_channel.h CDF channel parsing * * Copyright (C) 2003-2008 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _CDF_CHANNEL_H #define _CDF_CHANNEL_H #include #include "feed_parser.h" typedef struct CDFChannel { /* other information */ time_t time; /* last feed build/creation time */ } *CDFChannelPtr; feedHandlerPtr cdf_init_feed_handler(void); #endif liferea-1.12.7/src/parsers/cdf_item.c000066400000000000000000000066011352135647700174150ustar00rootroot00000000000000/** * @file cdf_item.c CDF item parsing * * Copyright (C) 2003-2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include "common.h" #include "cdf_channel.h" #include "cdf_item.h" #include "metadata.h" #include "xml.h" extern GHashTable *cdf_nslist; static GHashTable *CDFToMetadataMapping = NULL; /* FIXME: The 'link' tag used to be used, but I coundn't find its use... The spec says to use 'A' instead. */ /* method to parse standard tags for each item element */ itemPtr parseCDFItem(feedParserCtxtPtr ctxt, xmlNodePtr cur, CDFChannelPtr cp) { gchar *tmp = NULL, *tmp2, *tmp3; if(CDFToMetadataMapping == NULL) { CDFToMetadataMapping = g_hash_table_new(g_str_hash, g_str_equal); g_hash_table_insert(CDFToMetadataMapping, "author", "author"); g_hash_table_insert(CDFToMetadataMapping, "category", "category"); } ctxt->item = item_new(); /* save the item link */ if(!(tmp = (gchar *)xmlGetProp(cur, BAD_CAST"href"))) tmp = (gchar *)xmlGetProp(cur, BAD_CAST"HREF"); if(tmp) { item_set_source(ctxt->item, tmp); g_free(tmp); } cur = cur->xmlChildrenNode; while(cur) { if(!cur->name || cur->type != XML_ELEMENT_NODE) { cur = cur->next; continue; } /* save first link to a channel image */ if(NULL != (tmp = g_ascii_strdown((gchar *)cur->name, -1))) { if(NULL != (tmp2 = g_hash_table_lookup(CDFToMetadataMapping, tmp))) { if(NULL != (tmp3 = (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, TRUE))) { ctxt->item->metadata = metadata_list_append(ctxt->item->metadata, tmp2, tmp3); g_free(tmp3); } } g_free(tmp); } if((!xmlStrcasecmp(cur->name, BAD_CAST"logo"))) { if(!(tmp = (gchar *)xmlGetProp(cur, BAD_CAST"href"))) tmp = (gchar *)xmlGetProp(cur, BAD_CAST"HREF"); if(tmp) { ctxt->item->metadata = metadata_list_append(ctxt->item->metadata, "imageUrl", tmp); g_free(tmp); } } else if((!xmlStrcasecmp(cur->name, BAD_CAST"title"))) { if(NULL != (tmp = unhtmlize((gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1)))) { item_set_title(ctxt->item, tmp); g_free(tmp); } } else if((!xmlStrcasecmp(cur->name, BAD_CAST"abstract"))) { if(NULL != (tmp = (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1))) { item_set_description(ctxt->item, tmp); g_free(tmp); } } else if((!xmlStrcasecmp(cur->name, BAD_CAST"a"))) { if(!(tmp = (gchar *)xmlGetProp(cur, BAD_CAST"href"))) tmp = (gchar *)xmlGetProp(cur, BAD_CAST"HREF"); if(tmp) { item_set_source(ctxt->item, tmp); g_free(tmp); } } cur = cur->next; } ctxt->item->readStatus = FALSE; return ctxt->item; } liferea-1.12.7/src/parsers/cdf_item.h000066400000000000000000000017651352135647700174300ustar00rootroot00000000000000/** * @file cdf_item.h CDF item tag parsing * * Copyright (C) 2003-2006 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _CDF_ITEM_H #define _CDF_ITEM_H #include #include "cdf_channel.h" itemPtr parseCDFItem(feedParserCtxtPtr ctxt, xmlNodePtr cur, CDFChannelPtr cp); #endif liferea-1.12.7/src/parsers/ns_admin.c000066400000000000000000000040741352135647700174350ustar00rootroot00000000000000/** * @file ns_admin.c admin namespace support * * Copyright (C) 2003-2008 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "ns_admin.h" #include "metadata.h" #include "xml.h" /* you can find an admin namespace spec at: http://web.resource.org/rss/1.0/modules/admin/ taglist for admin: -------------------------------- errorReportsTo generatorAgent -------------------------------- both tags usually contains URIs which we simply display in the feed info view footer */ static void parse_channel_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar *value; value = xml_get_attribute (cur, "resource"); if (!xmlStrcmp (BAD_CAST "errorReportsTo", cur->name)) metadata_list_set (&(ctxt->subscription->metadata), "errorReportsTo", value); else if (!xmlStrcmp (BAD_CAST "generatorAgent", cur->name)) metadata_list_set (&(ctxt->subscription->metadata), "feedgeneratorUri", value); g_free (value); } static void ns_admin_register_ns (NsHandler *nsh, GHashTable *prefixhash, GHashTable *urihash) { g_hash_table_insert (prefixhash, "admin", nsh); g_hash_table_insert (urihash, "http://webns.net/mvcb/", nsh); } NsHandler * ns_admin_get_handler (void) { NsHandler *nsh; nsh = g_new0 (NsHandler, 1); nsh->registerNs = ns_admin_register_ns; nsh->prefix = "admin"; nsh->parseChannelTag = parse_channel_tag;; return nsh; } liferea-1.12.7/src/parsers/ns_admin.h000066400000000000000000000016311352135647700174360ustar00rootroot00000000000000/* admin namespace support Copyright (C) 2003-2007 Lars Windolf 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NS_ADMIN_H #define _NS_ADMIN_H #include "metadata.h" NsHandler *ns_admin_get_handler(void); #endif liferea-1.12.7/src/parsers/ns_ag.c000066400000000000000000000057561352135647700167440ustar00rootroot00000000000000/** * @file ns_ag.c mod_aggregation support * * Copyright (C) 2003-2009 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ns_ag.h" #include "date.h" #include "common.h" #include "metadata.h" /* you can find an aggregation namespace spec at: http://web.resource.org/rss/1.0/modules/aggregation/ taglist for mod_aggregation: -------------------------------- source sourceURL timestamp -------------------------------- both tags usually contains URIs which we simply display in the feed info view footer */ static void parse_item_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar *date, *source, *sourceURL, *tmp; gboolean sourceTag = FALSE; if (!xmlStrcmp (BAD_CAST "source", cur->name)) { sourceTag = TRUE; g_hash_table_insert (ctxt->item->tmpdata, g_strdup ("ag:source"), (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1)); } else if (!xmlStrcmp (BAD_CAST "sourceURL", cur->name)) { sourceTag = TRUE; g_hash_table_insert (ctxt->item->tmpdata, g_strdup ("ag:sourceURL"), (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1)); } if (sourceTag) { source = g_hash_table_lookup (ctxt->item->tmpdata, "ag:source"); sourceURL = g_hash_table_lookup (ctxt->item->tmpdata, "ag:sourceURL"); if (source && sourceURL) tmp = g_strdup_printf ("%s", sourceURL, source); else if (!source) tmp = g_strdup_printf ("%s", sourceURL, sourceURL); else tmp = g_strdup (source); metadata_list_set (&(ctxt->item->metadata), "agSource", tmp); } else if (!xmlStrcmp (BAD_CAST "timestamp", cur->name)) { if (NULL != (tmp = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1))) { date = date_format (date_parse_ISO8601 (tmp), _("%b %d %H:%M")); metadata_list_set (&(ctxt->item->metadata), "agTimestamp", date); g_free (date); g_free (tmp); } } } static void ns_ag_register_ns (NsHandler *nsh, GHashTable *prefixhash, GHashTable *urihash) { g_hash_table_insert (prefixhash, "ag", nsh); g_hash_table_insert (urihash, "http://purl.org/rss/1.0/modules/aggregation/", nsh); } NsHandler * ns_ag_get_handler (void) { NsHandler *nsh; nsh = g_new0 (NsHandler, 1); nsh->registerNs = ns_ag_register_ns; nsh->prefix = "ag"; nsh->parseItemTag = parse_item_tag; return nsh; } liferea-1.12.7/src/parsers/ns_ag.h000066400000000000000000000016201352135647700167330ustar00rootroot00000000000000/* mod_aggregation support Copyright (C) 2003-2007 Lars Windolf 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NS_AG_H #define _NS_AG_H #include "metadata.h" NsHandler *ns_ag_get_handler(void); #endif liferea-1.12.7/src/parsers/ns_blogChannel.c000066400000000000000000000147001352135647700205560ustar00rootroot00000000000000/** * @file ns_blogChannel.c blogChannel namespace support * * Copyright (C) 2003-2008 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "ns_blogChannel.h" #include "update.h" #include "feed.h" #include "xml.h" #define BLOGROLL_START "

BlogRoll

" #define BLOGROLL_END "" #define MYSUBSCR_START "

Authors Subscriptions

" #define MYSUBSCR_END "" #define BLINK_START "

Promoted Weblog

" #define BLINK_END "" typedef enum { TAG_BLOGROLL, TAG_MYSUBSCRIPTIONS, } requestDataTagType; struct requestData { feedParserCtxtPtr ctxt; /**< feed parsing context */ requestDataTagType tag; /**< metadata id we're downloading (see TAG_*) */ }; /* the spec at Userland http://backend.userland.com/blogChannelModule blogChannel contains of four channel tags - blogRoll - mySubscriptions - blink - changes (ignored) */ /* returns a HTML string containing the text and attributes of the outline */ static GString * getOutlineContents (xmlNodePtr cur) { GString *buffer; gchar *value; buffer = g_string_new (NULL); value = xml_get_attribute (cur, "text"); if (value) { g_string_append (buffer, value); g_free (value); } value = xml_get_attribute (cur, "url"); if (value) { g_string_append_printf (buffer, " %s", value, value); g_free (value); } value = xml_get_attribute (cur, "htmlUrl"); if (value) { g_string_append_printf (buffer, " (HTML)", value); g_free (value); } value = xml_get_attribute (cur, "xmlUrl"); if (value) { g_string_append_printf (buffer, " (XML)", value); g_free (value); } return buffer; } /* simple function to retrieve an OPML document and parse and output all depth 1 outline tags as HTML into a buffer */ static void ns_blogChannel_download_request_cb (const struct updateResult * const result, gpointer user_data, guint32 flags) { struct requestData *requestData = user_data; xmlDocPtr doc = NULL; xmlNodePtr cur; GString *buffer = NULL; g_assert (NULL != requestData); if (result->data) { buffer = g_string_new (NULL); while (1) { doc = xmlRecoverMemory (result->data, result->size); if (NULL == doc) break; if (NULL == (cur = xmlDocGetRootElement (doc))) break; if (!xmlStrcmp (cur->name, BAD_CAST"opml") || !xmlStrcmp (cur->name, BAD_CAST"oml") || !xmlStrcmp (cur->name, BAD_CAST"outlineDocument")) { /* nothing */ } else break; cur = cur->xmlChildrenNode; while (cur) { if (!xmlStrcmp (cur->name, BAD_CAST"body")) { /* process all tags */ cur = cur->xmlChildrenNode; while (cur) { if (!xmlStrcmp (cur->name, BAD_CAST"outline")) { GString *tmp = getOutlineContents (cur); g_string_append_printf (buffer, "%s
", tmp->str); g_string_free (tmp, TRUE); } cur = cur->next; } break; } cur = cur->next; } break; } if (doc) xmlFreeDoc (doc); } if (buffer) { switch (requestData->tag) { case TAG_BLOGROLL: g_string_prepend (buffer, BLOGROLL_START); g_string_append (buffer, BLOGROLL_END); g_hash_table_insert (requestData->ctxt->tmpdata, g_strdup ("bC:blogRoll"), buffer->str); break; case TAG_MYSUBSCRIPTIONS: g_string_prepend (buffer, MYSUBSCR_START); g_string_append (buffer, MYSUBSCR_END); g_hash_table_insert (requestData->ctxt->tmpdata, g_strdup ("bC:mySubscriptions"), buffer->str); break; default: g_error ("wrong requestData->tag value"); break; } g_string_free (buffer, FALSE); buffer = g_string_new (NULL); g_string_append (buffer, g_hash_table_lookup (requestData->ctxt->tmpdata, "bC:blink")); g_string_append (buffer, g_hash_table_lookup (requestData->ctxt->tmpdata, "bC:blogRoll")); g_string_append (buffer, g_hash_table_lookup (requestData->ctxt->tmpdata, "bC:mySubscriptions")); metadata_list_set (&(requestData->ctxt->subscription->metadata), "blogChannel", buffer->str); g_string_free (buffer, TRUE); } g_list_free (requestData->ctxt->items); feed_free_parser_ctxt (requestData->ctxt); g_free (requestData); } static void getOutlineList (feedParserCtxtPtr ctxt, requestDataTagType tag, char *url) { struct requestData *requestData; updateRequestPtr request; requestData = g_new0 (struct requestData, 1); requestData->ctxt = feed_create_parser_ctxt (); requestData->ctxt->subscription = ctxt->subscription; // FIXME requestData->tag = tag; request = update_request_new (); request->source = g_strdup (url); request->options = update_options_copy (ctxt->subscription->updateOptions); update_execute_request (ctxt->subscription, request, ns_blogChannel_download_request_cb, requestData, 0); } static void parse_channel_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar *string; string = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); if (!xmlStrcmp (BAD_CAST "blogRoll", cur->name)) { getOutlineList (ctxt, TAG_BLOGROLL, string); } else if (!xmlStrcmp (BAD_CAST "mySubscriptions", cur->name)) { getOutlineList (ctxt, TAG_MYSUBSCRIPTIONS, string); } /* We are not handling the "blink" tag */ if (string) xmlFree (string); } static void ns_blogChannel_register_ns (NsHandler *nsh, GHashTable *prefixhash, GHashTable *urihash) { g_hash_table_insert (prefixhash, "blogChannel", nsh); g_hash_table_insert (urihash, "http://backend.userland.com/blogChannelModule", nsh); } NsHandler * ns_bC_get_handler (void) { NsHandler *nsh; nsh = g_new0 (NsHandler, 1); nsh->registerNs = ns_blogChannel_register_ns; nsh->prefix = "blogChannel"; nsh->parseChannelTag = parse_channel_tag; return nsh; } liferea-1.12.7/src/parsers/ns_blogChannel.h000066400000000000000000000017061352135647700205650ustar00rootroot00000000000000/** * @file ns_blogChannel.h blogChannel namespace support * * Copyright (C) 2003-2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NS_BLOGCHANNEL_H #define _NS_BLOGCHANNEL_H #include "metadata.h" NsHandler *ns_bC_get_handler(void); #endif liferea-1.12.7/src/parsers/ns_cC.c000066400000000000000000000060541352135647700166720ustar00rootroot00000000000000/** * @file ns_cC.c creativeCommon RSS namespace support * * Copyright (C) 2003-2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "common.h" #include "metadata.h" #include "ns_cC.h" #define RSS1_CC_PREFIX "cc" #define RSS2_CC_PREFIX "creativeCommons" /* you can find the RSS 2.0 creativeCommon namespace spec at: http://backend.userland.com/creativeCommonsRssModule there is only one tag which can appear inside channel and items: license -------------------------------------------------------- you can find the RSS 1.0 cC namespace spec at: http://web.resource.org/rss/1.0/modules/cc/ channels, images and items can have a license tag, for every license rdf:ressource a License tag must exist... license License permits requires for simplicity we only parse the license tags and provide a link to the license */ static gchar * parse_tag (xmlNodePtr cur) { gchar *buffer = NULL, *tmp; if (!xmlStrcmp (BAD_CAST "license", cur->name)) { tmp = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); if (tmp) { /* RSS 2.0 module handling */ buffer = g_strdup_printf ("%s", tmp, tmp); g_free (tmp); } else { /* RSS 1.0 module handling */ buffer = g_strdup ("Creative Commons"); } } return buffer; } static void parse_channel_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar * tag = parse_tag (cur); metadata_list_set (&(ctxt->subscription->metadata), "license", tag); g_free (tag); } static void parse_item_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar * tag = parse_tag (cur); metadata_list_set (&(ctxt->item->metadata), "license", tag); g_free (tag); } static void ns_cC_register_ns (NsHandler *nsh, GHashTable *prefixhash, GHashTable *urihash) { g_hash_table_insert (prefixhash, RSS1_CC_PREFIX, nsh); g_hash_table_insert (prefixhash, RSS2_CC_PREFIX, nsh); g_hash_table_insert (urihash, "http://web.resource.org/cc/", nsh); g_hash_table_insert (urihash, "http://backend.userland.com/creativeCommonsRssModule", nsh); } NsHandler * ns_cC_get_handler (void) { NsHandler *nsh; nsh = g_new0 (NsHandler, 1); nsh->prefix = RSS1_CC_PREFIX; nsh->registerNs = ns_cC_register_ns; nsh->parseChannelTag = parse_channel_tag; nsh->parseItemTag = parse_item_tag; return nsh; } liferea-1.12.7/src/parsers/ns_cC.h000066400000000000000000000016631352135647700167000ustar00rootroot00000000000000/** * @file ns_cC.h creativeCommon RSS namespace support * * Copyright (C) 2003-2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NS_CC_H #define _NS_CC_H #include "metadata.h" NsHandler *ns_cC_get_handler(void); #endif liferea-1.12.7/src/parsers/ns_content.c000066400000000000000000000036361352135647700200220ustar00rootroot00000000000000/** * @file ns_content.c content namespace support * * Copyright (C) 2003-2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "ns_content.h" #include "common.h" #include "xml.h" /* a namespace documentation can be found at http://web.resource.org/rss/1.0/modules/content/ This namespace handler is (for now) only used to handle tags. If such a tag appears the originial description will be replaced by the encoded content. */ static void parse_item_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar *tmp; if (!xmlStrcmp (cur->name, BAD_CAST "encoded")) { tmp = xhtml_extract (cur, 0, NULL); if (tmp) { item_set_description (ctxt->item, tmp); g_free (tmp); } } } static void ns_content_register_ns (NsHandler *nsh, GHashTable *prefixhash, GHashTable *urihash) { g_hash_table_insert (prefixhash, "content", nsh); g_hash_table_insert (urihash, "http://purl.org/rss/1.0/modules/content/", nsh); } NsHandler * ns_content_get_handler (void) { NsHandler *nsh; nsh = g_new0 (NsHandler, 1); nsh->prefix = "content"; nsh->registerNs = ns_content_register_ns; nsh->parseItemTag = parse_item_tag; return nsh; } liferea-1.12.7/src/parsers/ns_content.h000066400000000000000000000016731352135647700200260ustar00rootroot00000000000000/** * @file ns_content.h content namespace support * * Copyright (C) 2003-2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NS_CONTENT_H #define _NS_CONTENT_H #include "metadata.h" NsHandler *ns_content_get_handler(void); #endif liferea-1.12.7/src/parsers/ns_dc.c000066400000000000000000000144001352135647700167250ustar00rootroot00000000000000/** * @file ns_dc.c Dublin Core support for RSS and Atom * * Copyright (C) 2003-2010 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ns_dc.h" #include "date.h" #include "common.h" #include "metadata.h" #define TYPE_DIRECTORY 0 #define TYPE_CHANNEL 1 #define TYPE_FORMAT 2 #define DC_PREFIX "dc" /* a tag list from http://web.resource.org/rss/1.0/modules/dc/ ------------------------------------------------------- , , , and Elements: * ( #PCDATA ) * ( #PCDATA ) * ( #PCDATA ) * ( #PCDATA ) * ( #PCDATA ) * ( #PCDATA ) * ( #PCDATA ) [W3CDTF] * ( #PCDATA ) * ( #PCDATA ) * ( #PCDATA ) * ( #PCDATA ) * ( #PCDATA ) * ( #PCDATA ) * ( #PCDATA ) * ( #PCDATA ) ------------------------------------------------------- The most important is the data tag for correct update handling. When reading this tag we adjust the items date. The following fields will be mapped to their corresponding RSS 0.92/RSS 2.0 fields, because dc-tags are typically used to implement their functionalities with a simpler RSS version. If both variants (e.g. and ) appear, the last tag will overwrite the values of the first one. title -> title creator -> managingEditor subject -> category description -> description language -> language rights -> copyright publisher -> webMaster Any other infos are simply displayed in channel info or item view inside the header or footer of display. */ static const gchar * taglist[] = { "title", "creator", "subject", "description", "publisher", "contributor", "date", "type", "format", "identifier", "source", "language", "coverage", "rights", NULL }; /* mapping of the tags specified by taglist to the backends channel structure taglist, NULL means no mapping but extra type that must be registered explicitly! */ static const gchar * mapToFeedMetadata[] = { "feedTitle", /* title */ "creator", /* creator */ "category", /* subject */ "description", /* description */ "publisher", /* publisher */ "contributor", /* contributor */ NULL, /* date (seldom used, e.g. slashdot) */ NULL, /* type */ NULL, /* format */ NULL, /* identifier */ NULL, /* source */ "language", /* language */ NULL, /* coverage */ "copyright" /* rights */ }; static const gchar * mapToItemMetadata[] = { NULL, /* title */ "creator", /* creator */ "category", /* subject */ "description", /* description */ "publisher", /* publisher */ "contributor", /* contributor */ NULL, /* date (won't be processed...) */ NULL, /* type */ NULL, /* format */ NULL, /* identifier */ NULL, /* source */ "language", /* language */ NULL, /* coverage */ "copyright" /* rights */ }; /* generic tag parsing (used for RSS and Atom) */ static void parse_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur, gboolean isFeedTag) { int i, j; gchar *date, *value, *tmp; const gchar *mapping; gboolean isNotEmpty; if (!isFeedTag) { /* special handling for the ISO 8601 date item tags */ if (!xmlStrcmp (BAD_CAST "date", cur->name)) { if (NULL != (date = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1))) { i = date_parse_ISO8601 (date); ctxt->item->time = i; g_free (date); } return; } /* special handling for item titles */ if(!xmlStrcmp (BAD_CAST "title", cur->name)) { value = (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1); if(value) { item_set_title(ctxt->item, value); g_free(value); } return; } } /* compare with each possible tag name */ for (i = 0; taglist[i] != NULL; i++) { if (!xmlStrcmp ((const xmlChar *)taglist[i], cur->name)) { value = (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1); if (value) { /* check if value consist of whitespaces only */ for (j = 0, tmp = value, isNotEmpty = FALSE; j < g_utf8_strlen (value, -1); j++) { if (!g_unichar_isspace (*tmp)) { isNotEmpty = TRUE; break; } tmp = g_utf8_next_char (tmp); } if (isNotEmpty) { if (isFeedTag) { if (NULL != (mapping = mapToFeedMetadata[i])) ctxt->subscription->metadata = metadata_list_append (ctxt->subscription->metadata, mapping, value); } else { if (NULL != (mapping = mapToItemMetadata[i])) ctxt->item->metadata = metadata_list_append (ctxt->item->metadata, mapping, value); } } g_free (value); } return; } } } static void parse_channel_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { parse_tag(ctxt, cur, TRUE); } static void parse_item_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { parse_tag(ctxt, cur, FALSE); } static void ns_dc_register_ns (NsHandler *nsh, GHashTable *prefixhash, GHashTable *urihash) { g_hash_table_insert (prefixhash, "dc", nsh); g_hash_table_insert (urihash, "http://purl.org/dc/elements/1.1/", nsh); g_hash_table_insert (urihash, "http://purl.org/dc/elements/1.0/", nsh); } NsHandler * ns_dc_get_handler (void) { NsHandler *nsh; nsh = g_new0 (NsHandler, 1); nsh->prefix = "dc"; nsh->registerNs = ns_dc_register_ns; nsh->parseChannelTag = parse_channel_tag; nsh->parseItemTag = parse_item_tag; return nsh; } liferea-1.12.7/src/parsers/ns_dc.h000066400000000000000000000016671352135647700167450ustar00rootroot00000000000000/** * @file ns_dc.h Dublin Core support for RSS, Atom and OCS * * Copyright (C) 2003-2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NS_DC_H #define _NS_DC_H #include "metadata.h" NsHandler *ns_dc_get_handler(void); #endif liferea-1.12.7/src/parsers/ns_georss.c000066400000000000000000000035101352135647700176410ustar00rootroot00000000000000/** * @file georss.c GeoRSS namespace support * * Copyright (C) 2009 Mikel Olasagasti * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "common.h" #include "metadata.h" #include "ns_georss.h" #define GEORSS_PREFIX "georss" /* One can find the GeoRSS namespace spec at: http://georss.org/model Just georss:point at the moment */ static void ns_georss_parse_item_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar *point = NULL; if (!xmlStrcmp (BAD_CAST"point", cur->name)) point = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); if (point) { metadata_list_set (&(ctxt->item->metadata), "point", point); g_free (point); } } static void ns_georss_register_ns (NsHandler *nsh, GHashTable *prefixhash, GHashTable *urihash) { g_hash_table_insert (prefixhash, GEORSS_PREFIX, nsh); g_hash_table_insert (urihash, "http://www.georss.org/georss", nsh); } NsHandler * ns_georss_get_handler (void) { NsHandler *nsh; nsh = g_new0 (NsHandler, 1); nsh->prefix = GEORSS_PREFIX; nsh->registerNs = ns_georss_register_ns; nsh->parseChannelTag = NULL; nsh->parseItemTag = ns_georss_parse_item_tag; return nsh; } liferea-1.12.7/src/parsers/ns_georss.h000066400000000000000000000016571352135647700176600ustar00rootroot00000000000000/** * @file georss.h GeoRSS namespace support * * Copyright (C) 2009 Mikel Olasagasti * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _GEORSS_H #define _GEORSS_H #include "metadata.h" NsHandler *ns_georss_get_handler(void); #endif liferea-1.12.7/src/parsers/ns_itunes.c000066400000000000000000000060531352135647700176530ustar00rootroot00000000000000/** * @file ns_itunes.c itunes namespace support * * Copyright (C) 2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include "ns_itunes.h" #include "common.h" #include "metadata.h" #include "xml.h" /* a namespace documentation can be found at http://www.apple.com/itunes/store/podcaststechspecs.html */ static void ns_itunes_parse_item_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar *tmp; if (!xmlStrcmp(cur->name, BAD_CAST"author")) { tmp = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); if (tmp) { ctxt->item->metadata = metadata_list_append (ctxt->item->metadata, "author", tmp); g_free (tmp); } } if (!xmlStrcmp (cur->name, BAD_CAST"summary")) { tmp = xhtml_extract (cur, 0, NULL); item_set_description (ctxt->item, tmp); g_free (tmp); } if (!xmlStrcmp(cur->name, BAD_CAST"keywords")) { gchar *keyword = tmp = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); gchar *allocated = tmp; /* parse comma separated list and strip leading spaces... */ while (tmp) { tmp = strchr (tmp, ','); if (tmp) { *tmp = 0; tmp++; } while (g_unichar_isspace (*keyword)) { keyword = g_utf8_next_char (keyword); } ctxt->item->metadata = metadata_list_append (ctxt->item->metadata, "category", keyword); keyword = tmp; } g_free (allocated); } } static void ns_itunes_parse_channel_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar *tmp; const gchar *old; if (!xmlStrcmp (cur->name, BAD_CAST"summary") || !xmlStrcmp (cur->name, BAD_CAST"subtitle")) { tmp = xhtml_extract (cur, 0, NULL); old = metadata_list_get (ctxt->subscription->metadata, "description"); if (!old || strlen (old) < strlen (tmp)) metadata_list_set (&ctxt->subscription->metadata, "description", tmp); g_free (tmp); } } static void ns_itunes_register_ns (NsHandler *nsh, GHashTable *prefixhash, GHashTable *urihash) { g_hash_table_insert (prefixhash, "itunes", nsh); g_hash_table_insert (urihash, "http://www.itunes.com/dtds/podcast-1.0.dtd", nsh); } NsHandler * ns_itunes_get_handler (void) { NsHandler *nsh; nsh = g_new0 (NsHandler, 1); nsh->prefix = "itunes"; nsh->registerNs = ns_itunes_register_ns; nsh->parseItemTag = ns_itunes_parse_item_tag; nsh->parseChannelTag = ns_itunes_parse_channel_tag; return nsh; } liferea-1.12.7/src/parsers/ns_itunes.h000066400000000000000000000016611352135647700176600ustar00rootroot00000000000000/** * @file ns_itunes.h itunes namespace support * * Copyright (C) 2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NS_ITUNES_H #define _NS_ITUNES_H #include "metadata.h" NsHandler *ns_itunes_get_handler(void); #endif liferea-1.12.7/src/parsers/ns_media.c000066400000000000000000000075771352135647700174370ustar00rootroot00000000000000/** * @file ns_media.c Yahoo media namespace support * * Copyright (C) 2007-2010 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include "ns_media.h" #include "enclosure.h" #include "xml.h" /* a namespace documentation can be found at http://search.yahoo.com/mrss */ static void parse_item_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar *tmp, *tmp2; /* Maximual definition could look like this: (example quoted from specification) */ if (!xmlStrcmp(cur->name, BAD_CAST"content")) { tmp = xml_get_attribute (cur, "url"); if (!tmp) return; /* the following code is duplicated from rss_item.c! */ const gchar *feedURL = subscription_get_homepage (ctxt->subscription); gchar *type = xml_get_attribute (cur, "type"); gchar *lengthStr = xml_get_attribute (cur, "length"); gchar *medium = xml_get_attribute (cur, "medium"); gssize length = 0; if (lengthStr) length = atol (lengthStr); if ((strstr (tmp, "://") == NULL) && feedURL && (feedURL[0] != '|') && (strstr (feedURL, "://") != NULL)) { /* add base URL if necessary and possible */ tmp2 = g_strdup_printf ("%s/%s", feedURL, tmp); g_free (tmp); tmp = tmp2; } /* gravatars are often supplied as media:content with medium='image' so we treat do not treat such occurences as enclosures */ if (medium && !strcmp (medium, "image") && strstr (tmp, "www.gravatar.com")) { metadata_list_set (&(ctxt->item->metadata), "gravatar", tmp); } else { /* Never add enclosures for images already contained in the description */ if (!(ctxt->item->description && strstr (ctxt->item->description, tmp))) { gchar *encl_string = enclosure_values_to_string (tmp, type, length, FALSE /* not yet downloaded */); ctxt->item->metadata = metadata_list_append (ctxt->item->metadata, "enclosure", encl_string); g_free (encl_string); ctxt->item->hasEnclosure = TRUE; } } g_free (tmp); g_free (type); g_free (medium); g_free (lengthStr); } else if (!xmlStrcmp (cur->name, BAD_CAST"group")) { cur = cur->xmlChildrenNode; while (cur) { if (cur->type == XML_ELEMENT_NODE) parse_item_tag (ctxt, cur); cur = cur->next; } } // FIXME: should we support media:player too? } static void ns_media_register_ns (NsHandler *nsh, GHashTable *prefixhash, GHashTable *urihash) { g_hash_table_insert (prefixhash, "media", nsh); g_hash_table_insert (urihash, "http://search.yahoo.com/mrss", nsh); } NsHandler * ns_media_get_handler (void) { NsHandler *nsh; nsh = g_new0 (NsHandler, 1); nsh->prefix = "media"; nsh->registerNs = ns_media_register_ns; nsh->parseItemTag = parse_item_tag; return nsh; } liferea-1.12.7/src/parsers/ns_media.h000066400000000000000000000016621352135647700174310ustar00rootroot00000000000000/** * @file ns_media.h Yahoo media namespace support * * Copyright (C) 2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NS_MEDIA_H #define _NS_MEDIA_H #include "metadata.h" NsHandler *ns_media_get_handler(void); #endif liferea-1.12.7/src/parsers/ns_photo.c000066400000000000000000000055001352135647700174710ustar00rootroot00000000000000/** * @file ns_photo.c photo blog namespace support * * Copyright (C) 2004-2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include "common.h" #include "ns_photo.h" static void parse_item_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar *tmp, *thumbnail, *imgsrc; if (!xmlStrcmp (BAD_CAST"thumbnail", cur->name) || !xmlStrcmp (BAD_CAST"thumb", cur->name)) { tmp = (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1); if (tmp) { if (g_utf8_strlen (tmp, -1) > 0) g_hash_table_insert (ctxt->item->tmpdata, "photo:thumbnail", tmp); else g_free (tmp); } } else if (!xmlStrcmp (BAD_CAST"imgsrc", cur->name)) { tmp = (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1); if (tmp) { if (g_utf8_strlen (tmp, -1) > 0) g_hash_table_insert (ctxt->item->tmpdata, "photo:imgsrc", tmp); else g_free (tmp); } } thumbnail = g_hash_table_lookup (ctxt->item->tmpdata, "photo:thumbnail"); imgsrc = g_hash_table_lookup (ctxt->item->tmpdata, "photo:imgsrc"); if (!thumbnail) { /* we do nothing */ } else { tmp = g_strdup_printf ("%s,%s", thumbnail, imgsrc?imgsrc:""); metadata_list_set (&(ctxt->item->metadata), "photo", tmp); g_free (tmp); } } static void ns_pb_register_ns (NsHandler *nsh, GHashTable *prefixhash, GHashTable *urihash) { g_hash_table_insert (prefixhash, "pb", nsh); g_hash_table_insert (urihash, "http://snaplog.com/backend/PhotoBlog.html", nsh); } NsHandler * ns_pb_get_handler (void) { NsHandler *nsh; nsh = g_new0 (NsHandler, 1); nsh->registerNs = ns_pb_register_ns; nsh->prefix = "pb"; nsh->parseItemTag = parse_item_tag; return nsh; } static void ns_photo_register_ns (NsHandler *nsh, GHashTable *prefixhash, GHashTable *urihash) { g_hash_table_insert (prefixhash, "photo", nsh); g_hash_table_insert (urihash, "http://www.pheed.com/pheed/", nsh); } NsHandler * ns_photo_get_handler (void) { NsHandler *nsh; nsh = g_new0 (NsHandler, 1); nsh->registerNs = ns_photo_register_ns; nsh->prefix = "photo"; nsh->parseItemTag = parse_item_tag; return nsh; } liferea-1.12.7/src/parsers/ns_photo.h000066400000000000000000000017301352135647700174770ustar00rootroot00000000000000/** * @file ns_photo.h photo/ph namespace support * * Copyright (C) 2003-2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NS_PHOTO_H #define _NS_PHOTO_H #include "metadata.h" NsHandler *ns_photo_get_handler(void); NsHandler *ns_pb_get_handler(void); #endif liferea-1.12.7/src/parsers/ns_slash.c000066400000000000000000000054151352135647700174570ustar00rootroot00000000000000/** * @file ns_slash.c slash namespace support * * Copyright (C) 2003-2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include "ns_slash.h" #include "common.h" /* a tag list from http://f3.grp.yahoofs.com/v1/YP40P2oiXvP5CAx4TM6aQw8mDrCtNDwF9_BkMwcvulZHdlhYmCk5cS66_06t9OaIVsubWpwtMUTxYNG7/Modules/Proposed/mod_slash.html hmm... maybe you can find a somewhat shorter URL! ------------------------------------------------------- Elements: * ( #PCDATA ) * ( #PCDATA ) * ( positive integer ) * ( comma-separated integers ) ------------------------------------------------------- */ static void parse_item_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar *tmp = NULL, *section, *department; if (!xmlStrcmp (BAD_CAST"section", cur->name)) { tmp = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); if (tmp) g_hash_table_insert (ctxt->item->tmpdata, "slash:section", tmp); } else if (!xmlStrcmp (BAD_CAST"department", cur->name)) { tmp = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); if (tmp) g_hash_table_insert(ctxt->item->tmpdata, "slash:department", tmp); } if (tmp) { section = g_hash_table_lookup (ctxt->item->tmpdata, "slash:section"); department = g_hash_table_lookup (ctxt->item->tmpdata, "slash:department"); tmp = g_strdup_printf ("%s,%s", section ? section : "", department ? department : "" ); metadata_list_set (&(ctxt->item->metadata), "slash", tmp); g_free (tmp); } } static void ns_slash_register_ns (NsHandler *nsh, GHashTable *prefixhash, GHashTable *urihash) { g_hash_table_insert (prefixhash, "slash", nsh); g_hash_table_insert (urihash, "http://purl.org/rss/1.0/modules/slash/", nsh); } NsHandler * ns_slash_get_handler (void) { NsHandler *nsh; nsh = g_new0 (NsHandler, 1); nsh->registerNs = ns_slash_register_ns; nsh->prefix = "slash"; nsh->parseItemTag = parse_item_tag; return nsh; } liferea-1.12.7/src/parsers/ns_slash.h000066400000000000000000000017521352135647700174640ustar00rootroot00000000000000/** * @file ns_slash.h slash namespace support * * Copyright (C) 2003-2007 Lars Windolf * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _NS_SLASH_H #define _NS_SLASH_H #include "metadata.h" NsHandler *ns_slash_get_handler(void); #endif liferea-1.12.7/src/parsers/ns_syn.c000066400000000000000000000051721352135647700171560ustar00rootroot00000000000000/** * @file ns_syn.c syndication namespace support * * Copyright (C) 2003-2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include "ns_syn.h" /* you can find the syn module documentation at http://web.resource.org/rss/1.0/modules/syndication/ the tag list ------------------------------------------------------- ------------------------------------------------------- */ static void ns_syn_parse_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { xmlChar *tmp; gint period = 0; gint frequency = 1; if (!xmlStrcmp (cur->name, BAD_CAST"updatePeriod")) { if (NULL != (tmp = xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1))) { if (!xmlStrcmp (tmp, BAD_CAST"hourly")) period = 60; else if (!xmlStrcmp (tmp, BAD_CAST"daily")) period = 60*24; else if (!xmlStrcmp (tmp, BAD_CAST"weekly")) period = 7*24*60; else if (!xmlStrcmp (tmp, BAD_CAST"monthly")) /* FIXME: not really exact...*/ period = 30*7*24*60; else if (!xmlStrcmp (tmp, BAD_CAST"yearly")) period = 365*24*60; ctxt->subscription->updateState->synPeriod = period; xmlFree (tmp); } } else if (!xmlStrcmp (cur->name, BAD_CAST"updateFrequency")) { tmp = xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); if (tmp) { frequency = atoi ((gchar *)tmp); ctxt->subscription->updateState->synFrequency = frequency; xmlFree (tmp); } } } static void ns_syn_register_ns (NsHandler *nsh, GHashTable *prefixhash, GHashTable *urihash) { g_hash_table_insert (prefixhash, "syn", nsh); g_hash_table_insert (urihash, "http://purl.org/rss/1.0/modules/syndication/", nsh); } NsHandler * ns_syn_get_handler (void) { NsHandler *nsh; nsh = g_new0 (NsHandler, 1); nsh->registerNs = ns_syn_register_ns; nsh->prefix = "syn"; nsh->parseChannelTag = ns_syn_parse_tag; return nsh; } liferea-1.12.7/src/parsers/ns_syn.h000066400000000000000000000017511352135647700171620ustar00rootroot00000000000000/** * @file ns_syn.h syndication namespace support * * Copyright (C) 2003-2007 Lars Windolf * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _NS_SYN_H #define _NS_SYN_H #include "metadata.h" NsHandler *ns_syn_get_handler(void); #endif liferea-1.12.7/src/parsers/ns_trackback.c000066400000000000000000000037161352135647700202740ustar00rootroot00000000000000/** * @file ns_trackback.c trackback namespace support * * Copyright (C) 2007-2008 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "ns_trackback.h" #include "common.h" #include "xml.h" /* a namespace documentation can be found at http://madskills.com/public/xml/rss/module/trackback/ */ static void parse_item_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar *tmp; /* We ignore the "ping" tag */ if (xmlStrcmp (cur->name, BAD_CAST"about")) return; /* RSS 1.0 */ tmp = xml_get_attribute (cur, "about"); /* RSS 2.0 */ if (!tmp) tmp = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); if (tmp) { ctxt->item->metadata = metadata_list_append (ctxt->item->metadata, "related", tmp); g_free (tmp); } } static void ns_trackback_register_ns (NsHandler *nsh, GHashTable *prefixhash, GHashTable *urihash) { g_hash_table_insert (prefixhash, "trackback", nsh); g_hash_table_insert (urihash, "http://madskills.com/public/xml/rss/module/trackback/", nsh); } NsHandler * ns_trackback_get_handler (void) { NsHandler *nsh; nsh = g_new0 (NsHandler, 1); nsh->prefix = "trackback"; nsh->registerNs = ns_trackback_register_ns; nsh->parseItemTag = parse_item_tag; return nsh; } liferea-1.12.7/src/parsers/ns_trackback.h000066400000000000000000000017001352135647700202700ustar00rootroot00000000000000/** * @file ns_trackback.h trackback namespace support * * Copyright (C) 2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NS_TRACKBACK_H #define _NS_TRACKBACK_H #include "metadata.h" NsHandler *ns_trackback_get_handler(void); #endif liferea-1.12.7/src/parsers/ns_wfw.c000066400000000000000000000037021352135647700171450ustar00rootroot00000000000000/** * @file ns_wfw.c Well-Formed Web RSS namespace support * * Copyright (C) 2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "common.h" #include "metadata.h" #include "ns_wfw.h" #define WFW_PREFIX "wfw" /* One can find the Well-Formed Web namespace spec at: http://wellformedweb.org/news/wfw_namespace_elements Only the comments feed tag is supported. */ static void parse_item_tag (feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar *uri = NULL; if (!xmlStrcmp (BAD_CAST"commentRss", cur->name) || !xmlStrcmp (BAD_CAST"commentRSS", cur->name)) uri = (gchar *)xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); if (uri) { metadata_list_set (&(ctxt->item->metadata), "commentFeedUri", uri); g_free (uri); } } static void ns_wfw_register_ns (NsHandler *nsh, GHashTable *prefixhash, GHashTable *urihash) { g_hash_table_insert (prefixhash, WFW_PREFIX, nsh); g_hash_table_insert (urihash, "http://wellformedweb.org/CommentAPI", nsh); } NsHandler * ns_wfw_get_handler (void) { NsHandler *nsh; nsh = g_new0 (NsHandler, 1); nsh->prefix = WFW_PREFIX; nsh->registerNs = ns_wfw_register_ns; nsh->parseChannelTag = NULL; nsh->parseItemTag = parse_item_tag; return nsh; } liferea-1.12.7/src/parsers/ns_wfw.h000066400000000000000000000016631352135647700171560ustar00rootroot00000000000000/** * @file ns_wfw.h Well-Formed Web RSS namespace support * * Copyright (C) 2007 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _NS_WFW_H #define _NS_WFW_H #include "metadata.h" NsHandler *ns_wfw_get_handler(void); #endif liferea-1.12.7/src/parsers/pie_entry.c000066400000000000000000000113261352135647700176410ustar00rootroot00000000000000/** * @file pie_entry.c Atom0.3 entry parsing * * Copyright (C) 2003-2009 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "common.h" #include "date.h" #include "feed_parser.h" #include "pie_entry.h" #include "pie_feed.h" #include "metadata.h" #include "xml.h" /* tag support, FIXME: base64 not supported */ /* method to parse standard tags for each item element */ itemPtr parseEntry(feedParserCtxtPtr ctxt, xmlNodePtr cur) { xmlChar *xtmp; gchar *tmp2, *tmp; NsHandler *nsh; parseItemTagFunc pf; g_assert(NULL != cur); ctxt->item = item_new(); cur = cur->xmlChildrenNode; while(cur) { if(!cur->name) { g_warning("invalid XML: parser returns NULL value -> tag ignored!"); cur = cur->next; continue; } /* check namespace of this tag */ if(cur->ns) { if((cur->ns->href && (nsh = (NsHandler *)g_hash_table_lookup(ns_pie_ns_uri_table, (gpointer)cur->ns->href))) || (cur->ns->prefix && (nsh = (NsHandler *)g_hash_table_lookup(pie_nstable, (gpointer)cur->ns->prefix)))) { if(NULL != (pf = nsh->parseItemTag)) (*pf)(ctxt, cur); cur = cur->next; continue; } else { /*g_print("unsupported namespace \"%s\"\n", cur->ns->prefix);*/ } } /* explicitly no following else !!! */ if(!xmlStrcmp(cur->name, BAD_CAST"title")) { if(NULL != (tmp = unhtmlize(pie_parse_content_construct(cur)))) { item_set_title(ctxt->item, tmp); g_free(tmp); } } else if(!xmlStrcmp(cur->name, BAD_CAST"link")) { if(NULL != (tmp2 = xml_get_attribute(cur, "href"))) { /* 0.3 link : rel, type and href attribute */ xtmp = xmlGetProp(cur, BAD_CAST"rel"); if(xtmp != NULL && !xmlStrcmp(xtmp, BAD_CAST"alternate")) item_set_source(ctxt->item, tmp2); /* else FIXME: Maybe do something with other links? */ xmlFree(xtmp); g_free(tmp2); } else { /* 0.2 link : element content is the link, or non-alternate link in 0.3 */ if(NULL != (tmp = (gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, 1))) { item_set_source(ctxt->item, tmp); g_free(tmp); } } } else if(!xmlStrcmp(cur->name, BAD_CAST"author")) { /* parse feed author */ tmp = parseAuthor(cur); ctxt->item->metadata = metadata_list_append(ctxt->item->metadata, "author", tmp); g_free(tmp); } else if(!xmlStrcmp(cur->name, BAD_CAST"contributor")) { /* parse feed contributors */ tmp = parseAuthor(cur); ctxt->item->metadata = metadata_list_append(ctxt->item->metadata, "contributor", tmp); g_free(tmp); } else if(!xmlStrcmp(cur->name, BAD_CAST"id")) { if(NULL != (tmp = (gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, 1))) { item_set_id(ctxt->item, tmp); g_free(tmp); } } else if(!xmlStrcmp(cur->name, BAD_CAST"issued")) { /* FIXME: is or or the time tag we want to display? */ if(NULL != (tmp = (gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, 1))) { ctxt->item->time = date_parse_ISO8601 (tmp); g_free(tmp); } } else if(!xmlStrcmp(cur->name, BAD_CAST"content")) { /* support */ if(NULL != (tmp = pie_parse_content_construct(cur))) { item_set_description(ctxt->item, tmp); g_free(tmp); } } else if(!xmlStrcmp(cur->name, BAD_CAST"summary")) { /* can be used for short text descriptions, if there is no description we show the content */ if(!item_get_description(ctxt->item)) { if(NULL != (tmp = pie_parse_content_construct(cur))) { item_set_description(ctxt->item, tmp); g_free(tmp); } } } else if(!xmlStrcmp(cur->name, BAD_CAST"copyright")) { if(NULL != (tmp = (gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, 1))) { ctxt->item->metadata = metadata_list_append(ctxt->item->metadata, "copyright", tmp); g_free(tmp); } } cur = cur->next; } /* after parsing we fill the infos into the itemPtr structure */ ctxt->item->readStatus = FALSE; return ctxt->item; } liferea-1.12.7/src/parsers/pie_entry.h000066400000000000000000000017431352135647700176500ustar00rootroot00000000000000/** * @file pie_entry.h Atom 0.3 entry tag parsing * * Copyright (C) 2003-2008 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _PIE_ENTRY_H #define _PIE_ENTRY_H #include "item.h" #include "feed_parser.h" itemPtr parseEntry(feedParserCtxtPtr ctxt, xmlNodePtr cur); #endif liferea-1.12.7/src/parsers/pie_feed.c000066400000000000000000000242331352135647700174040ustar00rootroot00000000000000/** * @file pie_feed.c Atom 0.3 channel parsing * * Copyright (C) 2003-2010 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "pie_feed.h" #include #include #include #include #include "common.h" #include "date.h" #include "feed_parser.h" #include "feedlist.h" #include "pie_entry.h" #include "ns_dc.h" #include "metadata.h" #include "xml.h" /* to store the PIENsHandler structs for all supported RDF namespace handlers */ GHashTable *pie_nstable = NULL; GHashTable *ns_pie_ns_uri_table = NULL; /* note: the tag order has to correspond with the PIE_FEED_* defines in the header file */ /* The follow are not used, but had been recognized: "language", <---- Not in atom 0.2 or 0.3. We should use xml:lang "lastBuildDate", <--- Where is this from? "issued", <-- Not in the specs for feeds "created", <---- Not in the specs for feeds */ gchar* pie_parse_content_construct(xmlNodePtr cur) { gchar *mode, *type, *ret; g_assert(NULL != cur); ret = NULL; /* determine encoding mode */ mode = xml_get_attribute (cur, "mode"); type = xml_get_attribute (cur, "type"); /* Modes are used in older versions of ATOM, including 0.3. It does not exist in the newer IETF drafts.*/ if(NULL != mode) { if(!strcmp(mode, "escaped")) { gchar *tmp; tmp = xhtml_extract (cur, 0, NULL); if(NULL != tmp) ret = tmp; } else if(!strcmp(mode, "xml")) { ret = xhtml_extract (cur, 1,NULL); } else if(!strcmp(mode, "base64")) { g_warning("Base64 encoded in Atom feeds not supported!\n"); } else if(!strcmp(mode, "multipart/alternative")) { if(NULL != cur->xmlChildrenNode) ret = pie_parse_content_construct(cur->xmlChildrenNode); } g_free(mode); } else { /* some feeds don'ts specify a mode but a MIME type in the type attribute... */ /* not sure what MIME types are necessary... */ /* This that need to be de-encoded and should not contain sub-tags.*/ if(NULL == type || !g_ascii_strcasecmp(type, "TEXT") || !strcmp(type, "text/plain")) { gchar *tmp; tmp = (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1); ret = g_markup_printf_escaped("
%s
", tmp); g_free(tmp); /* Next are things that contain subttags */ } else if(!g_ascii_strcasecmp(type, "HTML") || !strcmp(type, "text/html")) { ret = xhtml_extract (cur, 0,"http://default.base.com/"); } else if(/* HTML types */ !g_ascii_strcasecmp(type, "xhtml") || !strcmp(type, "application/xhtml+xml")) { ret = xhtml_extract (cur, 1,"http://default.base.com/"); } } /* If the type was text, everything must be now escaped and wrapped in pre tags.... Also, the atom 0.3 spec says that the default type MUST be considered to be text/plain. The type tag is required in 0.2.... */ //if (ret != NULL && (type == NULL || !strcmp(type, "text/plain") || !strcmp(type,"TEXT")))) { g_free(type); return ret; } gchar * parseAuthor(xmlNodePtr cur) { gchar *tmp = NULL; gchar *tmp2, *tmp3; g_assert(NULL != cur); cur = cur->xmlChildrenNode; while (cur != NULL) { if(NULL == cur->name) { g_warning("invalid XML: parser returns NULL value -> tag ignored!"); cur = cur->next; continue; } if (!xmlStrcmp(cur->name, BAD_CAST"name")) tmp = (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1); if (!xmlStrcmp(cur->name, BAD_CAST"email")) { tmp2 = (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1); tmp3 = g_strdup_printf("%s %s", tmp, tmp2, tmp2); g_free(tmp); g_free(tmp2); tmp = tmp3; } if (!xmlStrcmp(cur->name, BAD_CAST"url")) { tmp2 = (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1); tmp3 = g_strdup_printf("%s (%s)", tmp, tmp2, _("Website")); g_free(tmp); g_free(tmp2); tmp = tmp3; } cur = cur->next; } return tmp; } /* reads a PIE feed URL and returns a new channel structure (even if the feed could not be read) */ static void pie_parse(feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar *tmp2, *tmp = NULL, *tmp3; NsHandler *nsh; parseChannelTagFunc pf; while(TRUE) { if(xmlStrcmp(cur->name, BAD_CAST"feed")) { g_string_append(ctxt->feed->parseErrors, "

Could not find Atom/Echo/PIE header!

"); break; } /* parse feed contents */ cur = cur->xmlChildrenNode; while(cur) { if(!cur->name || cur->type != XML_ELEMENT_NODE) { cur = cur->next; continue; } /* check namespace of this tag */ if(cur->ns) { if((cur->ns->href && (nsh = (NsHandler *)g_hash_table_lookup(ns_pie_ns_uri_table, (gpointer)cur->ns->href))) || (cur->ns->prefix && (nsh = (NsHandler *)g_hash_table_lookup(pie_nstable, (gpointer)cur->ns->prefix)))) { pf = nsh->parseChannelTag; if(pf) (*pf)(ctxt, cur); cur = cur->next; continue; } else { /*g_print("unsupported namespace \"%s\"\n", cur->ns->prefix);*/ } } /* explicitly no following else !!! */ if(!xmlStrcmp(cur->name, BAD_CAST"title")) { tmp = unhtmlize(pie_parse_content_construct(cur)); if(tmp) { if(ctxt->title) g_free(ctxt->title); ctxt->title = tmp; } } else if(!xmlStrcmp(cur->name, BAD_CAST"link")) { tmp = xml_get_attribute (cur, "href"); if(tmp) { /* 0.3 link : rel, type and href attribute */ tmp2 = xml_get_attribute (cur, "rel"); if(tmp2 && g_str_equal(tmp2, "alternate")) subscription_set_homepage (ctxt->subscription, tmp); /* else FIXME: Maybe do something with other links? */ g_free(tmp2); g_free(tmp); } else { /* 0.2 link : element content is the link, or non-alternate link in 0.3 */ tmp = (gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, 1); if(tmp) { subscription_set_homepage (ctxt->subscription, tmp); g_free(tmp); } } /* parse feed author */ } else if(!xmlStrcmp(cur->name, BAD_CAST"author")) { /* parse feed author */ tmp = parseAuthor(cur); if(tmp) { ctxt->subscription->metadata = metadata_list_append(ctxt->subscription->metadata, "author", tmp); g_free(tmp); } } else if (!xmlStrcmp (cur->name, BAD_CAST"tagline")) { tmp = pie_parse_content_construct (cur); if (tmp) { metadata_list_set (&ctxt->subscription->metadata, "description", tmp); g_free (tmp); } } else if(!xmlStrcmp(cur->name, BAD_CAST"generator")) { tmp = unhtmlize((gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, 1)); if(tmp && tmp[0] != '\0') { tmp2 = xml_get_attribute (cur, "version"); if(tmp2) { tmp3 = g_strdup_printf("%s %s", tmp, tmp2); g_free(tmp); g_free(tmp2); tmp = tmp3; } tmp2 = xml_get_attribute (cur, "url"); if(tmp2) { tmp3 = g_strdup_printf("%s", tmp2, tmp); g_free(tmp2); g_free(tmp); tmp = tmp3; } ctxt->subscription->metadata = metadata_list_append(ctxt->subscription->metadata, "feedgenerator", tmp); } g_free(tmp); } else if(!xmlStrcmp(cur->name, BAD_CAST"copyright")) { tmp = pie_parse_content_construct(cur); if(tmp) { ctxt->subscription->metadata = metadata_list_append(ctxt->subscription->metadata, "copyright", tmp); g_free(tmp); } } else if(!xmlStrcmp(cur->name, BAD_CAST"modified")) { /* Modified was last used in IETF draft 02) */ tmp = (gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, 1); if(tmp) { ctxt->subscription->metadata = metadata_list_append(ctxt->subscription->metadata, "pubDate", tmp); ctxt->feed->time = date_parse_ISO8601 (tmp); g_free(tmp); } } else if(!xmlStrcmp(cur->name, BAD_CAST"updated")) { /* Updated was added in IETF draft 03 */ tmp = (gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, 1); if(tmp) { ctxt->subscription->metadata = metadata_list_append(ctxt->subscription->metadata, "pubDate", tmp); ctxt->feed->time = date_parse_ISO8601 (tmp); g_free(tmp); } } else if(!xmlStrcmp(cur->name, BAD_CAST"contributor")) { tmp = parseAuthor(cur); if(tmp) { ctxt->subscription->metadata = metadata_list_append(ctxt->subscription->metadata, "contributor", tmp); g_free(tmp); } } else if((!xmlStrcmp(cur->name, BAD_CAST"entry"))) { ctxt->item = parseEntry(ctxt, cur); if(ctxt->item) { if(0 == ctxt->item->time) ctxt->item->time = ctxt->feed->time; ctxt->items = g_list_append(ctxt->items, ctxt->item); } } cur = cur->next; } break; } } static gboolean pie_format_check(xmlDocPtr doc, xmlNodePtr cur) { if(!xmlStrcmp(cur->name, BAD_CAST"feed")) return TRUE; else return FALSE; } static void pie_add_ns_handler (NsHandler *handler) { g_assert (NULL != pie_nstable); g_hash_table_insert (pie_nstable, (gpointer)handler->prefix, handler); g_assert (handler->registerNs != NULL); handler->registerNs (handler, pie_nstable, ns_pie_ns_uri_table); } feedHandlerPtr pie_init_feed_handler (void) { feedHandlerPtr fhp; fhp = g_new0 (struct feedHandler, 1); if (!pie_nstable) { pie_nstable = g_hash_table_new (g_str_hash, g_str_equal); ns_pie_ns_uri_table = g_hash_table_new (g_str_hash, g_str_equal); /* register RSS name space handlers */ pie_add_ns_handler (ns_dc_get_handler ()); } /* prepare feed handler structure */ fhp->typeStr = "atom"; fhp->feedParser = pie_parse; fhp->checkFormat = pie_format_check; return fhp; } liferea-1.12.7/src/parsers/pie_feed.h000066400000000000000000000024451352135647700174120ustar00rootroot00000000000000/** * @file pie_feed.h Atom 0.3 feed parsing * * Copyright (C) 2003-2010 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _PIE_FEED_H #define _PIE_FEED_H #include #include "feed_parser.h" extern GHashTable *pie_nstable; extern GHashTable *ns_pie_ns_uri_table; feedHandlerPtr pie_init_feed_handler(void); /** * This parses an Atom content construct. * * @param cur the parent node of the elements to be parsed. * @returns g_strduped string which must be freed by the caller. */ gchar* pie_parse_content_construct(xmlNodePtr cur); gchar* parseAuthor(xmlNodePtr cur); #endif liferea-1.12.7/src/parsers/rss_channel.c000066400000000000000000000277771352135647700201630ustar00rootroot00000000000000/** * @file rss_channel.c some tolerant and generic RSS/RDF channel parsing * * Copyright (C) 2003-2010 Lars Windolf * Copyright (C) 2005-2006 Nathan Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "rss_channel.h" #include #include #include "common.h" #include "date.h" #include "feed_parser.h" #include "feedlist.h" #include "metadata.h" #include "ns_admin.h" #include "ns_ag.h" #include "ns_blogChannel.h" #include "ns_cC.h" #include "ns_content.h" #include "ns_dc.h" #include "ns_georss.h" #include "ns_itunes.h" #include "ns_media.h" #include "ns_photo.h" #include "ns_slash.h" #include "ns_syn.h" #include "ns_trackback.h" #include "ns_wfw.h" #include "rss_item.h" #include "xml.h" /* HTML output strings */ #define TEXT_INPUT_FORM_START "
" GHashTable *RssToMetadataMapping = NULL; /* to store the NsHandler structs for all supported RDF namespace handlers */ GHashTable *rss_nstable = NULL; /* duplicate storage: for quick finding... */ GHashTable *ns_rss_ns_uri_table = NULL; /* This function parses the metadata for the channel. This does not parse the items. The items are parsed elsewhere. */ static void parseChannel(feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar *tmp, *tmp2, *tmp3; NsHandler *nsh; parseChannelTagFunc pf; g_assert(NULL != cur); cur = cur->xmlChildrenNode; while(cur) { if(cur->type != XML_ELEMENT_NODE || cur->name == NULL) { cur = cur->next; continue; } /* check namespace of this tag */ if(cur->ns) { if((cur->ns->href && (nsh = (NsHandler *)g_hash_table_lookup(ns_rss_ns_uri_table, (gpointer)cur->ns->href))) || (cur->ns->prefix && (nsh = (NsHandler *)g_hash_table_lookup(rss_nstable, (gpointer)cur->ns->prefix)))) { if(NULL != (pf = nsh->parseChannelTag)) (*pf)(ctxt, cur); cur = cur->next; continue; } else { /*g_print("unsupported namespace \"%s\"\n", cur->ns->prefix);*/ } } /* explicitly no following else !!! */ /* Check for metadata tags */ if(NULL != (tmp2 = g_hash_table_lookup(RssToMetadataMapping, cur->name))) { if(NULL != (tmp3 = (gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, TRUE))) { ctxt->subscription->metadata = metadata_list_append(ctxt->subscription->metadata, tmp2, tmp3); g_free(tmp3); } } /* check for specific tags */ else if(!xmlStrcmp(cur->name, BAD_CAST"pubDate")) { if(NULL != (tmp = (gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, 1))) { ctxt->subscription->metadata = metadata_list_append(ctxt->subscription->metadata, "pubDate", tmp); ctxt->feed->time = date_parse_RFC822 (tmp); g_free(tmp); } } else if(!xmlStrcmp(cur->name, BAD_CAST"ttl")) { if(NULL != (tmp = (gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, TRUE))) { ctxt->subscription->updateState->timeToLive = atoi (tmp); g_free(tmp); } } else if(!xmlStrcmp(cur->name, BAD_CAST"title")) { if(NULL != (tmp = unhtmlize((gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, TRUE)))) { if(ctxt->title) g_free(ctxt->title); ctxt->title = tmp; } } else if(!xmlStrcmp(cur->name, BAD_CAST"link")) { if(NULL != (tmp = unhtmlize((gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, TRUE)))) { subscription_set_homepage (ctxt->subscription, tmp); g_free(tmp); } } else if (!xmlStrcmp (cur->name, BAD_CAST"description")) { tmp = xhtml_extract (cur, 0, NULL); if (tmp) { metadata_list_set (&ctxt->subscription->metadata, "description", tmp); g_free (tmp); } } cur = cur->next; } } static gchar* parseTextInput(xmlNodePtr cur) { gchar *buffer = NULL, *tiLink = NULL, *tiName = NULL, *tiDescription = NULL, *tiTitle = NULL; g_assert(NULL != cur); cur = cur->xmlChildrenNode; while(cur) { if(cur->type == XML_ELEMENT_NODE) { if(!xmlStrcmp(cur->name, BAD_CAST"title")) { g_free(tiTitle); tiTitle = xhtml_extract (cur, 0, NULL); } else if(!xmlStrcmp(cur->name, BAD_CAST"description")) { g_free(tiDescription); tiDescription = xhtml_extract (cur, 0, NULL); } else if(!xmlStrcmp(cur->name, BAD_CAST"name")) { g_free(tiName); tiName = (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1); } else if(!xmlStrcmp(cur->name, BAD_CAST"link")) { g_free(tiLink); tiLink = (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1); } } cur = cur->next; } /* some postprocessing */ tiTitle = unhtmlize(tiTitle); tiDescription = unhtmlize(tiDescription); if(tiLink && tiName && tiDescription && tiTitle) { buffer = g_strdup_printf("

%s%s%s%s%s%s%s%s

", tiDescription, TEXT_INPUT_FORM_START, tiLink, TEXT_INPUT_TEXT_FIELD, tiName, TEXT_INPUT_SUBMIT, tiTitle, TEXT_INPUT_FORM_END); } g_free(tiTitle); g_free(tiDescription); g_free(tiName); g_free(tiLink); return buffer; } static gchar* parseImage(xmlNodePtr cur) { gchar *tmp; g_assert(NULL != cur); cur = cur->xmlChildrenNode; while (cur != NULL) { if (cur->type == XML_ELEMENT_NODE) { if (!xmlStrcmp(cur->name, BAD_CAST"url")) { tmp = (gchar *)xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1); if(NULL != tmp) { return tmp; } } } cur = cur->next; } return NULL; } /** * Parses given data as an RSS/RDF channel * * @param ctxt the feed parser context * @param cur the root node of the XML document */ static void rss_parse(feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar *tmp; short rdf = 0; int error = 0; ctxt->feed->time = time(NULL); if(!xmlStrcmp(cur->name, BAD_CAST"rss")) { cur = cur->xmlChildrenNode; rdf = 0; } else if(!xmlStrcmp(cur->name, BAD_CAST"rdf") || !xmlStrcmp(cur->name, BAD_CAST"RDF")) { cur = cur->xmlChildrenNode; rdf = 1; } else if(!xmlStrcmp(cur->name, BAD_CAST"Channel")) { /* explicitly no "cur = cur->xmlChildrenNode;" ! */ rdf = 0; } else { g_string_append(ctxt->feed->parseErrors, "

Could not find RDF/RSS header!

"); error = 1; } if(!error) { while(cur && xmlIsBlankNode(cur)) { cur = cur->next; } while(cur) { if(!cur->name) { g_warning("invalid XML: parser returns NULL value -> tag ignored!"); cur = cur->next; continue; } if((!xmlStrcmp(cur->name, BAD_CAST"channel")) || (!xmlStrcmp(cur->name, BAD_CAST"Channel"))) { parseChannel(ctxt, cur); if(0 == rdf) cur = cur->xmlChildrenNode; break; } cur = cur->next; } /* For RDF (rss 0.9 or 1.0), cur now points to the item after the channel tag. */ /* For RSS, cur now points to the first item inside of the channel tag */ /* This ends up being the thing with the items, (and images/textinputs for RDF) */ /* parse channel contents */ while(cur) { if(cur->type != XML_ELEMENT_NODE || NULL == cur->name) { cur = cur->next; continue; } /* save link to channel image */ if((!xmlStrcmp(cur->name, BAD_CAST"image"))) { if(NULL != (tmp = parseImage(cur))) { metadata_list_set (&ctxt->subscription->metadata, "imageUrl", tmp); g_free(tmp); } } else if((!xmlStrcmp(cur->name, BAD_CAST"textinput")) || (!xmlStrcmp(cur->name, BAD_CAST"textInput"))) { /* no matter if we parse Userland or Netscape, there should be only one text[iI]nput per channel and parsing the rdf:ressource one should not harm */ if(NULL != (tmp = parseTextInput(cur))) { ctxt->subscription->metadata = metadata_list_append(ctxt->subscription->metadata, "textInput", tmp); g_free(tmp); } } else if((!xmlStrcmp(cur->name, BAD_CAST"items"))) { /* RSS 1.1 */ xmlNodePtr itemNode = cur->xmlChildrenNode; while(itemNode) { if ((!xmlStrcmp(itemNode->name, BAD_CAST"item"))) { if(NULL != (ctxt->item = parseRSSItem(ctxt, itemNode))) { if(0 == ctxt->item->time) ctxt->item->time = ctxt->feed->time; ctxt->items = g_list_append(ctxt->items, ctxt->item); } } itemNode = itemNode->next; } } else if((!xmlStrcmp(cur->name, BAD_CAST"item"))) { /* RSS 1.0, 2.0 */ /* collect channel items */ if(NULL != (ctxt->item = parseRSSItem(ctxt, cur))) { if(0 == ctxt->item->time) ctxt->item->time = ctxt->feed->time; ctxt->items = g_list_append(ctxt->items, ctxt->item); } } cur = cur->next; } } } static gboolean rss_format_check(xmlDocPtr doc, xmlNodePtr cur) { if(!xmlStrcmp(cur->name, BAD_CAST"rss") || !xmlStrcmp(cur->name, BAD_CAST"rdf") || !xmlStrcmp(cur->name, BAD_CAST"RDF")) { return TRUE; } /* RSS 1.1 */ if((NULL != cur->ns) && (NULL != cur->ns->href) && !xmlStrcmp(cur->name, BAD_CAST"Channel") && !xmlStrcmp(cur->ns->href, BAD_CAST"http://purl.org/net/rss1.1#")) return TRUE; return FALSE; } static void rss_add_ns_handler (NsHandler *handler) { g_assert (NULL != rss_nstable); g_hash_table_insert (rss_nstable, (gpointer)handler->prefix, handler); g_assert (handler->registerNs != NULL); handler->registerNs (handler, rss_nstable, ns_rss_ns_uri_table); } feedHandlerPtr rss_init_feed_handler (void) { feedHandlerPtr fhp; fhp = g_new0 (struct feedHandler, 1); /* Note: the tag mapping definitions and namespace registration infos are shared with rss_item.c */ if (!RssToMetadataMapping) { RssToMetadataMapping = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_insert (RssToMetadataMapping, "copyright", "copyright"); g_hash_table_insert (RssToMetadataMapping, "category", "category"); g_hash_table_insert (RssToMetadataMapping, "webMaster", "webmaster"); g_hash_table_insert (RssToMetadataMapping, "language", "language"); g_hash_table_insert (RssToMetadataMapping, "managingEditor", "managingEditor"); g_hash_table_insert (RssToMetadataMapping, "lastBuildDate", "contentUpdateDate"); g_hash_table_insert (RssToMetadataMapping, "generator", "feedgenerator"); g_hash_table_insert (RssToMetadataMapping, "publisher", "webmaster"); g_hash_table_insert (RssToMetadataMapping, "author", "author"); g_hash_table_insert (RssToMetadataMapping, "comments", "commentsUri"); } if (!rss_nstable) { rss_nstable = g_hash_table_new (g_str_hash, g_str_equal); ns_rss_ns_uri_table = g_hash_table_new (g_str_hash, g_str_equal); /* register name space handlers */ rss_add_ns_handler (ns_bC_get_handler ()); rss_add_ns_handler (ns_dc_get_handler ()); rss_add_ns_handler (ns_slash_get_handler ()); rss_add_ns_handler (ns_content_get_handler ()); rss_add_ns_handler (ns_syn_get_handler ()); rss_add_ns_handler (ns_admin_get_handler ()); rss_add_ns_handler (ns_ag_get_handler ()); rss_add_ns_handler (ns_cC_get_handler ()); rss_add_ns_handler (ns_photo_get_handler ()); rss_add_ns_handler (ns_pb_get_handler ()); rss_add_ns_handler (ns_wfw_get_handler ()); rss_add_ns_handler (ns_media_get_handler ()); rss_add_ns_handler (ns_itunes_get_handler ()); rss_add_ns_handler (ns_trackback_get_handler ()); rss_add_ns_handler (ns_georss_get_handler ()); } /* prepare feed handler structure */ fhp->typeStr = "rss"; fhp->feedParser = rss_parse; fhp->checkFormat = rss_format_check; return fhp; } liferea-1.12.7/src/parsers/rss_channel.h000066400000000000000000000020451352135647700201450ustar00rootroot00000000000000/** * @file rss_channel.h some tolerant and generic RSS/RDF channel parsing * * Copyright (C) 2003-2008 Lars Windolf * Copyright (C) 2005-2006 Nathan Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _RSS_CHANNEL_H #define _RSS_CHANNEL_H #include "feed_parser.h" feedHandlerPtr rss_init_feed_handler(void); #endif liferea-1.12.7/src/parsers/rss_item.c000066400000000000000000000132751352135647700174750ustar00rootroot00000000000000/** * @file rss_item.c RSS/RDF item parsing * * Copyright (C) 2003-2010 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "rss_item.h" #include #include "common.h" #include "date.h" #include "enclosure.h" #include "metadata.h" #include "xml.h" #define RDF_NS BAD_CAST"http://www.w3.org/1999/02/22-rdf-syntax-ns#" extern GHashTable *RssToMetadataMapping; /* uses the same namespace handler as rss_channel */ extern GHashTable *rss_nstable; extern GHashTable *ns_rss_ns_uri_table; /* method to parse standard tags for each item element */ itemPtr parseRSSItem (feedParserCtxtPtr ctxt, xmlNodePtr cur) { gchar *tmp, *tmp2, *tmp3; NsHandler *nsh; parseItemTagFunc pf; g_assert(NULL != cur); ctxt->item = item_new (); ctxt->item->tmpdata = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free); /* try to get an item about id */ tmp = xml_get_attribute (cur, "about"); if (tmp) { item_set_id (ctxt->item, tmp); item_set_source (ctxt->item, tmp); g_free (tmp); } cur = cur->xmlChildrenNode; while (cur) { if (cur->type != XML_ELEMENT_NODE || !cur->name) { cur = cur->next; continue; } /* check namespace of this tag */ if (cur->ns) { if((cur->ns->href && (nsh = (NsHandler *)g_hash_table_lookup(ns_rss_ns_uri_table, (gpointer)cur->ns->href))) || (cur->ns->prefix && (nsh = (NsHandler *)g_hash_table_lookup(rss_nstable, (gpointer)cur->ns->prefix)))) { pf = nsh->parseItemTag; if (pf) (*pf)(ctxt, cur); cur = cur->next; continue; } else { /*g_print("unsupported namespace \"%s\"\n", cur->ns->prefix);*/ } } /* explicitly no following else!!! */ /* check for metadata tags */ tmp2 = g_hash_table_lookup(RssToMetadataMapping, cur->name); if (tmp2) { tmp3 = (gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, TRUE); if (tmp3) { ctxt->item->metadata = metadata_list_append(ctxt->item->metadata, tmp2, tmp3); g_free(tmp3); } } /* check for specific tags */ else if(!xmlStrcmp(cur->name, BAD_CAST"pubDate")) { tmp = (gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, 1); if (tmp) { ctxt->item->time = date_parse_RFC822 (tmp); g_free(tmp); } } else if(!xmlStrcmp(cur->name, BAD_CAST"enclosure")) { /* RSS 0.93 allows multiple enclosures */ tmp = xml_get_attribute (cur, "url"); if (tmp) { const gchar *feedURL = subscription_get_homepage (ctxt->subscription); gchar *type = xml_get_attribute (cur, "type"); gchar *lengthStr = xml_get_attribute (cur, "length"); gchar *enclStr = NULL; gssize length = 0; if (lengthStr) length = atol (lengthStr); if((strstr(tmp, "://") == NULL) && feedURL && (feedURL[0] != '|') && (strstr(feedURL, "://") != NULL)) { /* add base URL if necessary and possible */ tmp2 = g_strdup_printf("%s/%s", feedURL, tmp); g_free(tmp); tmp = tmp2; } enclStr = enclosure_values_to_string (tmp, type, length, FALSE); ctxt->item->metadata = metadata_list_append(ctxt->item->metadata, "enclosure", enclStr); ctxt->item->hasEnclosure = TRUE; g_free (enclStr); g_free (tmp); g_free (type); g_free (lengthStr); } } else if(!xmlStrcmp(cur->name, BAD_CAST"guid")) { if(!item_get_id(ctxt->item)) { tmp = (gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, 1); if (tmp) { if (strlen (tmp) > 0) { item_set_id(ctxt->item, tmp); ctxt->item->validGuid = TRUE; tmp2 = xml_get_attribute (cur, "isPermaLink"); if(!item_get_source(ctxt->item) && (tmp2 == NULL || g_str_equal (tmp2, "true"))) item_set_source(ctxt->item, tmp); /* Per the RSS 2.0 spec. */ if(tmp2) xmlFree(tmp2); } xmlFree(tmp); } } } else if(!xmlStrcmp(cur->name, BAD_CAST"title")) { tmp = unhtmlize((gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, TRUE)); if (tmp) { item_set_title(ctxt->item, tmp); g_free(tmp); } } else if(!xmlStrcmp(cur->name, BAD_CAST"link")) { tmp = unhtmlize((gchar *)xmlNodeListGetString(ctxt->doc, cur->xmlChildrenNode, TRUE)); if (tmp) { item_set_source(ctxt->item, tmp); g_free(tmp); } } else if(!xmlStrcmp(cur->name, BAD_CAST"description")) { tmp = xhtml_extract (cur, 0, NULL); if (tmp) { /* don't overwrite content:encoded descriptions... */ if(!item_get_description(ctxt->item)) item_set_description(ctxt->item, tmp); g_free(tmp); } } else if(!xmlStrcmp(cur->name, BAD_CAST"source")) { tmp = xml_get_attribute (cur, "url"); if (tmp) { metadata_list_set (&(ctxt->item->metadata), "realSourceUrl", g_strchomp (tmp)); g_free (tmp); } tmp = unhtmlize ((gchar *)xmlNodeListGetString (ctxt->doc, cur->xmlChildrenNode, 1)); if (tmp) { metadata_list_set (&(ctxt->item->metadata), "realSourceTitle", g_strchomp (tmp)); g_free(tmp); } } cur = cur->next; } ctxt->item->readStatus = FALSE; g_hash_table_destroy(ctxt->item->tmpdata); ctxt->item->tmpdata = NULL; return ctxt->item; } liferea-1.12.7/src/parsers/rss_item.h000066400000000000000000000017341352135647700174770ustar00rootroot00000000000000/** * @file rss_item.h RSS item tag parsing * * Copyright (C) 2003-2008 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _RSS_ITEM_H #define _RSS_ITEM_H #include "item.h" #include "feed_parser.h" itemPtr parseRSSItem(feedParserCtxtPtr ctxt, xmlNodePtr cur); #endif liferea-1.12.7/src/plugins_engine.c000066400000000000000000000127621352135647700171770ustar00rootroot00000000000000/* * plugins_engine.c: Liferea Plugins using libpeas * (derived from gtranslator code) * * Copyright (C) 2002-2005 Paolo Maggi * Copyright (C) 2010 Steve Frécinaux * Copyright (C) 2012-2015 Lars Windolf * * 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., 59 Temple Place, Suite 330, * Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include "plugins_engine.h" G_DEFINE_TYPE (LifereaPluginsEngine, liferea_plugins_engine, PEAS_TYPE_ENGINE) struct _LifereaPluginsEnginePrivate { GSettings *plugin_settings; }; LifereaPluginsEngine *default_engine = NULL; static void liferea_plugins_engine_init (LifereaPluginsEngine * engine) { gchar *typelib_dir; GError *error = NULL; PeasPluginInfo *plugin_installer_plugin_info = NULL; engine->priv = G_TYPE_INSTANCE_GET_PRIVATE (engine, LIFEREA_TYPE_PLUGINS_ENGINE, LifereaPluginsEnginePrivate); peas_engine_enable_loader (PEAS_ENGINE (engine), "python3"); engine->priv->plugin_settings = g_settings_new ("net.sf.liferea.plugins"); /* Require Lifereas's typelib. */ typelib_dir = g_build_filename (PACKAGE_LIB_DIR, "girepository-1.0", NULL); if (!g_irepository_require_private (g_irepository_get_default (), typelib_dir, "Liferea", "3.0", 0, &error)) { g_warning ("Could not load Liferea repository: %s", error->message); g_error_free (error); error = NULL; } g_free (typelib_dir); /* This should be moved to libpeas */ if (!g_irepository_require (g_irepository_get_default (), "Peas", "1.0", 0, &error)) { g_warning ("Could not load Peas repository: %s", error->message); g_error_free (error); error = NULL; } if (!g_irepository_require (g_irepository_get_default (), "PeasGtk", "1.0", 0, &error)) { g_warning ("Could not load PeasGtk repository: %s", error->message); g_error_free (error); error = NULL; } peas_engine_add_search_path (PEAS_ENGINE (engine), g_build_filename (g_get_user_data_dir (), "liferea", "plugins", NULL), g_build_filename (g_get_user_data_dir (), "liferea", "plugins", NULL)); peas_engine_add_search_path (PEAS_ENGINE (engine), g_build_filename (PACKAGE_LIB_DIR, "plugins", NULL), g_build_filename (PACKAGE_DATA_DIR, "plugins", NULL)); g_settings_bind (engine->priv->plugin_settings, "active-plugins", engine, "loaded-plugins", G_SETTINGS_BIND_DEFAULT); plugin_installer_plugin_info = peas_engine_get_plugin_info (PEAS_ENGINE (engine), "plugin-installer"); if (plugin_installer_plugin_info) peas_engine_load_plugin (PEAS_ENGINE (engine), plugin_installer_plugin_info); else g_warning ("The plugin-installer plugin was not found."); } /* Provide default signal handlers */ static void on_extension_added (PeasExtensionSet *extensions, PeasPluginInfo *info, PeasExtension *exten, gpointer user_data) { peas_extension_call (exten, "activate"); } static void on_extension_removed (PeasExtensionSet *extensions, PeasPluginInfo *info, PeasExtension *exten, gpointer user_data) { peas_extension_call (exten, "deactivate"); } void liferea_plugins_engine_set_default_signals (PeasExtensionSet *extensions, gpointer user_data) { g_signal_connect (extensions, "extension-added", G_CALLBACK (on_extension_added), user_data); g_signal_connect (extensions, "extension-removed", G_CALLBACK (on_extension_removed), user_data); peas_extension_set_call (extensions, "activate"); } static void liferea_plugins_engine_dispose (GObject * object) { LifereaPluginsEngine *engine = LIFEREA_PLUGINS_ENGINE (object); if (engine->priv->plugin_settings) { g_object_unref (engine->priv->plugin_settings); engine->priv->plugin_settings = NULL; } G_OBJECT_CLASS (liferea_plugins_engine_parent_class)->dispose (object); } static void liferea_plugins_engine_class_init (LifereaPluginsEngineClass * klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = liferea_plugins_engine_dispose; g_type_class_add_private (klass, sizeof (LifereaPluginsEnginePrivate)); } LifereaPluginsEngine * liferea_plugins_engine_get_default (void) { if (!default_engine) { default_engine = LIFEREA_PLUGINS_ENGINE (g_object_new (LIFEREA_TYPE_PLUGINS_ENGINE, NULL)); g_object_add_weak_pointer (G_OBJECT (default_engine), (gpointer) &default_engine); } return default_engine; } liferea-1.12.7/src/plugins_engine.h000066400000000000000000000047241352135647700172030ustar00rootroot00000000000000/* * plugins_engine.h: Liferea Plugins using libpeas * * Copyright (C) 2012-2015 Lars Windolf * * 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., 59 Temple Place, Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _PLUGINS_ENGINE #define _PLUGINS_ENGINE #include #include G_BEGIN_DECLS #define LIFEREA_TYPE_PLUGINS_ENGINE (liferea_plugins_engine_get_type ()) #define LIFEREA_PLUGINS_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LIFEREA_TYPE_PLUGINS_ENGINE, LifereaPluginsEngine)) #define LIFEREA_PLUGINS_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LIFEREA_TYPE_PLUGINS_ENGINE, LifereaPluginsEngineClass)) #define LIFEREA_IS_PLUGINS_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LIFEREA_TYPE_PLUGINS_ENGINE)) #define LIFEREA_IS_PLUGINS_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LIFEREA_TYPE_PLUGINS_ENGINE)) #define LIFEREA_PLUGINS_ENGINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), LIFEREA_TYPE_PLUGINS_ENGINE, LifereaPluginsEngineClass)) typedef struct _LifereaPluginsEngine LifereaPluginsEngine; typedef struct _LifereaPluginsEnginePrivate LifereaPluginsEnginePrivate; struct _LifereaPluginsEngine { PeasEngine parent; LifereaPluginsEnginePrivate *priv; }; typedef struct _LifereaPluginsEngineClass LifereaPluginsEngineClass; struct _LifereaPluginsEngineClass { PeasEngineClass parent_class; }; GType liferea_plugins_engine_get_type (void) G_GNUC_CONST; LifereaPluginsEngine *liferea_plugins_engine_get_default (void); /** * liferea_plugins_engine_set_default_signals: * * Set up default "activate" and "deactivate" signals. * * @extensions: the extensions set * @user_data: some user data (or NULL) */ void liferea_plugins_engine_set_default_signals (PeasExtensionSet *extensions, gpointer user_data); G_END_DECLS #endif liferea-1.12.7/src/render.c000066400000000000000000000355221352135647700154470ustar00rootroot00000000000000/** * @file render.c generic GTK theme and XSLT rendering handling * * Copyright (C) 2006-2018 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include "conf.h" #include "common.h" #include "debug.h" #include "item.h" #include "itemset.h" #include "render.h" #include "xml.h" #include "ui/liferea_htmlview.h" /* Liferea provides special screens and the item and the feed displays using self-generated HTML. To separate code and layout and to easily localize the layout it is provided by automake XSL stylesheet templates. Using automake translations are merged into those XSL stylesheets. On startup Liferea loads those expanded XSL stylesheets. During startup Liferea initially reduces the contained translations to the currently used ones by stripping all others from the XSL stylesheet using the localization stylesheet (xslt/i18n-filter.xslt). The resulting XSLT instance is kept in memory and used to render each items and feeds. The following code uses a hash table to maintain stylesheet instance and performs CSS adaptions to the current GTK theme. */ static renderParamPtr langParams = NULL; /* the current locale settings (for localization stylesheet) */ static GHashTable *stylesheets = NULL; /* XSLT stylesheet cache */ static void render_parameter_free (renderParamPtr paramSet) { g_strfreev (paramSet->params); g_free (paramSet); } static void render_init (void) { gchar **shortlang = NULL; /* e.g. "de" */ gchar **lang = NULL; /* e.g. "de_AT" */ gchar *filename; if (langParams) render_parameter_free (langParams); /* Install default stylesheet if it does not yet exist */ filename = common_create_config_filename ("liferea.css"); if (!g_file_test (filename, G_FILE_TEST_EXISTS)) common_copy_file (PACKAGE_DATA_DIR "/" PACKAGE "/css/user.css", filename); g_free(filename); /* Prepare localization parameters */ debug1 (DEBUG_HTML, "XSLT localisation: setlocale(LC_MESSAGES, NULL) reports '%s'", setlocale(LC_MESSAGES, NULL)); lang = g_strsplit (setlocale (LC_MESSAGES, NULL), "@", 0); shortlang = g_strsplit (setlocale (LC_MESSAGES, NULL), "_", 0); langParams = render_parameter_new (); render_parameter_add (langParams, "lang='%s'", lang[0]); render_parameter_add (langParams, "shortlang='%s'", shortlang[0]); debug2 (DEBUG_HTML, "XSLT localisation: lang='%s' shortlang='%s'", lang[0], shortlang[0]); g_strfreev (shortlang); g_strfreev (lang); if (!stylesheets) stylesheets = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); } static xsltStylesheetPtr render_load_stylesheet (const gchar *xsltName) { xsltStylesheetPtr i18n_filter; xsltStylesheetPtr xslt; xmlDocPtr xsltDoc, resDoc; gchar *filename; if (!stylesheets) render_init (); /* try to serve the stylesheet from the cache */ xslt = (xsltStylesheetPtr)g_hash_table_lookup (stylesheets, xsltName); if (xslt) return xslt; /* or load and translate it... */ /* 1. load localization stylesheet */ i18n_filter = xsltParseStylesheetFile (PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "xslt" G_DIR_SEPARATOR_S "i18n-filter.xslt"); if (!i18n_filter) { g_warning ("fatal: could not load localization stylesheet!"); return NULL; } /* 2. load and localize the rendering stylesheet */ filename = g_strjoin (NULL, PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "xslt" G_DIR_SEPARATOR_S, xsltName, ".xml", NULL); xsltDoc = xmlParseFile (filename); if (!xsltDoc) g_warning ("fatal: could not load rendering stylesheet (%s)!", xsltName); g_free (filename); resDoc = xsltApplyStylesheet (i18n_filter, xsltDoc, (const gchar **)langParams->params); if (!resDoc) g_warning ("fatal: applying localization stylesheet failed (%s)!", xsltName); /* Use the following to debug XSLT transformation problems */ /* xsltSaveResultToFile (stdout, resDoc, i18n_filter); */ /* 3. create localized rendering stylesheet */ xslt = xsltParseStylesheetDoc(resDoc); if (!xslt) g_warning("fatal: could not load rendering stylesheet (%s)!", xsltName); xmlFreeDoc (xsltDoc); xsltFreeStylesheet (i18n_filter); g_hash_table_insert (stylesheets, g_strdup (xsltName), xslt); return xslt; } /** cached CSS definitions */ static GString *css = NULL; /** widget background theme colors as 8bit HTML RGB code */ typedef struct themeColor { const gchar *name; gchar *value; } *themeColorPtr; static GSList *themeColors = NULL; static gboolean darkTheme = FALSE; /* Determining of theme colors, to be inserted in CSS */ static themeColorPtr render_calculate_theme_color (const gchar *name, GdkColor themeColor) { themeColorPtr tc; gushort r, g, b; r = themeColor.red / 256; g = themeColor.green / 256; b = themeColor.blue / 256; tc = g_new0 (struct themeColor, 1); tc->name = name; tc->value = g_strdup_printf ("%.2X%.2X%.2X", r, g, b); debug2 (DEBUG_HTML, "theme color \"%s\" is %s", tc->name, tc->value); return tc; } static gint render_get_rgb_distance (GdkColor *c1, GdkColor *c2) { return abs( (299 * c1->red/256 + 587 * c1->green/256 + 114 * c1->blue/256) - (299 * c2->red/256 + 587 * c2->green/256 + 114 * c2->blue/256) ) / 1000; } static void rgba_to_color (GdkColor *color, GdkRGBA *rgba) { color->red = lrint (rgba->red * 65535); color->green = lrint (rgba->green * 65535); color->blue = lrint (rgba->blue * 65535); } void render_init_theme_colors (GtkWidget *widget) { GtkStyle *style; GtkStyleContext *sctxt; GdkColor color; GdkRGBA rgba; gint textAvg, bgAvg; style = gtk_widget_get_style (widget); sctxt = gtk_widget_get_style_context (widget); g_assert (NULL == themeColors); themeColors = g_slist_append (themeColors, render_calculate_theme_color ("GTK-COLOR-FG", style->fg[GTK_STATE_NORMAL])); themeColors = g_slist_append (themeColors, render_calculate_theme_color ("GTK-COLOR-BG", style->bg[GTK_STATE_NORMAL])); themeColors = g_slist_append (themeColors, render_calculate_theme_color ("GTK-COLOR-LIGHT", style->light[GTK_STATE_NORMAL])); themeColors = g_slist_append (themeColors, render_calculate_theme_color ("GTK-COLOR-DARK", style->dark[GTK_STATE_NORMAL])); themeColors = g_slist_append (themeColors, render_calculate_theme_color ("GTK-COLOR-MID", style->mid[GTK_STATE_NORMAL])); /* Sanity check text+base color as this causes many problems on dark themes. If brightness distance is not enough we set text to fg/bg which is always safe. */ if (render_get_rgb_distance (&style->base[GTK_STATE_NORMAL], &style->text[GTK_STATE_NORMAL]) > 150) { // FIXME: Use theme labels instead of GTK-COLOR- (e.g. CSS-BACKGROUND) themeColors = g_slist_append (themeColors, render_calculate_theme_color ("GTK-COLOR-BASE", style->base[GTK_STATE_NORMAL])); themeColors = g_slist_append (themeColors, render_calculate_theme_color ("GTK-COLOR-TEXT", style->text[GTK_STATE_NORMAL])); } else { themeColors = g_slist_append (themeColors, render_calculate_theme_color ("GTK-COLOR-BASE", style->bg[GTK_STATE_NORMAL])); themeColors = g_slist_append (themeColors, render_calculate_theme_color ("GTK-COLOR-TEXT", style->fg[GTK_STATE_NORMAL])); } gtk_style_context_get_color (sctxt, GTK_STATE_FLAG_LINK, &rgba); rgba_to_color (&color, &rgba); themeColors = g_slist_append (themeColors, render_calculate_theme_color ("GTK-COLOR-NORMAL-LINK", color)); gtk_style_context_get_color (sctxt, GTK_STATE_FLAG_VISITED, &rgba); rgba_to_color (&color, &rgba); themeColors = g_slist_append (themeColors, render_calculate_theme_color ("GTK-COLOR-VISITED-LINK", color)); /* As there doesn't seem to be a safe way to determine wether we have a dark GTK theme, let's guess it from the foreground vs. background color average */ textAvg = style->text[GTK_STATE_NORMAL].red / 256 + style->text[GTK_STATE_NORMAL].green / 256 + style->text[GTK_STATE_NORMAL].blue / 256; bgAvg = style->bg[GTK_STATE_NORMAL].red / 256 + style->bg[GTK_STATE_NORMAL].green / 256 + style->bg[GTK_STATE_NORMAL].blue / 256; if (textAvg > bgAvg) { debug0 (DEBUG_HTML, "Dark GTK theme detected."); darkTheme = TRUE; } if (darkTheme) { themeColors = g_slist_append (themeColors, render_calculate_theme_color ("FEEDLIST_UNREAD_BG", style->text[GTK_STATE_NORMAL])); /* Try nice foreground with 'fg' color (note: distance 50 is enough because it should be non-intrusive) */ if (render_get_rgb_distance (&style->text[GTK_STATE_NORMAL], &style->fg[GTK_STATE_NORMAL]) > 50) themeColors = g_slist_append (themeColors, render_calculate_theme_color ("FEEDLIST_UNREAD_FG", style->fg[GTK_STATE_NORMAL])); else themeColors = g_slist_append (themeColors, render_calculate_theme_color ("FEEDLIST_UNREAD_FG", style->bg[GTK_STATE_NORMAL])); } else { themeColors = g_slist_append (themeColors, render_calculate_theme_color ("FEEDLIST_UNREAD_FG", style->bg[GTK_STATE_NORMAL])); /* Try nice foreground with 'dark' color (note: distance 50 is enough because it should be non-intrusive) */ if (render_get_rgb_distance (&style->dark[GTK_STATE_NORMAL], &style->bg[GTK_STATE_NORMAL]) > 50) themeColors = g_slist_append (themeColors, render_calculate_theme_color ("FEEDLIST_UNREAD_BG", style->dark[GTK_STATE_NORMAL])); else themeColors = g_slist_append (themeColors, render_calculate_theme_color ("FEEDLIST_UNREAD_BG", style->fg[GTK_STATE_NORMAL])); } } static gchar * render_set_theme_colors (gchar *css) { GSList *iter = themeColors; while (iter) { themeColorPtr tc = (themeColorPtr)iter->data; css = common_strreplace (css, tc->name, tc->value); iter = g_slist_next (iter); } return css; } const gchar * render_get_theme_color (const gchar *name) { GSList *iter; if (!themeColors) return NULL; iter = themeColors; while (iter) { themeColorPtr tc = (themeColorPtr)iter->data; if (g_str_equal (name, tc->name)) return tc->value; iter = g_slist_next (iter); } return NULL; } gboolean render_is_dark_theme (void) { if (!themeColors) return FALSE; return darkTheme; } const gchar * render_get_css (gboolean externalCss) { if (!css) { gchar *defaultStyleSheetFile; gchar *userStyleSheetFile; gchar *adblockStyleSheetFile; gchar *tmp; if (!themeColors) return NULL; css = g_string_new(NULL); defaultStyleSheetFile = g_build_filename (PACKAGE_DATA_DIR, PACKAGE, "css", "liferea.css", NULL); if (g_file_get_contents(defaultStyleSheetFile, &tmp, NULL, NULL)) { tmp = render_set_theme_colors(tmp); g_string_append(css, tmp); g_free(tmp); } else { g_error ("Loading %s failed.", defaultStyleSheetFile); } g_free(defaultStyleSheetFile); userStyleSheetFile = common_create_config_filename ("liferea.css"); if (g_file_get_contents(userStyleSheetFile, &tmp, NULL, NULL)) { tmp = render_set_theme_colors(tmp); g_string_append(css, tmp); g_free(tmp); } g_free(userStyleSheetFile); adblockStyleSheetFile = g_build_filename(PACKAGE_DATA_DIR, PACKAGE, "css", "adblock.css", NULL); if (g_file_get_contents(adblockStyleSheetFile, &tmp, NULL, NULL)) { g_string_append(css, tmp); g_free(tmp); } g_free(adblockStyleSheetFile); if (externalCss) { /* dump CSS to cache file and create a "); g_free(filename); } else { /* keep the CSS in memory to serve it as a part of each HTML output */ g_string_prepend(css, "\n"); } } return css->str; } gchar * render_xml (xmlDocPtr doc, const gchar *xsltName, renderParamPtr paramSet) { gchar *output = NULL; xmlDocPtr resDoc; xsltStylesheetPtr xslt; xmlOutputBufferPtr buf; xslt = render_load_stylesheet(xsltName); if (!xslt) return NULL; if (!paramSet) paramSet = render_parameter_new (); render_parameter_add (paramSet, "pixmapsDir='file://" PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "pixmaps" G_DIR_SEPARATOR_S "'"); resDoc = xsltApplyStylesheet (xslt, doc, (const gchar **)paramSet->params); if (!resDoc) { g_warning ("fatal: applying rendering stylesheet (%s) failed!", xsltName); return NULL; } /* for debugging use: xsltSaveResultToFile(stdout, resDoc, xslt); */ /* save results into return string */ buf = xmlAllocOutputBuffer (NULL); if (-1 == xsltSaveResultTo(buf, resDoc, xslt)) g_warning ("fatal: retrieving result of rendering stylesheet failed (%s)!", xsltName); #ifdef LIBXML2_NEW_BUFFER if (xmlOutputBufferGetSize (buf) > 0) output = xmlCharStrdup (xmlOutputBufferGetContent (buf)); #else if (xmlBufferLength (buf->buffer) > 0) output = xmlCharStrdup (xmlBufferContent(buf->buffer)); #endif xmlOutputBufferClose (buf); xmlFreeDoc (resDoc); render_parameter_free (paramSet); if (output) { gchar *tmp; /* Return only the body contents */ tmp = strstr (output, ""); if (tmp) { tmp += 7; *tmp = 0; } } } return output; } /* parameter handling */ renderParamPtr render_parameter_new (void) { return g_new0 (struct renderParam, 1); } void render_parameter_add (renderParamPtr paramSet, const gchar *fmt, ...) { gchar *new, *value, *name; va_list args; g_assert (NULL != fmt); g_assert (NULL != paramSet); va_start (args, fmt); new = g_strdup_vprintf (fmt, args); va_end (args); name = new; value = strchr (new, '='); g_assert (NULL != value); *value = 0; value++; paramSet->len += 2; paramSet->params = (gchar **)g_realloc (paramSet->params, (paramSet->len + 1)*sizeof(gchar *)); paramSet->params[paramSet->len] = NULL; paramSet->params[paramSet->len-2] = g_strdup (name); paramSet->params[paramSet->len-1] = g_strdup (value); g_free (new); } liferea-1.12.7/src/render.h000066400000000000000000000053121352135647700154460ustar00rootroot00000000000000/** * @file render.h generic GTK theme and XSLT rendering handling * * Copyright (C) 2006-2013 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _RENDER_H #define _RENDER_H #include /** render parameter type */ typedef struct renderParam { gchar **params; guint len; } *renderParamPtr; /** * Applies the stylesheet xslt to the given XML document with the given parameters. * * @param doc XML source document * @param xsltName name of a stylesheet * @param params parameter/value string array (will be free'd) */ gchar * render_xml (xmlDocPtr doc, const gchar *xsltName, renderParamPtr paramSet); /** * Creates a new rendering parameter set. * * @returns new parameter set */ renderParamPtr render_parameter_new (void); /** * Helper function to add a rendering parameter to the given parameter set. * * @param paramSet a parameter set to extend * @param fmt format code * * @returns a new parameter/value string array */ void render_parameter_add (renderParamPtr paramSet, const gchar *fmt, ...); /** * Returns CSS definitions for inclusion in XHTML output. * * @param externalCss TRUE if CSS can be served as file reference */ const gchar * render_get_css (gboolean externalCss); /** * Returns the CSS value of a given GTK theme color name e.g. "GTK-COLOR-MID". * Might return NULL as long as the LifereaShell which is used for fetching * styles is not yet available. * * @param name the GTK theme color name * * @returns a CSS value or NULL (e.g. "#CCC") */ const gchar * render_get_theme_color (const gchar *name); /** * Needs to be called once before render_get_theme_color () or render_get_css () * can be used. Must be called only after the LifereaShell is created because * it is used to fetch the GTK theme. * * @param name a widget from which we can fetch styles */ void render_init_theme_colors (GtkWidget *widget); /** * To be used to query if a dark GTK theme was detected * * @returns TRUE if dark theme detected */ gboolean render_is_dark_theme (void); #endif liferea-1.12.7/src/rule.c000066400000000000000000000123601352135647700151320ustar00rootroot00000000000000/** * @file rule.c item matching rules used by search folders * * Copyright (C) 2003-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "rule.h" #include #include "common.h" #include "debug.h" #include "metadata.h" #define ITEM_MATCH_RULE_ID "exact" #define ITEM_TITLE_MATCH_RULE_ID "exact_title" #define ITEM_DESC_MATCH_RULE_ID "exact_desc" #define FEED_TITLE_MATCH_RULE_ID "feed_title" /** list of available search folder rules */ static GSList *ruleFunctions = NULL; static void rule_init (void); GSList * rule_get_available_rules (void) { if (!ruleFunctions) rule_init (); return ruleFunctions; } /* rule creation */ rulePtr rule_new (const gchar *ruleId, const gchar *value, gboolean additive) { GSList *iter; iter = rule_get_available_rules (); while (iter) { ruleInfoPtr ruleInfo = (ruleInfoPtr)iter->data; if (0 == strcmp (ruleInfo->ruleId, ruleId)) { rulePtr rule = (rulePtr) g_new0 (struct rule, 1); rule->ruleInfo = ruleInfo; rule->additive = additive; rule->value = common_strreplace (g_strdup (value), "'", ""); return rule; } iter = g_slist_next (iter); } return NULL; } void rule_free (rulePtr rule) { g_free (rule->value); g_free (rule); } /* rule conditions */ static gboolean rule_check_item_title (rulePtr rule, itemPtr item) { return (NULL != item->title && NULL != g_strstr_len (item->title, -1, rule->value)); } static gboolean rule_check_item_description (rulePtr rule, itemPtr item) { return (NULL != item->description && NULL != g_strstr_len (item->description, -1, rule->value)); } static gboolean rule_check_item_all (rulePtr rule, itemPtr item) { return rule_check_item_title (rule, item) || rule_check_item_description (rule, item); } static gboolean rule_check_item_is_unread (rulePtr rule, itemPtr item) { return (0 == item->readStatus); } static gboolean rule_check_item_is_flagged (rulePtr rule, itemPtr item) { return (1 == item->flagStatus); } static gboolean rule_check_item_has_enc (rulePtr rule, itemPtr item) { return item->hasEnclosure; } static gboolean rule_check_item_category (rulePtr rule, itemPtr item) { GSList *iter = metadata_list_get_values (item->metadata, "category"); while (iter) { if (g_str_equal (rule->value, (gchar *)iter->data)) return TRUE; iter = g_slist_next (iter); } return FALSE; } static gboolean rule_check_feed_title (rulePtr rule, itemPtr item) { nodePtr feedNode = node_from_id (item->parentNodeId); if (!feedNode) return FALSE; return (NULL != feedNode->title && NULL != g_strstr_len (feedNode->title, -1, rule->value)); } /* rule initialization */ static void rule_info_add (ruleCheckFunc checkFunc, const gchar *ruleId, gchar *title, gchar *positive, gchar *negative, gboolean needsParameter) { ruleInfoPtr ruleInfo; ruleInfo = (ruleInfoPtr) g_new0 (struct ruleInfo, 1); ruleInfo->ruleId = ruleId; ruleInfo->title = title; ruleInfo->positive = positive; ruleInfo->negative = negative; ruleInfo->needsParameter = needsParameter; ruleInfo->checkFunc = checkFunc; ruleFunctions = g_slist_append (ruleFunctions, ruleInfo); } static void rule_init (void) { debug_enter ("rule_init"); /* SQL condition builder function in-memory check function feedlist.opml rule id rule menu label positive menu option negative menu option has param */ /* ========================================================================================================================================================================================*/ rule_info_add (rule_check_item_all, ITEM_MATCH_RULE_ID, _("Item"), _("does contain"), _("does not contain"), TRUE); rule_info_add (rule_check_item_title, ITEM_TITLE_MATCH_RULE_ID, _("Item title"), _("does contain"), _("does not contain"), TRUE); rule_info_add (rule_check_item_description, ITEM_DESC_MATCH_RULE_ID, _("Item body"), _("does contain"), _("does not contain"), TRUE); rule_info_add (rule_check_item_is_unread, "unread", _("Read status"), _("is unread"), _("is read"), FALSE); rule_info_add (rule_check_item_is_flagged, "flagged", _("Flag status"), _("is flagged"), _("is unflagged"), FALSE); rule_info_add (rule_check_item_has_enc, "enclosure", _("Podcast"), _("included"), _("not included"), FALSE); rule_info_add (rule_check_item_category, "category", _("Category"), _("is set"), _("is not set"), TRUE); rule_info_add (rule_check_feed_title, FEED_TITLE_MATCH_RULE_ID, _("Feed title"), _("does contain"), _("does not contain"), TRUE); debug_exit ("rule_init"); } liferea-1.12.7/src/rule.h000066400000000000000000000045371352135647700151460ustar00rootroot00000000000000/** * @file rule.h item matching rules used by search folders * * Copyright (C) 2003-2010 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _RULE_H #define _RULE_H #include #include "item.h" /** rule info structure */ typedef struct ruleInfo { const gchar *ruleId; /**< rule id for cache file storage */ gchar *title; /**< rule type title for dialogs */ gchar *positive; /**< text for positive logic selection */ gchar *negative; /**< text for negative logic selection */ gboolean needsParameter; /**< some rules may require no parameter... */ gpointer checkFunc; /**< the item check function */ } *ruleInfoPtr; /** structure to store a rule instance */ typedef struct rule { gchar *value; /* the value of the rule, e.g. a search text */ ruleInfoPtr ruleInfo; /* info structure about rule check function */ gboolean additive; /* is the rule positive logic */ } *rulePtr; /** function type used to check items */ typedef gboolean (*ruleCheckFunc) (rulePtr rule, itemPtr item); /** * Returns a list of rule infos. To be used for rule editor * dialog setup. * * @returns a list of rule infos */ GSList * rule_get_available_rules (void); /** * Looks up the given rule id and sets up a new rule * structure with for the given search folder and rule value * * @param ruleId id string for this rule type * @param value argument string for this rule * @param additive indicates positive or negative logic * * @returns a new rule structure */ rulePtr rule_new (const gchar *ruleId, const gchar *value, gboolean additive); /** * Free's the given rule structure * * @param rule rule to free */ void rule_free (rulePtr rule); #endif liferea-1.12.7/src/social.c000066400000000000000000000115741352135647700154430ustar00rootroot00000000000000/* * @file social.c social networking integration * * Copyright (C) 2006-2017 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "social.h" #include "conf.h" #include "debug.h" #include "ui/browser_tabs.h" /* list of registered bookmarking sites */ GSList *bookmarkSites = NULL; /* the currently configured bookmarking site */ static socialSitePtr bookmarkSite = NULL; void social_register_bookmark_site (const gchar *name, const gchar *url, gboolean title, gboolean titleFirst) { socialSitePtr newSite; g_assert (name); g_assert (url); newSite = g_new0 (struct socialSite, 1); newSite->name = g_strdup (name); newSite->url = g_strdup (url); newSite->title = title; newSite->titleFirst = titleFirst; bookmarkSites = g_slist_append (bookmarkSites, newSite); } void social_set_bookmark_site (const gchar *name) { GSList *iter = bookmarkSites; while (iter) { bookmarkSite = iter->data; if (g_str_equal (bookmarkSite->name, name)) { conf_set_str_value (SOCIAL_BM_SITE, name); return; } iter = g_slist_next (iter); } debug1 (DEBUG_GUI, "Unknown social bookmarking site \"%s\"!", name); } const gchar * social_get_bookmark_site (void) { return bookmarkSite->name; } gchar * social_get_bookmark_url (const gchar *link, const gchar *title) { gchar *url; g_assert (bookmarkSite); g_assert (link); g_assert (title); if (title) { if (bookmarkSite->titleFirst) url = g_strdup_printf (bookmarkSite->url, title, link); else url = g_strdup_printf (bookmarkSite->url, link, title); } else { url = g_strdup_printf (bookmarkSite->url, link); } return url; } void social_add_bookmark (const itemPtr item) { gchar *link = item_make_link (item); gchar *url = social_get_bookmark_url (link, item_get_title (item)); (void)browser_tabs_add_new (url, social_get_bookmark_site(), TRUE); g_free (link); g_free (url); } void social_init (void) { gchar *tmp; social_register_bookmark_site ("blogmarks", "http://blogmarks.net/my/new.php?mini=1&title=%s&url=%s", TRUE, TRUE); social_register_bookmark_site ("Buddymarks", "http://buddymarks.com/add_bookmark.php?bookmark_title=%s&bookmark_url=%s", TRUE, TRUE); social_register_bookmark_site ("CiteUlike", "http://www.citeulike.org/posturl?url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("digg", "https://digg.com/submit?phase=2&url=%s", FALSE, FALSE); social_register_bookmark_site ("diigo", "https://www.diigo.com/post?url=%s&title=%s&desc=", TRUE, FALSE); social_register_bookmark_site ("Facebook", "https://www.facebook.com/share.php?u=%s", FALSE, FALSE); social_register_bookmark_site ("Google Bookmarks", "https://www.google.com/bookmarks/mark?op=edit&output=&bkmk=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("Google Plus", "https://plus.google.com/share?url=%s", FALSE, FALSE); social_register_bookmark_site ("identi.ca", "https://identi.ca/index.php?action=bookmarklet&status_textarea=%%E2%%80%%9C%s%%E2%%80%%9D%%20%%E2%%80%%94%%20%s", TRUE, TRUE); social_register_bookmark_site ("Instapaper", "https://www.instapaper.com/hello2?url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("Linkagogo", "http://www.linkagogo.com/go/AddNoPopup?title=%s&url=%s", TRUE, TRUE); social_register_bookmark_site ("Linkroll", "https://www.linkroll.com/index.php?action=insertLink&url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("netvouz", "http://netvouz.com/action/submitBookmark?url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("Pocket", "https://getpocket.com/save?url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("Reddit", "https://www.reddit.com/submit?url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("Twitter", "https://twitter.com/intent/tweet?text=%s&url=%s", TRUE, TRUE); conf_get_str_value (SOCIAL_BM_SITE, &tmp); social_set_bookmark_site (tmp); g_free (tmp); if (!bookmarkSite) social_set_bookmark_site ("del.icio.us"); /* set default if necessary */ } void social_free (void) { socialSitePtr site; GSList *iter; iter = bookmarkSites; while (iter) { site = (socialSitePtr) iter->data; g_free (site->name); g_free (site->url); g_free (site); iter = g_slist_next(iter); } g_slist_free (bookmarkSites); bookmarkSites = NULL; } liferea-1.12.7/src/social.h000066400000000000000000000051611352135647700154430ustar00rootroot00000000000000/* * @file social.h social networking integration * * Copyright (C) 2006-2010 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _SOCIAL_H #define _SOCIAL_H #include #include "item.h" typedef struct socialSite { gchar *name; /*<< Descriptive name for HTML rendering and preferences */ gchar *url; /*<< URL format string with %s for title and URL insertion */ gboolean title; /*<< TRUE if title submission supported */ gboolean titleFirst; /*<< TRUE if title %s comes first */ } *socialSitePtr; /** * social_init: (skip) * * Initialize social bookmarking support. */ void social_init (void); /** * social_free: (skip) * * Frees social bookmarking structures */ void social_free (void); /** * social_set_bookmark_site: * @name: name of the site * * Change the site used for bookmarking. */ void social_set_bookmark_site (const gchar *name); /** * social_register_bookmark_site: * @name: descriptive name * @url: valid HTTP GET URL with one or two %s format codes * @title: TRUE if site accepts titles (URL must have two %s format codes!) * @titleFirst: TRUE if title is first format code (title must be TRUE) * * Add a new site to the social bookmarking site list. */ void social_register_bookmark_site (const gchar *name, const gchar *url, gboolean title, gboolean titleFirst); /** * social_get_bookmark_url: * @link: the link to encode (mandatory) * @title: the title to encode (mandatory) * * Returns a social bookmarking link for the configured site * * Returns: new URL string */ gchar * social_get_bookmark_url (const gchar *link, const gchar *title); /** * social_add_bookmark: (skip) * @item: the item * * Add a social bookmark for the link of the given item */ void social_add_bookmark (const itemPtr item); /** * social_get_bookmark_site: * * Returns: the name of the currently configured social bookmarking site. */ const gchar * social_get_bookmark_site (void); #endif liferea-1.12.7/src/subscription.c000066400000000000000000000470301352135647700167110ustar00rootroot00000000000000/** * @file subscription.c common subscription handling * * Copyright (C) 2003-2015 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "subscription.h" #include #include #include "auth.h" #include "common.h" #include "conf.h" #include "db.h" #include "debug.h" #include "favicon.h" #include "feedlist.h" #include "metadata.h" #include "net.h" #include "ui/auth_dialog.h" #include "ui/itemview.h" #include "ui/liferea_shell.h" #include "ui/feed_list_node.h" /* The allowed feed protocol prefixes (see http://25hoursaday.com/draft-obasanjo-feed-URI-scheme-02.html) */ #define FEED_PROTOCOL_PREFIX "feed://" #define FEED_PROTOCOL_PREFIX2 "feed:" subscriptionPtr subscription_new (const gchar *source, const gchar *filter, updateOptionsPtr options) { subscriptionPtr subscription; subscription = g_new0 (struct subscription, 1); subscription->type = feed_get_subscription_type (); subscription->updateOptions = options; if (!subscription->updateOptions) subscription->updateOptions = g_new0 (struct updateOptions, 1); subscription->updateState = g_new0 (struct updateState, 1); subscription->updateInterval = -1; subscription->defaultInterval = -1; if (source) { gboolean feedPrefix = FALSE; gchar *uri = g_strdup (source); g_strstrip (uri); /* strip confusing whitespaces */ /* strip feed protocol prefix variant 1 */ if (uri == strstr (uri, FEED_PROTOCOL_PREFIX)) { gchar *tmp = uri; uri = g_strdup (uri + strlen (FEED_PROTOCOL_PREFIX)); g_free (tmp); feedPrefix = TRUE; } /* strip feed protocol prefix variant 2 */ if (uri == strstr (uri, FEED_PROTOCOL_PREFIX2)) { gchar *tmp = uri; uri = g_strdup (uri + strlen (FEED_PROTOCOL_PREFIX2)); g_free (tmp); feedPrefix = TRUE; } /* ensure protocol prefix (but only for feed:[//] URIs to avoid breaking local file and command line subscriptions) */ if (feedPrefix && !strstr (uri, "://")) { gchar *tmp = uri; uri = g_strdup_printf ("http://%s", uri); g_free (tmp); } subscription_set_source (subscription, uri); g_free (uri); } if (filter) subscription_set_filter (subscription, filter); return subscription; } /* Checks whether updating a feed makes sense. */ static gboolean subscription_can_be_updated (subscriptionPtr subscription) { if (subscription->updateJob) { liferea_shell_set_status_bar (_("Subscription \"%s\" is already being updated!"), node_get_title (subscription->node)); return FALSE; } if (subscription->discontinued) { liferea_shell_set_status_bar (_("The subscription \"%s\" was discontinued. Liferea won't update it anymore!"), node_get_title (subscription->node)); return FALSE; } if (!subscription_get_source (subscription)) { g_warning ("Feed source is NULL! This should never happen - cannot update!"); return FALSE; } return TRUE; } void subscription_reset_update_counter (subscriptionPtr subscription, GTimeVal *now) { if (!subscription) return; subscription->updateState->lastPoll.tv_sec = now->tv_sec; debug1 (DEBUG_UPDATE, "Resetting last poll counter to %ld.", subscription->updateState->lastPoll.tv_sec); } static void subscription_favicon_downloaded (gpointer user_data) { nodePtr node = (nodePtr)user_data; node_load_icon (node); feed_list_node_update (node->id); } void subscription_update_favicon (subscriptionPtr subscription) { debug1 (DEBUG_UPDATE, "trying to download favicon.ico for \"%s\"", node_get_title (subscription->node)); liferea_shell_set_status_bar (_("Updating favicon for \"%s\""), node_get_title (subscription->node)); g_get_current_time (&subscription->updateState->lastFaviconPoll); favicon_download (subscription, node_get_base_url (subscription->node), subscription_get_source (subscription), subscription->updateOptions, // FIXME: correct? subscription_favicon_downloaded, (gpointer)subscription->node); } /** * Updates the error status of the given subscription * * @param subscription the subscription * @param httpstatus the new HTTP status code * @param resultcode the update result code * @param filterError filter error string (or NULL) */ static void subscription_update_error_status (subscriptionPtr subscription, gint httpstatus, gint resultcode, gchar *filterError) { gboolean errorFound = FALSE; if (subscription->filterError) g_free (subscription->filterError); if (subscription->httpError) g_free (subscription->httpError); if (subscription->updateError) g_free (subscription->updateError); subscription->filterError = g_strdup (filterError); subscription->updateError = NULL; subscription->httpError = NULL; subscription->httpErrorCode = httpstatus; if (((httpstatus >= 200) && (httpstatus < 400)) && /* HTTP codes starting with 2 and 3 mean no error */ (NULL == subscription->filterError)) return; if ((200 != httpstatus) || (resultcode != 0)) { subscription->httpError = g_strdup (network_strerror (resultcode, httpstatus)); errorFound = TRUE; } /* if none of the above error descriptions matched... */ if (!errorFound) subscription->updateError = g_strdup (_("There was a problem while reading this subscription. Please check the URL and console output.")); } static void subscription_process_update_result (const struct updateResult * const result, gpointer user_data, guint32 flags) { subscriptionPtr subscription = (subscriptionPtr)user_data; nodePtr node = subscription->node; gboolean processing = FALSE; GTimeVal now; gint next_update = 0; gint update_time_sources = 0; gint maxage = -1; gint syn_update = -1; gint ttl = subscription->updateState->timeToLive = -1; /* 1. preprocessing */ g_assert (subscription->updateJob); /* update the subscription URL on permanent redirects */ if ((301 == result->returncode || 308 == result->returncode) && result->source && !g_str_equal (result->source, subscription->updateJob->request->source)) { debug2 (DEBUG_UPDATE, "The URL of \"%s\" has changed permanently and was updated to \"%s\"", node_get_title(node), result->source); subscription_set_source (subscription, result->source); liferea_shell_set_status_bar (_("The URL of \"%s\" has changed permanently and was updated"), node_get_title(node)); } if (401 == result->httpstatus) { /* unauthorized */ auth_dialog_new (subscription, flags); } else if (410 == result->httpstatus) { /* gone */ subscription->discontinued = TRUE; node->available = TRUE; liferea_shell_set_status_bar (_("\"%s\" is discontinued. Liferea won't updated it anymore!"), node_get_title (node)); } else if (304 == result->httpstatus) { node->available = TRUE; liferea_shell_set_status_bar (_("\"%s\" has not changed since last update"), node_get_title(node)); } else { processing = TRUE; } subscription_update_error_status (subscription, result->httpstatus, result->returncode, result->filterErrors); subscription->updateJob = NULL; /* 2. call subscription type specific processing */ if (processing) SUBSCRIPTION_TYPE (subscription)->process_update_result (subscription, result, flags); /* 3. set default update interval */ update_state_set_cache_maxage (subscription->updateState, update_state_get_cache_maxage (result->updateState)); maxage = subscription->updateState->maxAgeMinutes; if (0 < subscription->updateState->synFrequency && 0 < subscription->updateState->synPeriod) { syn_update = ceil ( (float) (subscription->updateState->synPeriod / subscription->updateState->synFrequency) ); } else if (0 < subscription->updateState->synPeriod) { syn_update = subscription->updateState->synPeriod; } if (0 < subscription->updateState->timeToLive) { ttl = subscription->updateState->timeToLive; } if (0 < maxage ) { update_time_sources++; next_update += maxage; } if (0 < syn_update) { update_time_sources++; next_update += syn_update; } if (0 < ttl ) { update_time_sources++; next_update += ttl; } if (0 < update_time_sources) { /* enforce a 5 minute minimum update interval. round up to nearest 5-minute block to coalesce updates (battery optimization). */ next_update = ceil ((float) (next_update / update_time_sources)); next_update -= next_update % 5; if (5 > next_update) { next_update = 5; } } else { next_update = -1; } debug1 (DEBUG_UPDATE, "The next suggested update time is in %d minutes.", next_update); subscription_set_default_update_interval (subscription, next_update); /* 4. call favicon updating after subscription processing to ensure we have valid baseUrl for feed nodes... */ g_get_current_time (&now); if (favicon_update_needed (subscription->node->id, subscription->updateState, &now)) subscription_update_favicon (subscription); /* 5. generic postprocessing */ update_state_set_lastmodified (subscription->updateState, update_state_get_lastmodified (result->updateState)); update_state_set_cookies (subscription->updateState, update_state_get_cookies (result->updateState)); update_state_set_etag (subscription->updateState, update_state_get_etag (result->updateState)); g_get_current_time (&subscription->updateState->lastPoll); // FIXME: use new-items signal in itemview class itemview_update_node_info (subscription->node); itemview_update (); db_subscription_update (subscription); db_node_update (subscription->node); if (processing && subscription->node->newCount > 0) { feedlist_new_items (node->newCount); feedlist_node_was_updated (node); } } void subscription_update (subscriptionPtr subscription, guint flags) { updateRequestPtr request; GTimeVal now; if (!subscription) return; if (subscription->updateJob) return; debug1 (DEBUG_UPDATE, "Scheduling %s to be updated", node_get_title (subscription->node)); if (subscription_can_be_updated (subscription)) { liferea_shell_set_status_bar (_("Updating \"%s\""), node_get_title (subscription->node)); g_get_current_time (&now); subscription_reset_update_counter (subscription, &now); request = update_request_new (); request->updateState = update_state_copy (subscription->updateState); request->options = update_options_copy (subscription->updateOptions); request->source = g_strdup (subscription_get_source (subscription)); if (subscription_get_filter (subscription)) request->filtercmd = g_strdup (subscription_get_filter (subscription)); if (SUBSCRIPTION_TYPE (subscription)->prepare_update_request (subscription, request)) subscription->updateJob = update_execute_request (subscription, request, subscription_process_update_result, subscription, flags); else update_request_free (request); } } void subscription_auto_update (subscriptionPtr subscription) { gint interval; guint flags = 0; GTimeVal now; if (!subscription) return; interval = subscription_get_update_interval (subscription); if (-1 == interval) conf_get_int_value (DEFAULT_UPDATE_INTERVAL, &interval); if (-2 >= interval || 0 == interval) return; /* don't update this subscription */ g_get_current_time (&now); if (subscription->updateState->lastPoll.tv_sec + interval*60 <= now.tv_sec) subscription_update (subscription, flags); } void subscription_cancel_update (subscriptionPtr subscription) { if (!subscription->updateJob) return; update_job_cancel_by_owner (subscription); subscription->updateJob = NULL; } gint subscription_get_update_interval (subscriptionPtr subscription) { return subscription->updateInterval; } void subscription_set_update_interval (subscriptionPtr subscription, gint interval) { if (0 == interval) { interval = -1; /* This is evil, I know, but when this method is called to set the update interval to 0 we mean "never updating". The updating logic expects -1 for "never updating" and 0 for updating according to the global update interval... */ } subscription->updateInterval = interval; feedlist_schedule_save (); } guint subscription_get_default_update_interval (subscriptionPtr subscription) { return subscription->defaultInterval; } void subscription_set_default_update_interval (subscriptionPtr subscription, guint interval) { subscription->defaultInterval = interval; } static const gchar * subscription_get_orig_source (subscriptionPtr subscription) { return subscription->origSource; } const gchar * subscription_get_source (subscriptionPtr subscription) { return subscription->source; } const gchar * subscription_get_homepage (subscriptionPtr subscription) { return metadata_list_get (subscription->metadata, "homepage"); } const gchar * subscription_get_filter (subscriptionPtr subscription) { return subscription->filtercmd; } static void subscription_set_orig_source (subscriptionPtr subscription, const gchar *source) { g_free (subscription->origSource); subscription->origSource = g_strchomp (g_strdup (source)); feedlist_schedule_save (); } void subscription_set_source (subscriptionPtr subscription, const gchar *source) { g_free (subscription->source); subscription->source = g_strchomp (g_strdup (source)); feedlist_schedule_save (); update_state_set_cookies (subscription->updateState, NULL); if (NULL == subscription_get_orig_source (subscription)) subscription_set_orig_source (subscription, source); } void subscription_set_homepage (subscriptionPtr subscription, const gchar *newHtmlUrl) { gchar *htmlUrl = NULL; if (newHtmlUrl) { if (strstr (newHtmlUrl, "://")) { /* absolute URI can be used directly */ htmlUrl = g_strchomp (g_strdup (newHtmlUrl)); } else { /* relative URI part needs to be expanded */ gchar *tmp, *source; source = g_strdup (subscription_get_source (subscription)); tmp = strrchr (source, '/'); if (tmp) *(tmp+1) = '\0'; htmlUrl = common_build_url (newHtmlUrl, source); g_free (source); } metadata_list_set (&subscription->metadata, "homepage", htmlUrl); g_free (htmlUrl); } } void subscription_set_filter (subscriptionPtr subscription, const gchar *filter) { g_free (subscription->filtercmd); subscription->filtercmd = g_strdup (filter); feedlist_schedule_save (); } void subscription_set_auth_info (subscriptionPtr subscription, const gchar *username, const gchar *password) { g_assert (NULL != subscription->updateOptions); g_free (subscription->updateOptions->username); g_free (subscription->updateOptions->password); subscription->updateOptions->username = g_strdup (username); subscription->updateOptions->password = g_strdup (password); liferea_auth_info_store (subscription); } subscriptionPtr subscription_import (xmlNodePtr xml, gboolean trusted) { subscriptionPtr subscription; xmlChar *source, *homepage, *filter, *intervalStr, *tmp; subscription = subscription_new (NULL, NULL, NULL); source = xmlGetProp (xml, BAD_CAST "xmlUrl"); if (!source) source = xmlGetProp (xml, BAD_CAST "xmlurl"); /* e.g. for AmphetaDesk */ if (source) { if (!trusted && source[0] == '|') { /* FIXME: Display warning dialog asking if the command is safe? */ tmp = g_strdup_printf ("unsafe command: %s", source); xmlFree (source); source = tmp; } subscription_set_source (subscription, source); xmlFree (source); homepage = xmlGetProp (xml, BAD_CAST "htmlUrl"); if (homepage && xmlStrcmp (homepage, "")) subscription_set_homepage (subscription, homepage); xmlFree (homepage); if ((filter = xmlGetProp (xml, BAD_CAST "filtercmd"))) { if (!trusted) { /* FIXME: Display warning dialog asking if the command is safe? */ tmp = g_strdup_printf ("unsafe command: %s", filter); xmlFree (filter); filter = tmp; } subscription_set_filter (subscription, filter); xmlFree (filter); } intervalStr = xmlGetProp (xml, BAD_CAST "updateInterval"); subscription_set_update_interval (subscription, common_parse_long (intervalStr, -1)); xmlFree (intervalStr); /* no proxy flag */ tmp = xmlGetProp (xml, BAD_CAST "dontUseProxy"); if (tmp && !xmlStrcmp (tmp, BAD_CAST "true")) subscription->updateOptions->dontUseProxy = TRUE; xmlFree (tmp); /* authentication options */ subscription->updateOptions->username = xmlGetProp (xml, BAD_CAST "username"); subscription->updateOptions->password = xmlGetProp (xml, BAD_CAST "password"); } return subscription; } void subscription_export (subscriptionPtr subscription, xmlNodePtr xml, gboolean trusted) { gchar *interval = g_strdup_printf ("%d", subscription_get_update_interval (subscription)); xmlNewProp (xml, BAD_CAST "xmlUrl", BAD_CAST subscription_get_source (subscription)); if (subscription_get_homepage (subscription)) xmlNewProp (xml, BAD_CAST"htmlUrl", BAD_CAST subscription_get_homepage (subscription)); else xmlNewProp (xml, BAD_CAST"htmlUrl", BAD_CAST ""); if (subscription_get_filter (subscription)) xmlNewProp (xml, BAD_CAST"filtercmd", BAD_CAST subscription_get_filter (subscription)); if(trusted) { xmlNewProp (xml, BAD_CAST"updateInterval", BAD_CAST interval); if (subscription->updateOptions->dontUseProxy) xmlNewProp (xml, BAD_CAST"dontUseProxy", BAD_CAST"true"); if (!liferea_auth_has_active_store ()) { if (subscription->updateOptions->username) xmlNewProp (xml, BAD_CAST"username", subscription->updateOptions->username); if (subscription->updateOptions->password) xmlNewProp (xml, BAD_CAST"password", subscription->updateOptions->password); } } g_free (interval); } void subscription_to_xml (subscriptionPtr subscription, xmlNodePtr xml) { gchar *tmp; xmlNewTextChild (xml, NULL, "feedSource", subscription_get_source (subscription)); xmlNewTextChild (xml, NULL, "feedOrigSource", subscription_get_orig_source (subscription)); tmp = g_strdup_printf ("%d", subscription_get_default_update_interval (subscription)); xmlNewTextChild (xml, NULL, "feedUpdateInterval", tmp); g_free (tmp); tmp = g_strdup_printf ("%d", subscription->discontinued?1:0); xmlNewTextChild (xml, NULL, "feedDiscontinued", tmp); g_free (tmp); if (subscription->updateError) xmlNewTextChild (xml, NULL, "updateError", subscription->updateError); if (subscription->httpError) { xmlNewTextChild (xml, NULL, "httpError", subscription->httpError); tmp = g_strdup_printf ("%d", subscription->httpErrorCode); xmlNewTextChild (xml, NULL, "httpErrorCode", tmp); g_free (tmp); } if (subscription->filterError) xmlNewTextChild (xml, NULL, "filterError", subscription->filterError); metadata_add_xml_nodes (subscription->metadata, xml); } void subscription_free (subscriptionPtr subscription) { if (!subscription) return; g_free (subscription->updateError); g_free (subscription->filterError); g_free (subscription->httpError); g_free (subscription->source); g_free (subscription->origSource); g_free (subscription->filtercmd); update_job_cancel_by_owner (subscription); update_options_free (subscription->updateOptions); update_state_free (subscription->updateState); metadata_list_free (subscription->metadata); g_free (subscription); } liferea-1.12.7/src/subscription.h000066400000000000000000000175311352135647700167210ustar00rootroot00000000000000/** * @file subscription.h common subscription handling interface * * Copyright (C) 2003-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _SUBSCRIPTION_H #define _SUBSCRIPTION_H #include #include #include "node.h" #include "update.h" /** Caching property constants */ enum cache_limit { /* Values > 0 are used to specify certain limits */ CACHE_DISABLE = 0, CACHE_DEFAULT = -1, CACHE_UNLIMITED = -2, }; /** Flags used in the request structure */ enum feed_request_flags { FEED_REQ_RESET_TITLE = (1<<0), /**< Feed's title should be reset to default upon update */ FEED_REQ_PRIORITY_HIGH = (1<<3), /**< set to signal that this is an important user triggered request */ }; /** Common structure to hold all information about a single subscription. */ typedef struct subscription { nodePtr node; /**< the feed list node the subscription is attached to */ struct subscriptionType *type; /**< the subscription type */ gchar *source; /**< current source, can be changed by redirects */ gchar *origSource; /**< the source given when creating the subscription */ updateOptionsPtr updateOptions; /**< update options for the feed source */ struct updateJob *updateJob; /**< update request structure used when downloading the subscribed source */ gint updateInterval; /**< user defined update interval in minutes */ guint defaultInterval; /**< optional update interval as specified by the feed in minutes */ GSList *metadata; /**< metadata list assigned to this subscription */ gchar *updateError; /**< textual description of processing errors */ gchar *httpError; /**< textual description of HTTP protocol errors */ gint httpErrorCode; /**< last HTTP error code */ updateStatePtr updateState; /**< update states (etag, last modified, cookies, last polling times...) */ gboolean activeAuth; /**< TRUE if authentication in progress */ gboolean discontinued; /**< flag to avoid updating after HTTP 410 */ gchar *filtercmd; /**< feed filter command */ gchar *filterError; /**< textual description of filter errors */ } *subscriptionPtr; /** * Create a new subscription structure. * * @param source the subscription source URL (or NULL) * @param filter a post processing filter (or NULL) * @param options update options (or NULL) * * @returns the new subscription */ subscriptionPtr subscription_new (const gchar *source, const gchar *filter, updateOptionsPtr options); /** * Imports a subscription from the given XML document. * * @param xml xml node * @param trusted TRUE when importing from internal XML document * * @returns a new subscription */ subscriptionPtr subscription_import (xmlNodePtr xml, gboolean trusted); /** * Exports the given subscription to the given XML document. * * @param subscription the subscription * @param xml xml node * @param trusted TRUE when exporting to internal XML document */ void subscription_export (subscriptionPtr subscription, xmlNodePtr xml, gboolean trusted); /** * Serialization helper function for rendering purposes. * * @param node the subscription to serialize * @param feedNode XML node to add subscription attributes to */ void subscription_to_xml (subscriptionPtr subscription, xmlNodePtr xml); /** * Triggers updating a subscription. Will download the * the document indicated by the source URL of the subscription. * Will call the node type specific update callback to process * the downloaded data. * * @param subscription the subscription * @param flags update flags */ void subscription_update (subscriptionPtr subscription, guint flags); /** * Called when auto updating. Checks whether the subscription * needs to be updated (according to it's update interval) and * if necessary calls subscription_update(). * * @param subscription the subscription */ void subscription_auto_update (subscriptionPtr subscription); /** * Cancels a currently running subscription update. This is to * be called when removing subscriptions or retriggering the update * upon user request. * * @param subscription the subscription */ void subscription_cancel_update (subscriptionPtr subscription); /** * Get the update interval setting of a given subscription * * @param subscription the subscription * * @returns the currently configured update interval (in minutes) */ gint subscription_get_update_interval(subscriptionPtr subscription); /** * Set the update interval setting for the given subscription * * @param subscription the subscription * @param interval the new update interval (in minutes) */ void subscription_set_update_interval(subscriptionPtr subscription, gint interval); /** * Get the default update interval setting of a given subscription * * @param subscription the subscription * * @returns the default update interval (in minutes) or 0 */ guint subscription_get_default_update_interval(subscriptionPtr subscription); /** * Set the default update interval setting for the given subscription * * @param subscription the subscription * @param interval the default update interval (in minutes) */ void subscription_set_default_update_interval(subscriptionPtr subscription, guint interval); /** * Reset the update counter for the given subscription. * * @param subscription the subscription */ void subscription_reset_update_counter (subscriptionPtr subscription, GTimeVal *now); void subscription_update_favicon (subscriptionPtr subscription); /** * Get the source URL of a given subscription * * @param subscription the subscription * * @returns the source URL */ const gchar * subscription_get_source(subscriptionPtr subscription); /** * Set a new source URL for the given subscription * * @param subscription the subscription * @param source the new source URL */ void subscription_set_source(subscriptionPtr subscription, const gchar *source); /** * Returns the homepage URL of the given subscription. * * @param subscription the subscription * * @returns the homepage URL or NULL */ const gchar * subscription_get_homepage(subscriptionPtr subscription); /** * Set the homepage URL of the given subscription. If the passed * URL is a relative one it will be expanded using the * given base URL. * * @param subscription the subscription * @param url the new HTML URL */ void subscription_set_homepage(subscriptionPtr subscription, const gchar *url); /** * Get the configured filter command for a given subscription * * @param subscription the subscription * * @returns the filter command */ const gchar * subscription_get_filter(subscriptionPtr subscription); /** * Set a new filter command for a given subscription * * @param subscription the subscription * @param filter the new filter command */ void subscription_set_filter(subscriptionPtr subscription, const gchar * filter); /** * Set authentication information for a given subscription * * @param subscription the subscription * @param username the user name * @param password the password */ void subscription_set_auth_info (subscriptionPtr subscription, const gchar *username, const gchar *password); /** * Frees the given subscription structure. * * @param subscription the subscription */ void subscription_free(subscriptionPtr subscription); #endif liferea-1.12.7/src/subscription_type.h000066400000000000000000000044601352135647700177570ustar00rootroot00000000000000/* * @file subscription_type.h subscription type interface * * Copyright (C) 2008 Lars Windolf * Copyright (C) 2008 Arnold Noronha * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _SUBSCRIPTION_TYPE_H #define _SUBSCRIPTION_TYPE_H #include "subscription.h" /* * Liferea supports different types of subscriptions that differ * in their updating behaviour and update state. */ /* subscription type interface */ typedef struct subscriptionType { /* Note: the default implementation of this interface is provided by feed.c */ /* * Preparation callback for a update type. Allows a specific * subscription type implementation to make changes to the * already created update request (e.g. URI adaptions or * setting cookies). * * This callback also allows the subscription type implementation * to cancel a request (e.g. when it is clear that an update * is not necessary due to some implicit node source state). * * @param subscription the subscription that is being updated * @param request the request * * @returns FALSE if the request is to be aborted */ gboolean (*prepare_update_request)(subscriptionPtr subscription, struct updateRequest * request); /* * Subscription type specific update result processing callback. * * @param subscription the subscription that was updated * @param result the update result * @param flags the update flags */ void (*process_update_result)(subscriptionPtr subscription, const struct updateResult * const result, updateFlags flags); } *subscriptionTypePtr; #define SUBSCRIPTION_TYPE(subscription) (subscription->type) #endif liferea-1.12.7/src/tests/000077500000000000000000000000001352135647700151575ustar00rootroot00000000000000liferea-1.12.7/src/tests/Makefile.am000066400000000000000000000020171352135647700172130ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in noinst_PROGRAMS = $(TEST_PROGS) TEST_PROGS = html_auto parse_date test: $(TEST_PROGS) echo $(TEST_PROGS) | sed "s/^/.\//;s/ / \&\& .\//" | xargs -I{} sh -c "{}" .PHONY: test AM_CPPFLAGS = \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ -DPACKAGE_LIB_DIR=\""$(pkglibdir)"\" \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ -DBIN_DIR=\""$(bindir)"\" \ -I$(top_srcdir)/src \ $(PACKAGE_CFLAGS) \ $(INTROSPECTION_CFLAGS) progs_ldadd = ../parsers/libliparsers.a \ ../fl_sources/libliflsources.a \ ../ui/libliui.a \ ../webkit/libwebkit.a \ $(PACKAGE_LIBS) \ $(INTLLIBS) \ $(WEBKIT_LIBS) \ $(INTROSPECTION_LIBS) \ -lm html_auto_SOURCES = html.c html_auto_LDADD = $(progs_ldadd) ../html.o ../common.o ../debug.o ../xml.o parse_date_SOURCES = parse_date.c parse_date_LDADD = $(progs_ldadd) ../date.o ../common.o ../debug.o #item_SOURCES = item.c #item_LDADD = $(progs_ldadd) ../item.o ../metadata.o ../xml.o ../debug.o ../common.o ../date.o ../node.o liferea-1.12.7/src/tests/html.c000066400000000000000000000052371352135647700162760ustar00rootroot00000000000000/** * @file html.c Test cases for feed link auto discovery * * Copyright (C) 2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "html.h" gchar *tc_xml[] = { "", "http://example.com", "http://example.com/news.rss" }; gchar *tc_rdf[] = { "", "http://example.com", "http://www.heise.de/newsticker/heise.rdf" }; gchar *tc_rss[] = { "", "http://example.com", "http://www.heise.de/newsticker/heise.rdf" }; gchar *tc_atom[] = { "", "http://example.com", "http://www.heise.de/newsticker/heise-atom.xml" }; gchar *tc_broken_tag[] = { " * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "date.h" typedef struct tc { gchar *date_string; time_t timestamp; } *tcPtr; struct tc tc_empty = { "", 0 }; struct tc tc_nonsense = { "blabla", 0 }; struct tc tc_rfc822_full = { "Mi, 05 Nov 2014 19:24:38 +0100", 1415211878 }; struct tc tc_rfc822_day = { "Wed, 5 Nov 2014 18:04", 1415210640 }; struct tc tc_rfc822_time = { "Mi, 05 Nov 2014 18:04:58 ", 1415210698 }; struct tc tc_rfc822_min = { "Mi, 05 Nov 2014 18:04 ", 1415210640 }; struct tc tc_rfc822_timezone = { "Mi, 05 Nov 2014 18:04 IRST", 1415194440 }; struct tc tc_rfc822_year2_1 = { "05 Nov 14 18:04:35", 1415210675 }; struct tc tc_rfc822_year2_2 = { "05 Nov 14 18:04", 1415210640 }; struct tc tc_rfc822_year2_3 = { "Wed, 05 Nov 14 17:04:35 -0100", 1415210675 }; struct tc tc_rfc822_wrong = { "Do, 05 Nov 2014 18:04:58", 1415210698 }; struct tc tc_iso8601_full = { "2014-11-05T19:00:00+0100", 1415210400 }; struct tc tc_iso8601_day = { "2014-11-05", 1415145600 }; struct tc tc_iso8601_hours = { "2014-11-05T19+0100", 1415214000 }; struct tc tc_iso8601_Z = { "2014-11-04T10:15:16Z", 1415096116 }; struct tc tc_iso8601_wrong = { "2014-22-22T31", 0 }; static void tc_parse_rfc822 (gconstpointer user_data) { tcPtr tc = (tcPtr)user_data; g_assert_cmpint (date_parse_RFC822 (tc->date_string), ==, tc->timestamp); } static void tc_parse_iso8601 (gconstpointer user_data) { tcPtr tc = (tcPtr)user_data; g_assert_cmpint (date_parse_ISO8601 (tc->date_string), ==, tc->timestamp); } int main (int argc, char *argv[]) { g_test_init (&argc, &argv, NULL); g_test_add_data_func ("/parse_date/rfc822/empty", &tc_empty, &tc_parse_rfc822); g_test_add_data_func ("/parse_date/rfc822/nonsense", &tc_nonsense, &tc_parse_rfc822); g_test_add_data_func ("/parse_date/rfc822/full", &tc_rfc822_full, &tc_parse_rfc822); g_test_add_data_func ("/parse_date/rfc822/day", &tc_rfc822_day, &tc_parse_rfc822); g_test_add_data_func ("/parse_date/rfc822/time", &tc_rfc822_time, &tc_parse_rfc822); g_test_add_data_func ("/parse_date/rfc822/min", &tc_rfc822_min, &tc_parse_rfc822); g_test_add_data_func ("/parse_date/rfc822/timezone", &tc_rfc822_timezone, &tc_parse_rfc822); g_test_add_data_func ("/parse_date/rfc822/year2_1", &tc_rfc822_year2_1, &tc_parse_rfc822); g_test_add_data_func ("/parse_date/rfc822/year2_2", &tc_rfc822_year2_2, &tc_parse_rfc822); g_test_add_data_func ("/parse_date/rfc822/year2_3", &tc_rfc822_year2_3, &tc_parse_rfc822); g_test_add_data_func ("/parse_date/rfc822/wrong", &tc_rfc822_wrong, &tc_parse_rfc822); g_test_add_data_func ("/parse_date/iso8601/empty", &tc_empty, &tc_parse_iso8601); g_test_add_data_func ("/parse_date/iso8601/nonsense", &tc_nonsense, &tc_parse_iso8601); g_test_add_data_func ("/parse_date/iso8601/full", &tc_iso8601_full, &tc_parse_iso8601); g_test_add_data_func ("/parse_date/iso8601/day", &tc_iso8601_day, &tc_parse_iso8601); // g_test_add_data_func ("/parse_date/iso8601/hours", &tc_iso8601_hours, &tc_parse_iso8601); g_test_add_data_func ("/parse_date/iso8601/Z", &tc_iso8601_Z, &tc_parse_iso8601); // g_test_add_data_func ("/parse_date/iso8601/wrong", &tc_iso8601_wrong, &tc_parse_iso8601); return g_test_run(); } liferea-1.12.7/src/ui/000077500000000000000000000000001352135647700144325ustar00rootroot00000000000000liferea-1.12.7/src/ui/Makefile.am000066400000000000000000000023531352135647700164710ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in AM_CPPFLAGS = \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ -DPACKAGE_LIB_DIR=\""$(pkglibdir)"\" \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ -I$(top_srcdir)/src noinst_LIBRARIES = libliui.a libliui_a_CFLAGS = $(PACKAGE_CFLAGS) $(LIBINDICATE_CFLAGS) libliui_a_SOURCES = \ auth_dialog.c auth_dialog.h \ browser_tabs.c browser_tabs.h \ enclosure_list_view.c enclosure_list_view.h \ feed_list_view.c feed_list_view.h \ feed_list_node.c feed_list_node.h \ gedit-close-button.c gedit-close-button.h \ icons.c icons.h \ item_list_view.c item_list_view.h \ itemview.c itemview.h \ liferea_dialog.c liferea_dialog.h \ liferea_htmlview.c liferea_htmlview.h \ liferea_shell.c liferea_shell.h \ liferea_shell_activatable.c liferea_shell_activatable.h \ media_player.c media_player.h \ media_player_activatable.c media_player_activatable.h \ popup_menu.c popup_menu.h \ preferences_dialog.c preferences_dialog.h \ rule_editor.c rule_editor.h \ search_dialog.c search_dialog.h \ search_folder_dialog.c search_folder_dialog.h \ subscription_dialog.c subscription_dialog.h \ ui_common.c ui_common.h \ ui_dnd.c ui_dnd.h \ ui_folder.c ui_folder.h \ ui_update.c ui_update.h liferea-1.12.7/src/ui/auth_dialog.c000066400000000000000000000104671352135647700170660ustar00rootroot00000000000000/** * @file auth_dialog.c authentication dialog * * Copyright (C) 2007-2016 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ui/auth_dialog.h" #include #include "common.h" #include "debug.h" #include "ui/liferea_dialog.h" #define AUTH_DIALOG_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), AUTH_DIALOG_TYPE, AuthDialogPrivate)) struct AuthDialogPrivate { subscriptionPtr subscription; GtkWidget *dialog; GtkWidget *username; GtkWidget *password; gint flags; }; static GObjectClass *parent_class = NULL; G_DEFINE_TYPE (AuthDialog, auth_dialog, G_TYPE_OBJECT); static void auth_dialog_finalize (GObject *object) { AuthDialog *ad = AUTH_DIALOG (object); if (ad->priv->subscription != NULL) ad->priv->subscription->activeAuth = FALSE; gtk_widget_destroy (ad->priv->dialog); G_OBJECT_CLASS (parent_class)->finalize (object); } static void auth_dialog_class_init (AuthDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = auth_dialog_finalize; g_type_class_add_private (object_class, sizeof(AuthDialogPrivate)); } static void on_authdialog_response (GtkDialog *dialog, gint response_id, gpointer user_data) { AuthDialog *ad = AUTH_DIALOG (user_data); if (response_id == GTK_RESPONSE_OK) { subscription_set_auth_info (ad->priv->subscription, gtk_entry_get_text (GTK_ENTRY (ad->priv->username)), gtk_entry_get_text (GTK_ENTRY (ad->priv->password))); subscription_update (ad->priv->subscription, ad->priv->flags); } g_object_unref (ad); } static void auth_dialog_load (AuthDialog *ad, subscriptionPtr subscription, gint flags) { gchar *promptStr; gchar *source = NULL; xmlURIPtr uri; subscription->activeAuth = TRUE; ad->priv->subscription = subscription; ad->priv->flags = flags; uri = xmlParseURI (subscription_get_source (ad->priv->subscription)); if (uri) { if (uri->user) { gchar *user = uri->user; gchar *pass = strstr (user, ":"); if(pass) { pass[0] = '\0'; pass++; gtk_entry_set_text (GTK_ENTRY (ad->priv->password), pass); } gtk_entry_set_text (GTK_ENTRY (ad->priv->username), user); xmlFree (uri->user); uri->user = NULL; } xmlFree (uri->user); uri->user = NULL; source = (gchar *) xmlSaveUri (uri); xmlFreeURI (uri); } promptStr = g_strdup_printf ( _("Enter the username and password for \"%s\" (%s):"), node_get_title (ad->priv->subscription->node), source?source:_("Unknown source")); gtk_label_set_text (GTK_LABEL (liferea_dialog_lookup (ad->priv->dialog, "prompt")), promptStr); g_free (promptStr); if (source) xmlFree (source); } static void auth_dialog_init (AuthDialog *ad) { ad->priv = AUTH_DIALOG_GET_PRIVATE (ad); ad->priv->dialog = liferea_dialog_new ("auth"); ad->priv->username = liferea_dialog_lookup (ad->priv->dialog, "usernameEntry"); ad->priv->password = liferea_dialog_lookup (ad->priv->dialog, "passwordEntry"); g_signal_connect (G_OBJECT (ad->priv->dialog), "response", G_CALLBACK (on_authdialog_response), ad); gtk_widget_show_all (ad->priv->dialog); } AuthDialog * auth_dialog_new (subscriptionPtr subscription, gint flags) { AuthDialog *ad; if (subscription->activeAuth) { debug0 (DEBUG_UPDATE, "Missing/wrong authentication. Skipping, as a dialog is already active."); return NULL; } ad = AUTH_DIALOG (g_object_new (AUTH_DIALOG_TYPE, NULL)); auth_dialog_load(ad, subscription, flags); return ad; } liferea-1.12.7/src/ui/auth_dialog.h000066400000000000000000000040451352135647700170660ustar00rootroot00000000000000/** * @file auth_dialog.h authentication support dialog * * Copyright (C) 2007-2010 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _UI_AUTH_H #define _UI_AUTH_H #include #include "subscription.h" G_BEGIN_DECLS #define AUTH_DIALOG_TYPE (auth_dialog_get_type ()) #define AUTH_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AUTH_DIALOG_TYPE, AuthDialog)) #define AUTH_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), AUTH_DIALOG_TYPE, AuthDialogClass)) #define IS_AUTH_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AUTH_DIALOG_TYPE)) #define IS_AUTH_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), AUTH_DIALOG_TYPE)) typedef struct AuthDialog AuthDialog; typedef struct AuthDialogClass AuthDialogClass; typedef struct AuthDialogPrivate AuthDialogPrivate; struct AuthDialog { GObject parent; /*< private >*/ AuthDialogPrivate *priv; }; struct AuthDialogClass { GObjectClass parent_class; }; GType auth_dialog_get_type (void); /** * Create a new authentication dialog if there is not already one for * the given subscription. * * @param subscription the subscription whose authentication info is needed * @param flags the flags for the update request after authenticating * * @returns new dialog */ AuthDialog * auth_dialog_new (subscriptionPtr subscription, gint flags); G_END_DECLS #endif /* _UI_AUTH_H */ liferea-1.12.7/src/ui/browser_tabs.c000066400000000000000000000231731352135647700173000ustar00rootroot00000000000000/* * @file browser_tabs.c internal browsing using multiple tabs * * Copyright (C) 2004-2012 Lars Windolf * Copyright (C) 2006 Nathan Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ui/browser_tabs.h" #include #include #include "common.h" #include "ui/liferea_shell.h" #include "ui/item_list_view.h" #include "ui/gedit-close-button.h" /** * tab_info_copy: (skip) * * Creates a copy of @tabInfo */ static gpointer tab_info_copy (gpointer orig) { tabInfo *a = orig; tabInfo *b; b = g_new0 (tabInfo, 1); b->label = a->label; b->widget = a->widget; b->htmlview = a->htmlview; // Shall we? g_object_ref(b->label); g_object_ref(b->widget); g_object_ref(b->htmlview); return b; } /** * tab_info_free: (skip) * * free @tabInfo */ static void tab_info_free (gpointer orig) { tabInfo *a = orig; g_object_unref(a->label); g_object_unref(a->widget); g_object_unref(a->htmlview); g_free(orig); } G_DEFINE_BOXED_TYPE(tabInfo, tab_info, tab_info_copy, tab_info_free) // gslist type for gproperty //https://git.gnome.org/browse/gobject-introspection/tree/tests/gimarshallingtests.c static GType gi_marshalling_boxed_gslist_get_type (void) { static GType type = 0; if (type == 0) { type = g_boxed_type_register_static ("GIMarshallingBoxedGSList", (GBoxedCopyFunc) g_slist_copy, (GBoxedFreeFunc) g_slist_free); } return type; } /* tab callbacks */ static void browser_tabs_close_tab (tabInfo *tab); static gboolean on_tab_key_press (GtkWidget *widget, GdkEventKey *event, gpointer data) { guint modifiers; modifiers = gtk_accelerator_get_default_mod_mask (); if ((event->keyval == GDK_KEY_w) && ((event->state & modifiers) == GDK_CONTROL_MASK)) { browser_tabs_close_tab ((tabInfo *)data); return TRUE; } return FALSE; } /* browser tabs object */ #define BROWSER_TABS_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), BROWSER_TABS_TYPE, BrowserTabsPrivate)) enum { PROP_NONE, PROP_NOTEBOOK, PROP_HEAD_LINES, PROP_TAB_INFO_LIST }; struct BrowserTabsPrivate { GtkNotebook *notebook; GtkWidget *headlines; /*<< widget of the headlines tab */ GSList *list; /*<< tabInfo structures for all tabs */ }; static GObjectClass *parent_class = NULL; static BrowserTabs *tabs = NULL; G_DEFINE_TYPE (BrowserTabs, browser_tabs, G_TYPE_OBJECT); /* Removes tab info structure */ static void browser_tabs_remove_tab (tabInfo *tab) { tabs->priv->list = g_slist_remove (tabs->priv->list, tab); g_object_unref (tab->htmlview); g_free (tab); } static void browser_tabs_finalize (GObject *object) { BrowserTabs *bt = BROWSER_TABS (object); GSList *iter = bt->priv->list; while (iter) { browser_tabs_remove_tab (iter->data); iter = g_slist_next (iter); } G_OBJECT_CLASS (parent_class)->finalize (object); } static void browser_tabs_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { BrowserTabs *bt = BROWSER_TABS (object); switch (prop_id) { case PROP_NOTEBOOK: g_value_set_object (value, bt->priv->notebook); break; case PROP_HEAD_LINES: g_value_set_object (value, bt->priv->headlines); break; case PROP_TAB_INFO_LIST: g_value_set_boxed (value, bt->priv->list); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void browser_tabs_class_init (BrowserTabsClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->get_property = browser_tabs_get_property; object_class->finalize = browser_tabs_finalize; /* BrowserTabs:notebook: */ g_object_class_install_property ( object_class, PROP_NOTEBOOK, g_param_spec_object ( "notebook", "GtkNotebook", "GtkNotebook object", GTK_TYPE_NOTEBOOK, G_PARAM_READABLE)); /* BrowserTabs:headlines: */ g_object_class_install_property ( object_class, PROP_HEAD_LINES, g_param_spec_object ( "head-lines", "GtkWidget", "GtkWidget object", GTK_TYPE_WIDGET, G_PARAM_READABLE)); /** * BrowserTabs:tab-info-list: (type GSList(tabInfo)) (transfer none): */ g_object_class_install_property ( object_class, PROP_TAB_INFO_LIST, g_param_spec_boxed( "tab-info-list", "SList of browser tab info", "A GList of tab info containing htmlviews", gi_marshalling_boxed_gslist_get_type(), G_PARAM_READABLE)); g_type_class_add_private (object_class, sizeof(BrowserTabsPrivate)); } static void browser_tabs_init (BrowserTabs *bt) { /* globally accessible singleton */ g_assert (NULL == tabs); tabs = bt; tabs->priv = BROWSER_TABS_GET_PRIVATE (tabs); } BrowserTabs * browser_tabs_create (GtkNotebook *notebook) { g_object_new (BROWSER_TABS_TYPE, NULL); tabs->priv->notebook = notebook; tabs->priv->headlines = gtk_notebook_get_nth_page (notebook, 0); gtk_notebook_set_show_tabs (tabs->priv->notebook, FALSE); return tabs; } /* HTML view signal handlers */ static const gchar * remove_string_prefix (const gchar *string, const gchar *prefix) { int len; len = strlen (prefix); if (!strncmp (string, prefix, len)) string += len; return string; } static const gchar * create_label_text (const gchar *title) { const gchar *tmp; tmp = (title && *title) ? title : _("Untitled"); tmp = remove_string_prefix (tmp, "http://"); tmp = remove_string_prefix (tmp, "https://"); return tmp; } static void on_htmlview_title_changed (gpointer object, gchar *title, gpointer user_data) { tabInfo *tab = (tabInfo *)user_data; gtk_label_set_text (GTK_LABEL(tab->label), create_label_text (title)); } static void on_htmlview_close_tab (gpointer object, gpointer user_data) { browser_tabs_close_tab((tabInfo *)user_data); } /* Close tab and removes tab info structure */ static void browser_tabs_close_tab (tabInfo *tab) { int n = 0; GList *iter, *list; /* Find the tab index that needs to be closed */ iter = list = gtk_container_get_children (GTK_CONTAINER (tabs->priv->notebook)); while (iter) { if (tab->widget == GTK_WIDGET (iter->data)) break; n++; iter = g_list_next (iter); } g_list_free (list); if (iter) { gtk_notebook_remove_page (tabs->priv->notebook, n); browser_tabs_remove_tab (tab); } /* check if all tabs are closed */ if (1 == gtk_notebook_get_n_pages (tabs->priv->notebook)) gtk_notebook_set_show_tabs (tabs->priv->notebook, FALSE); } static void on_htmlview_status_message (gpointer obj, gchar *url) { liferea_shell_set_important_status_bar ("%s", url); } /* single tab creation */ LifereaHtmlView * browser_tabs_add_new (const gchar *url, const gchar *title, gboolean activate) { GtkWidget *close_button, *labelBox; tabInfo *tab; int i; tab = g_new0 (tabInfo, 1); tab->htmlview = liferea_htmlview_new (TRUE /* internal browsing */); tab->widget = liferea_htmlview_get_widget (tab->htmlview); tabs->priv->list = g_slist_append (tabs->priv->list, tab); g_object_set_data (G_OBJECT (tab->widget), "tabInfo", tab); g_signal_connect (tab->htmlview, "title-changed", G_CALLBACK (on_htmlview_title_changed), tab); g_signal_connect (tab->htmlview, "statusbar-changed", G_CALLBACK (on_htmlview_status_message), NULL); /* create tab widgets */ tab->label = gtk_label_new (create_label_text (title)); gtk_label_set_ellipsize (GTK_LABEL (tab->label), PANGO_ELLIPSIZE_END); gtk_label_set_width_chars (GTK_LABEL (tab->label), 17); labelBox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); gtk_box_pack_start (GTK_BOX (labelBox), tab->label, FALSE, FALSE, 0); close_button = gedit_close_button_new (); gtk_box_pack_end (GTK_BOX (labelBox), close_button, FALSE, FALSE, 0); g_signal_connect ((gpointer)close_button, "clicked", G_CALLBACK (on_htmlview_close_tab), (gpointer)tab); gtk_widget_show_all (labelBox); i = gtk_notebook_append_page (tabs->priv->notebook, tab->widget, labelBox); g_signal_connect (gtk_notebook_get_nth_page (tabs->priv->notebook, i), "key-press-event", G_CALLBACK (on_tab_key_press), (gpointer)tab); gtk_notebook_set_show_tabs (tabs->priv->notebook, TRUE); gtk_notebook_set_tab_reorderable (tabs->priv->notebook, tab->widget, TRUE); if (activate && (i != -1)) gtk_notebook_set_current_page (tabs->priv->notebook, i); if (url) liferea_htmlview_launch_URL_internal (tab->htmlview, (gchar *)url); return tab->htmlview; } void browser_tabs_show_headlines (void) { gtk_notebook_set_current_page (tabs->priv->notebook, gtk_notebook_page_num (tabs->priv->notebook, tabs->priv->headlines)); } LifereaHtmlView * browser_tabs_get_active_htmlview (void) { tabInfo *tab; gint current; current = gtk_notebook_get_current_page (tabs->priv->notebook); if (0 == current) return NULL; /* never return the first page widget (because it is the item view) */ tab = g_object_get_data (G_OBJECT (gtk_notebook_get_nth_page (tabs->priv->notebook, current)), "tabInfo"); return tab->htmlview; } void browser_tabs_do_zoom (gboolean in) { liferea_htmlview_do_zoom (browser_tabs_get_active_htmlview (), in); } liferea-1.12.7/src/ui/browser_tabs.h000066400000000000000000000063511352135647700173040ustar00rootroot00000000000000/* * @file browser_tabs.h internal browsing using multiple tabs * * Copyright (C) 2004-2008 Lars Windolf * Copyright (C) 2006 Nathan Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _BROWSER_TABS_H #define _BROWSER_TABS_H #include #include "liferea_htmlview.h" G_BEGIN_DECLS #define BROWSER_TABS_TYPE (browser_tabs_get_type ()) #define BROWSER_TABS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BROWSER_TABS_TYPE, BrowserTabs)) #define BROWSER_TABS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), BROWSER_TABS_TYPE, BrowserTabsClass)) #define IS_BROWSER_TABS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), BROWSER_TABS_TYPE)) #define IS_BROWSER_TABS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), BROWSER_TABS_TYPE)) typedef struct BrowserTabs BrowserTabs; typedef struct BrowserTabsClass BrowserTabsClass; typedef struct BrowserTabsPrivate BrowserTabsPrivate; extern BrowserTabs *browser_tabs; struct BrowserTabs { GObject parent; /*< private >*/ BrowserTabsPrivate *priv; }; struct BrowserTabsClass { GObjectClass parent_class; }; GType browser_tabs_get_type (void); /** * browser_tabs_create: (skip) * @notebook: GtkNotebook widget to use * * Returns: the singleton browser tabs instance. * */ BrowserTabs * browser_tabs_create (GtkNotebook *notebook); /** * browser_tabs_add_new: * @url: URL to be loaded in new tab (can be NULL to do nothing) * @title: title of the tab to be created * @activate: Should the new tab be put in the foreground? * * Adds a new tab with the specified URL and title. * * Returns: the newly created HTML view */ LifereaHtmlView * browser_tabs_add_new (const gchar *url, const gchar *title, gboolean activate); /** * browser_tabs_show_headlines: * * makes the headline tab visible */ void browser_tabs_show_headlines (void); /** * browser_tabs_get_active_htmlview: * * Used to determine which HTML view (a tab or the headlines view) * is currently visible and can be used to display HTML that * is to be loaded * * Returns: (transfer none) (nullable): HTML view widget */ LifereaHtmlView * browser_tabs_get_active_htmlview (void); /** * browser_tabs_do_zoom: * @in: TRUE if zooming in, FALSE for zooming out * * Requests the tab to change zoom level. */ void browser_tabs_do_zoom (gboolean in); /* All widget elements and state of a tab */ typedef struct _tabInfo tabInfo; struct _tabInfo { GtkWidget *label; /*<< the tab label */ GtkWidget *widget; /*<< the embedded child widget */ LifereaHtmlView *htmlview; /*<< the tabs HTML view widget */ }; G_END_DECLS #endif liferea-1.12.7/src/ui/enclosure_list_view.c000066400000000000000000000410571352135647700206710ustar00rootroot00000000000000/** * @file enclosure-list-view.c enclosures/podcast handling GUI * * Copyright (C) 2005-2016 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "enclosure_list_view.h" #include #include "common.h" #include "conf.h" #include "debug.h" #include "enclosure.h" #include "item.h" #include "metadata.h" #include "ui/liferea_dialog.h" #include "ui/media_player.h" #include "ui/popup_menu.h" #include "ui/ui_common.h" /* enclosure list view implementation */ enum { ES_NAME_STR, ES_MIME_STR, ES_DOWNLOADED, ES_SIZE, ES_SIZE_STR, ES_SERIALIZED, ES_LEN }; #define ENCLOSURE_LIST_VIEW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), ENCLOSURE_LIST_VIEW_TYPE, EnclosureListViewPrivate)) struct EnclosureListViewPrivate { GSList *enclosures; /**< list of currently presented enclosures */ GtkWidget *container; /**< container the list is embedded in */ GtkWidget *expander; /**< expander that shows/hides the list */ GtkWidget *treeview; GtkTreeStore *treestore; }; static GObjectClass *parent_class = NULL; G_DEFINE_TYPE (EnclosureListView, enclosure_list_view, G_TYPE_OBJECT); static void enclosure_list_view_finalize (GObject *object) { G_OBJECT_CLASS (parent_class)->finalize (object); } static void enclosure_list_view_destroy_cb (GtkWidget *widget, EnclosureListView *elv) { g_object_unref (elv); } static void enclosure_list_view_class_init (EnclosureListViewClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = enclosure_list_view_finalize; g_type_class_add_private (object_class, sizeof(EnclosureListViewPrivate)); } static void enclosure_list_view_init (EnclosureListView *elv) { elv->priv = ENCLOSURE_LIST_VIEW_GET_PRIVATE (elv); } static enclosurePtr enclosure_list_view_get_selected_enclosure (EnclosureListView *elv, GtkTreeIter *iter) { gchar *str; enclosurePtr enclosure; gtk_tree_model_get (GTK_TREE_MODEL (elv->priv->treestore), iter, ES_SERIALIZED, &str, -1); enclosure = enclosure_from_string (str); g_free (str); return enclosure; } static gboolean on_enclosure_list_button_press (GtkWidget *treeview, GdkEventButton *event, gpointer user_data) { GdkEventButton *eb = (GdkEventButton *)event; GtkTreePath *path; GtkTreeIter iter; EnclosureListView *elv = (EnclosureListView *)user_data; if ((event->type != GDK_BUTTON_PRESS) || (3 != eb->button)) return FALSE; /* avoid handling header clicks */ if (event->window != gtk_tree_view_get_bin_window (GTK_TREE_VIEW (treeview))) return FALSE; if (!gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (treeview), (gint)event->x, (gint)event->y, &path, NULL, NULL, NULL)) return FALSE; if (gtk_tree_model_get_iter (GTK_TREE_MODEL (elv->priv->treestore), &iter, path)) ui_popup_enclosure_menu (enclosure_list_view_get_selected_enclosure (elv, &iter), eb->button, eb->time); return TRUE; } static gboolean on_enclosure_list_popup_menu (GtkWidget *widget, gpointer user_data) { GtkTreeView *treeview = GTK_TREE_VIEW (widget); GtkTreeModel *model; GtkTreeIter iter; EnclosureListView *elv = (EnclosureListView *)user_data; if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (treeview), &model, &iter)) { ui_popup_enclosure_menu (enclosure_list_view_get_selected_enclosure (elv, &iter), 3, 0); return TRUE; } return FALSE; } static gboolean on_enclosure_list_activate (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) { GtkTreeIter iter; GtkTreeModel *model; EnclosureListView *elv = (EnclosureListView *)user_data; if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (treeview), &model, &iter)) { on_popup_open_enclosure (enclosure_list_view_get_selected_enclosure (elv, &iter)); return TRUE; } return FALSE; } EnclosureListView * enclosure_list_view_new () { EnclosureListView *elv; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkWidget *widget; elv = ENCLOSURE_LIST_VIEW (g_object_new (ENCLOSURE_LIST_VIEW_TYPE, NULL)); /* Use a vbox to allow media player insertion */ elv->priv->container = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_widget_set_name (GTK_WIDGET (elv->priv->container), "enclosureview"); elv->priv->expander = gtk_expander_new (_("Attachments")); gtk_box_pack_end (GTK_BOX (elv->priv->container), elv->priv->expander, TRUE, TRUE, 0); widget = gtk_scrolled_window_new (NULL, NULL); /* FIXME: Setting a fixed size is not nice, but a workaround for the enclosure list view being hidden as 1px size in Ubuntu */ gtk_widget_set_size_request (widget, -1, 75); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (widget), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (widget), GTK_SHADOW_IN); gtk_container_add (GTK_CONTAINER (elv->priv->expander), widget); elv->priv->treeview = gtk_tree_view_new (); gtk_container_add (GTK_CONTAINER (widget), elv->priv->treeview); gtk_widget_show (elv->priv->treeview); elv->priv->treestore = gtk_tree_store_new (ES_LEN, G_TYPE_STRING, /* ES_NAME_STR */ G_TYPE_STRING, /* ES_MIME_STR */ G_TYPE_BOOLEAN, /* ES_DOWNLOADED */ G_TYPE_ULONG, /* ES_SIZE */ G_TYPE_STRING, /* ES_SIZE_STRING */ G_TYPE_STRING /* ES_SERIALIZED */ ); gtk_tree_view_set_model (GTK_TREE_VIEW (elv->priv->treeview), GTK_TREE_MODEL(elv->priv->treestore)); /* explicitely no translation for invisible column headers... */ renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Size", renderer, "text", ES_SIZE_STR, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (elv->priv->treeview), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("URL", renderer, "text", ES_NAME_STR, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (elv->priv->treeview), column); gtk_tree_view_column_set_sort_column_id (column, ES_NAME_STR); gtk_tree_view_column_set_expand (column, TRUE); g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("MIME", renderer, "text", ES_MIME_STR, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (elv->priv->treeview), column); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (elv->priv->treeview), FALSE); g_signal_connect (G_OBJECT (elv->priv->treeview), "button_press_event", G_CALLBACK (on_enclosure_list_button_press), (gpointer)elv); g_signal_connect (G_OBJECT (elv->priv->treeview), "row-activated", G_CALLBACK (on_enclosure_list_activate), (gpointer)elv); g_signal_connect (G_OBJECT (elv->priv->treeview), "popup_menu", G_CALLBACK (on_enclosure_list_popup_menu), (gpointer)elv); g_signal_connect_object (elv->priv->container, "destroy", G_CALLBACK (enclosure_list_view_destroy_cb), elv, 0); return elv; } GtkWidget * enclosure_list_view_get_widget (EnclosureListView *elv) { return elv->priv->container; } void enclosure_list_view_load (EnclosureListView *elv, itemPtr item) { GSList *list, *filteredList; guint len; /* Ugly workaround to prevent race on startup when item is selected but enclosure list view not yet initialized. */ if (!elv) return; /* cleanup old content */ gtk_tree_store_clear (elv->priv->treestore); list = elv->priv->enclosures; while (list) { enclosure_free ((enclosurePtr)list->data); list = g_slist_next (list); } g_slist_free (elv->priv->enclosures); elv->priv->enclosures = NULL; /* load list into tree view */ filteredList = NULL; list = metadata_list_get_values (item->metadata, "enclosure"); while (list) { enclosurePtr enclosure = enclosure_from_string (list->data); if (enclosure) { GtkTreeIter iter; gchar *sizeStr; guint size = enclosure->size; /* The following literals are the enclosure list size units */ gchar *unit = _(" Bytes"); if (size > 1024) { size /= 1024; unit = _("kB"); } if (size > 1024) { size /= 1024; unit = _("MB"); } if (size > 1024) { size /= 1024; unit = _("GB"); } /* The following literal is the format string for enclosure sizes (number + unit string) */ if (size > 0) sizeStr = g_strdup_printf (_("%d%s"), size, unit); else sizeStr = g_strdup (""); gtk_tree_store_append (elv->priv->treestore, &iter, NULL); gtk_tree_store_set (elv->priv->treestore, &iter, ES_NAME_STR, enclosure->url, ES_MIME_STR, enclosure->mime?enclosure->mime:"", ES_DOWNLOADED, enclosure->downloaded, ES_SIZE, enclosure->size, ES_SIZE_STR, sizeStr, ES_SERIALIZED, list->data, -1); g_free (sizeStr); elv->priv->enclosures = g_slist_append (elv->priv->enclosures, enclosure); // Filter unwanted MIME types (we only want audio/* and video/*) if (enclosure->mime && (g_str_has_prefix (enclosure->mime, "video/") || (g_str_has_prefix (enclosure->mime, "audio/")))) { filteredList = g_slist_append (filteredList, list->data); } } list = g_slist_next (list); } /* decide visibility of the list */ len = g_slist_length (elv->priv->enclosures); if (len == 0) { enclosure_list_view_hide (elv); return; } gtk_widget_show_all (elv->priv->container); /* update list title */ gchar *text = g_strdup_printf (ngettext("%d attachment", "%d attachments", len), len); gtk_expander_set_label (GTK_EXPANDER (elv->priv->expander), text); g_free (text); /* Load the optional media player plugin */ if (g_slist_length (filteredList) > 0) { liferea_media_player_load (elv->priv->container, filteredList); } } void enclosure_list_view_select (EnclosureListView *elv, guint position) { GtkTreeIter iter; if (!gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (elv->priv->treestore), &iter, NULL, position)) return; gtk_tree_selection_select_iter (gtk_tree_view_get_selection (GTK_TREE_VIEW (elv->priv->treeview)), &iter); } void enclosure_list_view_hide (EnclosureListView *elv) { if (!elv) return; gtk_widget_hide (GTK_WIDGET (elv->priv->container)); } /* callback for preferences and enclosure type handling */ static void on_selectcmdok_clicked (const gchar *filename, gpointer user_data) { GtkWidget *dialog = (GtkWidget *)user_data; gchar *utfname; if (!filename) return; utfname = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL); if (utfname) { gtk_entry_set_text (GTK_ENTRY (liferea_dialog_lookup (dialog, "enc_cmd_entry")), utfname); g_free (utfname); } } static void on_selectcmd_pressed (GtkButton *button, gpointer user_data) { GtkWidget *dialog = (GtkWidget *)user_data; const gchar *utfname; gchar *name; utfname = gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (dialog,"enc_cmd_entry"))); name = g_filename_from_utf8 (utfname, -1, NULL, NULL, NULL); if (name) { ui_choose_file (_("Choose File"), "gtk-open", FALSE, on_selectcmdok_clicked, name, NULL, NULL, NULL, dialog); g_free (name); } } /* dialog used for both changing and adding new definitions */ static void on_adddialog_response (GtkDialog *dialog, gint response_id, gpointer user_data) { gchar *typestr; gboolean new = FALSE; enclosurePtr enclosure; encTypePtr etp; if (response_id == GTK_RESPONSE_OK) { etp = g_object_get_data (G_OBJECT (dialog), "type"); typestr = g_object_get_data (G_OBJECT (dialog), "typestr"); enclosure = g_object_get_data (G_OBJECT (dialog), "enclosure"); if (!etp) { new = TRUE; etp = g_new0 (struct encType, 1); if (!strchr (typestr, '/')) etp->extension = g_strdup (typestr); else etp->mime = g_strdup (typestr); } else { g_free (etp->cmd); } etp->cmd = g_strdup (gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (GTK_WIDGET (dialog), "enc_cmd_entry")))); etp->permanent = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (GTK_WIDGET (dialog), "enc_always_btn"))); if (new) enclosure_mime_type_add (etp); else enclosure_mime_types_save (); /* now we have ensured an existing type configuration and can launch the URL for which we configured the type */ if (enclosure) on_popup_open_enclosure (enclosure); g_free (typestr); } gtk_widget_destroy (GTK_WIDGET (dialog)); } /* either type or url and typestr are optional */ static void ui_enclosure_type_setup (encTypePtr type, enclosurePtr enclosure, gchar *typestr) { GtkWidget *dialog; gchar *tmp; dialog = liferea_dialog_new ("enclosure_handler"); if (type) { typestr = type->mime?type->mime:type->extension; gtk_entry_set_text (GTK_ENTRY (liferea_dialog_lookup (dialog, "enc_cmd_entry")), type->cmd); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (dialog, "enc_always_btn")), TRUE); } if (!strchr(typestr, '/')) tmp = g_strdup_printf (_("File Extension .%s"), typestr); else tmp = g_strdup_printf ("%s", typestr); gtk_label_set_text (GTK_LABEL (liferea_dialog_lookup (dialog, "enc_type_label")), tmp); g_free (tmp); g_object_set_data (G_OBJECT(dialog), "typestr", g_strdup (typestr)); g_object_set_data (G_OBJECT(dialog), "enclosure", enclosure); g_object_set_data (G_OBJECT(dialog), "type", type); g_signal_connect (G_OBJECT(dialog), "response", G_CALLBACK(on_adddialog_response), type); g_signal_connect (G_OBJECT(liferea_dialog_lookup(dialog, "enc_cmd_select_btn")), "clicked", G_CALLBACK(on_selectcmd_pressed), dialog); gtk_widget_show (dialog); } void on_popup_open_enclosure (gpointer callback_data) { gchar *typestr, *tmp = NULL; enclosurePtr enclosure = (enclosurePtr)callback_data; encTypePtr etp_tmp = NULL, etp_found = NULL; GSList *iter; /* 1.) Always try to determine the file extension... */ /* find extension by looking for last '.' */ typestr = strrchr (enclosure->url, '.'); if (typestr) typestr = tmp = g_strdup (typestr + 1); /* handle case where there is a slash after the '.' */ if (typestr && strrchr (typestr, '/')) typestr = strrchr (typestr, '/'); /* handle case where there is no '.' at all */ if (!typestr && strrchr (enclosure->url, '/')) typestr = strrchr (enclosure->url, '/'); /* if we found no extension we map to dummy type "data" */ if (!typestr) typestr = tmp = g_strdup ("data"); /* strip GET parameters from typestr */ g_strdelimit (typestr, "?", 0); debug2 (DEBUG_CACHE, "url:%s, mime:%s", enclosure->url, enclosure->mime); /* 2.) Search for type configuration based on MIME or file extension... */ iter = (GSList *)enclosure_mime_types_get (); while (iter) { etp_tmp = (encTypePtr)(iter->data); if (enclosure->mime && etp_tmp->mime) { /* match know MIME types and stop looking if found */ if (!strcmp(enclosure->mime, etp_tmp->mime)) { etp_found = etp_tmp; break; } } else if (etp_tmp->extension) { /* match known file extensions and keep looking for matching MIME type */ if (!strcmp(typestr, etp_tmp->extension)) { etp_found = etp_tmp; } } iter = g_slist_next (iter); } if (etp_found) { enclosure_download (etp_found, enclosure->url, TRUE); } else { if (enclosure->mime) ui_enclosure_type_setup (NULL, enclosure, enclosure->mime); else ui_enclosure_type_setup (NULL, enclosure, typestr); } g_free (tmp); } void on_popup_save_enclosure (gpointer callback_data) { enclosurePtr enclosure = (enclosurePtr)callback_data; enclosure_download (NULL, enclosure->url, TRUE); } void ui_enclosure_change_type (encTypePtr type) { ui_enclosure_type_setup (type, NULL, NULL); } void on_popup_copy_enclosure (gpointer callback_data) { enclosurePtr enclosure = (enclosurePtr)callback_data; gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_PRIMARY), enclosure->url, -1); gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD), enclosure->url, -1); } liferea-1.12.7/src/ui/enclosure_list_view.h000066400000000000000000000063271352135647700206770ustar00rootroot00000000000000/** * @file enclosure-list-view.h enclosures list view * * Copyright (C) 2005-2008 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _ENCLOSURE_LIST_VIEW_H #define _ENCLOSURE_LIST_VIEW_H #include G_BEGIN_DECLS #include "item.h" #include "enclosure.h" // FIXME: should not be necessary #define ENCLOSURE_LIST_VIEW_TYPE (enclosure_list_view_get_type ()) #define ENCLOSURE_LIST_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ENCLOSURE_LIST_VIEW_TYPE, EnclosureListView)) #define ENCLOSURE_LIST_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ENCLOSURE_LIST_VIEW_TYPE, EnclosureListViewClass)) #define IS_ENCLOSURE_LIST_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ENCLOSURE_LIST_VIEW_TYPE)) #define IS_ENCLOSURE_LIST_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ENCLOSURE_LIST_VIEW_TYPE)) typedef struct EnclosureListView EnclosureListView; typedef struct EnclosureListViewClass EnclosureListViewClass; typedef struct EnclosureListViewPrivate EnclosureListViewPrivate; struct EnclosureListView { GObject parent; /*< private >*/ EnclosureListViewPrivate *priv; }; struct EnclosureListViewClass { GObjectClass parent_class; }; GType enclosure_list_view_get_type (void); /** * Sets up a new enclosure list view. * * @returns a new enclosure list view */ EnclosureListView * enclosure_list_view_new (void); /** * Returns the rendering widget for a HTML view. Only * to be used by ui_mainwindow.c for widget reparenting. * * @param elv the enclosure list view * * @returns the rendering widget */ GtkWidget * enclosure_list_view_get_widget (EnclosureListView *elv); /** * Loads the enclosure list of the given item into the * given enclosure list view widget. * * @param elv the enclosure list view * @param item the item */ void enclosure_list_view_load (EnclosureListView *elv, itemPtr item); /** * enclosure_list_view_select: * * Select the nth enclosure in the enclosure list. * * @elv: the enclosure list view * @position: the position to select */ void enclosure_list_view_select (EnclosureListView *elv, guint position); /** * Hides the enclosure list view. * * @param elv the enclosure list view */ void enclosure_list_view_hide (EnclosureListView *elv); /* related menu creation and callbacks */ void on_popup_open_enclosure(gpointer callback_data); void on_popup_save_enclosure(gpointer callback_data); void on_popup_copy_enclosure(gpointer callback_data); // FIXME: this does not belong here! void ui_enclosure_change_type (encTypePtr type); G_END_DECLS #endif /* _UI_ENCLOSURE_H */ liferea-1.12.7/src/ui/feed_list_node.c000066400000000000000000000323551352135647700175510ustar00rootroot00000000000000/** * @file feed_list_node.c Handling feed list nodes * * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2004-2016 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ui/feed_list_node.h" #include "common.h" #include "debug.h" #include "feedlist.h" #include "fl_sources/node_source.h" #include "folder.h" #include "render.h" #include "vfolder.h" #include "ui/icons.h" #include "ui/liferea_dialog.h" #include "ui/liferea_shell.h" #include "ui/feed_list_view.h" static GHashTable *flIterHash = NULL; /**< hash table used for fast node id <-> tree iter lookup */ static GtkWidget *nodenamedialog = NULL; GtkTreeIter * feed_list_node_to_iter (const gchar *nodeId) { if (!flIterHash) return NULL; return (GtkTreeIter *)g_hash_table_lookup (flIterHash, (gpointer)nodeId); } void feed_list_node_update_iter (const gchar *nodeId, GtkTreeIter *iter) { GtkTreeIter *old; if (!flIterHash) return; old = (GtkTreeIter *)g_hash_table_lookup (flIterHash, (gpointer)nodeId); if (old) *old = *iter; } static void feed_list_node_add_iter (const gchar *nodeId, GtkTreeIter *iter) { if (!flIterHash) flIterHash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free); g_hash_table_insert (flIterHash, (gpointer)nodeId, (gpointer)iter); } /* Expansion & Collapsing */ gboolean feed_list_node_is_expanded (const gchar *nodeId) { GtkTreeIter *iter; gboolean expanded = FALSE; if (feedlist_reduced_unread) return FALSE; iter = feed_list_node_to_iter (nodeId); if (iter) { GtkTreeView *treeview = GTK_TREE_VIEW (liferea_shell_lookup ("feedlist")); GtkTreePath *path = gtk_tree_model_get_path (gtk_tree_view_get_model (treeview), iter); expanded = gtk_tree_view_row_expanded (treeview, path); gtk_tree_path_free (path); } return expanded; } void feed_list_node_set_expansion (nodePtr folder, gboolean expanded) { GtkTreeIter *iter; GtkTreePath *path; GtkTreeView *treeview; if (feedlist_reduced_unread) return; iter = feed_list_node_to_iter (folder->id); if (!iter) return; treeview = GTK_TREE_VIEW (liferea_shell_lookup ("feedlist")); path = gtk_tree_model_get_path (gtk_tree_view_get_model (treeview), iter); if (expanded) gtk_tree_view_expand_row (treeview, path, FALSE); else gtk_tree_view_collapse_row (treeview, path); gtk_tree_path_free (path); } /* Folder expansion workaround using "empty" nodes */ void feed_list_node_add_empty_node (GtkTreeIter *parent) { GtkTreeIter iter; gtk_tree_store_append (feedstore, &iter, parent); gtk_tree_store_set (feedstore, &iter, FS_LABEL, _("(Empty)"), FS_PTR, NULL, FS_UNREAD, 0, FS_COUNT, "", -1); } void feed_list_node_remove_empty_node (GtkTreeIter *parent) { GtkTreeIter iter; nodePtr node; gboolean valid; gtk_tree_model_iter_children (GTK_TREE_MODEL (feedstore), &iter, parent); do { gtk_tree_model_get (GTK_TREE_MODEL (feedstore), &iter, FS_PTR, &node, -1); if (!node) { gtk_tree_store_remove (feedstore, &iter); return; } valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (feedstore), &iter); } while (valid); } /* this function is a workaround to the cant-drop-rows-into-emtpy- folders-problem, so we simply pack an "(empty)" entry into each empty folder like Nautilus does... */ static void feed_list_node_check_if_folder_is_empty (const gchar *nodeId) { GtkTreeIter *iter; int count; debug1 (DEBUG_GUI, "folder empty check for node id \"%s\"", nodeId); /* this function does two things: 1. add "(empty)" entry to an empty folder 2. remove an "(empty)" entry from a non empty folder (this state is possible after a drag&drop action) */ iter = feed_list_node_to_iter (nodeId); if (!iter) return; count = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (feedstore), iter); /* case 1 */ if (0 == count) { feed_list_node_add_empty_node (iter); return; } if (1 == count) return; /* else we could have case 2 */ feed_list_node_remove_empty_node (iter); } void feed_list_node_add (nodePtr node) { gint position; GtkTreeIter *iter, *parentIter = NULL; debug2 (DEBUG_GUI, "adding node \"%s\" as child of parent=\"%s\"", node_get_title(node), (NULL != node->parent)?node_get_title(node->parent):"feed list root"); g_assert (NULL != node->parent); g_assert (NULL == feed_list_node_to_iter (node->id)); /* if parent is NULL we have the root folder and don't create a new row! */ iter = g_new0 (GtkTreeIter, 1); /* if reduced feedlist, show flat treeview */ if (feedlist_reduced_unread) parentIter = NULL; else if (node->parent != feedlist_get_root ()) parentIter = feed_list_node_to_iter (node->parent->id); position = g_slist_index (node->parent->children, node); if (feedlist_reduced_unread || position < 0) gtk_tree_store_append (feedstore, iter, parentIter); else gtk_tree_store_insert (feedstore, iter, parentIter, position); gtk_tree_store_set (feedstore, iter, FS_PTR, node, -1); feed_list_node_add_iter (node->id, iter); feed_list_node_update (node->id); if (node->parent != feedlist_get_root ()) feed_list_node_check_if_folder_is_empty (node->parent->id); if (IS_FOLDER (node)) feed_list_node_check_if_folder_is_empty (node->id); } static void feed_list_node_load_feedlist (nodePtr node) { GSList *iter; iter = node->children; while (iter) { node = (nodePtr)iter->data; feed_list_node_add (node); if (IS_FOLDER (node) || IS_NODE_SOURCE (node)) feed_list_node_load_feedlist (node); iter = g_slist_next(iter); } } static void feed_list_node_clear_feedlist () { gtk_tree_store_clear (feedstore); g_hash_table_remove_all (flIterHash); } void feed_list_node_reload_feedlist () { feed_list_node_clear_feedlist (); feed_list_node_load_feedlist (feedlist_get_root ()); } void feed_list_node_remove_node (nodePtr node) { GtkTreeIter *iter; gboolean parentExpanded = FALSE; iter = feed_list_node_to_iter (node->id); if (!iter) return; /* must be tolerant because of DnD handling */ if (node->parent) parentExpanded = feed_list_node_is_expanded (node->parent->id); /* If the folder becomes empty, the folder would collapse */ gtk_tree_store_remove (feedstore, iter); g_hash_table_remove (flIterHash, node->id); if (node->parent) { feed_list_node_check_if_folder_is_empty (node->parent->id); if (parentExpanded) feed_list_node_set_expansion (node->parent, TRUE); feed_list_node_update (node->parent->id); } } void feed_list_node_update (const gchar *nodeId) { GtkTreeIter *iter; gchar *label, *count = NULL; guint labeltype; nodePtr node; static gchar *countColor = NULL; node = node_from_id (nodeId); iter = feed_list_node_to_iter (nodeId); if (!iter) return; /* Initialize unread item color Pango CSS */ if (!countColor) { const gchar *bg = NULL, *fg = NULL; bg = render_get_theme_color ("FEEDLIST_UNREAD_BG"); fg = render_get_theme_color ("FEEDLIST_UNREAD_FG"); if (fg && bg) { countColor = g_strdup_printf ("foreground='#%s' background='#%s'", fg, bg); debug1 (DEBUG_HTML, "Feed list unread CSS: %s\n", countColor); } } labeltype = NODE_TYPE (node)->capabilities; labeltype &= (NODE_CAPABILITY_SHOW_UNREAD_COUNT | NODE_CAPABILITY_SHOW_ITEM_COUNT); if (node->unreadCount == 0 && (labeltype & NODE_CAPABILITY_SHOW_UNREAD_COUNT)) labeltype &= ~NODE_CAPABILITY_SHOW_UNREAD_COUNT; label = g_markup_escape_text (node_get_title (node), -1); switch (labeltype) { case NODE_CAPABILITY_SHOW_UNREAD_COUNT | NODE_CAPABILITY_SHOW_ITEM_COUNT: /* treat like show unread count */ case NODE_CAPABILITY_SHOW_UNREAD_COUNT: count = g_strdup_printf (" %u ", countColor?countColor:"", node->unreadCount); break; case NODE_CAPABILITY_SHOW_ITEM_COUNT: count = g_strdup_printf (" %u ", countColor?countColor:"", node->itemCount); break; default: break; } /* Extra message for search folder rebuilds */ if (IS_VFOLDER (node) && node->data) { if (((vfolderPtr)node->data)->reloading) { gchar *tmp = label; label = g_strdup_printf (_("%s\nRebuilding"), label); g_free (tmp); } } gtk_tree_store_set (feedstore, iter, FS_LABEL, label, FS_UNREAD, node->unreadCount, FS_ICON, node->available?node_get_icon (node):icon_get (ICON_UNAVAILABLE), FS_COUNT, count, -1); g_free (label); g_free (count); if (node->parent) feed_list_node_update (node->parent->id); } /* node renaming dialog */ static void on_nodenamedialog_response (GtkDialog *dialog, gint response_id, gpointer user_data) { nodePtr node = (nodePtr)user_data; if (response_id == GTK_RESPONSE_OK) { node_set_title (node, (gchar *) gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (GTK_WIDGET (dialog), "nameentry")))); feed_list_node_update (node->id); feedlist_schedule_save (); } gtk_widget_destroy (GTK_WIDGET (dialog)); nodenamedialog = NULL; } void feed_list_node_rename (nodePtr node) { GtkWidget *nameentry; if (!nodenamedialog || !G_IS_OBJECT (nodenamedialog)) nodenamedialog = liferea_dialog_new ("rename_node"); nameentry = liferea_dialog_lookup (nodenamedialog, "nameentry"); gtk_entry_set_text (GTK_ENTRY (nameentry), node_get_title (node)); g_signal_connect (G_OBJECT (nodenamedialog), "response", G_CALLBACK (on_nodenamedialog_response), node); gtk_widget_show (nodenamedialog); } /* node deletion dialog */ static void feed_list_node_remove_cb (GtkDialog *dialog, gint response_id, gpointer user_data) { if (GTK_RESPONSE_ACCEPT == response_id) feedlist_remove_node ((nodePtr)user_data); gtk_widget_destroy (GTK_WIDGET (dialog)); } void feed_list_node_remove (nodePtr node) { GtkWidget *dialog; GtkWindow *mainwindow; gchar *text; g_assert (node == feedlist_get_selected ()); liferea_shell_set_status_bar ("%s \"%s\"", _("Deleting entry"), node_get_title (node)); text = g_strdup_printf (IS_FOLDER (node)?_("Are you sure that you want to delete \"%s\" and its contents?"):_("Are you sure that you want to delete \"%s\"?"), node_get_title (node)); mainwindow = GTK_WINDOW (liferea_shell_get_window ()); dialog = gtk_message_dialog_new (mainwindow, GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, "%s", text); gtk_dialog_add_buttons (GTK_DIALOG (dialog), _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Delete"), GTK_RESPONSE_ACCEPT, NULL); gtk_window_set_title (GTK_WINDOW (dialog), _("Deletion Confirmation")); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); gtk_window_set_transient_for (GTK_WINDOW (dialog), mainwindow); g_free (text); gtk_widget_show_all (dialog); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (feed_list_node_remove_cb), node); } static void feed_list_node_add_duplicate_url_cb (GtkDialog *dialog, gint response_id, gpointer user_data) { subscriptionPtr tempSubscription = (subscriptionPtr) user_data; if (GTK_RESPONSE_ACCEPT == response_id) { feedlist_add_subscription ( subscription_get_source (tempSubscription), subscription_get_filter (tempSubscription), update_options_copy (tempSubscription->updateOptions), FEED_REQ_PRIORITY_HIGH ); } subscription_free (tempSubscription); gtk_widget_destroy (GTK_WIDGET (dialog)); } void feed_list_node_add_duplicate_url_subscription (subscriptionPtr tempSubscription, nodePtr exNode) { GtkWidget *dialog; GtkWindow *mainwindow; gchar *text; text = g_strdup_printf ( _("Are you sure that you want to add a new subscription with URL \"%s\"? Another subscription with the same URL already exists (\"%s\")."), tempSubscription->source, node_get_title (exNode) ); mainwindow = GTK_WINDOW (liferea_shell_get_window ()); dialog = gtk_message_dialog_new (mainwindow, GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, "%s", text); gtk_dialog_add_buttons (GTK_DIALOG (dialog), _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Add"), GTK_RESPONSE_ACCEPT, NULL); gtk_window_set_title (GTK_WINDOW (dialog), _("Adding Duplicate Subscription Confirmation")); gtk_window_set_transient_for (GTK_WINDOW (dialog), mainwindow); g_free (text); gtk_widget_show_all (dialog); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (feed_list_node_add_duplicate_url_cb), tempSubscription); } liferea-1.12.7/src/ui/feed_list_node.h000066400000000000000000000065201352135647700175510ustar00rootroot00000000000000/** * @file feed_list_node.h Handling feed list nodes * * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2004-2013 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _feed_list_node_H #define _feed_list_node_H #include #include "subscription.h" #include "node.h" /** * Determines the tree iter of a given node. * * @param nodeId the node id */ GtkTreeIter * feed_list_node_to_iter (const gchar *nodeId); /** * Updates the tree iter of a given node. * * @param nodeId the node * @param iter the new iter */ void feed_list_node_update_iter (const gchar *nodeId, GtkTreeIter *iter); /** * Add a node to the feedlist tree view * s * @param node the node to add */ void feed_list_node_add (nodePtr node); /** * Reload the UI feedlist by removing and readding each node */ void feed_list_node_reload_feedlist (void); /** * Remove a node from the feedlist and free its ui_data. * * @param node the node to free */ void feed_list_node_remove_node (nodePtr node); /** * Adds an "empty" node to the given tree iter. * * @param parent a tree iter */ void feed_list_node_add_empty_node (GtkTreeIter *parent); /** * Removes an "empty" node from the given tree iter. * * @param parent a tree iter */ void feed_list_node_remove_empty_node (GtkTreeIter *parent); /** * Determines the expansion state of a feed list tree node. * * @param nodeId the node id * * @returns TRUE if the node is expanded */ gboolean feed_list_node_is_expanded (const gchar *nodeId); /** * Change the expansion/collapsing of the given folder node. * * @param folder the folder node * @param expanded new expansion state */ void feed_list_node_set_expansion (nodePtr folder, gboolean expanded); /** * Updates the tree view entry of the given node. * * @param nodeId the node id */ void feed_list_node_update (const gchar *nodeId); /** * Open dialog to rename a given node. * * @param node the node to rename */ void feed_list_node_rename (nodePtr node); /** * Prompt the user for confirmation of a folder or feed, and * recursively remove the feed or folder if the user accepts. This * function does not block, so the folder/feeds will not have * been deleted when this function returns. * * @param node the node to remove */ void feed_list_node_remove (nodePtr node); /** * Prompt the user for confirmation and forces adding the node, * even though another node with the same URL exists. * * @param tempSubscription the duplicate URL subscription * @param exNode the existing node */ void feed_list_node_add_duplicate_url_subscription (subscriptionPtr tempSubscription, nodePtr exNode); #endif liferea-1.12.7/src/ui/feed_list_view.c000066400000000000000000000357251352135647700176020ustar00rootroot00000000000000/** * @file feed_list_view.c the feed list in a GtkTreeView * * Copyright (C) 2004-2013 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2005 Raphael Slinckx * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ui/feed_list_view.h" #include #include #include "common.h" #include "conf.h" #include "debug.h" #include "feed.h" #include "feedlist.h" #include "folder.h" #include "net_monitor.h" #include "newsbin.h" #include "vfolder.h" #include "ui/browser_tabs.h" #include "ui/liferea_dialog.h" #include "ui/liferea_shell.h" #include "ui/subscription_dialog.h" #include "ui/ui_dnd.h" #include "ui/feed_list_node.h" #include "fl_sources/node_source.h" GtkTreeModel *filter = NULL; GtkTreeStore *feedstore = NULL; gboolean feedlist_reduced_unread = FALSE; static void feed_list_view_row_changed_cb (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter) { nodePtr node; gtk_tree_model_get (model, iter, FS_PTR, &node, -1); if (node) feed_list_node_update_iter (node->id, iter); } static void feed_list_view_selection_changed_cb (GtkTreeSelection *selection, gpointer data) { GtkTreeIter iter; GtkTreeModel *model; nodePtr node; if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gtk_tree_model_get (model, &iter, FS_PTR, &node, -1); debug1 (DEBUG_GUI, "feed list selection changed to \"%s\"", node?node_get_title (node):"Empty node"); if (!node) { /* The selected iter is an "empty" node added to an empty folder. We get the parent's node * to set it as the selected node. This is useful if the user adds a feed, the folder will * be used as location for the new node. */ GtkTreeIter parent; if (gtk_tree_model_iter_parent (model, &parent, &iter)) gtk_tree_model_get (model, &parent, FS_PTR, &node, -1); else { debug0 (DEBUG_GUI, "A selected null node has no parent. This should not happen."); return; } liferea_shell_update_feed_menu (TRUE, FALSE, FALSE); } else { gboolean allowModify = (NODE_SOURCE_TYPE (node->source->root)->capabilities & NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST); liferea_shell_update_update_menu ((NODE_TYPE (node)->capabilities & NODE_CAPABILITY_UPDATE) || (NODE_TYPE (node)->capabilities & NODE_CAPABILITY_UPDATE_CHILDS)); liferea_shell_update_feed_menu (allowModify, TRUE, allowModify); } browser_tabs_show_headlines (); // FIXME: emit signal to item list instead of bother the tabs manager /* 1.) update feed list and item list states */ feedlist_selection_changed (node); /* 2.) Refilter the GtkTreeView to get rid of nodes with 0 unread messages when in reduced mode. */ gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter)); } else { /* If we cannot get the new selection we keep the old one this happens when we're doing drag&drop for example. */ } } static void feed_list_view_row_activated_cb (GtkTreeView *tv, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data) { GtkTreeIter iter; nodePtr node; gtk_tree_model_get_iter (gtk_tree_view_get_model (tv), &iter, path); gtk_tree_model_get (gtk_tree_view_get_model (tv), &iter, FS_PTR, &node, -1); if (node && IS_FOLDER (node)) { if (gtk_tree_view_row_expanded (tv, path)) gtk_tree_view_collapse_row (tv, path); else gtk_tree_view_expand_row (tv, path, FALSE); } } static gboolean feed_list_view_key_press_cb (GtkWidget *widget, GdkEventKey *event, gpointer data) { if ((event->type == GDK_KEY_PRESS) && (event->state == 0) && (event->keyval == GDK_KEY_Delete)) { nodePtr node = feedlist_get_selected (); if(node) { if (event->state & GDK_SHIFT_MASK) feedlist_remove_node (node); else feed_list_node_remove (node); return TRUE; } } return FALSE; } static gboolean feed_list_view_filter_visible_function (GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { gint count; nodePtr node; if (!feedlist_reduced_unread) return TRUE; gtk_tree_model_get (model, iter, FS_PTR, &node, FS_UNREAD, &count, -1); if (!node) return FALSE; if (IS_FOLDER (node) || IS_NODE_SOURCE (node)) return FALSE; if (IS_VFOLDER (node)) return TRUE; /* Do not hide in any case if the node is selected, otherwise the last unread item of a feed causes the feed to vanish when clicking it */ if (feedlist_get_selected () == node) return TRUE; if (count > 0) return TRUE; return FALSE; } static void feed_list_view_expand (nodePtr node) { if (node->parent) feed_list_view_expand (node->parent); feed_list_node_set_expansion (node, TRUE); } static void feed_list_view_restore_folder_expansion (nodePtr node) { if (node->expanded) feed_list_view_expand (node); node_foreach_child (node, feed_list_view_restore_folder_expansion); } static void feed_list_view_reduce_mode_changed () { GtkTreeView *treeview; treeview = GTK_TREE_VIEW (liferea_shell_lookup ("feedlist")); if (feedlist_reduced_unread) { gtk_tree_view_set_reorderable (treeview, FALSE); gtk_tree_view_set_model (treeview, GTK_TREE_MODEL (filter)); gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter)); } else { gtk_tree_view_set_reorderable (treeview, TRUE); gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter)); gtk_tree_view_set_model (treeview, GTK_TREE_MODEL (feedstore)); feedlist_foreach (feed_list_view_restore_folder_expansion); } } static void feed_list_view_set_reduce_mode (gboolean newReduceMode) { feedlist_reduced_unread = newReduceMode; conf_set_bool_value (REDUCED_FEEDLIST, feedlist_reduced_unread); feed_list_view_reduce_mode_changed (); feed_list_node_reload_feedlist (); } static gint feed_list_view_sort_folder_compare (gconstpointer a, gconstpointer b) { nodePtr n1 = (nodePtr)a; nodePtr n2 = (nodePtr)b; gchar *s1 = g_utf8_casefold (n1->title, -1); gchar *s2 = g_utf8_casefold (n2->title, -1); gint result = strcmp (s1, s2); g_free (s1); g_free (s2); return result; } void feed_list_view_sort_folder (nodePtr folder) { GtkTreeView *treeview; treeview = GTK_TREE_VIEW (liferea_shell_lookup ("feedlist")); /* Unset the model from the view before clearing it and rebuilding it.*/ gtk_tree_view_set_model (treeview, NULL); folder->children = g_slist_sort (folder->children, feed_list_view_sort_folder_compare); feed_list_node_reload_feedlist (); /* Reduce mode didn't actually change but we need to set the * correct model according to the setting in the same way : */ feed_list_view_reduce_mode_changed (); feedlist_foreach (feed_list_view_restore_folder_expansion); feedlist_schedule_save (); } /* sets up the entry list store and connects it to the entry list view in the main window */ void feed_list_view_init (GtkTreeView *treeview) { GtkCellRenderer *titleRenderer, *countRenderer; GtkCellRenderer *iconRenderer; GtkTreeViewColumn *column, *column2; GtkTreeSelection *select; debug_enter ("feed_list_view_init"); /* Set up store */ feedstore = gtk_tree_store_new (FS_LEN, G_TYPE_STRING, G_TYPE_ICON, G_TYPE_POINTER, G_TYPE_UINT, G_TYPE_STRING); gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (feedstore)); /* Prepare filter */ filter = gtk_tree_model_filter_new (GTK_TREE_MODEL(feedstore), NULL); gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter), feed_list_view_filter_visible_function, NULL, NULL); g_signal_connect (G_OBJECT (feedstore), "row-changed", G_CALLBACK (feed_list_view_row_changed_cb), NULL); /* we render the icon/state, the feed title and the unread count */ iconRenderer = gtk_cell_renderer_pixbuf_new (); titleRenderer = gtk_cell_renderer_text_new (); countRenderer = gtk_cell_renderer_text_new (); gtk_cell_renderer_set_alignment (countRenderer, 1.0, 0); column = gtk_tree_view_column_new (); column2 = gtk_tree_view_column_new (); gtk_tree_view_column_pack_start (column, iconRenderer, FALSE); gtk_tree_view_column_pack_start (column, titleRenderer, TRUE); gtk_tree_view_column_pack_end (column2, countRenderer, FALSE); gtk_tree_view_column_add_attribute (column, iconRenderer, "gicon", FS_ICON); gtk_tree_view_column_add_attribute (column, titleRenderer, "markup", FS_LABEL); gtk_tree_view_column_add_attribute (column2, countRenderer, "markup", FS_COUNT); gtk_tree_view_column_set_expand (column, TRUE); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); gtk_tree_view_column_set_sizing (column2, GTK_TREE_VIEW_COLUMN_GROW_ONLY); gtk_tree_view_append_column (treeview, column); gtk_tree_view_append_column (treeview, column2); g_object_set (titleRenderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); g_signal_connect (G_OBJECT (treeview), "row-activated", G_CALLBACK (feed_list_view_row_activated_cb), NULL); g_signal_connect (G_OBJECT (treeview), "key-press-event", G_CALLBACK (feed_list_view_key_press_cb), NULL); select = gtk_tree_view_get_selection (treeview); gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE); g_signal_connect (G_OBJECT (select), "changed", G_CALLBACK (feed_list_view_selection_changed_cb), liferea_shell_lookup ("feedlist")); conf_get_bool_value (REDUCED_FEEDLIST, &feedlist_reduced_unread); if (feedlist_reduced_unread) feed_list_view_reduce_mode_changed (); /* before menu setup for reduced mode check box to be correct */ ui_dnd_setup_feedlist (feedstore); liferea_shell_update_feed_menu (TRUE, FALSE, FALSE); liferea_shell_update_allitems_actions (FALSE, FALSE); debug_exit ("feed_list_view_init"); } void feed_list_view_select (nodePtr node) { GtkTreeView *treeview; GtkTreeModel *model; treeview = GTK_TREE_VIEW (liferea_shell_lookup ("feedlist")); model = gtk_tree_view_get_model (treeview); if (node && node != feedlist_get_root ()) { GtkTreePath *path; /* in filtered mode we need to convert the iterator */ if (feedlist_reduced_unread) { GtkTreeIter iter; gtk_tree_model_filter_convert_child_iter_to_iter (GTK_TREE_MODEL_FILTER (filter), &iter, feed_list_node_to_iter (node->id)); path = gtk_tree_model_get_path (model, &iter); } else { path = gtk_tree_model_get_path (model, feed_list_node_to_iter (node->id)); } if (node->parent) feed_list_view_expand (node->parent); if (path) { gtk_tree_view_scroll_to_cell (treeview, path, NULL, FALSE, 0.0, 0.0); gtk_tree_view_set_cursor (treeview, path, NULL, FALSE); gtk_tree_path_free (path); } } else { GtkTreeSelection *selection = gtk_tree_view_get_selection (treeview); gtk_tree_selection_unselect_all (selection); } } void on_menu_properties (GSimpleAction *action, GVariant *parameter, gpointer user_data) { nodePtr node = feedlist_get_selected (); NODE_TYPE (node)->request_properties (node); } void on_menu_delete(GSimpleAction *action, GVariant *parameter, gpointer user_data) { feed_list_node_remove (feedlist_get_selected ()); } static void do_menu_update (nodePtr node) { if (network_monitor_is_online ()) node_update_subscription (node, GUINT_TO_POINTER (FEED_REQ_PRIORITY_HIGH)); else liferea_shell_set_status_bar (_("Liferea is in offline mode. No update possible.")); } void on_menu_update (GSimpleAction *action, GVariant *parameter, gpointer user_data) { nodePtr node = NULL; if (user_data) node = (nodePtr) user_data; else node = feedlist_get_selected (); if (node) do_menu_update (node); else g_warning ("on_menu_update: no feedlist selected"); } void on_menu_update_all(GSimpleAction *action, GVariant *parameter, gpointer user_data) { do_menu_update (feedlist_get_root ()); } void on_action_mark_all_read (GSimpleAction *action, GVariant *parameter, gpointer user_data) { nodePtr feedlist; gboolean confirm_mark_read; gboolean do_mark_read = TRUE; if (!g_strcmp0 (g_action_get_name (G_ACTION (action)), "mark-all-feeds-read")) feedlist = feedlist_get_root (); else if (user_data) feedlist = (nodePtr) user_data; else feedlist = feedlist_get_selected (); conf_get_bool_value (CONFIRM_MARK_ALL_READ, &confirm_mark_read); if (confirm_mark_read) { gint result; GtkMessageDialog *confirm_dialog = GTK_MESSAGE_DIALOG (liferea_dialog_new ("mark_read_dialog")); GtkWidget *dont_ask_toggle = liferea_dialog_lookup (GTK_WIDGET (confirm_dialog), "dontAskAgainToggle"); const gchar *feed_title = (feedlist_get_root () == feedlist) ? _("all feeds"):node_get_title (feedlist); gchar *primary_message = g_strdup_printf (_("Mark %s as read ?"), feed_title); g_object_set (confirm_dialog, "text", primary_message, NULL); g_free (primary_message); gtk_message_dialog_format_secondary_text (confirm_dialog, _("Are you sure you want to mark all items in %s as read ?"), feed_title); conf_bind (CONFIRM_MARK_ALL_READ, dont_ask_toggle, "active", G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_INVERT_BOOLEAN); result = gtk_dialog_run (GTK_DIALOG (confirm_dialog)); if (result != GTK_RESPONSE_OK) do_mark_read = FALSE; gtk_widget_destroy (GTK_WIDGET (confirm_dialog)); } if (do_mark_read) feedlist_mark_all_read (feedlist); } void on_menu_feed_new (GSimpleAction *menuitem, GVariant *parameter, gpointer user_data) { node_type_request_interactive_add (feed_get_node_type ()); } void on_new_plugin_activate (GSimpleAction *menuitem, GVariant *parameter, gpointer user_data) { node_type_request_interactive_add (node_source_get_node_type ()); } void on_new_newsbin_activate (GSimpleAction *menuitem, GVariant *parameter, gpointer user_data) { node_type_request_interactive_add (newsbin_get_node_type ()); } void on_menu_folder_new (GSimpleAction *menuitem, GVariant *parameter, gpointer user_data) { node_type_request_interactive_add (folder_get_node_type ()); } void on_new_vfolder_activate (GSimpleAction *menuitem, GVariant *parameter, gpointer user_data) { node_type_request_interactive_add (vfolder_get_node_type ()); } void on_feedlist_reduced_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { GVariant *state = g_action_get_state (action); gboolean val = !g_variant_get_boolean (state); feed_list_view_set_reduce_mode (val); g_simple_action_set_state (action, g_variant_new_boolean (val)); g_object_unref (state); } liferea-1.12.7/src/ui/feed_list_view.h000066400000000000000000000055201352135647700175750ustar00rootroot00000000000000/** * @file feed_list_view.h the feed list in a GtkTreeView * * Copyright (C) 2004-2010 Lars Windolf * Copyright (C) 2004-2005 Nathan J. Conrad * Copyright (C) 2005 Raphael Slinckx * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _FEED_LIST_VIEW_H #define _FEED_LIST_VIEW_H #include #include "feed.h" /* constants for attributes in feedstore */ enum { FS_LABEL, /**< Displayed name */ FS_ICON, /**< Icon to use */ FS_PTR, /**< pointer to the folder or feed */ FS_UNREAD, /**< Number of unread items */ FS_COUNT, /**< Number of unread items as string */ FS_LEN }; extern GtkTreeStore *feedstore; extern gboolean feedlist_reduced_unread; /** * Selects the given node in the feed list. * * @param node the node to select */ void feed_list_view_select (nodePtr node); /** * Initializes the feed list. For example, it creates the various * columns and renderers needed to show the list. */ void feed_list_view_init (GtkTreeView *treeview); /** * Sort the feeds of the given folder node. * * @param folder the folder */ void feed_list_view_sort_folder (nodePtr folder); void on_menu_delete (GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_menu_update (GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_menu_update_all (GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_action_mark_all_read (GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_menu_properties (GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_menu_feed_new (GSimpleAction *menuitem, GVariant *parameter, gpointer user_data); void on_menu_folder_new (GSimpleAction *menuitem, GVariant *parameter, gpointer user_data); void on_new_plugin_activate (GSimpleAction *menuitem, GVariant *parameter, gpointer user_data); void on_new_newsbin_activate (GSimpleAction *menuitem, GVariant *parameter, gpointer user_data); void on_new_vfolder_activate (GSimpleAction *menuitem, GVariant *parameter, gpointer user_data); void on_feedlist_reduced_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data); #endif liferea-1.12.7/src/ui/gedit-close-button.c000066400000000000000000000052261352135647700203130ustar00rootroot00000000000000/* * gedit-close-button.c * This file is part of gedit * * Copyright (C) 2010 - Paolo Borelli * Copyright (C) 2011 - Ignacio Casal Quinteiro * * gedit is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * gedit is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "gedit-close-button.h" struct _GeditCloseButtonClassPrivate { GtkCssProvider *css; }; G_DEFINE_TYPE_WITH_CODE (GeditCloseButton, gedit_close_button, GTK_TYPE_BUTTON, g_type_add_class_private (g_define_type_id, sizeof (GeditCloseButtonClassPrivate))) static void gedit_close_button_class_init (GeditCloseButtonClass *klass) { static const gchar button_style[] = "* {\n" "-GtkButton-default-border : 0;\n" "-GtkButton-default-outside-border : 0;\n" "-GtkButton-inner-border: 0;\n" "-GtkWidget-focus-line-width : 0;\n" "-GtkWidget-focus-padding : 0;\n" "padding: 0;\n" "}"; klass->priv = G_TYPE_CLASS_GET_PRIVATE (klass, GEDIT_TYPE_CLOSE_BUTTON, GeditCloseButtonClassPrivate); klass->priv->css = gtk_css_provider_new (); gtk_css_provider_load_from_data (klass->priv->css, button_style, -1, NULL); } static void gedit_close_button_init (GeditCloseButton *button) { GtkStyleContext *context; GtkWidget *image; GIcon *icon; icon = g_themed_icon_new_with_default_fallbacks ("window-close-symbolic"); image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU); gtk_widget_show (image); g_object_unref (icon); gtk_container_add (GTK_CONTAINER (button), image); /* make it small */ context = gtk_widget_get_style_context (GTK_WIDGET (button)); gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (GEDIT_CLOSE_BUTTON_GET_CLASS (button)->priv->css), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } GtkWidget * gedit_close_button_new () { return GTK_WIDGET (g_object_new (GEDIT_TYPE_CLOSE_BUTTON, "relief", GTK_RELIEF_NONE, "focus-on-click", FALSE, NULL)); } /* ex:set ts=8 noet: */ liferea-1.12.7/src/ui/gedit-close-button.h000066400000000000000000000042541352135647700203200ustar00rootroot00000000000000/* * gedit-close-button.h * This file is part of gedit * * Copyright (C) 2010 - Paolo Borelli * * gedit is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * gedit is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __GEDIT_CLOSE_BUTTON_H__ #define __GEDIT_CLOSE_BUTTON_H__ #include G_BEGIN_DECLS #define GEDIT_TYPE_CLOSE_BUTTON (gedit_close_button_get_type ()) #define GEDIT_CLOSE_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_CLOSE_BUTTON, GeditCloseButton)) #define GEDIT_CLOSE_BUTTON_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_CLOSE_BUTTON, GeditCloseButton const)) #define GEDIT_CLOSE_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_CLOSE_BUTTON, GeditCloseButtonClass)) #define GEDIT_IS_CLOSE_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_CLOSE_BUTTON)) #define GEDIT_IS_CLOSE_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_CLOSE_BUTTON)) #define GEDIT_CLOSE_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_CLOSE_BUTTON, GeditCloseButtonClass)) typedef struct _GeditCloseButton GeditCloseButton; typedef struct _GeditCloseButtonClass GeditCloseButtonClass; typedef struct _GeditCloseButtonClassPrivate GeditCloseButtonClassPrivate; struct _GeditCloseButton { GtkButton parent; }; struct _GeditCloseButtonClass { GtkButtonClass parent_class; GeditCloseButtonClassPrivate *priv; }; GType gedit_close_button_get_type (void) G_GNUC_CONST; GtkWidget *gedit_close_button_new (void); G_END_DECLS #endif /* __GEDIT_CLOSE_BUTTON_H__ */ /* ex:set ts=8 noet: */ liferea-1.12.7/src/ui/icons.c000066400000000000000000000055251352135647700157200ustar00rootroot00000000000000/* * @file icons.c Using icons from theme and package pixmaps * * Copyright (C) 2010-2014 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "icons.h" #ifdef HAVE_CONFIG_H # include #endif #include "common.h" static GIcon *icons[MAX_ICONS]; /*<< list of icon assignments */ static gchar * icon_find_pixmap_file (const gchar *filename) { gchar *pathname = g_build_filename (PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "pixmaps", filename, NULL); if (g_file_test (pathname, G_FILE_TEST_EXISTS)) return pathname; g_free (pathname); return NULL; } GdkPixbuf * icon_create_from_file (const gchar *filename) { gchar *pathname = NULL; GdkPixbuf *pixbuf; GError *error = NULL; if (!filename || !filename[0]) return NULL; pathname = icon_find_pixmap_file (filename); if (!pathname) { g_warning (_("Couldn't find pixmap file: %s"), filename); return NULL; } pixbuf = gdk_pixbuf_new_from_file (pathname, &error); if (!pixbuf) { fprintf (stderr, "Failed to load pixbuf file: %s: %s\n", pathname, error->message); g_error_free (error); } g_free (pathname); return pixbuf; } void icons_load (void) { GtkIconTheme *icon_theme; gint i; gchar *path; path = g_build_filename (PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "pixmaps", NULL); icon_theme = gtk_icon_theme_get_default (); gtk_icon_theme_append_search_path (icon_theme, path); static const gchar *iconNames[] = { "unread", /* ICON_UNREAD */ "emblem-important", /* ICON_FLAG */ "available", /* ICON_AVAILABLE */ "available_offline", /* ICON_AVAILABLE_OFFLINE */ "dialog-error", /* ICON_UNAVAILABLE */ "default", /* ICON_DEFAULT */ "folder", /* ICON_FOLDER */ "folder-saved-search", /* ICON_VFOLDER */ "newsbin", /* ICON_NEWSBIN */ "empty", /* ICON_EMPTY */ "empty_offline", /* ICON_EMPTY_OFFLINE */ "gtk-connect", /* ICON_ONLINE */ "gtk-disconnect", /* ICON_OFFLINE */ "mail-attachment", /* ICON_ENCLOSURE */ NULL }; for (i = 0; i < MAX_ICONS; i++) icons[i] = g_themed_icon_new (iconNames[i]); } const GIcon * icon_get (lifereaIcon icon) { g_assert (NULL != *icons); return icons[icon]; } liferea-1.12.7/src/ui/icons.h000066400000000000000000000036501352135647700157220ustar00rootroot00000000000000/* * @file icons.h Using icons from theme and package pixmaps * * Copyright (C) 2010-2013 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _ICONS_H #define _ICONS_H #include /* list of all icons used in Liferea */ typedef enum { ICON_UNREAD, ICON_FLAG, ICON_AVAILABLE, ICON_AVAILABLE_OFFLINE, ICON_UNAVAILABLE, ICON_DEFAULT, ICON_FOLDER, ICON_VFOLDER, ICON_NEWSBIN, ICON_EMPTY, ICON_EMPTY_OFFLINE, ICON_ONLINE, ICON_OFFLINE, ICON_ENCLOSURE, MAX_ICONS } lifereaIcon; /** * icons_load: (skip) * * Load all icons from theme and Liferea pixmaps. * * Must be called once before icon_get() may be used! * Must be called only after GTK theme was initialized! */ void icons_load (void); /** * icon_get: * @icon: the icon * * Returns a GIcon for the requested item. * * Returns: (transfer none): GIcon */ const GIcon * icon_get (lifereaIcon icon); /** * icon_create_from_file: * @filename: the name of the file * * Takes a file name relative to "pixmaps" directory and tries to load the * image into a GdkPixbuf. Can be used to load icons not in lifereaIcon * on demand. * * Returns: (transfer full): a new pixbuf or NULL */ GdkPixbuf * icon_create_from_file (const gchar *filename); #endif liferea-1.12.7/src/ui/item_list_view.c000066400000000000000000001042571352135647700176320ustar00rootroot00000000000000/* * @file item_list_view.c presenting items in a GtkTreeView * * Copyright (C) 2004-2015 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ui/item_list_view.h" #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "browser.h" #include "common.h" #include "conf.h" #include "date.h" #include "debug.h" #include "feed.h" #include "feedlist.h" #include "item.h" #include "itemlist.h" #include "itemview.h" #include "newsbin.h" #include "social.h" #include "xml.h" #include "ui/browser_tabs.h" #include "ui/icons.h" #include "ui/liferea_shell.h" #include "ui/popup_menu.h" #include "ui/ui_common.h" /* * Important performance considerations: Early versions had performance problems * with the item list loading because of the following two problems: * * 1.) Mass-adding items to a sorting enabled tree store. * 2.) Mass-loading items to an attached tree store. * * To avoid both problems we merge against a visible tree store only for single * items that are added/removed by background updates and load complete feeds or * collections of feeds only by adding items to a new unattached tree store. */ /* Enumeration of the columns in the itemstore. */ enum is_columns { IS_TIME, /*<< Time of item creation */ IS_TIME_STR, /*<< Time of item creation as a string*/ IS_LABEL, /*<< Displayed name */ IS_STATEICON, /*<< Pixbuf reference to the item's state icon */ IS_NR, /*<< Item id, to lookup item ptr from parent feed */ IS_PARENT, /*<< Parent node pointer */ IS_FAVICON, /*<< Pixbuf reference to the item's feed's icon */ IS_ENCICON, /*<< Pixbuf reference to the item's enclosure icon */ IS_ENCLOSURE, /*<< Flag whether enclosure is attached or not */ IS_SOURCE, /*<< Source node pointer */ IS_STATE, /*<< Original item state (unread, flagged...) for sorting */ ITEMSTORE_WEIGHT, /*<< Flag whether weight is to be bold and "unread" icon is to be shown */ ITEMSTORE_ALIGN, /*<< How to align title (RTL support) */ ITEMSTORE_LEN /*<< Number of columns in the itemstore */ }; typedef enum { DEFAULT, INTERNAL, TAB, EXTERNAL } open_link_target_type; static void launch_item (itemPtr item, open_link_target_type open_link_target) { if (item) { gchar *link = item_make_link (item); if (link) { switch (open_link_target) { case DEFAULT: itemview_launch_URL (link, FALSE); break; case INTERNAL: itemview_launch_URL (link, TRUE); break; case TAB: browser_tabs_add_new (link, link, FALSE); break; case EXTERNAL: browser_launch_URL_external (link); break; } g_free (link); } else ui_show_error_box (_("This item has no link specified!")); } } #define ITEM_LIST_VIEW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), ITEM_LIST_VIEW_TYPE, ItemListViewPrivate)) struct ItemListViewPrivate { GtkTreeView *treeview; GtkWidget *ilscrolledwindow; /*<< The complete ItemListView widget */ GSList *item_ids; /*<< list of all currently known item ids */ gboolean batch_mode; /*<< TRUE if we are in batch adding mode */ GtkTreeStore *batch_itemstore; /*<< GtkTreeStore prepared unattached and to be set on update() */ GHashTable *columns; /*<< Named GtkTreeViewColumns */ gboolean wideView; /*<< TRUE if date has to be rendered into headline column (because date column is invisible) */ }; static GObjectClass *parent_class = NULL; G_DEFINE_TYPE (ItemListView, item_list_view, G_TYPE_OBJECT); static void item_list_view_finalize (GObject *object) { ItemListViewPrivate *priv = ITEM_LIST_VIEW_GET_PRIVATE (object); /* Disconnect the treeview signals to avoid spurious calls during teardown */ g_signal_handlers_disconnect_by_data (G_OBJECT (priv->treeview), object); g_hash_table_destroy (priv->columns); g_slist_free (priv->item_ids); if (priv->batch_itemstore) g_object_unref (priv->batch_itemstore); if (priv->ilscrolledwindow) g_object_unref (priv->ilscrolledwindow); G_OBJECT_CLASS (parent_class)->finalize (object); } static void item_list_view_class_init (ItemListViewClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = item_list_view_finalize; g_type_class_add_private (object_class, sizeof(ItemListViewPrivate)); } /* helper functions for item <-> iter conversion */ static gulong item_list_view_iter_to_id (ItemListView *ilv, GtkTreeIter *iter) { gulong id = 0; gtk_tree_model_get (gtk_tree_view_get_model (ilv->priv->treeview), iter, IS_NR, &id, -1); return id; } gboolean item_list_view_contains_id (ItemListView *ilv, gulong id) { return (NULL != g_slist_find (ilv->priv->item_ids, GUINT_TO_POINTER (id))); } static gboolean item_list_view_id_to_iter (ItemListView *ilv, gulong id, GtkTreeIter *iter) { gboolean valid; GtkTreeIter old_iter; GtkTreeModel *model; /* Problem here is batch insertion using batch_itemstore so the item can be in the GtkTreeView attached store or in the batch_itemstore */ if (item_list_view_contains_id (ilv, id)) { /* First search the tree view */ model = gtk_tree_view_get_model (ilv->priv->treeview); valid = gtk_tree_model_get_iter_first (model, &old_iter); while (valid) { gulong current_id = item_list_view_iter_to_id (ilv, &old_iter); if(current_id == id) { *iter = old_iter; return TRUE; } valid = gtk_tree_model_iter_next (model, &old_iter); } /* Next search the batch store */ model = GTK_TREE_MODEL (ilv->priv->batch_itemstore); valid = gtk_tree_model_get_iter_first (model, &old_iter); while (valid) { gulong current_id; gtk_tree_model_get (model, &old_iter, IS_NR, ¤t_id, -1); if(current_id == id) { *iter = old_iter; return TRUE; } valid = gtk_tree_model_iter_next (model, &old_iter); } } return FALSE; } static gint item_list_view_date_sort_func (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data) { guint64 timea, timeb; double diff; gtk_tree_model_get (model, a, IS_TIME, &timea, -1); gtk_tree_model_get (model, b, IS_TIME, &timeb, -1); diff = difftime ((time_t)timeb, (time_t)timea); if (diff < 0) return 1; if (diff > 0) return -1; return 0; } static gint item_list_view_favicon_sort_func (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data) { nodePtr node1, node2; gtk_tree_model_get (model, a, IS_SOURCE, &node1, -1); gtk_tree_model_get (model, b, IS_SOURCE, &node2, -1); if (!node1->id || !node2->id) return 0; return strcmp (node1->id, node2->id); } void item_list_view_set_sort_column (ItemListView *ilv, nodeViewSortType sortType, gboolean sortReversed) { gint sortColumn; switch (sortType) { case NODE_VIEW_SORT_BY_TITLE: /* Some ugly switching here, because in wide view we do sort headlines by date */ if (ilv->priv->wideView) sortColumn = IS_TIME; else sortColumn = IS_LABEL; break; case NODE_VIEW_SORT_BY_PARENT: sortColumn = IS_SOURCE; break; case NODE_VIEW_SORT_BY_STATE: sortColumn = IS_STATE; break; case NODE_VIEW_SORT_BY_TIME: default: sortColumn = IS_TIME; break; } gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (gtk_tree_view_get_model (ilv->priv->treeview)), sortColumn, sortReversed?GTK_SORT_DESCENDING:GTK_SORT_ASCENDING); } /* * Creates a GtkTreeStore to be filled with ui_itemlist_set_items * and to be set with ui_itemlist_set_tree_store(). */ static GtkTreeStore * item_list_view_create_tree_store (void) { return gtk_tree_store_new (ITEMSTORE_LEN, G_TYPE_INT64, /* IS_TIME */ G_TYPE_STRING, /* IS_TIME_STR */ G_TYPE_STRING, /* IS_LABEL */ G_TYPE_ICON, /* IS_STATEICON */ G_TYPE_ULONG, /* IS_NR */ G_TYPE_POINTER, /* IS_PARENT */ G_TYPE_ICON, /* IS_FAVICON */ G_TYPE_ICON, /* IS_ENCICON */ G_TYPE_BOOLEAN, /* IS_ENCLOSURE */ G_TYPE_POINTER, /* IS_SOURCE */ G_TYPE_UINT, /* IS_STATE */ G_TYPE_INT, /* ITEMSTORE_WEIGHT */ G_TYPE_FLOAT /* ITEMSTORE_ALIGN */ ); } static void on_itemlist_selection_changed (GtkTreeSelection *selection, gpointer user_data) { GtkTreeIter iter; GtkTreeModel *model; itemPtr item = NULL; if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gulong id = item_list_view_iter_to_id (ITEM_LIST_VIEW (user_data), &iter); if (id != itemlist_get_selected_id ()) { item = item_load (id); liferea_shell_update_item_menu (NULL != item); if (item) itemlist_selection_changed (item); } } else { liferea_shell_update_item_menu (FALSE); } } static void itemlist_sort_column_changed_cb (GtkTreeSortable *treesortable, gpointer user_data) { gint sortColumn, nodeSort; GtkSortType sortType; gboolean sorted, changed; if (feedlist_get_selected () == NULL) return; sorted = gtk_tree_sortable_get_sort_column_id (treesortable, &sortColumn, &sortType); if (!sorted) return; switch (sortColumn) { case IS_TIME: default: nodeSort = NODE_VIEW_SORT_BY_TIME; break; case IS_LABEL: nodeSort = NODE_VIEW_SORT_BY_TITLE; break; case IS_STATE: nodeSort = NODE_VIEW_SORT_BY_STATE; break; case IS_PARENT: case IS_SOURCE: nodeSort = NODE_VIEW_SORT_BY_PARENT; break; } changed = node_set_sort_column (feedlist_get_selected (), nodeSort, sortType == GTK_SORT_DESCENDING); if (changed) feedlist_schedule_save (); } /* * Sets a GtkTreeView to the active GtkTreeView. */ static void item_list_view_set_tree_store (ItemListView *ilv, GtkTreeStore *itemstore) { GtkTreeModel *model; GtkTreeSelection *select; /* drop old tree store */ model = gtk_tree_view_get_model (ilv->priv->treeview); gtk_tree_view_set_model (ilv->priv->treeview, NULL); if (model) g_object_unref (model); gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (itemstore), IS_TIME, item_list_view_date_sort_func, NULL, NULL); gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (itemstore), IS_SOURCE, item_list_view_favicon_sort_func, NULL, NULL); g_signal_connect (G_OBJECT (itemstore), "sort-column-changed", G_CALLBACK (itemlist_sort_column_changed_cb), NULL); gtk_tree_view_set_model (ilv->priv->treeview, GTK_TREE_MODEL (itemstore)); /* Setup the selection handler */ select = gtk_tree_view_get_selection (ilv->priv->treeview); gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE); g_signal_connect (G_OBJECT (select), "changed", G_CALLBACK (on_itemlist_selection_changed), ilv); } void item_list_view_remove_item (ItemListView *ilv, itemPtr item) { GtkTreeIter iter; g_assert (NULL != item); if (item_list_view_id_to_iter (ilv, item->id, &iter)) { /* Using the GtkTreeIter check if it is currently selected. If yes, scroll down by one in the sorted GtkTreeView to ensure something is selected after removing the GtkTreeIter */ if (gtk_tree_selection_iter_is_selected (gtk_tree_view_get_selection (ilv->priv->treeview), &iter)) ui_common_treeview_move_cursor (ilv->priv->treeview, 1); gtk_tree_store_remove (GTK_TREE_STORE (gtk_tree_view_get_model (ilv->priv->treeview)), &iter); } else { g_warning ("Fatal: item to be removed not found in item id list!"); } ilv->priv->item_ids = g_slist_remove (ilv->priv->item_ids, GUINT_TO_POINTER (item->id)); } /* cleans up the item list, sets up the iter hash when called for the first time */ void item_list_view_clear (ItemListView *ilv) { GtkAdjustment *adj; GtkTreeStore *itemstore; GtkTreeSelection *select; itemstore = GTK_TREE_STORE (gtk_tree_view_get_model (ilv->priv->treeview)); /* unselecting all items is important to remove items whose removal is deferred until unselecting */ select = gtk_tree_view_get_selection (ilv->priv->treeview); gtk_tree_selection_unselect_all (select); adj = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (ilv->priv->treeview)); gtk_adjustment_set_value (adj, 0.0); gtk_scrollable_set_vadjustment (GTK_SCROLLABLE (ilv->priv->treeview), adj); /* Disconnect signal handler to be safe */ g_signal_handlers_disconnect_by_func (G_OBJECT (select), G_CALLBACK (on_itemlist_selection_changed), ilv); if (itemstore) gtk_tree_store_clear (itemstore); if (ilv->priv->item_ids) g_slist_free (ilv->priv->item_ids); ilv->priv->item_ids = NULL; /* enable batch mode for following item adds */ ilv->priv->batch_mode = TRUE; ilv->priv->batch_itemstore = item_list_view_create_tree_store (); } static gfloat item_list_title_alignment (gchar *title) { if (!title || strlen(title) == 0) return 0.; /* debug5 (DEBUG_HTML, "title ***%s*** first bytes %02hhx%02hhx%02hhx pango %d", title, title[0], title[1], title[2], pango_find_base_dir (title, -1)); */ int txt_direction = pango_find_base_dir (title, -1); int app_direction = gtk_widget_get_default_direction (); if ((txt_direction == PANGO_DIRECTION_LTR && app_direction == GTK_TEXT_DIR_LTR) || (txt_direction == PANGO_DIRECTION_RTL && app_direction == GTK_TEXT_DIR_RTL)) return 0.; /* same direction, regular ("left") alignment */ else return 1.; } void item_list_view_update_item (ItemListView *ilv, itemPtr item) { GtkTreeStore *itemstore; GtkTreeIter iter; gchar *title, *time_str; const GIcon *state_icon; if (!item_list_view_id_to_iter (ilv, item->id, &iter)) return; time_str = (0 != item->time) ? date_format ((time_t)item->time, NULL) : g_strdup (""); title = item->title && strlen (item->title) ? item->title : _("*** No title ***"); title = g_strstrip (g_markup_escape_text (title, -1)); if (ilv->priv->wideView) { const gchar *important = _(" important "); gchar *teaser = item_get_teaser (item); gchar *tmp = title; title = g_strdup_printf ("%s%s\n%s%s — %s", item->readStatus?"normal":"ultrabold", title, item->flagStatus?important:"", item->readStatus?"ultralight":"light", teaser?teaser:"", teaser?"…":"", time_str); g_free (tmp); g_free (teaser); } state_icon = item->flagStatus ? icon_get (ICON_FLAG) : !item->readStatus ? icon_get (ICON_UNREAD) : NULL; if (ilv->priv->batch_mode) itemstore = ilv->priv->batch_itemstore; else itemstore = GTK_TREE_STORE (gtk_tree_view_get_model (ilv->priv->treeview)); gtk_tree_store_set (itemstore, &iter, IS_LABEL, title, IS_TIME, item->time, IS_TIME_STR, time_str, IS_STATEICON, state_icon, ITEMSTORE_ALIGN, item_list_title_alignment (title), ITEMSTORE_WEIGHT, item->readStatus ? PANGO_WEIGHT_NORMAL : PANGO_WEIGHT_BOLD, -1); g_free (time_str); g_free (title); } static void item_list_view_update_item_foreach (gpointer key, gpointer value, gpointer user_data) { itemPtr item; item = item_load (GPOINTER_TO_UINT (key) /* id */); if (!item) return; item_list_view_update_item (ITEM_LIST_VIEW (user_data), item); item_unload (item); } void item_list_view_update_all_items (ItemListView *ilv) { gboolean valid; GtkTreeIter iter; gulong id; GtkTreeModel *model; model = gtk_tree_view_get_model (ilv->priv->treeview); valid = gtk_tree_model_get_iter_first (model, &iter); while (valid) { gtk_tree_model_get (model, &iter, IS_NR, &id, -1); itemPtr item = item_load (id); item_list_view_update_item (ilv, item); item_unload (item); valid = gtk_tree_model_iter_next (model, &iter); } } void item_list_view_update (ItemListView *ilv, gboolean hasEnclosures) { /* we depend on the fact that the third column is the enclosure icon column!!! */ gtk_tree_view_column_set_visible (g_hash_table_lookup(ilv->priv->columns, "enclosure"), hasEnclosures); if (ilv->priv->batch_mode) { item_list_view_set_tree_store (ilv, ilv->priv->batch_itemstore); ilv->priv->batch_mode = FALSE; } else { /* Nothing to do in non-batch mode as items were added and updated one-by-one in ui_itemlist_add_item() */ } } static gboolean on_item_list_view_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer data) { if ((event->type == GDK_KEY_PRESS) && (event->state == 0) && (event->keyval == GDK_KEY_Delete)) on_action_remove_item(NULL, NULL, NULL); return FALSE; } /* Show tooltip when headline's column text (IS_LABEL) is truncated. */ static gint get_cell_renderer_width (GtkWidget *widget, GtkCellRenderer *cell, const gchar *text, gint weight) { PangoLayout *layout = gtk_widget_create_pango_layout (widget, text); PangoAttrList *attrbs = pango_attr_list_new(); PangoRectangle rect; gint xpad = 0; pango_attr_list_insert (attrbs, pango_attr_weight_new (weight)); pango_layout_set_attributes (layout, attrbs); pango_attr_list_unref (attrbs); pango_layout_get_pixel_extents (layout, NULL, &rect); g_object_unref (G_OBJECT (layout)); gtk_cell_renderer_get_padding (cell, &xpad, NULL); return (xpad * 2) + rect.x + rect.width; } static gboolean on_item_list_view_query_tooltip (GtkWidget *widget, gint x, gint y, gboolean keyboard_mode, GtkTooltip *tooltip, GtkTreeViewColumn *headline_column) { GtkTreeView *view = GTK_TREE_VIEW (widget); GtkTreeModel *model; GtkTreePath *path; GtkTreeIter iter; gboolean ret = FALSE; if (gtk_tree_view_get_tooltip_context (view, &x, &y, keyboard_mode, &model, &path, &iter)) { GtkTreeViewColumn *column; gint bx, by; gtk_tree_view_convert_widget_to_bin_window_coords (view, x, y, &bx, &by); gtk_tree_view_get_path_at_pos (view, x, y, NULL, &column, NULL, NULL); if (column == headline_column) { GtkCellRenderer *cell; GList *renderers = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (column)); cell = GTK_CELL_RENDERER (renderers->data); g_list_free (renderers); gchar *text; gint weight; gtk_tree_model_get (model, &iter, IS_LABEL, &text, ITEMSTORE_WEIGHT, &weight, -1); gint full_width = get_cell_renderer_width (widget, cell, text, weight); gint column_width = gtk_tree_view_column_get_width (column); if (full_width > column_width) { gtk_tooltip_set_text (tooltip, text); ret = TRUE; } g_free (text); } gtk_tree_view_set_tooltip_row (view, tooltip, path); gtk_tree_path_free (path); } return ret; } static gboolean on_item_list_view_button_press_event (GtkWidget *treeview, GdkEventButton *event, gpointer user_data) { ItemListView *ilv = ITEM_LIST_VIEW (user_data); GtkTreePath *path; GtkTreeIter iter; GtkTreeViewColumn *column; itemPtr item = NULL; gboolean result = FALSE; if (event->type != GDK_BUTTON_PRESS) return FALSE; /* avoid handling header clicks */ if (event->window != gtk_tree_view_get_bin_window (ilv->priv->treeview)) return FALSE; if (!gtk_tree_view_get_path_at_pos (ilv->priv->treeview, (gint)event->x, (gint)event->y, &path, &column, NULL, NULL)) return FALSE; if (gtk_tree_model_get_iter (gtk_tree_view_get_model (ilv->priv->treeview), &iter, path)) item = item_load (item_list_view_iter_to_id (ilv, &iter)); gtk_tree_path_free (path); if (item) { GdkEventButton *eb = (GdkEventButton*)event; switch (eb->button) { case 1: if (column == g_hash_table_lookup(ilv->priv->columns, "favicon") || column == g_hash_table_lookup(ilv->priv->columns, "state")) { itemlist_toggle_flag (item); result = TRUE; } break; case 2: /* Middle mouse click toggles read status... */ itemlist_toggle_read_status (item); result = TRUE; break; case 3: ui_popup_item_menu (item, eb->button, eb->time); result = TRUE; break; default: /* Do nothing on buttons >= 4 */ break; } item_unload (item); } return result; } static gboolean on_item_list_view_popup_menu (GtkWidget *widget, gpointer user_data) { GtkTreeView *treeview = GTK_TREE_VIEW (widget); GtkTreeModel *model; GtkTreeIter iter; if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (treeview), &model, &iter)) { itemPtr item = item_load (item_list_view_iter_to_id (ITEM_LIST_VIEW (user_data), &iter)); ui_popup_item_menu (item, 3, 0); item_unload (item); return TRUE; } return FALSE; } static void on_item_list_row_activated (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) { GtkTreeModel *model = gtk_tree_view_get_model (treeview); GtkTreeIter iter; if (gtk_tree_model_get_iter (model, &iter, path)) { itemPtr item = item_load (item_list_view_iter_to_id (ITEM_LIST_VIEW (user_data), &iter)); launch_item (item, DEFAULT); item_unload (item); } } static void on_item_list_view_columns_changed (GtkTreeView *treeview, ItemListView *ilv) { gint i = 0; GList *columns; GHashTableIter iter; gpointer colname, colptr; gchar *strv[6]; /* This handler is only used for drag and drop reordering, so it should not be hooked up with less than the full number of columns eg: on item_list_view creation or teardown */ if (gtk_tree_view_get_n_columns(treeview) != 5) return; columns = gtk_tree_view_get_columns (treeview); for (GList *li = columns; li; li = li->next) { g_hash_table_iter_init (&iter, ilv->priv->columns); while (g_hash_table_iter_next (&iter, &colname, &colptr)) { if (li->data == colptr) { strv[i++] = colname; strv[i] = NULL; break; } } } conf_set_strv_value (LIST_VIEW_COLUMN_ORDER, strv); g_list_free (columns); } GtkWidget * item_list_view_get_widget (ItemListView *ilv) { return ITEM_LIST_VIEW_GET_PRIVATE (ilv)->ilscrolledwindow; } void item_list_view_move_cursor (ItemListView *ilv, int step) { ui_common_treeview_move_cursor (ITEM_LIST_VIEW_GET_PRIVATE (ilv)->treeview, step); } void item_list_view_move_cursor_to_first (ItemListView *ilv) { ui_common_treeview_move_cursor_to_first (ITEM_LIST_VIEW_GET_PRIVATE (ilv)->treeview); } static void item_list_view_init (ItemListView *ilv) { ilv->priv = ITEM_LIST_VIEW_GET_PRIVATE (ilv); } ItemListView * item_list_view_create (gboolean wide) { ItemListView *ilv; GtkCellRenderer *renderer; GtkTreeViewColumn *column, *headline_column; gchar **conf_column_order; ilv = g_object_new (ITEM_LIST_VIEW_TYPE, NULL); ilv->priv->wideView = wide; ilv->priv->columns = g_hash_table_new (g_str_hash, g_str_equal); ilv->priv->ilscrolledwindow = gtk_scrolled_window_new (NULL, NULL); g_object_ref_sink (ilv->priv->ilscrolledwindow); gtk_widget_show (ilv->priv->ilscrolledwindow); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (ilv->priv->ilscrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (ilv->priv->ilscrolledwindow), GTK_SHADOW_IN); ilv->priv->treeview = GTK_TREE_VIEW (gtk_tree_view_new ()); if (wide) { gtk_tree_view_set_fixed_height_mode (ilv->priv->treeview, FALSE); gtk_tree_view_set_grid_lines (ilv->priv->treeview, GTK_TREE_VIEW_GRID_LINES_HORIZONTAL); } gtk_container_add (GTK_CONTAINER (ilv->priv->ilscrolledwindow), GTK_WIDGET (ilv->priv->treeview)); gtk_widget_show (GTK_WIDGET (ilv->priv->treeview)); gtk_widget_set_name (GTK_WIDGET (ilv->priv->treeview), "itemlist"); item_list_view_set_tree_store (ilv, item_list_view_create_tree_store ()); renderer = gtk_cell_renderer_pixbuf_new (); column = gtk_tree_view_column_new_with_attributes ("", renderer, "gicon", IS_STATEICON, NULL); g_object_set (renderer, "stock-size", wide?GTK_ICON_SIZE_LARGE_TOOLBAR:GTK_ICON_SIZE_SMALL_TOOLBAR, NULL); g_hash_table_insert (ilv->priv->columns, "state", column); gtk_tree_view_column_set_sort_column_id (column, IS_STATE); if (wide) gtk_tree_view_column_set_visible (column, FALSE); renderer = gtk_cell_renderer_pixbuf_new (); column = gtk_tree_view_column_new_with_attributes ("", renderer, "gicon", IS_FAVICON, NULL); g_object_set (renderer, "stock-size", wide?GTK_ICON_SIZE_DIALOG:GTK_ICON_SIZE_SMALL_TOOLBAR, NULL); gtk_tree_view_column_set_sort_column_id (column, IS_SOURCE); g_hash_table_insert (ilv->priv->columns, "favicon", column); renderer = gtk_cell_renderer_text_new (); headline_column = gtk_tree_view_column_new_with_attributes (_("Headline"), renderer, "markup", IS_LABEL, "xalign", ITEMSTORE_ALIGN, NULL); gtk_tree_view_column_set_expand (headline_column, TRUE); g_hash_table_insert (ilv->priv->columns, "headline", headline_column); g_object_set (headline_column, "resizable", TRUE, NULL); if (wide) { gtk_tree_view_column_set_sort_column_id (headline_column, IS_TIME); g_object_set (renderer, "wrap-mode", PANGO_WRAP_WORD, NULL); g_object_set (renderer, "wrap-width", 300, NULL); } else { gtk_tree_view_column_set_sort_column_id (headline_column, IS_LABEL); g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); gtk_tree_view_column_add_attribute (headline_column, renderer, "weight", ITEMSTORE_WEIGHT); } renderer = gtk_cell_renderer_pixbuf_new (); column = gtk_tree_view_column_new_with_attributes ("", renderer, "gicon", IS_ENCICON, NULL); g_hash_table_insert (ilv->priv->columns, "enclosure", column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (_("Date"), renderer, "text", IS_TIME_STR, "weight", ITEMSTORE_WEIGHT, NULL); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); g_hash_table_insert (ilv->priv->columns, "date", column); gtk_tree_view_column_set_sort_column_id(column, IS_TIME); if (wide) gtk_tree_view_column_set_visible (column, FALSE); conf_get_strv_value (LIST_VIEW_COLUMN_ORDER, &conf_column_order); for (gchar **li = conf_column_order; *li; li++) { column = g_hash_table_lookup (ilv->priv->columns, *li); g_object_set (column, "reorderable", TRUE, NULL); gtk_tree_view_append_column (ilv->priv->treeview, column); } g_strfreev (conf_column_order); /* And connect signals */ g_signal_connect (G_OBJECT (ilv->priv->treeview), "button_press_event", G_CALLBACK (on_item_list_view_button_press_event), ilv); g_signal_connect (G_OBJECT (ilv->priv->treeview), "columns_changed", G_CALLBACK (on_item_list_view_columns_changed), ilv); g_signal_connect (G_OBJECT (ilv->priv->treeview), "row_activated", G_CALLBACK (on_item_list_row_activated), ilv); g_signal_connect (G_OBJECT (ilv->priv->treeview), "key-press-event", G_CALLBACK (on_item_list_view_key_press_event), ilv); g_signal_connect (G_OBJECT (ilv->priv->treeview), "popup_menu", G_CALLBACK (on_item_list_view_popup_menu), ilv); if (!wide) { gtk_widget_set_has_tooltip (GTK_WIDGET (ilv->priv->treeview), TRUE); g_signal_connect (G_OBJECT (ilv->priv->treeview), "query-tooltip", G_CALLBACK (on_item_list_view_query_tooltip), headline_column); } return ilv; } static void item_list_view_add_item_to_tree_store (ItemListView *ilv, GtkTreeStore *itemstore, itemPtr item) { gint state = 0; nodePtr node; GtkTreeIter iter; gboolean exists; if (item->flagStatus) state += 2; if (!item->readStatus) state += 1; node = node_from_id (item->nodeId); if(!node) return; /* comment items do cause this... maybe filtering them earlier would be a good idea... */ exists = item_list_view_id_to_iter (ilv, item->id, &iter); if (!exists) { gtk_tree_store_prepend (itemstore, &iter, NULL); ilv->priv->item_ids = g_slist_append (ilv->priv->item_ids, GUINT_TO_POINTER (item->id)); } gtk_tree_store_set (itemstore, &iter, IS_TIME, item->time, IS_NR, item->id, IS_PARENT, node, IS_FAVICON, node_get_icon (node), IS_ENCICON, item->hasEnclosure?icon_get (ICON_ENCLOSURE):NULL, IS_ENCLOSURE, item->hasEnclosure, IS_SOURCE, node, IS_STATE, state, -1); } void item_list_view_add_item (ItemListView *ilv, itemPtr item) { GtkTreeStore *itemstore; if (ilv->priv->batch_mode) { /* either merge to new unattached GtkTreeStore */ item_list_view_add_item_to_tree_store (ilv, ilv->priv->batch_itemstore, item); } else { /* or merge to visible item store */ itemstore = GTK_TREE_STORE (gtk_tree_view_get_model (ilv->priv->treeview)); item_list_view_add_item_to_tree_store (ilv, itemstore, item); } item_list_view_update_item (ilv, item); } void item_list_view_enable_favicon_column (ItemListView *ilv, gboolean enabled) { gtk_tree_view_column_set_visible (g_hash_table_lookup(ilv->priv->columns, "favicon"), enabled); // In wide view we want to save vertical space and hide the state column if (ilv->priv->wideView) gtk_tree_view_column_set_visible (g_hash_table_lookup(ilv->priv->columns, "state"), !enabled); } void on_action_launch_item_in_browser (GSimpleAction *action, GVariant *parameter, gpointer user_data) { itemPtr item = NULL; if (parameter) item = item_load (g_variant_get_uint64 (parameter)); else item = itemlist_get_selected (); if (item) { launch_item (item, INTERNAL); item_unload (item); } } void on_action_launch_item_in_tab (GSimpleAction *action, GVariant *parameter, gpointer user_data) { itemPtr item = NULL; if (parameter) item = item_load (g_variant_get_uint64 (parameter)); else item = itemlist_get_selected (); if (item) { launch_item (item, TAB); item_unload (item); } } void on_action_launch_item_in_external_browser (GSimpleAction *action, GVariant *parameter, gpointer user_data) { itemPtr item = NULL; if (parameter) item = item_load (g_variant_get_uint64 (parameter)); else item = itemlist_get_selected (); if (item) { launch_item (item, EXTERNAL); item_unload (item); } } /* menu callbacks */ void on_toggle_item_flag (GSimpleAction *action, GVariant *parameter, gpointer user_data) { itemPtr item = NULL; if (parameter) item = item_load (g_variant_get_uint64 (parameter)); else item = itemlist_get_selected (); if (item) { itemlist_toggle_flag (item); item_unload (item); } } void on_toggle_unread_status (GSimpleAction *action, GVariant *parameter, gpointer user_data) { itemPtr item = NULL; if (parameter) item = item_load (g_variant_get_uint64 (parameter)); else item = itemlist_get_selected (); if (item) { itemlist_toggle_read_status (item); item_unload (item); } } void on_remove_items_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { nodePtr node; node = feedlist_get_selected (); // FIXME: use node type capability check if (node && (IS_FEED (node) || IS_NEWSBIN (node))) itemlist_remove_all_items (node); else ui_show_error_box (_("You must select a feed to delete its items!")); } void on_action_remove_item (GSimpleAction *action, GVariant *parameter, gpointer user_data) { itemPtr item = NULL; if (parameter) item = item_load (g_variant_get_uint64 (parameter)); else item = itemlist_get_selected (); if (item) { itemview_select_item (NULL); itemlist_remove_item (item); } else { liferea_shell_set_important_status_bar (_("No item has been selected")); } } void item_list_view_select (ItemListView *ilv, itemPtr item) { GtkTreeView *treeview = ilv->priv->treeview; GtkTreeSelection *selection; GtkTreeIter iter; selection = gtk_tree_view_get_selection (treeview); if (item && item_list_view_id_to_iter(ilv, item->id, &iter)){ GtkTreePath *path = NULL; path = gtk_tree_model_get_path (gtk_tree_view_get_model (treeview), &iter); if (path) { gtk_tree_view_set_cursor (treeview, path, NULL, FALSE); gtk_tree_view_scroll_to_cell (treeview, path, NULL, FALSE, 0.0, 0.0); gtk_tree_path_free (path); } } else { if (item) g_warning ("item_list_view_select : attempt to select an item which is not present in the view."); gtk_tree_selection_unselect_all (selection); } } itemPtr item_list_view_find_unread_item (ItemListView *ilv, gulong startId) { GtkTreeIter iter; GtkTreeModel *model; gboolean valid = TRUE; model = gtk_tree_view_get_model (ilv->priv->treeview); if (startId) valid = item_list_view_id_to_iter (ilv, startId, &iter); else valid = gtk_tree_model_get_iter_first (model, &iter); while (valid) { itemPtr item = item_load (item_list_view_iter_to_id (ilv, &iter)); if (item) { if (!item->readStatus) return item; item_unload (item); } valid = gtk_tree_model_iter_next (model, &iter); } return NULL; } void on_next_unread_item_activate (GSimpleAction *menuitem, GVariant*parameter, gpointer user_data) { itemlist_select_next_unread (); } void on_popup_copy_URL_clipboard (GSimpleAction *action, GVariant *parameter, gpointer user_data) { itemPtr item; item = itemlist_get_selected (); if (item) { gchar *link = item_make_link (item); gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_PRIMARY), link, -1); gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD), link, -1); g_free (link); item_unload (item); } else { liferea_shell_set_important_status_bar (_("No item has been selected")); } } void on_popup_social_bm_item_selected (GSimpleAction *action, GVariant *parameter, gpointer user_data) { itemPtr item; item = itemlist_get_selected (); if (item) { social_add_bookmark (item); item_unload (item); } else liferea_shell_set_important_status_bar (_("No item has been selected")); } liferea-1.12.7/src/ui/item_list_view.h000066400000000000000000000206021352135647700176260ustar00rootroot00000000000000/* * @file item_list_view.h presenting items in a GtkTreeView * * Copyright (C) 2004-2015 Lars Windolf * Copyright (C) 2004-2005 Nathan J. Conrad * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _ITEM_LIST_VIEW_H #define _ITEM_LIST_VIEW_H #include #include #include #include "item.h" #include "node_view.h" /* This class realizes an GtkTreeView based item view. Instances of ItemListView are managed by the ItemListView. This class hides the GtkTreeView and implements performance optimizations. */ G_BEGIN_DECLS #define ITEM_LIST_VIEW_TYPE (item_list_view_get_type ()) #define ITEM_LIST_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ITEM_LIST_VIEW_TYPE, ItemListView)) #define ITEM_LIST_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ITEM_LIST_VIEW_TYPE, ItemListViewClass)) #define IS_ITEM_LIST_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ITEM_LIST_VIEW_TYPE)) #define IS_ITEM_LIST_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ITEM_LIST_VIEW_TYPE)) typedef struct ItemListView ItemListView; typedef struct ItemListViewClass ItemListViewClass; typedef struct ItemListViewPrivate ItemListViewPrivate; struct ItemListView { GObject parent; /*< private >*/ ItemListViewPrivate *priv; }; struct ItemListViewClass { GObjectClass parent_class; }; GType item_list_view_get_type (void); /** * item_list_view_create: (skip) * @wide: TRUE if ItemListView should be optimized for wide view(itemview->priv->currentLayoutMode == NODE_VIEW_MODE_WIDE) * * Create a new ItemListView instance. * * Returns: (transfer none): the ItemListView instance */ ItemListView * item_list_view_create (gboolean wide); /** * item_list_view_get_widget: * * Returns the GtkWidget used by the ItemListView instance. * * Returns: (transfer none): a GtkWidget */ GtkWidget * item_list_view_get_widget (ItemListView *ilv); /** * item_list_view_move_cursor: * @ilv: the ItemListView * @step: move distance * * Moves the cursor in the item list step times. * Negative value means moving backwards. */ void item_list_view_move_cursor (ItemListView *ilv, int step); /** * item_list_view_move_cursor_to_first: * @ilv: the ItemListView * * Moves the cursor to the first element. */ void item_list_view_move_cursor_to_first (ItemListView *ilv); /** * item_list_view_contains_id: * @ilv: the ItemListView * @id: the item id * * Checks whether the given id is in the ItemListView. * * Returns: TRUE if the item is in the ItemListView */ gboolean item_list_view_contains_id (ItemListView *ilv, gulong id); /** * item_list_view_set_sort_column: * @ilv: the ItemListView * @sortType: new sort type * @sortReversed: TRUE for ascending order * * Changes the sorting type (and direction). */ void item_list_view_set_sort_column (ItemListView *ilv, nodeViewSortType sortType, gboolean sortReversed); /** * item_list_view_select: (skip) * @ilv: the ItemListView * @item: the item to select * * Selects the given item (if it is in the ItemListView). */ void item_list_view_select (ItemListView *ilv, itemPtr item); /** * item_list_view_add_item: (skip) * @ilv: the ItemListView * @item: the item to add * * Add an item to an ItemListView. This method is expensive and * is to be used only for new items that need to be inserted * by background updates. */ void item_list_view_add_item (ItemListView *ilv, itemPtr item); /** * item_list_view_remove_item: (skip) * @ilv: the ItemListView * @item: the item to remove * * Remove an item from an ItemListView. This method is expensive * and is to be used only for items removed by background updates * (usually cache drops). */ void item_list_view_remove_item (ItemListView *ilv, itemPtr item); /** * item_list_view_enable_favicon: * @ilv: the ItemListView * @enabled: TRUE if column is to be visible * * Enable the favicon column of the currently displayed itemlist. */ void item_list_view_enable_favicon_column (ItemListView *ilv, gboolean enabled); /** * item_list_view_clear: (skip) * @ilv: the ItemListView * * Remove all items and resets a ItemListView. */ void item_list_view_clear (ItemListView *ilv); /** * item_list_view_update: (skip) * @ilv: the ItemListView * @hasEnclosures: TRUE if at least one item has an enclosure * * Update the ItemListView with the newly added items. To be called * after doing a batch of item_list_view_add_item() calls. */ void item_list_view_update (ItemListView *ilv, gboolean hasEnclosures); /* menu callbacks */ /** * on_toggle_unread_status: (skip) * @action: The activated action. * @parameter: The item id as a GVariant of type "t", or NULL for the selected item. * @user_data: unused * * Toggles the unread status of the selected item. This is called from * a menu. */ void on_toggle_unread_status (GSimpleAction *action, GVariant *parameter, gpointer user_data); /** * on_toggle_item_flag: (skip) * @action: The activated action. * @parameter: The item id as a GVariant of type "t", or NULL for the selected item. * @user_data: unused * * Toggles the flag of the selected item. This is called from a menu. */ void on_toggle_item_flag (GSimpleAction *action, GVariant *parameter, gpointer user_data); /* * Opens the selected item in a browser. */ void on_action_launch_item_in_browser (GSimpleAction *action, GVariant *parameter, gpointer user_data); /* * Opens the selected item in a browser. */ void on_action_launch_item_in_tab (GSimpleAction *action, GVariant *parameter, gpointer user_data); /* * Opens the selected item in a browser. */ void on_action_launch_item_in_external_browser (GSimpleAction *action, GVariant *parameter, gpointer user_data); /* * Removes all items from the selected feed. */ void on_remove_items_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data); /** * on_action_remove_item: (skip) * @action: The activated action. * @parameter: The item id as a GVariant of type "t", or NULL for the selected item. * @user_data: Unused. * * Removes the selected item from the selected feed. */ void on_action_remove_item (GSimpleAction *action, GVariant *parameter, gpointer user_data); /** * item_list_view_find_unread_item: (skip) * @ilv: the ItemListView * @startId: 0 or the item id to start from * * Finds and selects the next unread item starting at the given * item in a ItemListView according to the current GtkTreeView sorting order. * * Returns: (nullable): unread item (or NULL) */ itemPtr item_list_view_find_unread_item (ItemListView *ilv, gulong startId); /** * on_next_unread_item_activate: (skip) * @action: The action that was activated. * @user_data: Unused. * * Searches the displayed feed and then all feeds for an unread * item. If one it found, it is displayed. */ void on_next_unread_item_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data); /** * item_list_view_update_item: (skip) * @ilv: the ItemListView * @item: the item * * Update a single item of a ItemListView */ void item_list_view_update_item (ItemListView *ilv, itemPtr item); /** * item_list_view_update_all_items: (skip) * @ilv: the ItemListView * * Update all items of the ItemListView. To be used after * initial batch loading. */ void item_list_view_update_all_items (ItemListView *ilv); /** * on_popup_copy_URL_clipboard: (skip) * * Copies the selected items URL to the clipboard. */ void on_popup_copy_URL_clipboard (GSimpleAction *action, GVariant *parameter, gpointer user_data); /** * on_popup_social_bm_item_selected: (skip) * * Bookmarks the selected item to social bookmark service. */ void on_popup_social_bm_item_selected (GSimpleAction *action, GVariant *parameter, gpointer user_data); #endif liferea-1.12.7/src/ui/itemview.c000066400000000000000000000353631352135647700164410ustar00rootroot00000000000000/* * @file itemview.c viewing feed content in different presentation modes * * Copyright (C) 2006-2015 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "conf.h" #include "debug.h" #include "folder.h" #include "htmlview.h" #include "item_history.h" #include "itemlist.h" #include "itemview.h" #include "node.h" #include "vfolder.h" #include "ui/ui_common.h" #include "ui/enclosure_list_view.h" #include "ui/liferea_shell.h" #include "ui/item_list_view.h" #include "ui/liferea_htmlview.h" /* The item view is the layer that switches item list presentations: a HTML single item or list and GtkTreeView list presentation. It hides the item loading behaviour of GtkTreeView and HTML view. The item view does not handle item filtering, which is done by the item list implementation. */ #define ITEMVIEW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), ITEMVIEW_TYPE, ItemViewPrivate)) struct ItemViewPrivate { gboolean htmlOnly; /*<< TRUE if HTML only mode */ guint mode; /*<< current item view mode */ nodePtr node; /*<< the node whose items are displayed */ gboolean browsing; /*<< TRUE if itemview is used as internal browser right now */ gboolean needsHTMLViewUpdate; /*<< flag to be set when HTML rendering is to be updated, used to delay HTML updates */ gboolean hasEnclosures; /*<< TRUE if at least one item of the current itemset has an enclosure */ nodeViewType viewMode; /*<< current viewing mode */ guint currentLayoutMode; /*<< layout mode (3 pane, 2 pane, wide view) */ ItemListView *itemListView; /*<< widget instance used to present items in list mode */ EnclosureListView *enclosureView; /*<< Enclosure list widget */ LifereaHtmlView *htmlview; /*<< HTML rendering widget instance used to render single items and summaries mode */ gfloat zoom; /*<< HTML rendering widget zoom level */ }; enum { PROP_NONE, PROP_ITEM_LIST_VIEW, PROP_HTML_VIEW }; static GObjectClass *parent_class = NULL; static ItemView *itemview = NULL; G_DEFINE_TYPE (ItemView, itemview, G_TYPE_OBJECT); static void itemview_finalize (GObject *object) { ItemViewPrivate *priv = ITEMVIEW_GET_PRIVATE (object); if (priv->htmlview) { /* save zoom preferences */ conf_set_int_value (LAST_ZOOMLEVEL, (gint)(100.* liferea_htmlview_get_zoom (priv->htmlview))); g_object_unref (priv->htmlview); } if (priv->enclosureView) g_object_unref (priv->enclosureView); if (priv->itemListView) g_object_unref (priv->itemListView); G_OBJECT_CLASS (parent_class)->finalize (object); } static void itemview_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ItemView *itemview = ITEMVIEW (object); switch (prop_id) { case PROP_ITEM_LIST_VIEW: g_value_set_object (value, itemview->priv->itemListView); break; case PROP_HTML_VIEW: g_value_set_object (value, itemview->priv->htmlview); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void itemview_class_init (ItemViewClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->get_property = itemview_get_property; object_class->finalize = itemview_finalize; /* ItemView:item-list-view: */ g_object_class_install_property (object_class, PROP_ITEM_LIST_VIEW, g_param_spec_object ( "item-list-view", "ItemListView", "ItemListView object", ITEM_LIST_VIEW_TYPE, G_PARAM_READABLE)); /* ItemView:html-view: */ g_object_class_install_property (object_class, PROP_HTML_VIEW, g_param_spec_object ( "html-view", "LifereaHtmlView", "LifereaHtmlView object", LIFEREA_HTMLVIEW_TYPE, G_PARAM_READABLE)); g_type_class_add_private (object_class, sizeof(ItemViewPrivate)); } void itemview_clear (void) { if (itemview->priv->itemListView) item_list_view_clear (itemview->priv->itemListView); htmlview_clear (); enclosure_list_view_hide (itemview->priv->enclosureView); itemview->priv->hasEnclosures = FALSE; itemview->priv->needsHTMLViewUpdate = TRUE; itemview->priv->browsing = FALSE; } void itemview_set_mode (itemViewMode mode) { if (itemview->priv->mode != mode) { /* FIXME: Not being able to call itemview_clear() here is awful! */ itemview->priv->mode = mode; htmlview_clear (); /* drop HTML rendering cache */ } } void itemview_set_displayed_node (nodePtr node) { if (node == itemview->priv->node) return; itemview->priv->node = node; /* 1. Reset view state */ itemview_clear (); /* 2. And prepare HTML view */ htmlview_set_displayed_node (node); } void itemview_add_item (itemPtr item) { itemview->priv->hasEnclosures |= item->hasEnclosure; if (itemview->priv->itemListView) /* add item in 3 pane mode */ item_list_view_add_item (itemview->priv->itemListView, item); else /* force HTML update in 2 pane mode */ itemview->priv->needsHTMLViewUpdate = TRUE; htmlview_add_item (item); } void itemview_remove_item (itemPtr item) { if (itemview->priv->itemListView) { /* remove item in 3 pane mode */ if (item_list_view_contains_id (itemview->priv->itemListView, item->id)) item_list_view_remove_item (itemview->priv->itemListView, item); } else /* force HTML update in 2 pane mode */ if (htmlview_contains_id (item->id)) itemview->priv->needsHTMLViewUpdate = TRUE; htmlview_remove_item (item); } void itemview_select_item (itemPtr item) { ItemViewPrivate *ivp = itemview->priv; /* Enforce single item mode as we currently know no other way to select a single item... */ itemview_set_mode (ITEMVIEW_SINGLE_ITEM); ivp->needsHTMLViewUpdate = TRUE; ivp->browsing = FALSE; if (ivp->itemListView) item_list_view_select (ivp->itemListView, item); htmlview_select_item (item); if (item) enclosure_list_view_load (ivp->enclosureView, item); else enclosure_list_view_hide (ivp->enclosureView); if (item) item_history_add (item->id); } void itemview_select_enclosure (guint position) { enclosure_list_view_select (itemview->priv->enclosureView, position); } void itemview_update_item (itemPtr item) { /* Always update the GtkTreeView (bail-out done in ui_itemlist_update_item() */ if (itemview->priv->itemListView) item_list_view_update_item (itemview->priv->itemListView, item); /* Bail if we do internal browsing, and no item is shown */ if (itemview->priv->browsing) return; /* Bail out if no HTML update necessary */ switch (itemview->priv->mode) { case ITEMVIEW_ALL_ITEMS: /* No HTML update needed if 2 pane mode and item not in item set */ if (!htmlview_contains_id (item->id)) return; break; case ITEMVIEW_SINGLE_ITEM: /* No HTML update needed if 3 pane mode and item not displayed */ if (item->id != itemlist_get_selected_id ()) return; break; default: /* Return in all other display modes */ return; break; } itemview->priv->needsHTMLViewUpdate = TRUE; htmlview_update_item (item); } void itemview_update_all_items (void) { /* Always update the GtkTreeView (bail-out done in ui_itemlist_update_item() */ if (itemview->priv->itemListView) item_list_view_update_all_items (itemview->priv->itemListView); itemview->priv->needsHTMLViewUpdate = TRUE; htmlview_update_all_items (); } void itemview_update_node_info (nodePtr node) { /* Bail if we do internal browsing, and no item is shown */ if (itemview->priv->browsing) return; if (!itemview->priv->node) return; if (itemview->priv->node != node) return; if (ITEMVIEW_NODE_INFO != itemview->priv->mode) return; itemview->priv->needsHTMLViewUpdate = TRUE; /* Just setting the update flag, because node info is not cached */ } void itemview_update (void) { if (itemview->priv->itemListView) item_list_view_update (itemview->priv->itemListView, itemview->priv->hasEnclosures); if (itemview->priv->itemListView && itemview->priv->node) { item_list_view_enable_favicon_column (itemview->priv->itemListView, NODE_TYPE (itemview->priv->node)->capabilities & NODE_CAPABILITY_SHOW_ITEM_FAVICONS); item_list_view_set_sort_column (itemview->priv->itemListView, itemview->priv->node->sortColumn, itemview->priv->node->sortReversed); } if (itemview->priv->needsHTMLViewUpdate) { itemview->priv->needsHTMLViewUpdate = FALSE; htmlview_update (itemview->priv->htmlview, itemview->priv->mode); } if (itemview->priv->node) liferea_shell_update_allitems_actions (0 != itemview->priv->node->itemCount, (0 != itemview->priv->node->unreadCount) || IS_VFOLDER (itemview->priv->node)); } void itemview_display_info (const gchar *html) { liferea_htmlview_write (itemview->priv->htmlview, html, NULL); } /* next unread selection logic */ itemPtr itemview_find_unread_item (gulong startId) { itemPtr result = NULL; /* Note: to select in sorting order we need to do it in the ItemListView otherwise we would have to sort the item list here... */ if (!itemview->priv->itemListView) /* If there is no itemListView we are in combined view and all * items are treated as read. */ return NULL; /* First do a scan from the start position (usually the selected item to the end of the sorted item list) if one is given. */ if (startId) result = item_list_view_find_unread_item (itemview->priv->itemListView, startId); /* Now perform a wrap around by searching again from the top */ if (!result) result = item_list_view_find_unread_item (itemview->priv->itemListView, 0); return result; } void itemview_scroll (void) { liferea_htmlview_scroll (itemview->priv->htmlview); } void itemview_move_cursor (int step) { if (itemview->priv->itemListView) item_list_view_move_cursor (itemview->priv->itemListView, step); } void itemview_move_cursor_to_first (void) { if (itemview->priv->itemListView) item_list_view_move_cursor_to_first (itemview->priv->itemListView); } static void itemview_init (ItemView *iv) { debug_enter("itemview_init"); /* 0. Prepare globally accessible singleton */ g_assert (NULL == itemview); itemview = iv; itemview->priv = ITEMVIEW_GET_PRIVATE (iv); debug_exit("itemview_init"); } static void on_important_status_message (gpointer obj, gchar *url) { liferea_shell_set_important_status_bar ("%s", url); } void itemview_set_layout (nodeViewType newMode) { ItemViewPrivate *ivp = itemview->priv; GtkWidget *previous_parent = NULL; const gchar *htmlWidgetName, *ilWidgetName, *encViewVBoxName; if (newMode == ivp->currentLayoutMode) return; ivp->currentLayoutMode = newMode; if (!ivp->htmlview) { debug0 (DEBUG_GUI, "Creating HTML widget"); htmlview_init (); ivp->htmlview = liferea_htmlview_new (FALSE); liferea_htmlview_set_headline_view (ivp->htmlview); g_signal_connect (ivp->htmlview, "statusbar-changed", G_CALLBACK (on_important_status_message), NULL); /* Set initial zoom */ liferea_htmlview_set_zoom (itemview->priv->htmlview, itemview->priv->zoom/100.); } else { liferea_htmlview_clear (ivp->htmlview); } debug1 (DEBUG_GUI, "Setting item list layout mode: %d", newMode); switch (newMode) { case NODE_VIEW_MODE_NORMAL: htmlWidgetName = "normalViewHtml"; ilWidgetName = "normalViewItems"; encViewVBoxName = "normalViewVBox"; break; case NODE_VIEW_MODE_WIDE: htmlWidgetName = "wideViewHtml"; ilWidgetName = "wideViewItems"; encViewVBoxName = "wideViewVBox"; break; case NODE_VIEW_MODE_COMBINED: htmlWidgetName = "combinedViewHtml"; ilWidgetName = NULL; encViewVBoxName = NULL; break; default: g_warning("fatal: illegal viewing mode!"); return; break; } /* Reparenting HTML view. This avoids the overhead of new browser instances. */ g_assert (htmlWidgetName); gtk_notebook_set_current_page (GTK_NOTEBOOK (liferea_shell_lookup ("itemtabs")), newMode); previous_parent = gtk_widget_get_parent (liferea_htmlview_get_widget (ivp->htmlview)); if (previous_parent) gtk_container_remove (GTK_CONTAINER (previous_parent), liferea_htmlview_get_widget (ivp->htmlview)); gtk_container_add (GTK_CONTAINER (liferea_shell_lookup (htmlWidgetName)), liferea_htmlview_get_widget (ivp->htmlview)); /* Recreate the item list view */ if (ivp->itemListView) { previous_parent = gtk_widget_get_parent (item_list_view_get_widget (ivp->itemListView)); if (previous_parent) gtk_container_remove (GTK_CONTAINER (previous_parent), item_list_view_get_widget (ivp->itemListView)); g_clear_object (&ivp->itemListView); } if (ilWidgetName) { ivp->itemListView = item_list_view_create (newMode == NODE_VIEW_MODE_WIDE); gtk_container_add (GTK_CONTAINER (liferea_shell_lookup (ilWidgetName)), item_list_view_get_widget (ivp->itemListView)); } /* Destroy previous enclosure list. */ if (ivp->enclosureView) { gtk_widget_destroy (enclosure_list_view_get_widget (ivp->enclosureView)); ivp->enclosureView = NULL; } /* Create a new enclosure list GtkTreeView. */ if (encViewVBoxName) { ivp->enclosureView = enclosure_list_view_new (); gtk_grid_attach_next_to (GTK_GRID (liferea_shell_lookup (encViewVBoxName)), enclosure_list_view_get_widget (ivp->enclosureView), NULL, GTK_POS_BOTTOM, 1,1); gtk_widget_show_all (liferea_shell_lookup (encViewVBoxName)); } } ItemView * itemview_create (GtkWidget *window) { gint zoom; g_object_new (ITEMVIEW_TYPE, NULL); /* 1. Load preferences */ conf_get_int_value (LAST_ZOOMLEVEL, &zoom); if (zoom == 0) { zoom = 100; conf_set_int_value (LAST_ZOOMLEVEL, zoom); } itemview->priv->zoom = zoom; /* 2. Set initial layout (because no node selected yet) */ itemview_set_layout (NODE_VIEW_MODE_WIDE); return itemview; } void itemview_launch_URL (const gchar *url, gboolean forceInternal) { gboolean internal; if (forceInternal) { itemview->priv->browsing = TRUE; liferea_htmlview_launch_URL_internal (itemview->priv->htmlview, url); return; } /* Otherwise let the HTML view figure out if we want to browse internally. */ internal = liferea_htmlview_handle_URL (itemview->priv->htmlview, url); if (!internal) liferea_htmlview_launch_URL_internal (itemview->priv->htmlview, url); } void itemview_do_zoom (gboolean in) { if (itemview->priv->htmlview == NULL) return; liferea_htmlview_do_zoom (itemview->priv->htmlview, in); } liferea-1.12.7/src/ui/itemview.h000066400000000000000000000146211352135647700164400ustar00rootroot00000000000000/* * @file itemview.h viewing feed content in different presentation modes * * Copyright (C) 2006-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _ITEMVIEW_H #define _ITEMVIEW_H #include #include #include #include "item.h" #include "itemset.h" #include "node.h" #include "ui/liferea_htmlview.h" /* Liferea presents items in a dynamic view. The view layout changes according to the subscription preferences and if the user requests it on-the-fly. Also the view contents are refreshed automatically. The view consist of an optional GtkTreeView presenting the list of the relevant items and a HTML widget rendering a feed info, a single item or multiple items at once. */ G_BEGIN_DECLS #define ITEMVIEW_TYPE (itemview_get_type ()) #define ITEMVIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ITEMVIEW_TYPE, ItemView)) #define ITEMVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ITEMVIEW_TYPE, ItemViewClass)) #define IS_ITEMVIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ITEMVIEW_TYPE)) #define IS_ITEMVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ITEMVIEW_TYPE)) typedef struct ItemView ItemView; typedef struct ItemViewClass ItemViewClass; typedef struct ItemViewPrivate ItemViewPrivate; struct ItemView { GObject parent; /*< private >*/ ItemViewPrivate *priv; }; struct ItemViewClass { GObjectClass parent_class; }; GType itemview_get_type (void); /** * itemview_clear: (skip) * * Removes all currently loaded items from the item view. */ void itemview_clear (void); /** * itemview_set_displayed_node: (skip) * @node: the node whose items are to be presented * * Prepares the view for displaying items of the given node. */ void itemview_set_displayed_node (nodePtr node); /* item view display mode type */ typedef enum { ITEMVIEW_SINGLE_ITEM, /*<< 3 panes, item view shows the selected item only in HTML view */ ITEMVIEW_ALL_ITEMS, /*<< 2 panes, item view shows all items combined in HTML view */ ITEMVIEW_NODE_INFO /*<< 3 panes, item view shows the selected node description in HTML view*/ } itemViewMode; /** * itemview_set_mode: * @mode: item view mode constant * * Set/unset the display mode of the item view. */ void itemview_set_mode (itemViewMode mode); /** * itemview_add_item: (skip) * @item: the item to add * * Adds an item to the view for rendering. The item must belong * to the item set that was announced with itemview_set_displayed_node(). * * TODO: use item merger signal instead */ void itemview_add_item (itemPtr item); /** * itemview_remove_item: (skip) * @item: the item to remove * * Removes a given item from the view. * * TODO: use item merger signal instead */ void itemview_remove_item (itemPtr item); /** * itemview_select_item: (skip) * @item: the item to select * * Selects a given item in the view. The item must be * added using itemview_add_item before selecting. */ void itemview_select_item (itemPtr item); /** * itemview_select_enclosure: * @position: the position to select * * Selects the nth enclosure in the enclosure list view currently presented. */ void itemview_select_enclosure (guint position); /** * itemview_update_item: (skip) * @item: the item to update * * Requests updating the rendering of a given item. */ void itemview_update_item (itemPtr item); /** * itemview_update_all_items: * * Requests updating the rendering of a all displayed items. */ void itemview_update_all_items (void); /** * itemview_update_node_info: (skip) * @node: the node whose info view is to be updated * * Requests updating the rendering of the node info view. * * TODO: register for signal at feed merger instead */ void itemview_update_node_info (struct node *node); /** * itemview_update: (skip) * * Refreshes the item view. Needs to be called after each * add, remove or update of one or more items. * * TODO: register for signal at item merger instead */ void itemview_update (void); /** * itemview_display_info: * @html: HTML to present * * Sets an info display in the item view HTML widget. * Used for special functionality like search result info. */ void itemview_display_info (const gchar *html); /** * itemview_find_unread_item: (skip) * @startId: the item id to start at (or NULL for starting at the top) * * Finds the next unread item. * * Returns: (transfer none): the item found (or NULL) */ itemPtr itemview_find_unread_item (gulong startId); /** * itemview_scroll: * * Paging/skimming the item view. If possible scrolls * down otherwise it triggers Next-Unread. */ void itemview_scroll (void); /** * itemview_move_cursor: * @step: moving steps * * Moves the cursor in the item list step times. * Negative value means moving backwards. */ void itemview_move_cursor (int step); /** * itemview_move_cursor_to_first: * * Moves the cursor in the item list to the first element. */ void itemview_move_cursor_to_first (void); /** * itemview_set_layout: * @newMode: new view mode (NODE_VIEW_MODE_*) * * Switches the layout for the given viewing mode. */ void itemview_set_layout (nodeViewType newMode); /** * itemview_create: (skip) * @window: parent window widget * * Creates the item view singleton instance. * * Returns: (transfer none): the item view instance */ ItemView * itemview_create (GtkWidget *window); /** * itemview_launch_URL: * @url: the link to load * @internal: TRUE if internal browsing is to be enforced * * Launch the given URL in the currently active HTML view. * */ void itemview_launch_URL (const gchar *url, gboolean internal); /** * itemview_do_zoom: * @in: TRUE if zooming in, FALSE for zooming out * * Requests the item view to change zoom level. */ void itemview_do_zoom (gboolean in); G_END_DECLS #endif liferea-1.12.7/src/ui/liferea_dialog.c000066400000000000000000000064341352135647700175330ustar00rootroot00000000000000/** * @file ui_dialog.c UI dialog handling * * Copyright (C) 2007-2016 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include "ui/liferea_dialog.h" #include "ui/liferea_shell.h" #define LIFEREA_DIALOG_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), LIFEREA_DIALOG_TYPE, LifereaDialogPrivate)) struct LifereaDialogPrivate { GtkBuilder *xml; GtkWidget *dialog; }; static GObjectClass *parent_class = NULL; G_DEFINE_TYPE (LifereaDialog, liferea_dialog, G_TYPE_OBJECT); static void liferea_dialog_finalize (GObject *object) { LifereaDialog *ls = LIFEREA_DIALOG (object); g_object_unref (ls->priv->xml); G_OBJECT_CLASS (parent_class)->finalize (object); } static void liferea_dialog_destroy_cb (GtkWidget *widget, LifereaDialog *ld) { g_object_unref (ld); } static void liferea_dialog_class_init (LifereaDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = liferea_dialog_finalize; g_type_class_add_private (object_class, sizeof(LifereaDialogPrivate)); } static void liferea_dialog_init (LifereaDialog *ld) { ld->priv = LIFEREA_DIALOG_GET_PRIVATE (ld); } GtkWidget * liferea_dialog_lookup (GtkWidget *widget, const gchar *name) { LifereaDialog *ld; if (!widget) return NULL; ld = LIFEREA_DIALOG (g_object_get_data (G_OBJECT (widget), "LifereaDialog")); if (!IS_LIFEREA_DIALOG (ld)) { g_warning ("Fatal: liferea_dialog_lookup() called with something that is not a Liferea dialog!"); return NULL; } if (ld->priv->xml) return GTK_WIDGET (gtk_builder_get_object (ld->priv->xml, name)); return NULL; } GtkWidget * liferea_dialog_new (const gchar *name) { LifereaDialog *ld; gchar *path; GError *error = NULL; ld = LIFEREA_DIALOG (g_object_new (LIFEREA_DIALOG_TYPE, NULL)); path = g_strdup_printf ("%s%s.ui", PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S, name); ld->priv->xml = gtk_builder_new_from_file (path); g_free (path); g_return_val_if_fail (ld->priv->xml != NULL, NULL); ld->priv->dialog = GTK_WIDGET (gtk_builder_get_object (ld->priv->xml, name)); gtk_window_set_transient_for (GTK_WINDOW (ld->priv->dialog), GTK_WINDOW (liferea_shell_get_window())); gtk_builder_connect_signals (ld->priv->xml, NULL); g_return_val_if_fail (ld->priv->dialog != NULL, NULL); g_object_set_data (G_OBJECT (ld->priv->dialog), "LifereaDialog", ld); g_signal_connect_object (ld->priv->dialog, "destroy", G_CALLBACK (liferea_dialog_destroy_cb), ld, 0); return ld->priv->dialog; } liferea-1.12.7/src/ui/liferea_dialog.h000066400000000000000000000043621352135647700175360ustar00rootroot00000000000000/** * @file ui_dialog.h UI dialog handling * * Copyright (C) 2007-2016 Lars Windolf * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _UI_DIALOG_H #define _UI_DIALOG_H #include #include #include G_BEGIN_DECLS #define LIFEREA_DIALOG_TYPE (liferea_dialog_get_type ()) #define LIFEREA_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIFEREA_DIALOG_TYPE, LifereaDialog)) #define LIFEREA_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LIFEREA_DIALOG_TYPE, LifereaDialogClass)) #define IS_LIFEREA_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LIFEREA_DIALOG_TYPE)) #define IS_LIFEREA_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LIFEREA_DIALOG_TYPE)) typedef struct LifereaDialog LifereaDialog; typedef struct LifereaDialogClass LifereaDialogClass; typedef struct LifereaDialogPrivate LifereaDialogPrivate; struct LifereaDialog { GObject parent; /*< private >*/ LifereaDialogPrivate *priv; }; struct LifereaDialogClass { GObjectClass parent_class; }; GType liferea_dialog_get_type (void); /** * Convenience wrapper to create a new dialog and set up its GUI * * @param name the dialog name * * @returns the dialog widget */ GtkWidget * liferea_dialog_new (const gchar *name); /** * Helper function to look up child widgets of a dialog window. * * @param widget the dialog widget * @param name widget name * * @returns found widget (or NULL) */ GtkWidget * liferea_dialog_lookup (GtkWidget *widget, const gchar *name); G_END_DECLS #endif liferea-1.12.7/src/ui/liferea_htmlview.c000066400000000000000000000407711352135647700201350ustar00rootroot00000000000000/* * @file liferea_htmlview.c Liferea embedded HTML rendering * * Copyright (C) 2003-2015 Lars Windolf * Copyright (C) 2005-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ui/liferea_htmlview.h" #include #if !defined (G_OS_WIN32) || defined (HAVE_SYS_WAIT_H) #include #endif #include #include "browser.h" #include "browser_history.h" #include "comments.h" #include "common.h" #include "conf.h" #include "debug.h" #include "enclosure.h" #include "feed.h" #include "feedlist.h" #include "net_monitor.h" #include "social.h" #include "render.h" #include "htmlview.h" #include "ui/browser_tabs.h" #include "ui/item_list_view.h" /* The LifereaHtmlView is a complex widget used to present both internally rendered content as well as serving as a browser widget. It automatically switches on a toolbar for history and URL navigation when browsing external content. When serving internal content it reacts to different internal link schemata to trigger functionality inside Liferea. To avoid websites hijacking this we keep a flag to support the link schema only on liferea_htmlview_write() */ #define RENDERER(htmlview) (htmlview->priv->impl) #define LIFEREA_HTMLVIEW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), LIFEREA_HTMLVIEW_TYPE, LifereaHtmlViewPrivate)) struct LifereaHtmlViewPrivate { GtkWidget *renderWidget; /*<< The HTML widget (e.g. Webkit widget) */ GtkWidget *container; /*<< Outer container including render widget and toolbar */ GtkWidget *toolbar; /*<< The navigation toolbar */ GtkWidget *forward; /*<< The forward button */ GtkWidget *back; /*<< The back button */ GtkWidget *urlentry; /*<< The URL entry widget */ browserHistory *history; /*<< The browser history */ gboolean internal; /*<< TRUE if internal view presenting generated HTML with special links */ gboolean forceInternalBrowsing; /*<< TRUE if clicked links should be force loaded within this view (regardless of global preference) */ htmlviewImplPtr impl; /*<< Browser widget support implementation */ }; enum { STATUSBAR_CHANGED, TITLE_CHANGED, LOCATION_CHANGED, LAST_SIGNAL }; enum { PROP_NONE, PROP_RENDER_WIDGET }; /* LifereaHtmlView toolbar callbacks */ static gboolean on_htmlview_url_entry_activate (GtkWidget *widget, gpointer user_data) { LifereaHtmlView *htmlview = LIFEREA_HTMLVIEW (user_data); gchar *url; url = (gchar *)gtk_entry_get_text (GTK_ENTRY (widget)); liferea_htmlview_launch_URL_internal (htmlview, url); return TRUE; } static void on_htmlview_history_back (GtkWidget *widget, gpointer user_data) { LifereaHtmlView *htmlview = LIFEREA_HTMLVIEW (user_data); gchar *url; /* Going back is a bit more complex than forward as we want to switch from inline browsing back to headlines when we are in the item view. So we expect an URL or NULL for switching back to the headline */ url = browser_history_back (htmlview->priv->history); if (url) { gtk_widget_set_sensitive (htmlview->priv->forward, browser_history_can_go_forward (htmlview->priv->history)); gtk_widget_set_sensitive (htmlview->priv->back, browser_history_can_go_back (htmlview->priv->history)); liferea_htmlview_launch_URL_internal (htmlview, url); gtk_entry_set_text (GTK_ENTRY (htmlview->priv->urlentry), url); } else { gtk_widget_hide (htmlview->priv->toolbar); liferea_htmlview_clear (htmlview); itemview_update_all_items (); itemview_update (); } } static void on_htmlview_history_forward (GtkWidget *widget, gpointer user_data) { LifereaHtmlView *htmlview = LIFEREA_HTMLVIEW (user_data); gchar *url; url = browser_history_forward (htmlview->priv->history); gtk_widget_set_sensitive (htmlview->priv->forward, browser_history_can_go_forward (htmlview->priv->history)); gtk_widget_set_sensitive (htmlview->priv->back, browser_history_can_go_back (htmlview->priv->history)); liferea_htmlview_launch_URL_internal (htmlview, url); gtk_entry_set_text (GTK_ENTRY (htmlview->priv->urlentry), url); } /* LifereaHtmlView class */ static guint liferea_htmlview_signals[LAST_SIGNAL] = { 0 }; static GObjectClass *parent_class = NULL; G_DEFINE_TYPE (LifereaHtmlView, liferea_htmlview, G_TYPE_OBJECT); static void liferea_htmlview_finalize (GObject *object) { LifereaHtmlView *htmlview = LIFEREA_HTMLVIEW (object); browser_history_free (htmlview->priv->history); g_clear_object (&htmlview->priv->container); g_signal_handlers_disconnect_by_data (network_monitor_get (), object); G_OBJECT_CLASS (parent_class)->finalize (object); } static void liferea_htmlview_get_property (GObject *gobject, guint prop_id, GValue *value, GParamSpec *pspec) { LifereaHtmlView *self = LIFEREA_HTMLVIEW(gobject); switch (prop_id) { case PROP_RENDER_WIDGET: g_value_set_object (value, self->priv->renderWidget); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); break; } } static void liferea_htmlview_class_init (LifereaHtmlViewClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->get_property = liferea_htmlview_get_property; object_class->finalize = liferea_htmlview_finalize; /* LifereaHtmlView:renderWidget: */ g_object_class_install_property ( object_class, PROP_RENDER_WIDGET, g_param_spec_object ( "renderwidget", "GtkWidget", "GtkWidget object", GTK_TYPE_WIDGET, G_PARAM_READABLE)); liferea_htmlview_signals[STATUSBAR_CHANGED] = g_signal_new ("statusbar-changed", G_OBJECT_CLASS_TYPE (object_class), (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION), 0, NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); liferea_htmlview_signals[TITLE_CHANGED] = g_signal_new ("title-changed", G_OBJECT_CLASS_TYPE (object_class), (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION), 0, NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); liferea_htmlview_signals[LOCATION_CHANGED] = g_signal_new ("location-changed", G_OBJECT_CLASS_TYPE (object_class), (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION), 0, NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); htmlview_get_impl ()->init (); g_type_class_add_private (object_class, sizeof (LifereaHtmlViewPrivate)); } static void liferea_htmlview_init (LifereaHtmlView *htmlview) { GtkWidget *widget, *image; htmlview->priv = LIFEREA_HTMLVIEW_GET_PRIVATE (htmlview); htmlview->priv->internal = FALSE; htmlview->priv->impl = htmlview_get_impl (); htmlview->priv->renderWidget = RENDERER (htmlview)->create (htmlview); htmlview->priv->container = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); g_object_ref_sink (htmlview->priv->container); htmlview->priv->history = browser_history_new (); htmlview->priv->toolbar = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); widget = gtk_button_new (); gtk_button_set_relief (GTK_BUTTON (widget), GTK_RELIEF_NONE); image = gtk_image_new_from_icon_name ("go-previous", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image); gtk_container_add (GTK_CONTAINER (widget), image); gtk_box_pack_start (GTK_BOX (htmlview->priv->toolbar), widget, FALSE, FALSE, 0); g_signal_connect ((gpointer)widget, "clicked", G_CALLBACK (on_htmlview_history_back), (gpointer)htmlview); gtk_widget_set_sensitive (widget, FALSE); htmlview->priv->back = widget; widget = gtk_button_new (); gtk_button_set_relief (GTK_BUTTON(widget), GTK_RELIEF_NONE); image = gtk_image_new_from_icon_name ("go-next", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image); gtk_container_add (GTK_CONTAINER (widget), image); gtk_box_pack_start (GTK_BOX (htmlview->priv->toolbar), widget, FALSE, FALSE, 0); g_signal_connect ((gpointer)widget, "clicked", G_CALLBACK (on_htmlview_history_forward), (gpointer)htmlview); gtk_widget_set_sensitive (widget, FALSE); htmlview->priv->forward = widget; widget = gtk_entry_new (); gtk_box_pack_start (GTK_BOX (htmlview->priv->toolbar), widget, TRUE, TRUE, 0); g_signal_connect ((gpointer)widget, "activate", G_CALLBACK (on_htmlview_url_entry_activate), (gpointer)htmlview); htmlview->priv->urlentry = widget; gtk_box_pack_start (GTK_BOX (htmlview->priv->container), htmlview->priv->toolbar, FALSE, FALSE, 0); gtk_box_pack_end (GTK_BOX (htmlview->priv->container), htmlview->priv->renderWidget, TRUE, TRUE, 0); gtk_widget_show_all (htmlview->priv->container); } static void liferea_htmlview_set_online (LifereaHtmlView *htmlview, gboolean online) { if (RENDERER (htmlview)->setOffLine) (RENDERER (htmlview)->setOffLine) (!online); } static void liferea_htmlview_online_status_changed (NetworkMonitor *nm, gboolean online, gpointer userdata) { LifereaHtmlView *htmlview = LIFEREA_HTMLVIEW (userdata); liferea_htmlview_set_online (htmlview, online); } static void liferea_htmlview_proxy_changed (NetworkMonitor *nm, gpointer userdata) { LifereaHtmlView *htmlview = LIFEREA_HTMLVIEW (userdata); if (RENDERER (htmlview)->setProxy) (RENDERER (htmlview)->setProxy) (network_get_proxy_detect_mode (), network_get_proxy_host (), network_get_proxy_port (), network_get_proxy_username (), network_get_proxy_password ()); } void liferea_htmlview_set_headline_view (LifereaHtmlView *htmlview) { htmlview->priv->history->headline = TRUE; } LifereaHtmlView * liferea_htmlview_new (gboolean forceInternalBrowsing) { LifereaHtmlView *htmlview; htmlview = LIFEREA_HTMLVIEW (g_object_new (LIFEREA_HTMLVIEW_TYPE, NULL)); htmlview->priv->forceInternalBrowsing = forceInternalBrowsing; liferea_htmlview_clear (htmlview); g_signal_connect (network_monitor_get (), "online-status-changed", G_CALLBACK (liferea_htmlview_online_status_changed), htmlview); g_signal_connect (network_monitor_get (), "proxy-changed", G_CALLBACK (liferea_htmlview_proxy_changed), htmlview); debug0 (DEBUG_NET, "Setting initial HTML widget proxy..."); liferea_htmlview_proxy_changed (network_monitor_get (), htmlview); return htmlview; } /* Needed when adding widget to a parent and querying GTK theme */ GtkWidget * liferea_htmlview_get_widget (LifereaHtmlView *htmlview) { return htmlview->priv->container; } void liferea_htmlview_write (LifereaHtmlView *htmlview, const gchar *string, const gchar *base) { const gchar *baseURL = base; const gchar *errMsg = "ERROR: Invalid encoded UTF8 buffer passed to HTML widget! This shouldn't happen."; if (!htmlview) return; htmlview->priv->internal = TRUE; /* enables special links */ if (baseURL == NULL) baseURL = "file:///"; if (debug_level & DEBUG_HTML) { gchar *filename = common_create_cache_filename (NULL, "output", "xhtml"); g_file_set_contents (filename, string, -1, NULL); g_free (filename); } if (!g_utf8_validate (string, -1, NULL)) { /* It is really a bug if we get invalid encoded UTF-8 here!!! */ (RENDERER (htmlview)->write) (htmlview->priv->renderWidget, errMsg, strlen (errMsg), baseURL, "text/plain"); } else { (RENDERER (htmlview)->write) (htmlview->priv->renderWidget, string, strlen (string), baseURL, "application/xhtml+xml"); } /* We hide the toolbar as it should only be shown when loading external content */ gtk_widget_hide (htmlview->priv->toolbar); } void liferea_htmlview_clear (LifereaHtmlView *htmlview) { GString *buffer; buffer = g_string_new (NULL); htmlview_start_output (buffer, NULL, FALSE, FALSE); htmlview_finish_output (buffer); liferea_htmlview_write (htmlview, buffer->str, NULL); g_string_free (buffer, TRUE); } static gboolean liferea_htmlview_is_special_url (const gchar *url) { /* match against all special protocols, simple convention: all have to start with "liferea-" */ if (url == strstr (url, "liferea-")) return TRUE; return FALSE; } struct internalUriType { const gchar *suffix; void (*func)(itemPtr item); }; static struct internalUriType internalUriTypes[] = { { "refresh-comments", comments_refresh }, { NULL, NULL } }; void liferea_htmlview_on_url (LifereaHtmlView *htmlview, const gchar *url) { if (!liferea_htmlview_is_special_url (url)) g_signal_emit_by_name (htmlview, "statusbar-changed", url); } void liferea_htmlview_title_changed (LifereaHtmlView *htmlview, const gchar *title) { g_signal_emit_by_name (htmlview, "title-changed", title); } void liferea_htmlview_location_changed (LifereaHtmlView *htmlview, const gchar *location) { if (!g_str_has_prefix (location, "liferea")) { /* A URI different from the locally generated html base url is being loaded. */ htmlview->priv->internal = FALSE; } if (!htmlview->priv->internal) { browser_history_add_location (htmlview->priv->history, location); gtk_widget_set_sensitive (htmlview->priv->forward, browser_history_can_go_forward (htmlview->priv->history)); gtk_widget_set_sensitive (htmlview->priv->back, browser_history_can_go_back (htmlview->priv->history)); gtk_entry_set_text (GTK_ENTRY (htmlview->priv->urlentry), location); /* We show the toolbar as it should be visible when loading external content */ gtk_widget_show_all (htmlview->priv->toolbar); } g_signal_emit_by_name (htmlview, "location-changed", location); } gboolean liferea_htmlview_handle_URL (LifereaHtmlView *htmlview, const gchar *url) { struct internalUriType *uriType; gboolean browse_inside_application; g_return_val_if_fail (htmlview, TRUE); g_return_val_if_fail (url, TRUE); conf_get_bool_value (BROWSE_INSIDE_APPLICATION, &browse_inside_application); debug3 (DEBUG_GUI, "handle URL: %s %s %s", browse_inside_application?"true":"false", htmlview->priv->forceInternalBrowsing?"true":"false", htmlview->priv->internal?"true":"false"); /* first catch all links with special URLs... */ if (liferea_htmlview_is_special_url (url)) { if (htmlview->priv->internal) { /* it is a generic item list URI type */ uriType = internalUriTypes; while (uriType->suffix) { if (!strncmp (url + strlen ("liferea-"), uriType->suffix, strlen (uriType->suffix))) { gchar *nodeid, *itemnr; nodeid = strstr (url, "://"); if (nodeid) { nodeid += 3; itemnr = strchr (nodeid, '-'); if (itemnr) { itemPtr item; *itemnr = 0; itemnr++; item = item_load (atol (itemnr)); if (item) { (*uriType->func) (item); item_unload (item); } else { g_warning ("Fatal: no item with id (node=%s, item=%s) found!!!", nodeid, itemnr); } return TRUE; } } } uriType++; } g_warning ("Internal error: unhandled protocol in URL \"%s\"!", url); } else { g_warning ("Security: Prevented external HTML document to use internal link scheme (%s)!", url); } return TRUE; } if(htmlview->priv->forceInternalBrowsing || browse_inside_application) { return FALSE; } else { (void)browser_launch_URL_external (url); } return TRUE; } void liferea_htmlview_launch_URL_internal (LifereaHtmlView *htmlview, const gchar *url) { gtk_widget_set_sensitive (htmlview->priv->forward, browser_history_can_go_forward (htmlview->priv->history)); gtk_widget_set_sensitive (htmlview->priv->back, browser_history_can_go_back (htmlview->priv->history)); gtk_entry_set_text (GTK_ENTRY (htmlview->priv->urlentry), url); (RENDERER (htmlview)->launch) (htmlview->priv->renderWidget, url); } void liferea_htmlview_set_zoom (LifereaHtmlView *htmlview, gfloat diff) { (RENDERER (htmlview)->zoomLevelSet) (htmlview->priv->renderWidget, diff); } gfloat liferea_htmlview_get_zoom (LifereaHtmlView *htmlview) { return (RENDERER (htmlview)->zoomLevelGet) (htmlview->priv->renderWidget); } void liferea_htmlview_scroll (LifereaHtmlView *htmlview) { (RENDERER (htmlview)->scrollPagedown) (htmlview->priv->renderWidget); } void liferea_htmlview_do_zoom (LifereaHtmlView *htmlview, gboolean in) { gfloat factor = in?1.2:0.8; liferea_htmlview_set_zoom (htmlview, factor * liferea_htmlview_get_zoom (htmlview)); } liferea-1.12.7/src/ui/liferea_htmlview.h000066400000000000000000000150421352135647700201330ustar00rootroot00000000000000/* * @file liferea_htmlview.h Liferea embedded HTML rendering * * Copyright (C) 2003-2010 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _LIFEREA_HTMLVIEW_H #define _LIFEREA_HTMLVIEW_H #include #include "net.h" G_BEGIN_DECLS #define LIFEREA_HTMLVIEW_TYPE (liferea_htmlview_get_type ()) #define LIFEREA_HTMLVIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIFEREA_HTMLVIEW_TYPE, LifereaHtmlView)) #define LIFEREA_HTMLVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LIFEREA_HTMLVIEW_TYPE, LifereaHtmlViewClass)) #define IS_LIFEREA_HTMLVIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LIFEREA_HTMLVIEW_TYPE)) #define IS_LIFEREA_HTMLVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LIFEREA_HTMLVIEW_TYPE)) typedef struct LifereaHtmlView LifereaHtmlView; typedef struct LifereaHtmlViewClass LifereaHtmlViewClass; typedef struct LifereaHtmlViewPrivate LifereaHtmlViewPrivate; struct LifereaHtmlView { GObject parent; /*< private >*/ LifereaHtmlViewPrivate *priv; }; struct LifereaHtmlViewClass { GObjectClass parent_class; }; GType liferea_htmlview_get_type (void); /** * liferea_htmlview_new: (skip) * @forceInternalBrowsing: TRUE to act as fully fledged browser * * Function to set up a new html view widget for any purpose. * * Returns: a new Liferea HTML widget */ LifereaHtmlView * liferea_htmlview_new (gboolean forceInternalBrowsing); /** * liferea_htmlview_set_headline_view: * * Make this LifereaHtmlView instance a headline view. This causes * an additional "go back" step for the history tab allowing to go back * from Web content to the headline when browsing inline. */ void liferea_htmlview_set_headline_view (LifereaHtmlView *htmlview); /** * liferea_htmlview_get_widget: * @htmlview: the HTML view * * Returns the rendering widget for a HTML view. Only * to be used by liferea_shell.c for widget reparenting. * * Returns: (transfer none): the rendering widget */ GtkWidget *liferea_htmlview_get_widget (LifereaHtmlView *htmlview); /** * liferea_htmlview_clear: (skip) * @htmlview: the HTML view widget to clear * * Loads a emtpy HTML page. Resets any item view state. */ void liferea_htmlview_clear (LifereaHtmlView *htmlview); /** * liferea_htmlview_write: (skip) * @htmlview: The htmlview widget to be set * @string: HTML source * @base: base url for resolving relative links * * Method to display the passed HTML source to the HTML widget. */ void liferea_htmlview_write (LifereaHtmlView *htmlview, const gchar *string, const gchar *base); /** * liferea_html_view_on_url: (skip) * @htmlview: the htmlview causing the event * @url: new URL (or empty string) * * Callback for plugins to process on-url events. Depending on * the link type the link will be copied to the status bar. */ void liferea_htmlview_on_url (LifereaHtmlView *htmlview, const gchar *url); void liferea_htmlview_title_changed (LifereaHtmlView *htmlview, const gchar *title); void liferea_htmlview_location_changed (LifereaHtmlView *htmlview, const gchar *location); /** * liferea_htmlview_handle_URL: (skip) * @htmlview: the HTML view to use * @url: URL to launch * * Launches the specified URL in the external browser or handles * a special URL by triggering HTML generation. Otherwise returns * FALSE to indicate the HTML widget should launch the link. * * To enforce a launching behaviour do use * * liferea_htmlview_launch_URL_internal(htmlview, url) * * or * * browser_launch_URL_external(url) * * instead of this method. * * Returns: FALSE if link is to be launched by browser widget */ gboolean liferea_htmlview_handle_URL (LifereaHtmlView *htmlview, const gchar *url); /** * liferea_htmlview_launch_URL_internal: (skip) * @htmlview: the HTML view to use * @url: the URL to load * * Enforces loading of the given URL in the given browser widget. */ void liferea_htmlview_launch_URL_internal (LifereaHtmlView *htmlview, const gchar *url); /** * liferea_htmlview_set_zoom: * @zoom: New zoom * * Function to change the zoom level of the HTML widget. * 1.0 is a 1:1 zoom. * */ void liferea_htmlview_set_zoom (LifereaHtmlView *htmlview, gfloat zoom); /** * liferea_htmlview_get_zoom: * @htmlview: htmlview to examine * * Function to determine the current zoom level. * * Returns: the currently set zoom level */ gfloat liferea_htmlview_get_zoom (LifereaHtmlView *htmlview); /** * liferea_htmlview_scroll: * @htmlview: htmlview to scroll * * Function scrolls down the given HTML view if possible. * */ void liferea_htmlview_scroll (LifereaHtmlView *htmlview); /** * liferea_htmlview_do_zoom: * @htmlview: the html view * @in: TRUE if zoom is to be increased * * To be called when HTML view needs to change the text size * of the rendering widget implementation. */ void liferea_htmlview_do_zoom (LifereaHtmlView *htmlview, gboolean in); G_END_DECLS /* interface for HTML rendering support implementation */ typedef struct htmlviewImpl { void (*init) (void); GtkWidget* (*create) (LifereaHtmlView *htmlview); void (*write) (GtkWidget *widget, const gchar *string, guint length, const gchar *base, const gchar *contentType); void (*launch) (GtkWidget *widget, const gchar *url); gfloat (*zoomLevelGet) (GtkWidget *widget); void (*zoomLevelSet) (GtkWidget *widget, gfloat zoom); gboolean (*hasSelection) (GtkWidget *widget); void (*copySelection) (GtkWidget *widget); void (*setProxy) (ProxyDetectMode mode, const gchar *hostname, guint port, const gchar *username, const gchar *password); void (*scrollPagedown) (GtkWidget *widget); void (*setOffLine) (gboolean offline); } *htmlviewImplPtr; /** * htmlview_get_impl: (skip) */ extern htmlviewImplPtr htmlview_get_impl(void); /* Use this macro to declare a html rendering support implementation. */ #define DECLARE_HTMLVIEW_IMPL(impl) \ htmlviewImplPtr htmlview_get_impl(void) { \ return &impl; \ } #endif liferea-1.12.7/src/ui/liferea_shell.c000066400000000000000000001332771352135647700174110ustar00rootroot00000000000000/* * @file liferea_shell.c UI layout handling * * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2007-2018 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H # include #endif #include "ui/liferea_shell.h" #include #include #include #include "browser.h" #include "common.h" #include "conf.h" #include "db.h" #include "debug.h" #include "export.h" #include "feedlist.h" #include "htmlview.h" #include "item_history.h" #include "itemlist.h" #include "net_monitor.h" #include "newsbin.h" #include "plugins_engine.h" #include "render.h" #include "social.h" #include "vfolder.h" #include "ui/browser_tabs.h" #include "ui/feed_list_node.h" #include "ui/feed_list_view.h" #include "ui/icons.h" #include "ui/itemview.h" #include "ui/item_list_view.h" #include "ui/liferea_dialog.h" #include "ui/liferea_shell_activatable.h" #include "ui/preferences_dialog.h" #include "ui/search_dialog.h" #include "ui/ui_common.h" #include "ui/ui_update.h" extern gboolean searchFolderRebuild; /* db.c */ #define LIFEREA_SHELL_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), LIFEREA_SHELL_TYPE, LifereaShellPrivate)) struct LifereaShellPrivate { GtkBuilder *xml; GtkWindow *window; /*<< Liferea main window */ GtkWidget *toolbar; GtkTreeView *feedlistView; GtkStatusbar *statusbar; /*<< main window status bar */ gboolean statusbarLocked; /*<< flag locking important message on status bar */ guint statusbarLockTimer; /*<< timer id for status bar lock reset timer */ GtkWidget *statusbar_feedsinfo; GtkWidget *statusbar_feedsinfo_evbox; GActionGroup *generalActions; GActionGroup *addActions; /*<< all types of "New" options */ GActionGroup *feedActions; /*<< update and mark read */ GActionGroup *readWriteActions; /*<< node remove and properties, node itemset items remove */ GActionGroup *itemActions; /*<< item state toggline, single item remove */ ItemList *itemlist; FeedList *feedlist; ItemView *itemview; BrowserTabs *tabs; PeasExtensionSet *extensions; /*<< Plugin management */ gboolean fullscreen; /*<< track fullscreen */ }; enum { PROP_NONE, PROP_FEED_LIST, PROP_ITEM_LIST, PROP_ITEM_VIEW, PROP_BROWSER_TABS, PROP_BUILDER }; static GObjectClass *parent_class = NULL; static LifereaShell *shell = NULL; G_DEFINE_TYPE (LifereaShell, liferea_shell, G_TYPE_OBJECT); static void liferea_shell_finalize (GObject *object) { LifereaShell *ls = LIFEREA_SHELL (object); g_object_unref (ls->priv->xml); G_OBJECT_CLASS (parent_class)->finalize (object); } static void liferea_shell_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { LifereaShell *shell = LIFEREA_SHELL (object); switch (prop_id) { case PROP_FEED_LIST: g_value_set_object (value, shell->priv->feedlist); break; case PROP_ITEM_LIST: g_value_set_object (value, shell->priv->itemlist); break; case PROP_ITEM_VIEW: g_value_set_object (value, shell->priv->itemview); break; case PROP_BROWSER_TABS: g_value_set_object (value, shell->priv->tabs); break; case PROP_BUILDER: g_value_set_object (value, shell->priv->xml); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void liferea_shell_class_init (LifereaShellClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->get_property = liferea_shell_get_property; object_class->finalize = liferea_shell_finalize; /* LifereaShell:feed-list: */ g_object_class_install_property (object_class, PROP_FEED_LIST, g_param_spec_object ("feed-list", "LifereaFeedList", "LifereaFeedList object", FEEDLIST_TYPE, G_PARAM_READABLE)); /* LifereaShell:item-list: */ g_object_class_install_property (object_class, PROP_ITEM_LIST, g_param_spec_object ("item-list", "LifereaItemList", "LifereaItemList object", ITEMLIST_TYPE, G_PARAM_READABLE)); /* LifereaShell:item-view: */ g_object_class_install_property (object_class, PROP_ITEM_VIEW, g_param_spec_object ("item-view", "LifereaItemView", "LifereaItemView object", ITEMVIEW_TYPE, G_PARAM_READABLE)); /* LifereaShell:browser-tabs: */ g_object_class_install_property (object_class, PROP_BROWSER_TABS, g_param_spec_object ("browser-tabs", "LifereaBrowserTabs", "LifereaBrowserTabs object", BROWSER_TABS_TYPE, G_PARAM_READABLE)); /* LifereaShell:builder: */ g_object_class_install_property (object_class, PROP_BUILDER, g_param_spec_object ("builder", "GtkBuilder", "Liferea user interfaces definitions", GTK_TYPE_BUILDER, G_PARAM_READABLE)); g_type_class_add_private (object_class, sizeof(LifereaShellPrivate)); } GtkWidget * liferea_shell_lookup (const gchar *name) { g_return_val_if_fail (shell != NULL, NULL); g_return_val_if_fail (shell->priv != NULL, NULL); return GTK_WIDGET (gtk_builder_get_object (shell->priv->xml, name)); } static void liferea_shell_init (LifereaShell *ls) { /* globally accessible singleton */ g_assert (NULL == shell); shell = ls; shell->priv = LIFEREA_SHELL_GET_PRIVATE (ls); shell->priv->xml = gtk_builder_new_from_file (PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "mainwindow.ui"); if (!shell->priv->xml) g_error ("Loading " PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "mainwindow.ui failed"); gtk_builder_connect_signals (shell->priv->xml, NULL); } /* * Restore the window position from the values saved into gconf. Note * that this does not display/present/show the mainwindow. */ static void liferea_shell_restore_position (void) { /* load window position */ int x, y, w, h; gboolean last_window_maximized; conf_get_int_value (LAST_WINDOW_X, &x); conf_get_int_value (LAST_WINDOW_Y, &y); conf_get_int_value (LAST_WINDOW_WIDTH, &w); conf_get_int_value (LAST_WINDOW_HEIGHT, &h); debug4 (DEBUG_GUI, "Retrieved saved setting: size %dx%d position %d:%d", w, h, x, y); /* Restore position only if the width and height were saved */ if (w != 0 && h != 0) { if (x >= gdk_screen_width ()) x = gdk_screen_width () - 100; else if (x + w < 0) x = 100; if (y >= gdk_screen_height ()) y = gdk_screen_height () - 100; else if (y + w < 0) y = 100; debug4 (DEBUG_GUI, "Restoring to size %dx%d position %d:%d", w, h, x, y); gtk_window_move (GTK_WINDOW (shell->priv->window), x, y); /* load window size */ gtk_window_resize (GTK_WINDOW (shell->priv->window), w, h); } conf_get_bool_value (LAST_WINDOW_MAXIMIZED, &last_window_maximized); if (last_window_maximized) gtk_window_maximize (GTK_WINDOW (shell->priv->window)); else gtk_window_unmaximize (GTK_WINDOW (shell->priv->window)); } static void liferea_shell_save_position (void) { GtkWidget *pane; gint x, y, w, h; gboolean last_window_maximized; /* save pane proportions */ pane = liferea_shell_lookup ("leftpane"); if (pane) { x = gtk_paned_get_position (GTK_PANED (pane)); conf_set_int_value (LAST_VPANE_POS, x); } pane = liferea_shell_lookup ("normalViewPane"); if (pane) { y = gtk_paned_get_position (GTK_PANED (pane)); conf_set_int_value (LAST_HPANE_POS, y); } pane = liferea_shell_lookup ("wideViewPane"); if (pane) { y = gtk_paned_get_position (GTK_PANED (pane)); conf_set_int_value (LAST_WPANE_POS, y); } /* The following needs to be skipped when the window is not visible */ if (!gtk_widget_get_visible (GTK_WIDGET (shell->priv->window))) return; conf_get_bool_value (LAST_WINDOW_MAXIMIZED, &last_window_maximized); if (last_window_maximized) return; gtk_window_get_position (shell->priv->window, &x, &y); gtk_window_get_size (shell->priv->window, &w, &h); if (x+w<0 || y+h<0 || x > gdk_screen_width () || y > gdk_screen_height ()) return; debug4 (DEBUG_GUI, "Saving window size and position: %dx%d %d:%d", w, h, x, y); /* save window position */ conf_set_int_value (LAST_WINDOW_X, x); conf_set_int_value (LAST_WINDOW_Y, y); /* save window size */ conf_set_int_value (LAST_WINDOW_WIDTH, w); conf_set_int_value (LAST_WINDOW_HEIGHT, h); } void liferea_shell_set_toolbar_style (const gchar *toolbar_style) { if (!toolbar_style) /* default to icons */ gtk_toolbar_set_style (GTK_TOOLBAR (shell->priv->toolbar), GTK_TOOLBAR_ICONS); else if (g_str_equal (toolbar_style, "text")) gtk_toolbar_set_style (GTK_TOOLBAR (shell->priv->toolbar), GTK_TOOLBAR_TEXT); else if (g_str_equal (toolbar_style, "both")) gtk_toolbar_set_style (GTK_TOOLBAR (shell->priv->toolbar), GTK_TOOLBAR_BOTH); else if (g_str_equal (toolbar_style, "both_horiz") || g_str_equal (toolbar_style, "both-horiz") ) gtk_toolbar_set_style (GTK_TOOLBAR (shell->priv->toolbar), GTK_TOOLBAR_BOTH_HORIZ); else /* default to icons */ gtk_toolbar_set_style (GTK_TOOLBAR (shell->priv->toolbar), GTK_TOOLBAR_ICONS); } void liferea_shell_update_toolbar (void) { gboolean disable_toolbar; conf_get_bool_value (DISABLE_TOOLBAR, &disable_toolbar); if (disable_toolbar) gtk_widget_hide (shell->priv->toolbar); else gtk_widget_show (shell->priv->toolbar); } void liferea_shell_update_update_menu (gboolean enabled) { g_simple_action_set_enabled (G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (shell->priv->feedActions), "update-selected")), enabled); } void liferea_shell_update_feed_menu (gboolean add, gboolean enabled, gboolean readWrite) { ui_common_simple_action_group_set_enabled (shell->priv->addActions, add); ui_common_simple_action_group_set_enabled (shell->priv->feedActions, enabled); ui_common_simple_action_group_set_enabled (shell->priv->readWriteActions, readWrite); } void liferea_shell_update_item_menu (gboolean enabled) { ui_common_simple_action_group_set_enabled (shell->priv->itemActions, enabled); } void liferea_shell_update_allitems_actions (gboolean isNotEmpty, gboolean isRead) { g_simple_action_set_enabled (G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (shell->priv->generalActions), "remove-selected-feed-items")), isNotEmpty); g_simple_action_set_enabled (G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (shell->priv->feedActions), "mark-selected-feed-as-read")), isRead); } void liferea_shell_update_history_actions (void) { g_simple_action_set_enabled (G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (shell->priv->generalActions), "prev-read-item")), item_history_has_previous ()); g_simple_action_set_enabled (G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (shell->priv->generalActions), "next-read-item")), item_history_has_next ()); } static void liferea_shell_update_unread_stats (gpointer user_data) { gint new_items, unread_items; gchar *msg, *tmp; if (!shell->priv) return; new_items = feedlist_get_new_item_count (); unread_items = feedlist_get_unread_item_count (); if (new_items != 0) msg = g_strdup_printf (ngettext (" (%d new)", " (%d new)", new_items), new_items); else msg = g_strdup (""); if (unread_items != 0) tmp = g_strdup_printf (ngettext ("%d unread%s", "%d unread%s", unread_items), unread_items, msg); else tmp = g_strdup (""); gtk_label_set_text (GTK_LABEL (shell->priv->statusbar_feedsinfo), tmp); g_free (tmp); g_free (msg); } /* Do to the unsuitable GtkStatusBar stack handling which doesn't allow to keep messages on top of the stack for some time without overwriting them with newly arriving messages we need some extra handling here. Liferea knows two types of status messages: -> low prio messages (e.g. updating status messages) -> high prio messages (caused by user interaction, e.g. link hovering) The ideas is to keep the high prio messages always visible no matter what low prio messages arrive. To solve this we define the status bar stack is always a stack of two messages at most. At the bottom of the stack is always the latest low prio message and on top of the stack is the latest high prio message (or none at all). To enforce this using GtkStatusBar we use a lock to avoid adding low prio messages on top of high priority ones. This lock is valid for at most 5s which should be enough to read the high priority message. Afterwards new low priority messages will overrule the out-dated high priority message. */ static gboolean liferea_shell_unlock_status_bar_cb (gpointer user_data) { shell->priv->statusbarLocked = FALSE; shell->priv->statusbarLockTimer = 0; return FALSE; } static gboolean liferea_shell_set_status_bar_important_cb (gpointer user_data) { gchar *text = (gchar *)user_data; guint id; GtkStatusbar *statusbar; statusbar = GTK_STATUSBAR (shell->priv->statusbar); id = gtk_statusbar_get_context_id (statusbar, "important"); gtk_statusbar_pop (statusbar, id); gtk_statusbar_push (statusbar, id, text); g_free(text); return FALSE; } static gboolean liferea_shell_set_status_bar_default_cb (gpointer user_data) { gchar *text = (gchar *)user_data; guint id; GtkStatusbar *statusbar; statusbar = GTK_STATUSBAR (shell->priv->statusbar); id = gtk_statusbar_get_context_id (statusbar, "default"); gtk_statusbar_pop (statusbar, id); gtk_statusbar_push (statusbar, id, text); g_free(text); return FALSE; } void liferea_shell_set_status_bar (const char *format, ...) { va_list args; gchar *text; if (shell->priv->statusbarLocked) return; g_return_if_fail (format != NULL); va_start (args, format); text = g_strdup_vprintf (format, args); va_end (args); g_idle_add ((GSourceFunc)liferea_shell_set_status_bar_default_cb, (gpointer)text); } void liferea_shell_set_important_status_bar (const char *format, ...) { va_list args; gchar *text; g_return_if_fail (format != NULL); va_start (args, format); text = g_strdup_vprintf (format, args); va_end (args); shell->priv->statusbarLocked = FALSE; if (shell->priv->statusbarLockTimer) { g_source_remove (shell->priv->statusbarLockTimer); shell->priv->statusbarLockTimer = 0; } /* URL hover messages are reset with an empty string, so we must locking the status bar on empty strings! */ if (!g_str_equal (text, "")) { /* Realize 5s locking for important messages... */ shell->priv->statusbarLocked = TRUE; shell->priv->statusbarLockTimer = g_timeout_add_seconds (5, liferea_shell_unlock_status_bar_cb, NULL); } g_idle_add ((GSourceFunc)liferea_shell_set_status_bar_important_cb, (gpointer)text); } static void liferea_shell_do_zoom (gboolean in) { /* We must apply the zoom either to the item view or to an open tab, depending on the browser tabs GtkNotebook page that is active... */ if (!browser_tabs_get_active_htmlview ()) itemview_do_zoom (in); else browser_tabs_do_zoom (in); } static gboolean on_key_press_event_null_cb (GtkWidget *widget, GdkEventKey *event, gpointer data) { return FALSE; } static gboolean on_notebook_scroll_event_null_cb (GtkWidget *widget, GdkEventScroll *event) { GtkNotebook *notebook = GTK_NOTEBOOK (widget); GtkWidget* child; GtkWidget* originator; if (!gtk_notebook_get_current_page (notebook)) return FALSE; child = gtk_notebook_get_nth_page (notebook, gtk_notebook_get_current_page (notebook)); originator = gtk_get_event_widget ((GdkEvent *)event); /* ignore scroll events from the content of the page */ if (!originator || gtk_widget_is_ancestor (originator, child)) return FALSE; return TRUE; } static gboolean on_close (GtkWidget *widget, GdkEvent *event, gpointer user_data) { liferea_shutdown (); return TRUE; } static gboolean on_window_state_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { if (event->type == GDK_WINDOW_STATE) { GdkWindowState changed = ((GdkEventWindowState*)event)->changed_mask, state = ((GdkEventWindowState*)event)->new_window_state; if (changed == GDK_WINDOW_STATE_MAXIMIZED && !(state & GDK_WINDOW_STATE_WITHDRAWN)) { if (state & GDK_WINDOW_STATE_MAXIMIZED) { conf_set_bool_value (LAST_WINDOW_MAXIMIZED, TRUE); } else { conf_set_bool_value (LAST_WINDOW_MAXIMIZED, FALSE); gtk_container_child_set (GTK_CONTAINER (liferea_shell_lookup ("normalViewPane")), liferea_shell_lookup ("normalViewItems"), "resize", TRUE, NULL); gtk_container_child_set (GTK_CONTAINER (liferea_shell_lookup ("wideViewPane")), liferea_shell_lookup ("wideViewItems"), "resize", TRUE, NULL); } } if (state & GDK_WINDOW_STATE_ICONIFIED) conf_set_int_value (LAST_WINDOW_STATE, MAINWINDOW_ICONIFIED); else if(state & GDK_WINDOW_STATE_WITHDRAWN) conf_set_int_value (LAST_WINDOW_STATE, MAINWINDOW_HIDDEN); else conf_set_int_value (LAST_WINDOW_STATE, MAINWINDOW_SHOWN); } if ((event->window_state.new_window_state & GDK_WINDOW_STATE_FULLSCREEN) == 0) shell->priv->fullscreen = TRUE; else shell->priv->fullscreen = FALSE; return FALSE; } static gboolean on_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer data) { gboolean modifier_matches = FALSE; guint default_modifiers; const gchar *type = NULL; GtkWidget *focusw = NULL; gint browse_key_setting; if (event->type == GDK_KEY_PRESS) { default_modifiers = gtk_accelerator_get_default_mod_mask (); /* handle [+] headline skimming hotkey */ switch (event->keyval) { case GDK_KEY_space: conf_get_int_value (BROWSE_KEY_SETTING, &browse_key_setting); switch (browse_key_setting) { default: case 0: modifier_matches = ((event->state & default_modifiers) == 0); /* Hack to make space handled in the module. This is necessary because the HTML widget code must be able to catch spaces for input fields. By ignoring the space here it will be passed to the HTML widget which in turn will pass it back if it is not eaten by any input field currently focussed. */ /* pass through space keys only if HTML widget has the focus */ focusw = gtk_window_get_focus (GTK_WINDOW (widget)); if (focusw) type = g_type_name (G_OBJECT_TYPE (focusw)); if (type && (g_str_equal (type, "LifereaWebView"))) return FALSE; break; case 1: modifier_matches = ((event->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK); break; case 2: modifier_matches = ((event->state & GDK_MOD1_MASK) == GDK_MOD1_MASK); break; } if (modifier_matches) { itemview_scroll (); return TRUE; } break; } /* some hotkeys that overrule the HTML view */ if ((event->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK) { switch (event->keyval) { case GDK_KEY_KP_Add: case GDK_KEY_equal: case GDK_KEY_plus: liferea_shell_do_zoom (TRUE); return TRUE; break; case GDK_KEY_KP_Subtract: case GDK_KEY_minus: liferea_shell_do_zoom (FALSE); return TRUE; break; } } /* prevent usage of navigation keys in entries */ focusw = gtk_window_get_focus (GTK_WINDOW (widget)); if (!focusw || GTK_IS_ENTRY (focusw)) return FALSE; /* prevent usage of navigation keys in HTML view */ type = g_type_name (G_OBJECT_TYPE (focusw)); if (type && (g_str_equal (type, "LifereaWebView"))) return FALSE; /* check for treeview navigation */ if (0 == (event->state & default_modifiers)) { switch (event->keyval) { case GDK_KEY_KP_Delete: case GDK_KEY_Delete: if (focusw == GTK_WIDGET (shell->priv->feedlistView)) return FALSE; /* to be handled in feed_list_view_key_press_cb() */ on_action_remove_item (NULL, NULL, NULL); return TRUE; break; case GDK_KEY_n: on_next_unread_item_activate (NULL, NULL, NULL); return TRUE; break; case GDK_KEY_f: itemview_move_cursor (1); return TRUE; break; case GDK_KEY_b: itemview_move_cursor (-1); return TRUE; break; case GDK_KEY_u: ui_common_treeview_move_cursor (shell->priv->feedlistView, -1); itemview_move_cursor_to_first (); return TRUE; break; case GDK_KEY_d: ui_common_treeview_move_cursor (shell->priv->feedlistView, 1); itemview_move_cursor_to_first (); return TRUE; break; } } } return FALSE; } static void on_prefbtn_clicked (GSimpleAction *action, GVariant *parameter, gpointer user_data) { preferences_dialog_open (); } static void on_searchbtn_clicked (GSimpleAction *action, GVariant *parameter, gpointer user_data) { simple_search_dialog_open (); } static void on_about_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { GtkWidget *dialog; dialog = liferea_dialog_new ("about"); gtk_about_dialog_set_version (GTK_ABOUT_DIALOG (dialog), VERSION); g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_hide), NULL); gtk_widget_show (dialog); } static void liferea_shell_add_html_tab (const gchar *file, const gchar *name) { gchar *filepattern = g_strdup_printf (PACKAGE_DATA_DIR "/" PACKAGE "/doc/html/%s", file); gchar *filename = common_get_localized_filename (filepattern); gchar *fileuri = g_strdup_printf ("file://%s", filename); browser_tabs_add_new (fileuri, name, TRUE); g_free (filepattern); g_free (filename); g_free (fileuri); } static void on_topics_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { liferea_shell_add_html_tab ("topics_%s.html", _("Help Topics")); } static void on_quick_reference_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { liferea_shell_add_html_tab ("reference_%s.html", _("Quick Reference")); } static void on_faq_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { liferea_shell_add_html_tab ("faq_%s.html", _("FAQ")); } static void on_menu_quit (GSimpleAction *action, GVariant *parameter, gpointer user_data) { liferea_shutdown (); } static void on_menu_fullscreen_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { shell->priv->fullscreen == TRUE ? gtk_window_fullscreen(shell->priv->window) : gtk_window_unfullscreen (shell->priv->window); g_simple_action_set_state (action, g_variant_new_boolean (shell->priv->fullscreen)); } static void on_menu_zoomin_selected (GSimpleAction *action, GVariant *parameter, gpointer user_data) { liferea_shell_do_zoom (TRUE); } static void on_menu_zoomout_selected (GSimpleAction *action, GVariant *parameter, gpointer user_data) { liferea_shell_do_zoom (FALSE); } static void on_menu_import (GSimpleAction *action, GVariant *parameter, gpointer user_data) { import_OPML_file (); } static void on_menu_export (GSimpleAction *action, GVariant *parameter, gpointer user_data) { export_OPML_file (); } /* methods to receive URLs which were dropped anywhere in the main window */ static void liferea_shell_URL_received (GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *data, guint info, guint time_received) { gchar *tmp1, *tmp2, *freeme; GtkWidget *mainwindow; GtkAllocation alloc; GtkTreeView *treeview; GtkTreeModel *model; GtkTreePath *path; GtkTreeIter iter; nodePtr node; gint tx, ty; g_return_if_fail (gtk_selection_data_get_data (data) != NULL); mainwindow = GTK_WIDGET (shell->priv->window); treeview = GTK_TREE_VIEW (shell->priv->feedlistView); model = gtk_tree_view_get_model (treeview); /* x and y are relative to the main window, make them relative to the treeview */ gtk_widget_translate_coordinates (mainwindow, GTK_WIDGET (treeview), x, y, &tx, &ty); /* Allow link drops only over feed list widget. This is to avoid the frequent accidental text drops in the HTML view. */ gtk_widget_get_allocation(GTK_WIDGET(treeview), &alloc); if((x > alloc.x+alloc.width) || (x < alloc.x) || (y > alloc.y+alloc.height) || (y < alloc.y)) { gtk_drag_finish (context, FALSE, FALSE, time_received); return; } if ((gtk_selection_data_get_length (data) >= 0) && (gtk_selection_data_get_format (data) == 8)) { /* extra handling to accept multiple drops */ freeme = tmp1 = g_strdup (gtk_selection_data_get_data (data)); while ((tmp2 = strsep (&tmp1, "\n\r"))) { if (strlen (tmp2)) { /* if the drop is over a node, select it so that feedlist_add_subscription() * adds it in the correct folder */ if (gtk_tree_view_get_dest_row_at_pos (treeview, tx, ty, &path, NULL)) { if (gtk_tree_model_get_iter (model, &iter, path)) { gtk_tree_model_get (model, &iter, FS_PTR, &node, -1); /* if node is NULL, feed_list_view_select() will unselect the tv */ feed_list_view_select (node); } gtk_tree_path_free (path); } feedlist_add_subscription (g_strdup (tmp2), NULL, NULL, FEED_REQ_PRIORITY_HIGH); } } g_free (freeme); gtk_drag_finish (context, TRUE, FALSE, time_received); } else { gtk_drag_finish (context, FALSE, FALSE, time_received); } } static void liferea_shell_setup_URL_receiver (void) { GtkWidget *mainwindow; GtkTargetEntry target_table[] = { { "STRING", GTK_TARGET_OTHER_WIDGET, 0 }, { "text/plain", GTK_TARGET_OTHER_WIDGET, 0 }, { "text/uri-list", GTK_TARGET_OTHER_WIDGET, 1 }, { "_NETSCAPE_URL", GTK_TARGET_OTHER_APP, 1 }, { "application/x-rootwin-drop", GTK_TARGET_OTHER_APP, 2 } }; mainwindow = GTK_WIDGET (shell->priv->window); /* doesn't work with GTK_DEST_DEFAULT_DROP... */ gtk_drag_dest_set (mainwindow, GTK_DEST_DEFAULT_ALL, target_table, sizeof (target_table)/sizeof (target_table[0]), GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); g_signal_connect (G_OBJECT (mainwindow), "drag_data_received", G_CALLBACK (liferea_shell_URL_received), NULL); } static const GActionEntry liferea_shell_gaction_entries[] = { {"update-all", on_menu_update_all, NULL, NULL, NULL}, {"mark-all-feeds-read", on_action_mark_all_read, NULL, NULL, NULL}, {"import-feed-list", on_menu_import, NULL, NULL, NULL}, {"export-feed-list", on_menu_export, NULL, NULL, NULL}, {"quit", on_menu_quit, NULL, NULL, NULL}, {"remove-selected-feed-items", on_remove_items_activate, NULL, NULL, NULL}, {"prev-read-item", on_prev_read_item_activate, NULL, NULL, NULL}, {"next-read-item", on_next_read_item_activate, NULL, NULL, NULL}, {"next-unread-item", on_next_unread_item_activate, NULL, NULL, NULL}, {"zoom-in", on_menu_zoomin_selected, NULL, NULL, NULL}, {"zoom-out", on_menu_zoomout_selected, NULL, NULL, NULL}, {"show-update-monitor", on_menu_show_update_monitor, NULL, NULL, NULL}, {"show-preferences", on_prefbtn_clicked, NULL, NULL, NULL}, {"search-feeds", on_searchbtn_clicked, NULL, NULL, NULL}, {"show-help-contents", on_topics_activate, NULL, NULL, NULL}, {"show-help-quick-reference", on_quick_reference_activate, NULL, NULL, NULL}, {"show-help-faq", on_faq_activate, NULL, NULL, NULL}, {"show-about", on_about_activate, NULL, NULL, NULL}, /* For mysterious reasons, the radio menu magic seem to only works with a * parameter/state of type string. */ {"set-view-mode", NULL, "s", "@s 'normal'", on_view_activate}, /* Parameter type must be NULL for toggle. */ {"fullscreen", NULL, NULL, "@b false", on_menu_fullscreen_activate}, {"reduced-feed-list", NULL, NULL, "@b false", on_feedlist_reduced_activate} }; static const GActionEntry liferea_shell_add_gaction_entries[] = { {"new-subscription", on_menu_feed_new, NULL, NULL, NULL}, {"new-folder", on_menu_folder_new, NULL, NULL, NULL}, {"new-vfolder", on_new_vfolder_activate, NULL, NULL, NULL}, {"new-source", on_new_plugin_activate, NULL, NULL, NULL}, {"new-newsbin", on_new_newsbin_activate, NULL, NULL, NULL} }; static const GActionEntry liferea_shell_feed_gaction_entries[] = { {"mark-selected-feed-as-read", on_action_mark_all_read, NULL, NULL, NULL}, {"update-selected", on_menu_update, NULL, NULL, NULL} }; static const GActionEntry liferea_shell_read_write_gaction_entries[] = { {"selected-node-properties", on_menu_properties, NULL, NULL, NULL}, {"delete-selected", on_menu_delete, NULL, NULL, NULL} }; static const GActionEntry liferea_shell_item_gaction_entries[] = { {"toggle-selected-item-read-status", on_toggle_unread_status, NULL, NULL, NULL}, {"toggle-selected-item-flag", on_toggle_item_flag, NULL, NULL, NULL}, {"remove-selected-item", on_action_remove_item, NULL, NULL, NULL}, {"launch-selected-item-in-tab", on_action_launch_item_in_tab, NULL, NULL, NULL}, {"launch-selected-item-in-browser", on_action_launch_item_in_browser, NULL, NULL, NULL}, {"launch-selected-item-in-external-browser", on_action_launch_item_in_external_browser, NULL, NULL, NULL} }; static void on_action_open_link_in_browser (GSimpleAction *action, GVariant *parameter, gpointer user_data) { itemview_launch_URL (g_variant_get_string (parameter, NULL), TRUE /* use internal browser */); } static void on_action_open_link_in_external_browser (GSimpleAction *action, GVariant *parameter, gpointer user_data) { browser_launch_URL_external (g_variant_get_string (parameter, NULL)); } static void on_action_open_link_in_tab (GSimpleAction *action, GVariant *parameter, gpointer user_data) { browser_tabs_add_new (g_variant_get_string (parameter, NULL), g_variant_get_string (parameter, NULL), FALSE); } static void on_action_social_bookmark_link (GSimpleAction *action, GVariant *parameter, gpointer user_data) { gchar *social_url, *link, *title; g_variant_get (parameter, "(ss)", &link, &title); social_url = social_get_bookmark_url (link, title); (void)browser_tabs_add_new (social_url, social_url, TRUE); g_free (social_url); } static void on_action_copy_link_to_clipboard (GSimpleAction *action, GVariant *parameter, gpointer user_data) { GtkClipboard *clipboard; gchar *link = (gchar *) common_uri_sanitize (BAD_CAST g_variant_get_string (parameter, NULL)); clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY); gtk_clipboard_set_text (clipboard, link, -1); clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); gtk_clipboard_set_text (clipboard, link, -1); g_free (link); } static const GActionEntry liferea_shell_link_gaction_entries[] = { {"open-link-in-tab", on_action_open_link_in_tab, "s", NULL, NULL}, {"open-link-in-browser", on_action_open_link_in_browser, "s", NULL, NULL}, {"open-link-in-external-browser", on_action_open_link_in_external_browser, "s", NULL, NULL}, /* The parameters are link, then title. */ {"social-bookmark-link", on_action_social_bookmark_link, "(ss)", NULL, NULL}, {"copy-link-to-clipboard", on_action_copy_link_to_clipboard, "s", NULL, NULL} }; static void liferea_shell_restore_state (const gchar *overrideWindowState) { gchar *toolbar_style; gint last_vpane_pos, last_hpane_pos, last_wpane_pos; gint resultState; gboolean last_window_maximized; debug0 (DEBUG_GUI, "Setting toolbar style"); toolbar_style = conf_get_toolbar_style (); liferea_shell_set_toolbar_style (toolbar_style); g_free (toolbar_style); debug0 (DEBUG_GUI, "Restoring window position"); liferea_shell_restore_position (); /* Apply horrible window state parameter logic: -> overrideWindowState provides optional command line flags passed by user or the session manager (prio 1) -> lastState provides last shutdown preference (prio 2) */ /* Initialize with last saved state */ conf_get_int_value (LAST_WINDOW_STATE, &resultState); debug2 (DEBUG_GUI, "Previous window state indicators: dconf=%d, CLI switch=%s", resultState, overrideWindowState); /* Override with command line options */ if (!g_strcmp0 (overrideWindowState, "hidden")) resultState = MAINWINDOW_HIDDEN; if (!g_strcmp0 (overrideWindowState, "shown")) resultState = MAINWINDOW_SHOWN; /* And set the window to the resulting state */ switch (resultState) { case MAINWINDOW_HIDDEN: debug0 (DEBUG_GUI, "Restoring window state 'hidden (to tray)'"); /* Realize needed so that the window structure can be accessed... otherwise we get a GTK warning when window is shown by clicking on notification icon or when theme colors are fetched. */ gtk_widget_realize (GTK_WIDGET (shell->priv->window)); gtk_widget_hide (GTK_WIDGET (shell->priv->window)); break; case MAINWINDOW_SHOWN: default: /* Safe default is always to show window */ debug0 (DEBUG_GUI, "Restoring window state 'shown'"); gtk_widget_show (GTK_WIDGET (shell->priv->window)); } /* This only works after the window has been restored, so we do it last. */ debug0 (DEBUG_GUI, "Loading pane proportions"); conf_get_int_value (LAST_VPANE_POS, &last_vpane_pos); if (last_vpane_pos) gtk_paned_set_position (GTK_PANED (liferea_shell_lookup ("leftpane")), last_vpane_pos); conf_get_int_value (LAST_HPANE_POS, &last_hpane_pos); if (last_hpane_pos) gtk_paned_set_position (GTK_PANED (liferea_shell_lookup ("normalViewPane")), last_hpane_pos); conf_get_int_value (LAST_WPANE_POS, &last_wpane_pos); if (last_wpane_pos) gtk_paned_set_position (GTK_PANED (liferea_shell_lookup ("wideViewPane")), last_wpane_pos); conf_get_bool_value (LAST_WINDOW_MAXIMIZED, &last_window_maximized); if (!last_window_maximized) { gtk_container_child_set (GTK_CONTAINER (liferea_shell_lookup ("normalViewPane")), liferea_shell_lookup ("normalViewItems"), "resize", TRUE, NULL); gtk_container_child_set (GTK_CONTAINER (liferea_shell_lookup ("wideViewPane")), liferea_shell_lookup ("wideViewItems"), "resize", TRUE, NULL); } } static const gchar * liferea_accels_update_all[] = {"u", NULL}; static const gchar * liferea_accels_quit[] = {"q", NULL}; static const gchar * liferea_accels_mark_feed_as_read[] = {"r", NULL}; static const gchar * liferea_accels_next_unread_item[] = {"n", NULL}; static const gchar * liferea_accels_prev_read_item[] = {"n", NULL}; static const gchar * liferea_accels_toggle_item_read_status[] = {"m", NULL}; static const gchar * liferea_accels_toggle_item_flag[] = {"t", NULL}; static const gchar * liferea_accels_fullscreen[] = {"F11", NULL}; static const gchar * liferea_accels_zoom_in[] = {"plus", NULL}; static const gchar * liferea_accels_zoom_out[] = {"minus", NULL}; static const gchar * liferea_accels_search_feeds[] = {"f", NULL}; static const gchar * liferea_accels_show_help_contents[] = {"F1", NULL}; void liferea_shell_create (GtkApplication *app, const gchar *overrideWindowState, gint pluginsDisabled) { GMenuModel *menubar_model; gboolean toggle; gchar *id; debug_enter ("liferea_shell_create"); g_object_new (LIFEREA_SHELL_TYPE, NULL); shell->priv->window = GTK_WINDOW (liferea_shell_lookup ("mainwindow")); gtk_window_set_application (GTK_WINDOW (shell->priv->window), app); /* Add GActions to application */ shell->priv->generalActions = G_ACTION_GROUP (g_simple_action_group_new ()); g_action_map_add_action_entries (G_ACTION_MAP(shell->priv->generalActions), liferea_shell_gaction_entries, G_N_ELEMENTS (liferea_shell_gaction_entries), NULL); ui_common_add_action_group_to_map (shell->priv->generalActions, G_ACTION_MAP (app)); shell->priv->addActions = G_ACTION_GROUP (g_simple_action_group_new ()); g_action_map_add_action_entries (G_ACTION_MAP(shell->priv->addActions), liferea_shell_add_gaction_entries, G_N_ELEMENTS (liferea_shell_add_gaction_entries), NULL); ui_common_add_action_group_to_map (shell->priv->addActions, G_ACTION_MAP (app)); shell->priv->feedActions = G_ACTION_GROUP (g_simple_action_group_new ()); g_action_map_add_action_entries (G_ACTION_MAP(shell->priv->feedActions), liferea_shell_feed_gaction_entries, G_N_ELEMENTS (liferea_shell_feed_gaction_entries), NULL); ui_common_add_action_group_to_map (shell->priv->feedActions, G_ACTION_MAP (app)); shell->priv->itemActions = G_ACTION_GROUP (g_simple_action_group_new ()); g_action_map_add_action_entries (G_ACTION_MAP(shell->priv->itemActions), liferea_shell_item_gaction_entries, G_N_ELEMENTS (liferea_shell_item_gaction_entries), NULL); ui_common_add_action_group_to_map (shell->priv->itemActions, G_ACTION_MAP (app)); shell->priv->readWriteActions = G_ACTION_GROUP (g_simple_action_group_new ()); g_action_map_add_action_entries (G_ACTION_MAP(shell->priv->readWriteActions), liferea_shell_read_write_gaction_entries, G_N_ELEMENTS (liferea_shell_read_write_gaction_entries), NULL); ui_common_add_action_group_to_map (shell->priv->readWriteActions, G_ACTION_MAP (app)); g_action_map_add_action_entries (G_ACTION_MAP(app), liferea_shell_link_gaction_entries, G_N_ELEMENTS (liferea_shell_link_gaction_entries), NULL); /* 1.) menu creation */ debug0 (DEBUG_GUI, "Setting up menus"); shell->priv->itemlist = itemlist_create (); /* Prepare some toggle button states */ conf_get_bool_value (REDUCED_FEEDLIST, &toggle); g_simple_action_set_state ( G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (app), "reduced-feed-list")), g_variant_new_boolean (toggle)); /* Menu creation */ gtk_builder_add_from_file (shell->priv->xml, PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "liferea_menu.ui", NULL); menubar_model = G_MENU_MODEL (gtk_builder_get_object (shell->priv->xml, "menubar")); gtk_application_set_menubar (app, menubar_model); /* Add accelerators */ gtk_application_set_accels_for_action (app, "app.update-all", liferea_accels_update_all); gtk_application_set_accels_for_action (app, "app.quit", liferea_accels_quit); gtk_application_set_accels_for_action (app, "app.mark-selected-feed-as-read", liferea_accels_mark_feed_as_read); gtk_application_set_accels_for_action (app, "app.next-unread-item", liferea_accels_next_unread_item); gtk_application_set_accels_for_action (app, "app.prev-read-item", liferea_accels_prev_read_item); gtk_application_set_accels_for_action (app, "app.toggle-selected-item-read-status", liferea_accels_toggle_item_read_status); gtk_application_set_accels_for_action (app, "app.toggle-selected-item-flag", liferea_accels_toggle_item_flag); gtk_application_set_accels_for_action (app, "app.fullscreen", liferea_accels_fullscreen); gtk_application_set_accels_for_action (app, "app.zoom-in", liferea_accels_zoom_in); gtk_application_set_accels_for_action (app, "app.zoom-out", liferea_accels_zoom_out); gtk_application_set_accels_for_action (app, "app.search-feeds", liferea_accels_search_feeds); gtk_application_set_accels_for_action (app, "app.show-help-contents", liferea_accels_show_help_contents); /* Toolbar */ gtk_builder_add_from_file (shell->priv->xml, PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "liferea_toolbar.ui", NULL); shell->priv->toolbar = GTK_WIDGET (gtk_builder_get_object (shell->priv->xml, "maintoolbar")); /* 2.) setup containers */ debug0 (DEBUG_GUI, "Setting up widget containers"); gtk_grid_attach_next_to (GTK_GRID (liferea_shell_lookup ("vbox1")), shell->priv->toolbar, NULL, GTK_POS_TOP, 1,1); gtk_widget_show_all(GTK_WIDGET(shell->priv->toolbar)); g_signal_connect ((gpointer) liferea_shell_lookup ("itemtabs"), "key_press_event", G_CALLBACK (on_key_press_event_null_cb), NULL); g_signal_connect ((gpointer) liferea_shell_lookup ("itemtabs"), "key_release_event", G_CALLBACK (on_key_press_event_null_cb), NULL); g_signal_connect ((gpointer) liferea_shell_lookup ("itemtabs"), "scroll_event", G_CALLBACK (on_notebook_scroll_event_null_cb), NULL); g_signal_connect (G_OBJECT (shell->priv->window), "delete_event", G_CALLBACK(on_close), NULL); g_signal_connect (G_OBJECT (shell->priv->window), "window_state_event", G_CALLBACK(on_window_state_event), shell->priv); g_signal_connect (G_OBJECT (shell->priv->window), "key_press_event", G_CALLBACK(on_key_press_event), shell->priv); /* 3.) setup status bar */ debug0 (DEBUG_GUI, "Setting up status bar"); shell->priv->statusbar = GTK_STATUSBAR (liferea_shell_lookup ("statusbar")); shell->priv->statusbarLocked = FALSE; shell->priv->statusbarLockTimer = 0; shell->priv->statusbar_feedsinfo_evbox = gtk_event_box_new (); shell->priv->statusbar_feedsinfo = gtk_label_new(""); gtk_container_add (GTK_CONTAINER (shell->priv->statusbar_feedsinfo_evbox), shell->priv->statusbar_feedsinfo); gtk_widget_show_all (shell->priv->statusbar_feedsinfo_evbox); gtk_box_pack_start (GTK_BOX (shell->priv->statusbar), shell->priv->statusbar_feedsinfo_evbox, FALSE, FALSE, 5); g_signal_connect (G_OBJECT (shell->priv->statusbar_feedsinfo_evbox), "button_release_event", G_CALLBACK (on_next_unread_item_activate), NULL); /* 4.) setup tabs */ debug0 (DEBUG_GUI, "Setting up tabbed browsing"); shell->priv->tabs = browser_tabs_create (GTK_NOTEBOOK (liferea_shell_lookup ("browsertabs"))); /* 5.) setup feed list */ debug0 (DEBUG_GUI, "Setting up feed list"); shell->priv->feedlistView = GTK_TREE_VIEW (liferea_shell_lookup ("feedlist")); feed_list_view_init (shell->priv->feedlistView); /* 6.) setup menu sensivity */ debug0 (DEBUG_GUI, "Initialising menus"); /* On start, no item or feed is selected, so Item menu should be insensitive: */ liferea_shell_update_item_menu (FALSE); /* necessary to prevent selection signals when filling the feed list and setting the 2/3 pane mode view */ gtk_widget_set_sensitive (GTK_WIDGET (shell->priv->feedlistView), FALSE); /* 7.) setup item view */ debug0 (DEBUG_GUI, "Setting up item view"); shell->priv->itemview = itemview_create (GTK_WIDGET (shell->priv->window)); /* 8.) load icons as required */ debug0 (DEBUG_GUI, "Loading icons"); icons_load (); /* 9.) update and restore all menu elements */ liferea_shell_update_toolbar (); liferea_shell_update_history_actions (); liferea_shell_setup_URL_receiver (); liferea_shell_restore_state (overrideWindowState); gtk_widget_set_sensitive (GTK_WIDGET (shell->priv->feedlistView), TRUE); /* 10.) After main window is realized get theme colors and set up feed list and tray icon */ render_init_theme_colors (GTK_WIDGET (shell->priv->window)); shell->priv->feedlist = feedlist_create (); g_signal_connect (shell->priv->feedlist, "new-items", G_CALLBACK (liferea_shell_update_unread_stats), shell->priv->feedlist); /* 11.) Restore latest selection */ // FIXME: Move to feed list code if (conf_get_str_value (LAST_NODE_SELECTED, &id)) { feed_list_view_select (node_from_id (id)); g_free (id); } /* 12. Setup shell plugins */ if(0 == pluginsDisabled) { shell->priv->extensions = peas_extension_set_new (PEAS_ENGINE (liferea_plugins_engine_get_default ()), LIFEREA_TYPE_SHELL_ACTIVATABLE, "shell", shell, NULL); liferea_plugins_engine_set_default_signals (shell->priv->extensions, shell); } /* 14. Rebuild search folders if needed */ if (searchFolderRebuild) vfolder_foreach (vfolder_rebuild); debug_exit ("liferea_shell_create"); } void liferea_shell_destroy (void) { liferea_shell_save_position (); g_object_unref (shell->priv->extensions); g_object_unref (shell->priv->tabs); g_object_unref (shell->priv->feedlist); g_object_unref (shell->priv->itemview); g_signal_handlers_block_by_func (shell, G_CALLBACK (on_window_state_event), shell->priv); gtk_widget_destroy (GTK_WIDGET (shell->priv->window)); g_object_unref (shell); } void liferea_shell_present (void) { GtkWidget *mainwindow = GTK_WIDGET (shell->priv->window); if ((gdk_window_get_state (gtk_widget_get_window (mainwindow)) & GDK_WINDOW_STATE_ICONIFIED) || !gtk_widget_get_visible (mainwindow)) liferea_shell_restore_position (); gtk_window_present (shell->priv->window); } void liferea_shell_toggle_visibility (void) { GtkWidget *mainwindow = GTK_WIDGET (shell->priv->window); if (gdk_window_get_state (gtk_widget_get_window (mainwindow)) & GDK_WINDOW_STATE_ICONIFIED) { /* The window is either iconified, or on another workspace */ /* Raise it in one click */ if (gtk_widget_get_visible (mainwindow)) { liferea_shell_save_position (); gtk_widget_hide (mainwindow); } liferea_shell_restore_position (); /* Note: Without deiconify() desktop moving doesn't work in GNOME+metacity. The window would be moved correctly by present() but not become visible. */ gtk_window_deiconify (GTK_WINDOW (mainwindow)); gtk_window_present (GTK_WINDOW (mainwindow)); } else if (!gtk_widget_get_visible (mainwindow)) { /* The window is neither iconified nor on another workspace, but is not visible */ liferea_shell_restore_position (); gtk_window_deiconify (GTK_WINDOW (mainwindow)); gtk_window_present (shell->priv->window); } else { liferea_shell_save_position (); gtk_widget_hide (mainwindow); } } GtkWidget * liferea_shell_get_window (void) { return GTK_WIDGET (shell->priv->window); } liferea-1.12.7/src/ui/liferea_shell.h000066400000000000000000000133661352135647700174120ustar00rootroot00000000000000/* * @file liferea_shell.h UI layout handling * * Copyright (C) 2004-2005 Nathan J. Conrad * Copyright (C) 2007-2018 Lars Windolf * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _LIFEREA_SHELL_H #define _LIFEREA_SHELL_H #include #include #include #include "node.h" /* possible main window states */ enum mainwindowState { MAINWINDOW_SHOWN, /*<< main window is visible */ MAINWINDOW_MAXIMIZED, /*<< main window is visible and maximized */ MAINWINDOW_ICONIFIED, /*<< main window is iconified */ MAINWINDOW_HIDDEN /*<< main window is not visible at all */ }; G_BEGIN_DECLS #define LIFEREA_SHELL_TYPE (liferea_shell_get_type ()) #define LIFEREA_SHELL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIFEREA_SHELL_TYPE, LifereaShell)) #define LIFEREA_SHELL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LIFEREA_SHELL_TYPE, LifereaShellClass)) #define IS_LIFEREA_SHELL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LIFEREA_SHELL_TYPE)) #define IS_LIFEREA_SHELL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LIFEREA_SHELL_TYPE)) typedef struct LifereaShell LifereaShell; typedef struct LifereaShellClass LifereaShellClass; typedef struct LifereaShellPrivate LifereaShellPrivate; extern LifereaShell *liferea_shell; struct LifereaShell { GObject parent; /*< private >*/ LifereaShellPrivate *priv; }; struct LifereaShellClass { GObjectClass parent_class; }; GType liferea_shell_get_type (void); /** * liferea_shell_lookup: * @name: the widget name * * Searches the glade XML UI tree for the given widget * name and returns the found widget. * * Returns: (transfer none) (nullable): the widget found or NULL */ GtkWidget * liferea_shell_lookup (const gchar *name); /** * liferea_shell_create: (skip) * @app: the GtkApplication to attach the main window to * @overrideWindowState: optional parameter for window state (or NULL) * @pluginsDisabled 1 if plugins are not to be loaded * * Set up the Liferea main window. */ void liferea_shell_create (GtkApplication *app, const gchar *overrideWindowState, gint pluginsDisabled); /** * liferea_shell_destroy: (skip) * * Destroys the global liferea_shell object. */ void liferea_shell_destroy (void); /** * liferea_shell_present: * * Presents the main window if it is hidden. */ void liferea_shell_present (void); /** * liferea_shell_toggle_visibility: * * Toggles main window visibility. */ void liferea_shell_toggle_visibility (void); /** * liferea_shell_set_toolbar_style: * @toolbar_style: text string containing the type of style to use * * Sets the toolbar to a particular style */ void liferea_shell_set_toolbar_style (const gchar *toolbar_style); /** * liferea_shell_update_toolbar: (skip) * * According to the preferences this function enables/disables the toolbar. * * TODO: use signal instead */ void liferea_shell_update_toolbar (void); /** * liferea_shell_update_history_actions: (skip) * * Update item history menu actions and toolbar buttons. * * TODO: use signal instead */ void liferea_shell_update_history_actions (void); /** * liferea_shell_update_feed_menu: (skip) * @add: TRUE if subscribing is to be enabled * @enabled: TRUE if feed actions are to be enabled * @readWrite: TRUE if feed list modifying actions are enabled * * Update the sensitivity of options affecting single feeds. * * TODO: use signal instead */ void liferea_shell_update_feed_menu (gboolean add, gboolean enabled, gboolean readWrite); /** * liferea_shell_update_item_menu: (skip) * @enabled: TRUE if item actions are to be enabled * * Update the sensitivity of options affecting single items. * * TODO: use signal instead */ void liferea_shell_update_item_menu (gboolean enabled); /** * liferea_shell_update_allitems_actions: (skip) * @isNotEmpty: TRUE if there is a non-empty item set active * @isRead: TRUE if there are no unread items in the item set * * Update the sensitivity of options affecting item sets. * * TODO: use signal instead */ void liferea_shell_update_allitems_actions (gboolean isNotEmpty, gboolean isRead); /** * liferea_shell_update_update_menu: (skip) * @enabled: TRUE if menu options are to be enabled * * Set the sensitivity of items in the update menu. * * TODO: use signal instead */ void liferea_shell_update_update_menu (gboolean enabled); /** * liferea_shell_set_status_bar: * * Sets the status bar text. Takes printf() like parameters. */ void liferea_shell_set_status_bar (const char *format, ...); /** * liferea_shell_set_important_status_bar: * * Similar to liferea_shell_set_status_message(), but ensures * that messages stay visible and avoids that those messages * are overwritten by unimportant ones. */ void liferea_shell_set_important_status_bar (const char *format, ...); /** * liferea_shell_get_window: * * Returns the Liferea main window. * * Returns: (transfer none): the main window widget found or NULL */ GtkWidget * liferea_shell_get_window (void); void liferea_shutdown (void); G_END_DECLS #endif liferea-1.12.7/src/ui/liferea_shell_activatable.c000066400000000000000000000070401352135647700217340ustar00rootroot00000000000000/* * @file liferea_shell_activatable.c Shell Plugin Type * * Copyright (C) 2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ui/liferea_shell_activatable.h" #include "ui/liferea_shell.h" /** * SECTION:liferea_shell_activatable * @short_description: Interface for activatable extensions on the shell * @see_also: #PeasExtensionSet * * #LifereaShellActivatable is an interface which should be implemented by * extensions that should be activated on the Liferea main window. **/ G_DEFINE_INTERFACE (LifereaShellActivatable, liferea_shell_activatable, G_TYPE_OBJECT) void liferea_shell_activatable_default_init (LifereaShellActivatableInterface *iface) { static gboolean initialized = FALSE; if (!initialized) { /** * LifereaShellActivatable:window: * * The window property contains the gtr window for this * #LifereaShellActivatable instance. */ g_object_interface_install_property (iface, g_param_spec_object ("shell", "Shell", "The Liferea shell", LIFEREA_SHELL_TYPE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); initialized = TRUE; } } /** * liferea_shell_activatable_activate: * @activatable: A #LifereaShellActivatable. * * Activates the extension on the shell property. */ void liferea_shell_activatable_activate (LifereaShellActivatable * activatable) { LifereaShellActivatableInterface *iface; g_return_if_fail (LIFEREA_IS_SHELL_ACTIVATABLE (activatable)); iface = LIFEREA_SHELL_ACTIVATABLE_GET_IFACE (activatable); if (iface->activate) iface->activate (activatable); } /** * liferea_shell_activatable_deactivate: * @activatable: A #LifereaShellActivatable. * * Deactivates the extension on the shell property. */ void liferea_shell_activatable_deactivate (LifereaShellActivatable * activatable) { LifereaShellActivatableInterface *iface; g_return_if_fail (LIFEREA_IS_SHELL_ACTIVATABLE (activatable)); iface = LIFEREA_SHELL_ACTIVATABLE_GET_IFACE (activatable); if (iface->deactivate) iface->deactivate (activatable); } /** * liferea_shell_activatable_update_state: * @activatable: A #LifereaShellActivatable. * * Triggers an update of the extension internal state to take into account * state changes in the window, due to some event or user action. */ void liferea_shell_activatable_update_state (LifereaShellActivatable * activatable) { LifereaShellActivatableInterface *iface; g_return_if_fail (LIFEREA_IS_SHELL_ACTIVATABLE (activatable)); iface = LIFEREA_SHELL_ACTIVATABLE_GET_IFACE (activatable); if (iface->update_state) iface->update_state (activatable); } liferea-1.12.7/src/ui/liferea_shell_activatable.h000066400000000000000000000044721352135647700217470ustar00rootroot00000000000000/* * @file liferea_shell_activatable.h Shell Plugin Type * * Copyright (C) 2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _LIFEREA_SHELL_ACTIVATABLE_H__ #define _LIFEREA_SHELL_ACTIVATABLE_H__ #include G_BEGIN_DECLS #define LIFEREA_TYPE_SHELL_ACTIVATABLE (liferea_shell_activatable_get_type ()) #define LIFEREA_SHELL_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIFEREA_TYPE_SHELL_ACTIVATABLE, LifereaShellActivatable)) #define LIFEREA_SHELL_ACTIVATABLE_IFACE(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), LIFEREA_TYPE_SHELL_ACTIVATABLE, LifereaShellActivatableInterface)) #define LIFEREA_IS_SHELL_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LIFEREA_TYPE_SHELL_ACTIVATABLE)) #define LIFEREA_SHELL_ACTIVATABLE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), LIFEREA_TYPE_SHELL_ACTIVATABLE, LifereaShellActivatableInterface)) typedef struct _LifereaShellActivatable LifereaShellActivatable; typedef struct _LifereaShellActivatableInterface LifereaShellActivatableInterface; struct _LifereaShellActivatableInterface { GTypeInterface g_iface; void (*activate) (LifereaShellActivatable * activatable); void (*deactivate) (LifereaShellActivatable * activatable); void (*update_state) (LifereaShellActivatable * activatable); }; GType liferea_shell_activatable_get_type (void) G_GNUC_CONST; void liferea_shell_activatable_activate (LifereaShellActivatable *activatable); void liferea_shell_activatable_deactivate (LifereaShellActivatable *activatable); void liferea_shell_activatable_update_state (LifereaShellActivatable *activatable); G_END_DECLS #endif /* __LIFEREA_SHELL_ACTIVATABLE_H__ */ liferea-1.12.7/src/ui/media_player.c000066400000000000000000000045241352135647700172360ustar00rootroot00000000000000/* * @file liferea_media_player.c media player helpers * * Copyright (C) 2012-2015 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "media_player.h" #include "media_player_activatable.h" #include "plugins_engine.h" #include // FIXME: This should be a member of some object! static PeasExtensionSet *extensions = NULL; static PeasExtensionSet * liferea_media_player_get_extension_set (void) { if (!extensions) { extensions = peas_extension_set_new (PEAS_ENGINE (liferea_plugins_engine_get_default ()), LIFEREA_MEDIA_PLAYER_ACTIVATABLE_TYPE, NULL); liferea_plugins_engine_set_default_signals (extensions, NULL); } return extensions; } typedef struct mediaPlayerLoadData { GtkWidget *parentWidget; GSList *enclosures; } mediaPlayerLoadData; static void liferea_media_player_load_foreach (PeasExtensionSet *set, PeasPluginInfo *info, PeasExtension *exten, gpointer user_data) { liferea_media_player_activatable_load (LIFEREA_MEDIA_PLAYER_ACTIVATABLE (exten), ((mediaPlayerLoadData *)user_data)->parentWidget, ((mediaPlayerLoadData *)user_data)->enclosures); } void liferea_media_player_load (GtkWidget *parentWidget, GSList *enclosures) { mediaPlayerLoadData user_data; user_data.parentWidget = parentWidget; user_data.enclosures = enclosures; peas_extension_set_foreach (liferea_media_player_get_extension_set (), liferea_media_player_load_foreach, &user_data); } liferea-1.12.7/src/ui/media_player.h000066400000000000000000000024101352135647700172330ustar00rootroot00000000000000/* * @file media_player.h media player helpers * * Copyright (C) 2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _LIFEREA_MEDIA_PLAYER_H #define _LIFEREA_MEDIA_PLAYER_H #include #include /** * liferea_media_player_load: * @parentWidget: the parent widget for the media player * @enclosures: (element-type gchar*): a list of enclosure strings * * Triggers the creation of a suitable media player and loads a list of * enclosures into it. */ void liferea_media_player_load (GtkWidget *parentWidget, GSList *enclosures); #endif liferea-1.12.7/src/ui/media_player_activatable.c000066400000000000000000000047571352135647700216050ustar00rootroot00000000000000/* * @file liferea_media_player_activatable.c Media Player Plugin * * Copyright (C) 2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "media_player_activatable.h" /** * SECTION:liferea_media_player_activatable * @short_description: Interface for activatable extensions providing a media player * @see_also: #PeasExtensionSet * * #LifereaMediaPlayerActivatable is an interface which should be implemented by * extensions that want to provide a media player **/ G_DEFINE_INTERFACE (LifereaMediaPlayerActivatable, liferea_media_player_activatable, G_TYPE_OBJECT) void liferea_media_player_activatable_default_init (LifereaMediaPlayerActivatableInterface *iface) { /* No properties yet */ } void liferea_media_player_activatable_activate (LifereaMediaPlayerActivatable * activatable) { LifereaMediaPlayerActivatableInterface *iface; g_return_if_fail (IS_LIFEREA_MEDIA_PLAYER_ACTIVATABLE (activatable)); iface = LIFEREA_MEDIA_PLAYER_ACTIVATABLE_GET_IFACE (activatable); if (iface->activate) iface->activate (activatable); } void liferea_media_player_activatable_deactivate (LifereaMediaPlayerActivatable * activatable) { LifereaMediaPlayerActivatableInterface *iface; g_return_if_fail (IS_LIFEREA_MEDIA_PLAYER_ACTIVATABLE (activatable)); iface = LIFEREA_MEDIA_PLAYER_ACTIVATABLE_GET_IFACE (activatable); if (iface->deactivate) iface->deactivate (activatable); } void liferea_media_player_activatable_load (LifereaMediaPlayerActivatable * activatable, GtkWidget *parentWidget, GSList *enclosures) { LifereaMediaPlayerActivatableInterface *iface; g_return_if_fail (IS_LIFEREA_MEDIA_PLAYER_ACTIVATABLE (activatable)); iface = LIFEREA_MEDIA_PLAYER_ACTIVATABLE_GET_IFACE (activatable); if (iface->load) iface->load (activatable, parentWidget, enclosures); } liferea-1.12.7/src/ui/media_player_activatable.h000066400000000000000000000055751352135647700216110ustar00rootroot00000000000000/* * @file liferea_media_player_activatable.h Media Player Plugin Type * * Copyright (C) 2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _LIFEREA_MEDIA_PLAYER_ACTIVATABLE_H__ #define _LIFEREA_MEDIA_PLAYER_ACTIVATABLE_H__ #include #include G_BEGIN_DECLS #define LIFEREA_MEDIA_PLAYER_ACTIVATABLE_TYPE (liferea_media_player_activatable_get_type ()) #define LIFEREA_MEDIA_PLAYER_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIFEREA_MEDIA_PLAYER_ACTIVATABLE_TYPE, LifereaMediaPlayerActivatable)) #define LIFEREA_MEDIA_PLAYER_ACTIVATABLE_IFACE(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), LIFEREA_MEDIA_PLAYER_ACTIVATABLE_TYPE, LifereaMediaPlayerActivatableInterface)) #define IS_LIFEREA_MEDIA_PLAYER_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LIFEREA_MEDIA_PLAYER_ACTIVATABLE_TYPE)) #define LIFEREA_MEDIA_PLAYER_ACTIVATABLE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), LIFEREA_MEDIA_PLAYER_ACTIVATABLE_TYPE, LifereaMediaPlayerActivatableInterface)) typedef struct _LifereaMediaPlayerActivatable LifereaMediaPlayerActivatable; typedef struct _LifereaMediaPlayerActivatableInterface LifereaMediaPlayerActivatableInterface; struct _LifereaMediaPlayerActivatableInterface { GTypeInterface g_iface; void (*activate) (LifereaMediaPlayerActivatable * activatable); void (*deactivate) (LifereaMediaPlayerActivatable * activatable); void (*load) (LifereaMediaPlayerActivatable * activatable, GtkWidget *parentWidget, GSList *enclosures); }; GType liferea_media_player_activatable_get_type (void) G_GNUC_CONST; void liferea_media_player_activatable_activate (LifereaMediaPlayerActivatable *activatable); void liferea_media_player_activatable_deactivate (LifereaMediaPlayerActivatable *activatable); /** * liferea_media_player_activatable_load: * @parentWidget: the parent widget for the media player * @enclosures: (element-type gchar*): a list of enclosures * * Triggers the creation of a suitable media player and loads a list of * enclosures into it. */ void liferea_media_player_activatable_load (LifereaMediaPlayerActivatable *activatable, GtkWidget *parentWidget, GSList *enclosures); G_END_DECLS #endif /* __LIFEREA_MEDIA_PLAYER_ACTIVATABLE_H__ */ liferea-1.12.7/src/ui/popup_menu.c000066400000000000000000000342621352135647700167740ustar00rootroot00000000000000/** * @file popup_menu.c popup menus * * Copyright (C) 2003-2013 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2009 Adrian Bunk * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ui/popup_menu.h" #include #include "common.h" #include "feed.h" #include "feedlist.h" #include "folder.h" #include "net_monitor.h" #include "newsbin.h" #include "node.h" #include "social.h" #include "vfolder.h" #include "ui/enclosure_list_view.h" #include "ui/feed_list_node.h" #include "ui/feed_list_view.h" #include "ui/item_list_view.h" #include "ui/itemview.h" #include "ui/liferea_shell.h" #include "ui/preferences_dialog.h" #include "fl_sources/node_source.h" #define UI_POPUP_ITEM_IS_TOGGLE 1 static void ui_popup_menu_at_pos (GtkWidget *menu, GtkMenuPositionFunc func, guint button, guint32 activate_time, gpointer user_data) { g_signal_connect_after (G_OBJECT(menu), "unmap-event", G_CALLBACK(gtk_widget_destroy), NULL); gtk_widget_show_all (menu); gtk_menu_popup (GTK_MENU(menu), NULL, NULL, func, user_data, button, activate_time); } static void ui_popup_menu (GtkWidget *menu, guint button, guint32 activate_time) { ui_popup_menu_at_pos(menu, NULL, button, activate_time, NULL); } static GtkWidget* ui_popup_add_menuitem (GtkWidget *menu, const gchar *label, gpointer callback, gpointer data, gint toggle) { GtkWidget *item; g_assert (label); if (toggle) { item = gtk_check_menu_item_new_with_mnemonic (label); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(item), toggle - UI_POPUP_ITEM_IS_TOGGLE); } else { item = gtk_menu_item_new_with_mnemonic (label); } if (callback) g_signal_connect_swapped (G_OBJECT(item), "activate", G_CALLBACK(callback), data); gtk_menu_shell_append (GTK_MENU_SHELL(menu), item); return item; } static const GActionEntry ui_popup_item_gaction_entries[] = { {"copy-item-to-newsbin", on_action_copy_to_newsbin, "(umt)", NULL, NULL}, {"toggle-item-read-status", on_toggle_unread_status, "t", NULL, NULL}, {"toggle-item-flag", on_toggle_item_flag, "t", NULL, NULL}, {"remove-item", on_action_remove_item, "t", NULL, NULL} }; void ui_popup_item_menu (itemPtr item, guint button, guint32 activate_time) { GtkWidget *menu; GMenu *menu_model, *section; GMenuItem *menu_item; GSimpleActionGroup *action_group; GSList *iter; gchar *text, *item_link; item_link = item_make_link (item); menu_model = g_menu_new (); menu_item = g_menu_item_new (NULL, NULL); section = g_menu_new (); g_menu_item_set_label (menu_item, _("Open In _Tab")); g_menu_item_set_action_and_target (menu_item, "app.open-link-in-tab", "s", item_link); g_menu_append_item (section, menu_item); g_menu_item_set_label (menu_item, _("_Open In Browser")); g_menu_item_set_action_and_target (menu_item, "app.open-link-in-browser", "s", item_link); g_menu_append_item (section, menu_item); g_menu_item_set_label (menu_item, _("Open In _External Browser")); g_menu_item_set_action_and_target (menu_item, "app.open-link-in-external-browser", "s", item_link); g_menu_append_item (section, menu_item); g_menu_append_section (menu_model, NULL, G_MENU_MODEL (section)); g_object_unref (section); iter = newsbin_get_list (); if (iter) { GMenu *submenu; guint32 i = 0; section = g_menu_new (); submenu = g_menu_new (); while (iter) { nodePtr node = (nodePtr)iter->data; g_menu_item_set_label (menu_item, node_get_title (node)); g_menu_item_set_action_and_target (menu_item, "item.copy-item-to-newsbin", "(umt)", i, TRUE, (guint64) item->id); g_menu_append_item (submenu, menu_item); iter = g_slist_next (iter); i++; } g_menu_append_submenu (section, _("Copy to News Bin"), G_MENU_MODEL (submenu)); g_object_unref (submenu); g_menu_append_section (menu_model, NULL, G_MENU_MODEL (section)); g_object_unref (section); } section = g_menu_new (); text = g_strdup_printf (_("_Bookmark at %s"), social_get_bookmark_site ()); g_menu_item_set_label (menu_item, text); g_menu_item_set_action_and_target (menu_item, "app.social-bookmark-link", "(ss)", item_link, item_get_title (item)); g_menu_append_item (section, menu_item); g_free (text); g_menu_item_set_label (menu_item, _("Copy Item _Location")); g_menu_item_set_action_and_target (menu_item, "app.copy-link-to-clipboard", "s", item_link); g_menu_append_item (section, menu_item); g_menu_append_section (menu_model, NULL, G_MENU_MODEL (section)); g_object_unref (section); section = g_menu_new (); g_menu_item_set_label (menu_item, _("Toggle _Read Status")); g_menu_item_set_action_and_target (menu_item, "item.toggle-item-read-status", "t", (guint64) item->id); g_menu_append_item (section, menu_item); g_menu_item_set_label (menu_item, _("Toggle Item _Flag")); g_menu_item_set_action_and_target (menu_item, "item.toggle-item-flag", "t", (guint64) item->id); g_menu_append_item (section, menu_item); g_menu_item_set_label (menu_item, _("R_emove Item")); g_menu_item_set_action_and_target (menu_item, "item.remove-item", "t", (guint64) item->id); g_menu_append_item (section, menu_item); g_menu_append_section (menu_model, NULL, G_MENU_MODEL (section)); g_object_unref (section); g_object_unref (menu_item); g_free (item_link); g_menu_freeze (menu_model); menu = gtk_menu_new_from_model (G_MENU_MODEL (menu_model)); action_group = g_simple_action_group_new (); g_action_map_add_action_entries (G_ACTION_MAP(action_group), ui_popup_item_gaction_entries, G_N_ELEMENTS (ui_popup_item_gaction_entries), NULL); gtk_widget_insert_action_group (menu, "item", G_ACTION_GROUP (action_group)); /* The menu has to be attached to an application window or one of its children for access to app actions.*/ gtk_menu_attach_to_widget (GTK_MENU (menu), liferea_shell_lookup ("mainwindow"), NULL); g_object_unref (menu_model); ui_popup_menu (menu, button, activate_time); } void ui_popup_enclosure_menu (enclosurePtr enclosure, guint button, guint32 activate_time) { GtkWidget *menu; menu = gtk_menu_new (); ui_popup_add_menuitem (menu, _("Open Enclosure..."), on_popup_open_enclosure, enclosure, 0); ui_popup_add_menuitem (menu, _("Save As..."), on_popup_save_enclosure, enclosure, 0); ui_popup_add_menuitem (menu, _("Copy Link Location"), on_popup_copy_enclosure, enclosure, 0); ui_popup_menu (menu, button, activate_time); } /* popup callback wrappers */ static void ui_popup_rebuild_vfolder (GSimpleAction *action, GVariant *parameter, gpointer user_data) { vfolder_rebuild ((nodePtr)user_data); } static void ui_popup_properties (GSimpleAction *action, GVariant *parameter, gpointer user_data) { nodePtr node = (nodePtr) user_data; NODE_TYPE (node)->request_properties (node); } static void ui_popup_delete (GSimpleAction *action, GVariant *parameter, gpointer user_data) { feed_list_node_remove ((nodePtr)user_data); } static void ui_popup_sort_feeds (GSimpleAction *action, GVariant *parameter, gpointer user_data) { feed_list_view_sort_folder ((nodePtr)user_data); } static void ui_popup_add_convert_to_local (GSimpleAction *action, GVariant *parameter, gpointer user_data) { node_source_convert_to_local ((nodePtr)user_data); } /* Those actions work on the node passed as user_data parameter. */ static const GActionEntry ui_popup_node_gaction_entries[] = { {"node-mark-all-read", on_action_mark_all_read, NULL, NULL, NULL}, {"node-rebuild-vfolder", ui_popup_rebuild_vfolder, NULL, NULL, NULL}, {"node-properties", ui_popup_properties, NULL, NULL, NULL}, {"node-delete", ui_popup_delete, NULL, NULL, NULL}, {"node-sort-feeds", ui_popup_sort_feeds, NULL, NULL, NULL}, {"node-convert-to-local", ui_popup_add_convert_to_local, NULL, NULL, NULL}, {"node-update", on_menu_update, NULL, NULL, NULL} }; /** * Shows popup menus for the feed list depending on the * node type. */ static void ui_popup_node_menu (nodePtr node, gboolean validSelection, guint button, guint32 activate_time) { GtkWidget *menu; GMenu *menu_model, *section; GSimpleActionGroup *action_group; gboolean writeableFeedlist, isRoot, addChildren; if (node->parent) { writeableFeedlist = NODE_SOURCE_TYPE (node->parent->source->root)->capabilities & NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST; isRoot = NODE_SOURCE_TYPE (node->source->root)->capabilities & NODE_SOURCE_CAPABILITY_IS_ROOT; addChildren = NODE_TYPE (node->source->root)->capabilities & NODE_CAPABILITY_ADD_CHILDS; } else { /* if we have no parent then we have the root node... */ writeableFeedlist = TRUE; isRoot = TRUE; addChildren = TRUE; } menu_model = g_menu_new (); section = g_menu_new (); if (validSelection) { if (NODE_TYPE (node)->capabilities & NODE_CAPABILITY_UPDATE) g_menu_append (section, _("_Update"), "node.node-update"); else if (NODE_TYPE (node)->capabilities & NODE_CAPABILITY_UPDATE_CHILDS) g_menu_append (section, _("_Update Folder"), "node.node-update"); } if (writeableFeedlist) { if (addChildren) { GMenu *submenu; submenu = g_menu_new (); if (node_can_add_child_feed (node)) g_menu_append (submenu, _("New _Subscription..."), "app.new-subscription"); if (node_can_add_child_folder (node)) g_menu_append (submenu, _("New _Folder..."), "app.new-folder"); if (isRoot) { g_menu_append (submenu, _("New S_earch Folder..."), "app.new-vfolder"); g_menu_append (submenu, _("New S_ource..."), "app.new-source"); g_menu_append (submenu, _("New _News Bin..."), "app.new-newsbin"); } g_menu_append_submenu (section, _("_New"), G_MENU_MODEL (submenu)); g_object_unref (submenu); } if (isRoot && node->children) { /* Ending section and starting a new one to get a separator : */ g_menu_append_section (menu_model, NULL, G_MENU_MODEL (section)); g_object_unref (section); section = g_menu_new (); g_menu_append (section, _("Sort Feeds"), "node.node-sort-feeds"); } } if (validSelection) { g_menu_append_section (menu_model, NULL, G_MENU_MODEL (section)); g_object_unref (section); section = g_menu_new (); g_menu_append (section, _("_Mark All As Read"), "node.node-mark-all-read"); } if (IS_VFOLDER (node)) { g_menu_append_section (menu_model, NULL, G_MENU_MODEL (section)); g_object_unref (section); section = g_menu_new (); g_menu_append (section, _("_Rebuild"), "node.node-rebuild-vfolder"); } if (validSelection) { if (writeableFeedlist) { g_menu_append_section (menu_model, NULL, G_MENU_MODEL (section)); g_object_unref (section); section = g_menu_new (); g_menu_append (section, _("_Delete"), "node.node-delete"); g_menu_append (section, _("_Properties"), "node.node-properties"); } if (IS_NODE_SOURCE (node) && NODE_SOURCE_TYPE (node)->capabilities & NODE_SOURCE_CAPABILITY_CONVERT_TO_LOCAL) { g_menu_append_section (menu_model, NULL, G_MENU_MODEL (section)); g_object_unref (section); section = g_menu_new (); g_menu_append (section, _("Convert To Local Subscriptions..."), "node.node-convert-to-local"); } } g_menu_append_section (menu_model, NULL, G_MENU_MODEL (section)); g_object_unref (section); g_menu_freeze (menu_model); action_group = g_simple_action_group_new (); g_action_map_add_action_entries (G_ACTION_MAP(action_group), ui_popup_node_gaction_entries, G_N_ELEMENTS (ui_popup_node_gaction_entries), node); menu = gtk_menu_new_from_model (G_MENU_MODEL (menu_model)); gtk_widget_insert_action_group (menu, "node", G_ACTION_GROUP (action_group)); gtk_menu_attach_to_widget (GTK_MENU (menu), liferea_shell_lookup ("mainwindow"), NULL); g_object_unref (menu_model); ui_popup_menu (menu, button, activate_time); } /* mouse button handler */ gboolean on_mainfeedlist_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { GdkEventButton *eb; GtkWidget *treeview; GtkTreeModel *model; GtkTreePath *path; GtkTreeIter iter; gboolean selected = TRUE; nodePtr node = NULL; treeview = liferea_shell_lookup ("feedlist"); if (event->type != GDK_BUTTON_PRESS) return FALSE; eb = (GdkEventButton*)event; /* determine node */ if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (treeview), event->x, event->y, &path, NULL, NULL, NULL)) { model = gtk_tree_view_get_model (GTK_TREE_VIEW (treeview)); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free (path); gtk_tree_model_get (model, &iter, FS_PTR, &node, -1); } else { selected = FALSE; node = feedlist_get_root (); } /* apply action */ switch (eb->button) { default: return FALSE; break; case 2: if (node) { feedlist_mark_all_read (node); itemview_update_node_info (node); itemview_update (); } break; case 3: if (node) { feed_list_view_select (node); } else { /* This happens when an "empty" node or nothing (feed list root) is clicked */ selected = FALSE; node = feedlist_get_root (); } gtk_widget_grab_focus (widget); ui_popup_node_menu (node, selected, eb->button, eb->time); break; } return TRUE; } /* popup key handler */ gboolean on_mainfeedlist_popup_menu (GtkWidget *widget, gpointer user_data) { GtkWidget *treeview; GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; gboolean selected = TRUE; nodePtr node = NULL; treeview = liferea_shell_lookup ("feedlist"); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gtk_tree_model_get (model, &iter, FS_PTR, &node, -1); } else { selected = FALSE; node = feedlist_get_root (); } ui_popup_node_menu (node, selected, 3, gtk_get_current_event_time ()); return TRUE; } liferea-1.12.7/src/ui/popup_menu.h000066400000000000000000000042041352135647700167720ustar00rootroot00000000000000/** * @file popup_menu.h popup menus * * Copyright (C) 2003-2011 Lars Windolf * Copyright (C) 2004-2005 Nathan J. Conrad * Copyright (C) 2009 Adrian Bunk * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _POPUP_MENU_H #define _POPUP_MENU_H #include #include "item.h" #include "enclosure.h" /** * Shows a popup menu with options for the item list and the * given selected item. * (Open Link, Copy Item, Copy Link...) * * @param item the selected item * @param button the mouse button which was pressed to initiate the event * @param activate_time the time at which the activation event occurred */ void ui_popup_item_menu (itemPtr item, guint button, guint32 activate_time); /** * Shows a popup menu for the enclosure list view. * (Save As, Open With...) * * @param enclosure the enclosure * @param button the mouse button which was pressed to initiate the event * @param activate_time the time at which the activation event occurred */ void ui_popup_enclosure_menu (enclosurePtr enclosure, guint button, guint32 activate_time); /* GUI callbacks */ gboolean on_mainfeedlist_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data); gboolean on_mainfeedlist_popup_menu (GtkWidget *widget, gpointer user_data); #endif liferea-1.12.7/src/ui/preferences_dialog.c000066400000000000000000000653671352135647700204370ustar00rootroot00000000000000/** * @file preferences_dialog.c Liferea preferences * * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2004-2018 Lars Windolf * Copyright (C) 2009 Hubert Figuiere * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ui/preferences_dialog.h" #ifdef HAVE_CONFIG_H # include #endif #include #include "common.h" #include "conf.h" #include "enclosure.h" #include "favicon.h" #include "feedlist.h" #include "folder.h" #include "itemlist.h" #include "social.h" #include "ui/enclosure_list_view.h" #include "ui/item_list_view.h" #include "ui/liferea_dialog.h" #include "ui/liferea_shell.h" #include "ui/ui_common.h" #include "ui/itemview.h" /** common private structure for all subscription dialogs */ struct PreferencesDialogPrivate { GtkWidget *dialog; /**< the GtkDialog widget */ }; #define PREFERENCES_DIALOG_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), PREFERENCES_DIALOG_TYPE, PreferencesDialogPrivate)) static GObjectClass *parent_class = NULL; G_DEFINE_TYPE (PreferencesDialog, preferences_dialog, G_TYPE_OBJECT); /* file type tree store column ids */ enum fts_columns { FTS_TYPE, /* file type name */ FTS_CMD, /* file cmd name */ FTS_PTR, /* pointer to config entry */ FTS_LEN }; extern GSList *bookmarkSites; /* from social.c */ static PreferencesDialog *prefdialog = NULL; /** download tool commands need to take an URI as %s */ static const gchar * enclosure_download_commands[] = { "steadyflow add %s", "dbus-send --session --print-reply --dest=org.gnome.gwget.ApplicationService /org/gnome/gwget/Gwget org.gnome.gwget.Application.OpenURI string:%s uint32:0", "kget %s", "uget-gtk %s", "transmission-gtk %s", "aria2 %s" }; /** order must match enclosure_download_commands[] */ static const gchar *enclosure_download_tool_options[] = { "Steadyflow", "gwget", "KGet", "uGet", "Transmission (Gtk)", "aria2", NULL }; /** GConf representation of toolbar styles */ static const gchar * gui_toolbar_style_values[] = { "", "both", "both-horiz", "icons", "text", NULL }; static const gchar * gui_toolbar_style_options[] = { N_("GNOME default"), N_("Text below icons"), N_("Text beside icons"), N_("Icons only"), N_("Text only"), NULL }; /* Note: these update interval literal should be kept in sync with the ones in ui_subscription.c! */ static const gchar * default_update_interval_unit_options[] = { N_("minutes"), N_("hours"), N_("days"), NULL }; static const gchar * browser_skim_key_options[] = { N_("Space"), N_(" Space"), N_(" Space"), NULL }; static const gchar * default_view_mode_options[] = { N_("Normal View"), N_("Wide View"), N_("Combined View"), NULL }; gchar * prefs_get_download_command (void) { gboolean use_custom_command; gchar *result = NULL; conf_get_bool_value (DOWNLOAD_USE_CUSTOM_COMMAND, &use_custom_command); if (use_custom_command) conf_get_str_value (DOWNLOAD_CUSTOM_COMMAND, &result); else { gint enclosure_download_tool; conf_get_int_value (DOWNLOAD_TOOL, &enclosure_download_tool); /* FIXME: array boundary check */ result = g_strdup (enclosure_download_commands[enclosure_download_tool]); } return result; } /* Preference dialog class */ static void preferences_dialog_finalize (GObject *object) { PreferencesDialog *pd = PREFERENCES_DIALOG (object); gtk_widget_destroy (pd->priv->dialog); prefdialog = NULL; G_OBJECT_CLASS (parent_class)->finalize (object); } static void preferences_dialog_class_init (PreferencesDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = preferences_dialog_finalize; g_type_class_add_private (object_class, sizeof (PreferencesDialogPrivate)); } /* Preference callbacks */ void on_folderdisplaybtn_toggled (GtkToggleButton *togglebutton, gpointer user_data) { gboolean enabled = gtk_toggle_button_get_active(togglebutton); conf_set_int_value(FOLDER_DISPLAY_MODE, (TRUE == enabled)?1:0); } /** * The "Hide read items" button has been clicked. Here we change the * preference and, if the selected node is a folder, we reload the * itemlist. The item selection is lost by this. */ void on_folderhidereadbtn_toggled (GtkToggleButton *togglebutton, gpointer user_data) { nodePtr displayedNode; gboolean enabled; displayedNode = itemlist_get_displayed_node (); enabled = gtk_toggle_button_get_active (togglebutton); conf_set_bool_value (FOLDER_DISPLAY_HIDE_READ, enabled); if (displayedNode && IS_FOLDER (displayedNode)) { itemlist_unload (FALSE); itemlist_load (displayedNode); /* Note: For simplicity when toggling this preference we accept that the current item selection is lost. */ } } void on_startupactionbtn_toggled (GtkButton *button, gpointer user_data) { gboolean enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); conf_set_int_value (STARTUP_FEED_ACTION, enabled?0:1); } void on_browsercmd_changed (GtkEditable *editable, gpointer user_data) { conf_set_str_value (BROWSER_COMMAND, gtk_editable_get_chars (editable,0,-1)); } static void on_browser_changed (GtkComboBox *optionmenu, gpointer user_data) { GtkTreeIter iter; gint num = -1; if (gtk_combo_box_get_active_iter (optionmenu, &iter)) { gtk_tree_model_get (gtk_combo_box_get_model (optionmenu), &iter, 1, &num, -1); gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog->priv->dialog, "browsercmd"), num != 0); gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog->priv->dialog, "manuallabel"), num != 0); gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog->priv->dialog, "urlhintlabel"), num != 0); if (!num) conf_set_str_value (BROWSER_ID, "default"); else conf_set_str_value (BROWSER_ID, "manual"); } } void on_openlinksinsidebtn_clicked (GtkToggleButton *button, gpointer user_data) { conf_set_bool_value (BROWSE_INSIDE_APPLICATION, gtk_toggle_button_get_active (button)); } void on_disablejavascript_toggled (GtkToggleButton *togglebutton, gpointer user_data) { conf_set_bool_value (DISABLE_JAVASCRIPT, gtk_toggle_button_get_active (togglebutton)); } void on_enableplugins_toggled (GtkToggleButton *togglebutton, gpointer user_data) { conf_set_bool_value (ENABLE_PLUGINS, gtk_toggle_button_get_active (togglebutton)); } static void on_socialsite_changed (GtkComboBox *optionmenu, gpointer user_data) { GtkTreeIter iter; if (gtk_combo_box_get_active_iter (optionmenu, &iter)) { gchar * site; gtk_tree_model_get (gtk_combo_box_get_model (optionmenu), &iter, 0, &site, -1); social_set_bookmark_site (site); } } static void on_gui_toolbar_style_changed (gpointer user_data) { gchar *style; gint value = gtk_combo_box_get_active (GTK_COMBO_BOX (user_data)); conf_set_str_value (TOOLBAR_STYLE, gui_toolbar_style_values[value]); style = conf_get_toolbar_style (); liferea_shell_set_toolbar_style (style); g_free (style); } void on_itemCountBtn_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { GtkAdjustment *itemCount; itemCount = gtk_spin_button_get_adjustment (spinbutton); conf_set_int_value (DEFAULT_MAX_ITEMS, gtk_adjustment_get_value (itemCount)); } void on_default_update_interval_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gint updateInterval, intervalUnit; GtkWidget *unitWidget, *valueWidget; unitWidget = liferea_dialog_lookup (prefdialog->priv->dialog, "globalRefreshIntervalUnitComboBox"); valueWidget = liferea_dialog_lookup (prefdialog->priv->dialog, "globalRefreshIntervalSpinButton"); intervalUnit = gtk_combo_box_get_active (GTK_COMBO_BOX (unitWidget)); updateInterval = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (valueWidget)); if (intervalUnit == 1) updateInterval *= 60; /* hours */ else if (intervalUnit == 2) updateInterval *= 1440; /* days */ conf_set_int_value (DEFAULT_UPDATE_INTERVAL, updateInterval); } static void on_default_update_interval_unit_changed (gpointer user_data) { on_default_update_interval_value_changed (NULL, prefdialog); } static void on_updateallfavicons_clicked (GtkButton *button, gpointer user_data) { feedlist_foreach (node_update_favicon); } static void on_proxyAutoDetect_clicked (GtkButton *button, gpointer user_data) { conf_set_int_value (PROXY_DETECT_MODE, 0); gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (prefdialog->priv->dialog, "proxybox")), FALSE); } static void on_noProxy_clicked (GtkButton *button, gpointer user_data) { conf_set_int_value (PROXY_DETECT_MODE, 1); gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (prefdialog->priv->dialog, "proxybox")), FALSE); } static void on_manualProxy_clicked (GtkButton *button, gpointer user_data) { conf_set_int_value (PROXY_DETECT_MODE, 2); gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (prefdialog->priv->dialog, "proxybox")), TRUE); } void on_useProxyAuth_toggled (GtkToggleButton *button, gpointer user_data) { gboolean enabled = gtk_toggle_button_get_active (button); gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (prefdialog->priv->dialog, "proxyauthtable")), enabled); conf_set_bool_value (PROXY_USEAUTH, enabled); } static void on_proxyhostentry_changed (GtkEditable *editable, gpointer user_data) { conf_set_str_value (PROXY_HOST, gtk_editable_get_chars (editable,0,-1)); } static void on_proxyportentry_changed (GtkEditable *editable, gpointer user_data) { conf_set_int_value (PROXY_PORT, atoi (gtk_editable_get_chars (editable,0,-1))); } static void on_proxyusernameentry_changed (GtkEditable *editable, gpointer user_data) { conf_set_str_value (PROXY_USER, gtk_editable_get_chars (editable,0,-1)); } static void on_proxypasswordentry_changed (GtkEditable *editable, gpointer user_data) { conf_set_str_value (PROXY_PASSWD, gtk_editable_get_chars (editable,0,-1)); } static void on_skim_key_changed (gpointer user_data) { conf_set_int_value (BROWSE_KEY_SETTING, gtk_combo_box_get_active (GTK_COMBO_BOX (user_data))); } static void on_default_view_mode_changed (gpointer user_data) { conf_set_int_value (DEFAULT_VIEW_MODE, gtk_combo_box_get_active (GTK_COMBO_BOX (user_data))); } void on_enclosure_download_predefined_toggled (GtkToggleButton *button, gpointer user_data) { gboolean is_active = gtk_toggle_button_get_active (button); gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog->priv->dialog, "customDownloadEntry"), !is_active); gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog->priv->dialog, "downloadToolCombo"), is_active); conf_set_bool_value (DOWNLOAD_USE_CUSTOM_COMMAND, !is_active); } static void on_enclosure_download_tool_changed (gpointer user_data) { conf_set_int_value (DOWNLOAD_TOOL, gtk_combo_box_get_active (GTK_COMBO_BOX (user_data))); } void on_enclosure_download_custom_command_changed (GtkEditable *entry, gpointer user_data) { conf_set_str_value (DOWNLOAD_CUSTOM_COMMAND, gtk_entry_get_text (GTK_ENTRY (entry))); } void on_enc_action_change_btn_clicked (GtkButton *button, gpointer user_data) { GtkTreeModel *model; GtkTreeSelection *selection; GtkTreeIter iter; gpointer type; selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (liferea_dialog_lookup (prefdialog->priv->dialog, "enc_action_view"))); if(gtk_tree_selection_get_selected (selection, &model, &iter)) { gtk_tree_model_get (model, &iter, FTS_PTR, &type, -1); ui_enclosure_change_type (type); gtk_tree_store_set (GTK_TREE_STORE (model), &iter, FTS_CMD, ((encTypePtr)type)->cmd, -1); } } void on_enc_action_remove_btn_clicked (GtkButton *button, gpointer user_data) { GtkTreeModel *model; GtkTreeSelection *selection; GtkTreeIter iter; gpointer type; selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (liferea_dialog_lookup (prefdialog->priv->dialog, "enc_action_view"))); if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gtk_tree_model_get (model, &iter, FTS_PTR, &type, -1); gtk_tree_store_remove (GTK_TREE_STORE (model), &iter); enclosure_mime_type_remove (type); } } void on_hidetoolbar_toggled (GtkToggleButton *button, gpointer user_data) { conf_set_bool_value (DISABLE_TOOLBAR, gtk_toggle_button_get_active (button)); liferea_shell_update_toolbar (); } void on_donottrackbtn_toggled (GtkToggleButton *button, gpointer user_data) { conf_set_bool_value (DO_NOT_TRACK, gtk_toggle_button_get_active (button)); } static void preferences_dialog_destroy_cb (GtkWidget *widget, PreferencesDialog *pd) { g_object_unref (pd); } void preferences_dialog_init (PreferencesDialog *pd) { GtkWidget *widget, *entry; GtkComboBox *combo; GtkListStore *store; GtkTreeIter treeiter; GtkAdjustment *itemCount; GtkTreeStore *treestore; GtkTreeViewColumn *column; GSList *list; gchar *proxyport; gchar *configuredBrowser, *name; gboolean enabled; gint tmp, i, iSetting, proxy_port; gboolean bSetting, manualBrowser; gchar *proxy_host, *proxy_user, *proxy_passwd; gchar *browser_command; gchar *custom_download_command; prefdialog = pd; pd->priv = PREFERENCES_DIALOG_GET_PRIVATE (pd); pd->priv->dialog = liferea_dialog_new ("prefs"); /* Set up browser selection popup */ store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT); gtk_list_store_append (store, &treeiter); gtk_list_store_set (store, &treeiter, 0, _("Default Browser"), 1, 0, -1); gtk_list_store_append (store, &treeiter); gtk_list_store_set (store, &treeiter, 0, _("Manual"), 1, 1, -1); combo = GTK_COMBO_BOX (liferea_dialog_lookup (pd->priv->dialog, "browserpopup")); gtk_combo_box_set_model (combo, GTK_TREE_MODEL (store)); ui_common_setup_combo_text (combo, 0); g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(on_browser_changed), pd); /* ================== panel 1 "feeds" ==================== */ /* check box for feed startup update */ conf_get_int_value (STARTUP_FEED_ACTION, &iSetting); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (pd->priv->dialog, "startupactionbtn")), (iSetting == 0)); /* cache size setting */ widget = liferea_dialog_lookup (pd->priv->dialog, "itemCountBtn"); itemCount = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget)); conf_get_int_value (DEFAULT_MAX_ITEMS, &iSetting); gtk_adjustment_set_value (itemCount, iSetting); /* set default update interval spin button and unit combo box */ ui_common_setup_combo_menu (liferea_dialog_lookup (pd->priv->dialog, "globalRefreshIntervalUnitComboBox"), default_update_interval_unit_options, G_CALLBACK (on_default_update_interval_unit_changed), -1); widget = liferea_dialog_lookup (pd->priv->dialog, "globalRefreshIntervalUnitComboBox"); conf_get_int_value (DEFAULT_UPDATE_INTERVAL, &tmp); if (tmp % 1440 == 0) { /* days */ gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 2); tmp /= 1440; } else if (tmp % 60 == 0) { /* hours */ gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 1); tmp /= 60; } else { /* minutes */ gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0); } widget = liferea_dialog_lookup (pd->priv->dialog,"globalRefreshIntervalSpinButton"); gtk_spin_button_set_range (GTK_SPIN_BUTTON (widget), 0, 1000000000); gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), tmp); g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (on_default_update_interval_value_changed), pd); /* ================== panel 2 "folders" ==================== */ g_signal_connect (G_OBJECT (liferea_dialog_lookup (pd->priv->dialog, "updateAllFavicons")), "clicked", G_CALLBACK(on_updateallfavicons_clicked), pd); conf_get_int_value (FOLDER_DISPLAY_MODE, &iSetting); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (liferea_dialog_lookup (pd->priv->dialog, "folderdisplaybtn")), iSetting?TRUE:FALSE); conf_get_bool_value (FOLDER_DISPLAY_HIDE_READ, &bSetting); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (liferea_dialog_lookup (pd->priv->dialog, "hidereadbtn")), bSetting?TRUE:FALSE); /* ================== panel 3 "headlines" ==================== */ conf_get_int_value (BROWSE_KEY_SETTING, &iSetting); ui_common_setup_combo_menu (liferea_dialog_lookup (pd->priv->dialog, "skimKeyCombo"), browser_skim_key_options, G_CALLBACK (on_skim_key_changed), iSetting); conf_get_int_value (DEFAULT_VIEW_MODE, &iSetting); ui_common_setup_combo_menu (liferea_dialog_lookup (pd->priv->dialog, "defaultViewModeCombo"), default_view_mode_options, G_CALLBACK (on_default_view_mode_changed), iSetting); /* Setup social bookmarking list */ i = 0; conf_get_str_value (SOCIAL_BM_SITE, &name); store = gtk_list_store_new (1, G_TYPE_STRING); list = bookmarkSites; while (list) { socialSitePtr siter = list->data; if (name && !strcmp (siter->name, name)) tmp = i; gtk_list_store_append (store, &treeiter); gtk_list_store_set (store, &treeiter, 0, siter->name, -1); list = g_slist_next (list); i++; } combo = GTK_COMBO_BOX (liferea_dialog_lookup (pd->priv->dialog, "socialpopup")); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK (on_socialsite_changed), pd); gtk_combo_box_set_model (combo, GTK_TREE_MODEL (store)); ui_common_setup_combo_text (combo, 0); gtk_combo_box_set_active (combo, tmp); /* ================== panel 4 "browser" ==================== */ /* set the inside browsing flag */ widget = liferea_dialog_lookup(pd->priv->dialog, "browseinwindow"); conf_get_bool_value(BROWSE_INSIDE_APPLICATION, &bSetting); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), bSetting); /* set the javascript-disabled flag */ widget = liferea_dialog_lookup(pd->priv->dialog, "disablejavascript"); conf_get_bool_value(DISABLE_JAVASCRIPT, &bSetting); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), bSetting); /* set the enable Plugins flag */ widget = liferea_dialog_lookup(pd->priv->dialog, "enableplugins"); conf_get_bool_value(ENABLE_PLUGINS, &bSetting); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), bSetting); conf_get_str_value (BROWSER_ID, &configuredBrowser); manualBrowser = !strcmp (configuredBrowser, "manual"); g_free (configuredBrowser); gtk_combo_box_set_active (GTK_COMBO_BOX (liferea_dialog_lookup (pd->priv->dialog, "browserpopup")), manualBrowser); conf_get_str_value (BROWSER_COMMAND, &browser_command); entry = liferea_dialog_lookup (pd->priv->dialog, "browsercmd"); gtk_entry_set_text (GTK_ENTRY(entry), browser_command); g_free (browser_command); gtk_widget_set_sensitive (GTK_WIDGET (entry), manualBrowser); gtk_widget_set_sensitive (liferea_dialog_lookup (pd->priv->dialog, "manuallabel"), manualBrowser); gtk_widget_set_sensitive (liferea_dialog_lookup (pd->priv->dialog, "urlhintlabel"), manualBrowser); /* ================== panel 4 "GUI" ================ */ /* tool bar settings */ widget = liferea_dialog_lookup (pd->priv->dialog, "hidetoolbarbtn"); conf_get_bool_value(DISABLE_TOOLBAR, &bSetting); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), bSetting); /* select currently active toolbar style option */ conf_get_str_value (TOOLBAR_STYLE, &name); for (i = 0; gui_toolbar_style_values[i] != NULL; ++i) { if (strcmp (name, gui_toolbar_style_values[i]) == 0) break; } g_free (name); /* On invalid key value: revert to default */ if (gui_toolbar_style_values[i] == NULL) i = 0; /* create toolbar style menu */ ui_common_setup_combo_menu (liferea_dialog_lookup (pd->priv->dialog, "toolbarCombo"), gui_toolbar_style_options, G_CALLBACK (on_gui_toolbar_style_changed), i); conf_bind (CONFIRM_MARK_ALL_READ, liferea_dialog_lookup (pd->priv->dialog, "confirmMarkAllReadButton"), "active", G_SETTINGS_BIND_DEFAULT); /* ================= panel 5 "proxy" ======================== */ #if WEBKIT_CHECK_VERSION (2, 15, 3) gtk_widget_destroy (GTK_WIDGET (liferea_dialog_lookup (pd->priv->dialog, "proxyDisabledInfobar"))); conf_get_str_value (PROXY_HOST, &proxy_host); gtk_entry_set_text (GTK_ENTRY (liferea_dialog_lookup (pd->priv->dialog, "proxyhostentry")), proxy_host); g_free (proxy_host); conf_get_int_value (PROXY_PORT, &proxy_port); proxyport = g_strdup_printf ("%d", proxy_port); gtk_entry_set_text (GTK_ENTRY (liferea_dialog_lookup (pd->priv->dialog, "proxyportentry")), proxyport); g_free (proxyport); conf_get_bool_value (PROXY_USEAUTH, &enabled); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (pd->priv->dialog, "useProxyAuth")), enabled); conf_get_str_value (PROXY_USER, &proxy_user); gtk_entry_set_text (GTK_ENTRY (liferea_dialog_lookup (pd->priv->dialog, "proxyusernameentry")), proxy_user); g_free (proxy_user); conf_get_str_value (PROXY_PASSWD, &proxy_passwd); gtk_entry_set_text (GTK_ENTRY (liferea_dialog_lookup (pd->priv->dialog, "proxypasswordentry")), proxy_passwd); g_free (proxy_passwd); gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup(pd->priv->dialog, "proxyauthtable")), enabled); conf_get_int_value (PROXY_DETECT_MODE, &i); switch (i) { default: case 0: /* proxy auto detect */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (pd->priv->dialog, "proxyAutoDetectRadio")), TRUE); enabled = FALSE; break; case 1: /* no proxy */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (pd->priv->dialog, "noProxyRadio")), TRUE); enabled = FALSE; break; case 2: /* manual proxy */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (pd->priv->dialog, "manualProxyRadio")), TRUE); enabled = TRUE; break; } gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (pd->priv->dialog, "proxybox")), enabled); g_signal_connect (G_OBJECT (liferea_dialog_lookup (pd->priv->dialog, "proxyAutoDetectRadio")), "clicked", G_CALLBACK (on_proxyAutoDetect_clicked), pd); g_signal_connect (G_OBJECT (liferea_dialog_lookup (pd->priv->dialog, "noProxyRadio")), "clicked", G_CALLBACK (on_noProxy_clicked), pd); g_signal_connect (G_OBJECT (liferea_dialog_lookup (pd->priv->dialog, "manualProxyRadio")), "clicked", G_CALLBACK (on_manualProxy_clicked), pd); g_signal_connect (G_OBJECT (liferea_dialog_lookup (pd->priv->dialog, "proxyhostentry")), "changed", G_CALLBACK (on_proxyhostentry_changed), pd); g_signal_connect (G_OBJECT (liferea_dialog_lookup (pd->priv->dialog, "proxyportentry")), "changed", G_CALLBACK (on_proxyportentry_changed), pd); g_signal_connect (G_OBJECT (liferea_dialog_lookup (pd->priv->dialog, "proxyusernameentry")), "changed", G_CALLBACK (on_proxyusernameentry_changed), pd); g_signal_connect (G_OBJECT (liferea_dialog_lookup (pd->priv->dialog, "proxypasswordentry")), "changed", G_CALLBACK (on_proxypasswordentry_changed), pd); #else gtk_widget_show (GTK_WIDGET (liferea_dialog_lookup (pd->priv->dialog, "proxyDisabledInfobar"))); gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (pd->priv->dialog, "proxybox")), FALSE); gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (pd->priv->dialog, "proxyAutoDetectRadio")), TRUE); gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (pd->priv->dialog, "noProxyRadio")), FALSE); gtk_widget_set_sensitive (GTK_WIDGET (liferea_dialog_lookup (pd->priv->dialog, "manualProxyRadio")), FALSE); #endif /* ================= panel 6 "Privacy" ======================== */ widget = liferea_dialog_lookup (pd->priv->dialog, "donottrackbtn"); conf_get_bool_value (DO_NOT_TRACK, &bSetting); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), bSetting); /* ================= panel 7 "Enclosures" ======================== */ /* menu for download tool */ conf_get_int_value (DOWNLOAD_TOOL, &iSetting); ui_common_setup_combo_menu (liferea_dialog_lookup (pd->priv->dialog, "downloadToolCombo"), enclosure_download_tool_options, G_CALLBACK (on_enclosure_download_tool_changed), iSetting); /* restore toggle */ conf_get_bool_value (DOWNLOAD_USE_CUSTOM_COMMAND, &bSetting); widget = liferea_dialog_lookup (pd->priv->dialog, "customDownload"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), bSetting); gtk_widget_set_sensitive (liferea_dialog_lookup (pd->priv->dialog, "customDownloadEntry"), bSetting); gtk_widget_set_sensitive (liferea_dialog_lookup (pd->priv->dialog, "downloadToolCombo"), !bSetting); /* restore custom command */ conf_get_str_value (DOWNLOAD_CUSTOM_COMMAND, &custom_download_command); widget = liferea_dialog_lookup (pd->priv->dialog, "customDownloadEntry"); gtk_entry_set_text (GTK_ENTRY (widget), custom_download_command); g_free (custom_download_command); /* set up list of configured enclosure types */ treestore = gtk_tree_store_new (FTS_LEN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); list = (GSList *)enclosure_mime_types_get (); while (list) { GtkTreeIter *newIter = g_new0 (GtkTreeIter, 1); gtk_tree_store_append (treestore, newIter, NULL); gtk_tree_store_set (treestore, newIter, FTS_TYPE, (NULL != ((encTypePtr)(list->data))->mime)?((encTypePtr)(list->data))->mime:((encTypePtr)(list->data))->extension, FTS_CMD, ((encTypePtr)(list->data))->cmd, FTS_PTR, list->data, -1); list = g_slist_next (list); } widget = liferea_dialog_lookup (pd->priv->dialog, "enc_action_view"); gtk_tree_view_set_model (GTK_TREE_VIEW (widget), GTK_TREE_MODEL (treestore)); column = gtk_tree_view_column_new_with_attributes (_("Type"), gtk_cell_renderer_text_new (), "text", FTS_TYPE, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (widget), column); gtk_tree_view_column_set_sort_column_id (column, FTS_TYPE); column = gtk_tree_view_column_new_with_attributes (_("Program"), gtk_cell_renderer_text_new (), "text", FTS_CMD, NULL); gtk_tree_view_column_set_sort_column_id (column, FTS_CMD); gtk_tree_view_append_column (GTK_TREE_VIEW(widget), column); gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW(widget)), GTK_SELECTION_SINGLE); g_signal_connect_object (pd->priv->dialog, "destroy", G_CALLBACK (preferences_dialog_destroy_cb), pd, 0); gtk_widget_show_all (pd->priv->dialog); gtk_window_present (GTK_WINDOW (pd->priv->dialog)); } void preferences_dialog_open (void) { if (prefdialog) { gtk_widget_show (prefdialog->priv->dialog); return; } g_object_new (PREFERENCES_DIALOG_TYPE, NULL); } liferea-1.12.7/src/ui/preferences_dialog.h000066400000000000000000000067441352135647700204360ustar00rootroot00000000000000/** * @file preferences_dialog.h Liferea preferences * * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2004-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _PREFERENCES_DIALOG_H #define _PREFERENCES_DIALOG_H #include G_BEGIN_DECLS #define PREFERENCES_DIALOG_TYPE (preferences_dialog_get_type ()) #define PREFERENCES_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PREFERENCES_DIALOG_TYPE, PreferencesDialog)) #define PREFERENCES_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PREFERENCES_DIALOG_TYPE, PreferencesDialogClass)) #define IS_PREFERENCES_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PREFERENCES_DIALOG_TYPE)) #define IS_PREFERENCES_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PREFERENCES_DIALOG_TYPE)) typedef struct PreferencesDialog PreferencesDialog; typedef struct PreferencesDialogClass PreferencesDialogClass; typedef struct PreferencesDialogPrivate PreferencesDialogPrivate; extern PreferencesDialog *preferences_dialog; struct PreferencesDialog { GObject parent; /*< private >*/ PreferencesDialogPrivate *priv; }; struct PreferencesDialogClass { GObjectClass parent_class; }; GType preferences_dialog_get_type (void); /** * prefs_get_download_command: * * Returns: (transfer full): The download command. */ gchar * prefs_get_download_command (void); /** * Show the preferences dialog. */ void preferences_dialog_open (void); /* functions used in glade/prefs.ui */ void on_folderdisplaybtn_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_folderhidereadbtn_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_popupwindowsoptionbtn_clicked (GtkButton *button, gpointer user_data); void on_startupactionbtn_toggled (GtkButton *button, gpointer user_data); void on_browsercmd_changed (GtkEditable *editable, gpointer user_data); void on_openlinksinsidebtn_clicked (GtkToggleButton *button, gpointer user_data); void on_disablejavascript_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_enableplugins_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_itemCountBtn_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_default_update_interval_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_useProxyAuth_toggled (GtkToggleButton *button, gpointer user_data); void on_enclosure_download_custom_command_changed (GtkEditable *entry, gpointer user_data); void on_enclosure_download_predefined_toggled (GtkToggleButton *button, gpointer user_data); void on_enc_action_change_btn_clicked (GtkButton *button, gpointer user_data); void on_enc_action_remove_btn_clicked (GtkButton *button, gpointer user_data); void on_hidetoolbar_toggled (GtkToggleButton *button, gpointer user_data); G_END_DECLS #endif liferea-1.12.7/src/ui/rule_editor.c000066400000000000000000000232611352135647700171170ustar00rootroot00000000000000/** * @file rule_editor.c rule editing dialog functionality * * Copyright (C) 2008-2012 Lars Windolf * Copyright (C) 2009 Hubert Figuiere * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ui/rule_editor.h" #include "ui/ui_common.h" #include "rule.h" /* A 'rule editor' is a dialog allowing editing arbitrary filtering 'rules'. The rules edited are loaded from an 'item set' which can belong to a 'search folder' or an 'item list' filter. The rule editing is independant of any search folder handling. */ #define RULE_EDITOR_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), RULE_EDITOR_TYPE, RuleEditorPrivate)) struct RuleEditorPrivate { GtkWidget *root; /**< root widget */ GSList *newRules; /**< new list of rules currently in editing */ }; struct changeRequest { GtkWidget *hbox; /**< used for remove button (optional) */ RuleEditor *editor; /**< the rule editor */ gint rule; /**< used for rule type change (optional) */ GtkWidget *paramHBox; /**< used for rule type change (optional) */ }; static GObjectClass *parent_class = NULL; G_DEFINE_TYPE (RuleEditor, rule_editor, G_TYPE_OBJECT); static void rule_editor_finalize (GObject *object) { RuleEditor *re = RULE_EDITOR (object); /* delete rules */ GSList *iter = re->priv->newRules; while (iter) { rule_free ((rulePtr)iter->data); iter = g_slist_next (iter); } g_slist_free (re->priv->newRules); re->priv->newRules = NULL; G_OBJECT_CLASS (parent_class)->finalize (object); } static void rule_editor_class_init (RuleEditorClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = rule_editor_finalize; g_type_class_add_private (object_class, sizeof(RuleEditorPrivate)); } static void rule_editor_init (RuleEditor *re) { re->priv = RULE_EDITOR_GET_PRIVATE (re); } static void rule_editor_destroy_param_widget (GtkWidget *widget, gpointer data) { gtk_widget_destroy(widget); } static void on_rulevalue_changed (GtkEditable *editable, gpointer user_data) { rulePtr rule = (rulePtr)user_data; if (rule->value) g_free (rule->value); rule->value = g_strdup (gtk_editable_get_chars (editable,0,-1)); } /* callback for rule additive option menu */ static void on_rule_changed_additive (GtkComboBox *optionmenu, gpointer user_data) { rulePtr rule = (rulePtr)user_data; gint active = gtk_combo_box_get_active (optionmenu); rule->additive = ((active==0) ? TRUE : FALSE); } /* sets up the widgets for a single rule */ static void rule_editor_setup_widgets (struct changeRequest *changeRequest, rulePtr rule) { GtkWidget *widget; ruleInfoPtr ruleInfo; ruleInfo = g_slist_nth_data (rule_get_available_rules (), changeRequest->rule); g_object_set_data (G_OBJECT (changeRequest->paramHBox), "rule", rule); /* remove of old widgets */ gtk_container_foreach (GTK_CONTAINER (changeRequest->paramHBox), rule_editor_destroy_param_widget, NULL); /* add popup menu for selection of positive or negative logic */ widget = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), ruleInfo->positive); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), ruleInfo->negative); gtk_combo_box_set_active ((GtkComboBox*)widget, (rule->additive)?0:1); g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (on_rule_changed_additive), rule); gtk_widget_show_all (widget); gtk_box_pack_start (GTK_BOX (changeRequest->paramHBox), widget, FALSE, FALSE, 0); /* add new value entry if needed */ if (ruleInfo->needsParameter) { widget = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (widget), rule->value); gtk_widget_show (widget); g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK(on_rulevalue_changed), rule); gtk_box_pack_start (GTK_BOX (changeRequest->paramHBox), widget, FALSE, FALSE, 0); } else { /* nothing needs to be added */ } } static void do_ruletype_changed (struct changeRequest *changeRequest) { ruleInfoPtr ruleInfo; rulePtr rule; rule = g_object_get_data (G_OBJECT (changeRequest->paramHBox), "rule"); if (rule) { changeRequest->editor->priv->newRules = g_slist_remove (changeRequest->editor->priv->newRules, rule); rule_free (rule); } ruleInfo = g_slist_nth_data (rule_get_available_rules (), changeRequest->rule); rule = rule_new (ruleInfo->ruleId, "", TRUE); changeRequest->editor->priv->newRules = g_slist_append (changeRequest->editor->priv->newRules, rule); rule_editor_setup_widgets (changeRequest, rule); } /* callback for rule type option menu */ static void on_ruletype_changed (GtkComboBox *optionmenu, gpointer user_data) { struct changeRequest *changeRequest = NULL; GtkTreeIter iter; if (gtk_combo_box_get_active_iter (optionmenu, &iter)) { gtk_tree_model_get (gtk_combo_box_get_model (optionmenu), &iter, 1, &changeRequest, -1); if (changeRequest) do_ruletype_changed (changeRequest); } } /* callback for each rules remove button */ static void on_ruleremove_clicked (GtkButton *button, gpointer user_data) { struct changeRequest *changeRequest = (struct changeRequest *)user_data; rulePtr rule; rule = g_object_get_data (G_OBJECT (changeRequest->paramHBox), "rule"); if (rule) { changeRequest->editor->priv->newRules = g_slist_remove (changeRequest->editor->priv->newRules, rule); rule_free(rule); } gtk_container_remove (GTK_CONTAINER (changeRequest->editor->priv->root), changeRequest->hbox); g_free (changeRequest); } void rule_editor_add_rule (RuleEditor *re, rulePtr rule) { GSList *ruleIter; GtkWidget *hbox, *hbox2, *widget; GtkListStore *store; struct changeRequest *changeRequest, *selected = NULL; gint i = 0, active = 0; hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); /* hbox to contain all rule widgets */ hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); /* another hbox where the rule specific widgets are added */ /* set up the rule type selection popup */ store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_POINTER); ruleIter = rule_get_available_rules (); while (ruleIter) { ruleInfoPtr ruleInfo = (ruleInfoPtr)ruleIter->data; GtkTreeIter iter; /* we add a change request to each popup option */ changeRequest = g_new0 (struct changeRequest, 1); changeRequest->paramHBox = hbox2; changeRequest->rule = i; changeRequest->editor = re; if (0 == i) selected = changeRequest; /* build the menu option */ gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, ruleInfo->title, 1, changeRequest, -1); if (rule) { if (ruleInfo == rule->ruleInfo) { selected = changeRequest; active = i; } } ruleIter = g_slist_next (ruleIter); i++; } widget = gtk_combo_box_new (); ui_common_setup_combo_text (GTK_COMBO_BOX (widget), 0); gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store)); gtk_combo_box_set_active (GTK_COMBO_BOX (widget), active); g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (on_ruletype_changed), NULL); gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), hbox2, FALSE, FALSE, 0); if (!rule) { /* fake a rule type change to initialize parameter widgets */ do_ruletype_changed (selected); } else { rulePtr newRule = rule_new (rule->ruleInfo->ruleId, rule->value, rule->additive); /* set up widgets with existing rule type and value */ rule_editor_setup_widgets (selected, newRule); /* add the rule to the list of new rules */ re->priv->newRules = g_slist_append (re->priv->newRules, newRule); } /* add remove button */ changeRequest = g_new0 (struct changeRequest, 1); changeRequest->hbox = hbox; changeRequest->paramHBox = hbox2; changeRequest->editor = re; widget = gtk_button_new_with_label ("Remove"); gtk_box_pack_end (GTK_BOX (hbox), widget, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (widget), "clicked", G_CALLBACK (on_ruleremove_clicked), changeRequest); /* and insert everything in the dialog */ gtk_widget_show_all (hbox); gtk_box_pack_start (GTK_BOX (re->priv->root), hbox, FALSE, TRUE, 0); } RuleEditor * rule_editor_new (itemSetPtr itemset) { RuleEditor *re; GSList *iter; re = RULE_EDITOR (g_object_new (RULE_EDITOR_TYPE, NULL)); /* Set up rule list vbox */ re->priv->root = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); /* load rules into dialog */ iter = itemset->rules; while (iter) { rule_editor_add_rule (re, (rulePtr)(iter->data)); iter = g_slist_next (iter); } gtk_widget_show_all (re->priv->root); return re; } void rule_editor_save (RuleEditor *re, itemSetPtr itemset) { GSList *iter; /* delete all old rules */ iter = itemset->rules; while (iter) { rule_free ((rulePtr)iter->data); iter = g_slist_next (iter); } g_slist_free (itemset->rules); itemset->rules = NULL; /* and add all rules from editor */ iter = re->priv->newRules; while (iter) { rulePtr rule = (rulePtr)iter->data; itemset_add_rule (itemset, rule->ruleInfo->ruleId, rule->value, rule->additive); iter = g_slist_next (iter); } } GtkWidget * rule_editor_get_widget (RuleEditor *re) { return re->priv->root; } liferea-1.12.7/src/ui/rule_editor.h000066400000000000000000000053501352135647700171230ustar00rootroot00000000000000/** * @file rule_editor.h rule editing dialog functionality * * Copyright (C) 2008-2011 Lars Windolf * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _RULE_EDITOR_H #define _RULE_EDITOR_H #include #include #include #include "rule.h" #include "itemset.h" G_BEGIN_DECLS #define RULE_EDITOR_TYPE (rule_editor_get_type ()) #define RULE_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RULE_EDITOR_TYPE, RuleEditor)) #define RULE_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RULE_EDITOR_TYPE, RuleEditorClass)) #define IS_RULE_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RULE_EDITOR_TYPE)) #define IS_RULE_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RULE_EDITOR_TYPE)) typedef struct RuleEditor RuleEditor; typedef struct RuleEditorClass RuleEditorClass; typedef struct RuleEditorPrivate RuleEditorPrivate; struct RuleEditor { GObject parent; /*< private >*/ RuleEditorPrivate *priv; }; struct RuleEditorClass { GObjectClass parent_class; }; GType rule_editor_get_type (void); /** * Create a new rule editor widget set. Loads all rules * of the itemset passed. * * @param itemset the itemset with the rules to load * * @returns a new RuleEditor instance */ RuleEditor * rule_editor_new (itemSetPtr itemset); /** * This method is used to add another rule to a rule editor. * The rule parameter might be NULL to create new rules or a * pointer to an existing rule to load it into the dialog. * * @param re the rule editor * @param rule the rule to add */ void rule_editor_add_rule (RuleEditor *re, rulePtr rule); /** * Saves the editing state of the rule editor to * the given search folder. * * @param re the rule editor * @param itemset the item set to set the rules to */ void rule_editor_save (RuleEditor *re, itemSetPtr itemset); /** * Get the root widget of the rule editor. * * @param re the rule editor * * @returns the root widget */ GtkWidget * rule_editor_get_widget (RuleEditor *re); G_END_DECLS #endif liferea-1.12.7/src/ui/search_dialog.c000066400000000000000000000221321352135647700173620ustar00rootroot00000000000000/** * @file search_dialog.c Search engine subscription dialog * * Copyright (C) 2007-2016 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ui/search_dialog.h" #include #include "common.h" #include "feed.h" #include "feedlist.h" #include "htmlview.h" #include "itemlist.h" #include "node.h" #include "node_view.h" #include "rule.h" #include "vfolder.h" #include "vfolder_loader.h" #include "ui/item_list_view.h" #include "ui/itemview.h" #include "ui/liferea_dialog.h" #include "ui/rule_editor.h" #include "ui/feed_list_view.h" /* shared functions */ static void search_clean_results (vfolderPtr vfolder) { if (!vfolder) return; /* Clean up old search result data and display... */ if (vfolder->node == itemlist_get_displayed_node ()) itemlist_unload (FALSE); /* FIXME: Don't simply free the result search folder as the search query might still be active. Instead g_object_unref() a search result object! For now we leak the node to avoid crashes. */ //node_free (vfolder->node); } static void search_load_results (vfolderPtr searchResult) { feed_list_view_select (NULL); itemlist_add_search_result (vfolder_loader_new (searchResult->node)); } /* complex search dialog */ static SearchDialog *search = NULL; #define SEARCH_DIALOG_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), SEARCH_DIALOG_TYPE, SearchDialogPrivate)) struct SearchDialogPrivate { GtkWidget *dialog; /**< the dialog widget */ RuleEditor *re; /**< search folder rule editor widget set */ vfolderPtr vfolder; /**< temporary search folder representing the search result */ }; static GObjectClass *parent_class = NULL; G_DEFINE_TYPE (SearchDialog, search_dialog, G_TYPE_OBJECT); static void search_dialog_finalize (GObject *object) { SearchDialog *sd = SEARCH_DIALOG (object); gtk_widget_destroy (sd->priv->dialog); search_clean_results (sd->priv->vfolder); search = NULL; G_OBJECT_CLASS (parent_class)->finalize (object); } static void search_dialog_class_init (SearchDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = search_dialog_finalize; g_type_class_add_private (object_class, sizeof(SearchDialogPrivate)); } static void search_dialog_init (SearchDialog *sd) { sd->priv = SEARCH_DIALOG_GET_PRIVATE (sd); sd->priv->vfolder = vfolder_new (node_new (vfolder_get_node_type ())); node_set_title (sd->priv->vfolder->node, _("Saved Search")); } static void on_search_dialog_response (GtkDialog *dialog, gint responseId, gpointer user_data) { SearchDialog *sd = (SearchDialog *)user_data; vfolderPtr vfolder = sd->priv->vfolder; if (1 == responseId) { /* Search */ search_clean_results (vfolder); sd->priv->vfolder = vfolder = vfolder_new (node_new (vfolder_get_node_type ())); rule_editor_save (sd->priv->re, vfolder->itemset); vfolder->itemset->anyMatch = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (sd->priv->dialog, "anyRuleRadioBtn2"))); search_load_results (vfolder); } if (2 == responseId) { /* + Search Folder */ rule_editor_save (sd->priv->re, vfolder->itemset); vfolder->itemset->anyMatch = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (sd->priv->dialog, "anyRuleRadioBtn2"))); nodePtr node = vfolder->node; sd->priv->vfolder = NULL; feedlist_node_added (node); } if (1 != responseId) g_object_unref (sd); } /* callback copied from search_folder_dialog.c */ static void on_addrulebtn_clicked (GtkButton *button, gpointer user_data) { SearchDialog *sd = SEARCH_DIALOG (user_data); rule_editor_add_rule (sd->priv->re, NULL); } SearchDialog * search_dialog_open (const gchar *query) { SearchDialog *sd; if (search) return search; sd = SEARCH_DIALOG (g_object_new (SEARCH_DIALOG_TYPE, NULL)); sd->priv->dialog = liferea_dialog_new ("search"); if (query) itemset_add_rule (sd->priv->vfolder->itemset, "exact", query, TRUE); sd->priv->re = rule_editor_new (sd->priv->vfolder->itemset); /* Note: the following code is somewhat duplicated from search_folder_dialog.c */ /* Setting default rule match type */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (sd->priv->dialog, "anyRuleRadioBtn2")), TRUE); /* Set up rule list vbox */ gtk_container_add (GTK_CONTAINER (liferea_dialog_lookup (sd->priv->dialog, "ruleview_search_dialog")), rule_editor_get_widget (sd->priv->re)); /* bind buttons */ g_signal_connect (liferea_dialog_lookup (sd->priv->dialog, "addrulebtn2"), "clicked", G_CALLBACK (on_addrulebtn_clicked), sd); g_signal_connect (G_OBJECT (sd->priv->dialog), "response", G_CALLBACK (on_search_dialog_response), sd); gtk_widget_show_all (sd->priv->dialog); search = sd; return sd; } /* simple search dialog */ static SimpleSearchDialog *simpleSearch = NULL; #define SIMPLE_SEARCH_DIALOG_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), SIMPLE_SEARCH_DIALOG_TYPE, SimpleSearchDialogPrivate)) struct SimpleSearchDialogPrivate { GtkWidget *dialog; /**< the dialog widget */ GtkWidget *query; /**< entry widget for the search query */ vfolderPtr vfolder; /**< temporary search folder representing the search result */ }; static GObjectClass *parent_class_simple = NULL; G_DEFINE_TYPE (SimpleSearchDialog, simple_search_dialog, G_TYPE_OBJECT); static void simple_search_dialog_finalize (GObject *object) { SimpleSearchDialog *ssd = SIMPLE_SEARCH_DIALOG (object); gtk_widget_destroy (ssd->priv->dialog); search_clean_results (ssd->priv->vfolder); simpleSearch = NULL; G_OBJECT_CLASS (parent_class_simple)->finalize (object); } static void simple_search_dialog_class_init (SimpleSearchDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class_simple = g_type_class_peek_parent (klass); object_class->finalize = simple_search_dialog_finalize; g_type_class_add_private (object_class, sizeof(SimpleSearchDialogPrivate)); } static void simple_search_dialog_init (SimpleSearchDialog *ssd) { ssd->priv = SIMPLE_SEARCH_DIALOG_GET_PRIVATE (ssd); } static void on_simple_search_dialog_response (GtkDialog *dialog, gint responseId, gpointer user_data) { SimpleSearchDialog *ssd = (SimpleSearchDialog *)user_data; const gchar *searchString; vfolderPtr vfolder = ssd->priv->vfolder; searchString = gtk_entry_get_text (GTK_ENTRY (ssd->priv->query)); if (1 == responseId) { /* Search */ search_clean_results (vfolder); /* Create new search... */ ssd->priv->vfolder = vfolder = vfolder_new (node_new (vfolder_get_node_type ())); node_set_title (vfolder->node, searchString); itemset_add_rule (vfolder->itemset, "exact", searchString, TRUE); search_load_results (vfolder); } if (2 == responseId) /* Advanced... */ search_dialog_open (searchString); /* Do not close the dialog when "just" searching. The user should click "Close" to close the dialog to be able to do subsequent searches... */ if (1 != responseId) g_object_unref (ssd); } static void on_searchentry_activated (GtkEntry *entry, gpointer user_data) { SimpleSearchDialog *ssd = SIMPLE_SEARCH_DIALOG (user_data); /* simulate search response */ on_simple_search_dialog_response (GTK_DIALOG (ssd->priv->dialog), 1, ssd); } static void on_searchentry_changed (GtkEditable *editable, gpointer user_data) { SimpleSearchDialog *ssd = SIMPLE_SEARCH_DIALOG (user_data); gchar *searchString; /* just to disable the start search button when search string is empty... */ searchString = gtk_editable_get_chars (editable, 0, -1); gtk_widget_set_sensitive (liferea_dialog_lookup (ssd->priv->dialog, "searchstartbtn"), searchString && (0 < strlen (searchString))); } SimpleSearchDialog * simple_search_dialog_open (void) { SimpleSearchDialog *ssd; if (simpleSearch) return simpleSearch; ssd = SIMPLE_SEARCH_DIALOG (g_object_new (SIMPLE_SEARCH_DIALOG_TYPE, NULL)); ssd->priv->dialog = liferea_dialog_new ("simple_search"); ssd->priv->query = liferea_dialog_lookup (ssd->priv->dialog, "searchentry"); gtk_window_set_focus (GTK_WINDOW (ssd->priv->dialog), ssd->priv->query); g_signal_connect (G_OBJECT (ssd->priv->dialog), "response", G_CALLBACK (on_simple_search_dialog_response), ssd); g_signal_connect (G_OBJECT (ssd->priv->query), "changed", G_CALLBACK (on_searchentry_changed), ssd); g_signal_connect (G_OBJECT (ssd->priv->query), "activate", G_CALLBACK (on_searchentry_activated), ssd); gtk_widget_show_all (ssd->priv->dialog); simpleSearch = ssd; return ssd; } liferea-1.12.7/src/ui/search_dialog.h000066400000000000000000000061101352135647700173650ustar00rootroot00000000000000/** * @file search_dialog.h Search engine subscription dialog * * Copyright (C) 2007-2008 Lars Windolf * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _SEARCH_DIALOG_H #define _SEARCH_DIALOG_H #include #include #include G_BEGIN_DECLS #define SEARCH_DIALOG_TYPE (search_dialog_get_type ()) #define SEARCH_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SEARCH_DIALOG_TYPE, SearchDialog)) #define SEARCH_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SEARCH_DIALOG_TYPE, SearchDialogClass)) #define IS_SEARCH_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SEARCH_DIALOG_TYPE)) #define IS_SEARCH_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SEARCH_DIALOG_TYPE)) typedef struct SearchDialog SearchDialog; typedef struct SearchDialogClass SearchDialogClass; typedef struct SearchDialogPrivate SearchDialogPrivate; struct SearchDialog { GObject parent; /*< private >*/ SearchDialogPrivate *priv; }; struct SearchDialogClass { GObjectClass parent_class; }; GType search_dialog_get_type (void); /** * Open the complex singleton search dialog. * * @param query optional query string to create a rule for * * @returns the new dialog */ SearchDialog * search_dialog_open (const gchar *query); #define SIMPLE_SEARCH_DIALOG_TYPE (simple_search_dialog_get_type ()) #define SIMPLE_SEARCH_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SIMPLE_SEARCH_DIALOG_TYPE, SimpleSearchDialog)) #define SIMPLE_SEARCH_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SIMPLE_SEARCH_DIALOG_TYPE, SimpleSearchDialogClass)) #define IS_SIMPLE_SEARCH_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SIMPLE_SEARCH_DIALOG_TYPE)) #define IS_SIMPLE_SEARCH_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SIMPLE_SEARCH_DIALOG_TYPE)) typedef struct SimpleSearchDialog SimpleSearchDialog; typedef struct SimpleSearchDialogClass SimpleSearchDialogClass; typedef struct SimpleSearchDialogPrivate SimpleSearchDialogPrivate; struct SimpleSearchDialog { GObject parent; /*< private >*/ SimpleSearchDialogPrivate *priv; }; struct SimpleSearchDialogClass { GObjectClass parent_class; }; GType simple_search_dialog_get_type (void); /** * Open the simple (one keyword entry) singleton search dialog. * * @returns the new dialog */ SimpleSearchDialog * simple_search_dialog_open (void); G_END_DECLS #endif liferea-1.12.7/src/ui/search_folder_dialog.c000066400000000000000000000110421352135647700207130ustar00rootroot00000000000000/** * @file search-folder-dialog.c Search folder properties dialog * * Copyright (C) 2007-2016 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ui/search_folder_dialog.h" #include "feedlist.h" #include "itemlist.h" #include "vfolder.h" #include "ui/itemview.h" #include "ui/liferea_dialog.h" #include "ui/rule_editor.h" #include "ui/feed_list_node.h" #define SEARCH_FOLDER_DIALOG_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), SEARCH_FOLDER_DIALOG_TYPE, SearchFolderDialogPrivate)) struct SearchFolderDialogPrivate { RuleEditor *re; /**< dynamically created rule editing widget subset */ GtkWidget *nameEntry; /**< search folder title entry */ nodePtr node; /**< search folder feed list node */ vfolderPtr vfolder; /**< the search folder */ }; static GObjectClass *parent_class = NULL; G_DEFINE_TYPE (SearchFolderDialog, search_folder_dialog, G_TYPE_OBJECT); static void search_folder_dialog_finalize (GObject *object) { SearchFolderDialog *sfd = SEARCH_FOLDER_DIALOG (object); g_object_unref (sfd->priv->re); G_OBJECT_CLASS (parent_class)->finalize (object); } static void search_folder_dialog_class_init (SearchFolderDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = search_folder_dialog_finalize; g_type_class_add_private (object_class, sizeof(SearchFolderDialogPrivate)); } static void search_folder_dialog_init (SearchFolderDialog *sfd) { sfd->priv = SEARCH_FOLDER_DIALOG_GET_PRIVATE (sfd); } static void on_propdialog_response (GtkDialog *dialog, gint response_id, gpointer user_data) { SearchFolderDialog *sfd = SEARCH_FOLDER_DIALOG (user_data); if (response_id == GTK_RESPONSE_OK) { /* save new search folder settings */ node_set_title (sfd->priv->node, gtk_entry_get_text (GTK_ENTRY (sfd->priv->nameEntry))); rule_editor_save (sfd->priv->re, sfd->priv->vfolder->itemset); sfd->priv->vfolder->itemset->anyMatch = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (GTK_WIDGET (dialog), "anyRuleRadioBtn"))); /* update search folder */ itemview_clear (); vfolder_reset (sfd->priv->vfolder); itemlist_unload (FALSE); /* If we are finished editing a new search folder add it to the feed list */ if (!sfd->priv->node->parent) feedlist_node_added (sfd->priv->node); feed_list_node_update (sfd->priv->node->id); } gtk_widget_destroy (GTK_WIDGET (dialog)); } static void on_addrulebtn_clicked (GtkButton *button, gpointer user_data) { SearchFolderDialog *sfd = SEARCH_FOLDER_DIALOG (user_data); rule_editor_add_rule (sfd->priv->re, NULL); } /** Use to create new search folders and to edit existing ones */ SearchFolderDialog * search_folder_dialog_new (nodePtr node) { GtkWidget *dialog; SearchFolderDialog *sfd; sfd = SEARCH_FOLDER_DIALOG (g_object_new (SEARCH_FOLDER_DIALOG_TYPE, NULL)); sfd->priv->node = node; sfd->priv->vfolder = (vfolderPtr)node->data; sfd->priv->re = rule_editor_new (sfd->priv->vfolder->itemset); /* Create the dialog */ dialog = liferea_dialog_new ("search_folder"); /* Setup search folder name */ sfd->priv->nameEntry = liferea_dialog_lookup (dialog, "searchNameEntry"); gtk_entry_set_text (GTK_ENTRY (sfd->priv->nameEntry), node_get_title (node)); /* Set up rule match type */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (dialog, sfd->priv->vfolder->itemset->anyMatch?"anyRuleRadioBtn":"allRuleRadioBtn")), TRUE); /* Set up rule list vbox */ gtk_container_add (GTK_CONTAINER (liferea_dialog_lookup (dialog, "ruleview_vfolder_dialog")), rule_editor_get_widget (sfd->priv->re)); /* bind buttons */ g_signal_connect (liferea_dialog_lookup (dialog, "addrulebtn"), "clicked", G_CALLBACK (on_addrulebtn_clicked), sfd); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (on_propdialog_response), sfd); return sfd; } liferea-1.12.7/src/ui/search_folder_dialog.h000066400000000000000000000043141352135647700207240ustar00rootroot00000000000000/** * @file search_folder_dialog.h Search folder properties dialog * * Copyright (C) 2007-2008 Lars Windolf * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _SEARCH_FOLDER_DIALOG_H #define _SEARCH_FOLDER_DIALOG_H #include #include #include #include "node.h" G_BEGIN_DECLS #define SEARCH_FOLDER_DIALOG_TYPE (search_folder_dialog_get_type ()) #define SEARCH_FOLDER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SEARCH_FOLDER_DIALOG_TYPE, SearchFolderDialog)) #define SEARCH_FOLDER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SEARCH_FOLDER_DIALOG_TYPE, SearchFolderDialogClass)) #define IS_SEARCH_FOLDER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SEARCH_FOLDER_DIALOG_TYPE)) #define IS_SEARCH_FOLDER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SEARCH_FOLDER_DIALOG_TYPE)) typedef struct SearchFolderDialog SearchFolderDialog; typedef struct SearchFolderDialogClass SearchFolderDialogClass; typedef struct SearchFolderDialogPrivate SearchFolderDialogPrivate; struct SearchFolderDialog { GObject parent; /*< private >*/ SearchFolderDialogPrivate *priv; }; struct SearchFolderDialogClass { GObjectClass parent_class; }; GType search_folder_dialog_get_type (void); /** * Open a new search folder properties dialog * for an existing search folder. * * @param node the search folder node * * @returns new dialog */ SearchFolderDialog * search_folder_dialog_new (nodePtr node); G_END_DECLS #endif liferea-1.12.7/src/ui/subscription_dialog.c000066400000000000000000000734201352135647700206470ustar00rootroot00000000000000/** * @file subscription_dialog.c property dialog for feed subscriptions * * Copyright (C) 2004-2017 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ui/subscription_dialog.h" #include #include #include "common.h" #include "conf.h" #include "db.h" #include "debug.h" #include "feed.h" #include "feedlist.h" #include "node.h" #include "update.h" #include "ui/liferea_dialog.h" #include "ui/ui_common.h" #include "ui/feed_list_node.h" /* Note: these update interval literals should be kept in sync with the ones in ui_prefs.c! */ static const gchar * default_update_interval_unit_options[] = { N_("minutes"), N_("hours"), N_("days"), NULL }; /** common private structure for all subscription dialogs */ struct SubscriptionDialogPrivate { subscriptionPtr subscription; /** used only for "properties" dialog */ gint selector; /* Desiginates which fileselection dialog box is open. Set to 'u' for source Set to 'f' for filter */ GtkWidget *dialog; GtkWidget *feedNameEntry; GtkWidget *refreshInterval; GtkWidget *refreshIntervalUnit; GtkWidget *sourceEntry; GtkWidget *selectFile; GtkWidget *fileRadio; GtkWidget *urlRadio; GtkWidget *cmdRadio; GtkWidget *authcheckbox; GtkWidget *credTable; GtkWidget *username; GtkWidget *password; }; /* properties dialog */ #define SUBSCRIPTION_PROP_DIALOG_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), SUBSCRIPTION_PROP_DIALOG_TYPE, SubscriptionDialogPrivate)) static GObjectClass *parent_class = NULL; G_DEFINE_TYPE (SubscriptionPropDialog, subscription_prop_dialog, G_TYPE_OBJECT); static void subscription_prop_dialog_finalize (GObject *object) { SubscriptionPropDialog *spd = SUBSCRIPTION_PROP_DIALOG (object); gtk_widget_destroy (spd->priv->dialog); G_OBJECT_CLASS (parent_class)->finalize (object); } static void subscription_prop_dialog_class_init (SubscriptionPropDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = subscription_prop_dialog_finalize; g_type_class_add_private (object_class, sizeof(SubscriptionDialogPrivate)); } static gchar * ui_subscription_create_url (gchar *url, gboolean auth, const gchar *username, const gchar *password) { gchar *source = NULL; gchar *str, *tmp2; /* First, strip leading and trailing whitespace */ str = g_strstrip(url); /* Add http:// if needed */ if (strstr(str, "://") == NULL) { tmp2 = g_strdup_printf("http://%s",str); g_free(str); str = tmp2; } /* Add trailing / if needed */ if (strstr(strstr(str, "://") + 3, "/") == NULL) { tmp2 = g_strdup_printf("%s/", str); g_free(str); str = tmp2; } /* Use the values in the textboxes if also specified in the URL! */ if(auth) { xmlURIPtr uri = xmlParseURI(str); if (uri != NULL) { xmlChar *sourceUrl; xmlFree(uri->user); uri->user = g_strdup_printf("%s:%s", username, password); sourceUrl = xmlSaveUri(uri); source = g_strdup((gchar *) sourceUrl); g_free(uri->user); uri->user = NULL; xmlFree(sourceUrl); xmlFreeURI(uri); } else source = g_strdup(str); } else { source = g_strdup(str); } g_free(str); return source; } static gchar * ui_subscription_dialog_decode_source (SubscriptionDialogPrivate *ui_data) { gchar *source = NULL; if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ui_data->fileRadio))) source = g_strdup (gtk_entry_get_text (GTK_ENTRY (ui_data->sourceEntry))); else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ui_data->urlRadio))) source = ui_subscription_create_url (g_strdup (gtk_entry_get_text (GTK_ENTRY (ui_data->sourceEntry))), ui_data->authcheckbox && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ui_data->authcheckbox)), ui_data->username?gtk_entry_get_text (GTK_ENTRY (ui_data->username)):NULL, ui_data->password?gtk_entry_get_text (GTK_ENTRY (ui_data->password)):NULL); else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ui_data->cmdRadio))) source = g_strdup_printf ("|%s", gtk_entry_get_text (GTK_ENTRY (ui_data->sourceEntry))); return source; } static void on_propdialog_response (GtkDialog *dialog, gint response_id, gpointer user_data) { SubscriptionPropDialog *spd = (SubscriptionPropDialog *)user_data; if(response_id == GTK_RESPONSE_OK) { gchar *newSource; const gchar *newFilter; gboolean needsUpdate = FALSE; subscriptionPtr subscription = spd->priv->subscription; nodePtr node = spd->priv->subscription->node; feedPtr feed = (feedPtr)node->data; if (SUBSCRIPTION_TYPE(subscription) == feed_get_subscription_type ()) { /* "General" */ node_set_title(node, gtk_entry_get_text(GTK_ENTRY(spd->priv->feedNameEntry))); /* Source */ newSource = ui_subscription_dialog_decode_source(spd->priv); /* Filter handling */ newFilter = gtk_entry_get_text(GTK_ENTRY(liferea_dialog_lookup(spd->priv->dialog, "filterEntry"))); if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(liferea_dialog_lookup(spd->priv->dialog, "filterCheckbox"))) && strcmp(newFilter,"")) { /* Maybe this should be a test to see if the file exists? */ if(subscription_get_filter(subscription) == NULL || strcmp(newFilter, subscription_get_filter(subscription))) { subscription_set_filter(subscription, newFilter); needsUpdate = TRUE; } } else { if(subscription_get_filter(subscription)) { subscription_set_filter(subscription, NULL); needsUpdate = TRUE; } } /* if URL has changed... */ if(strcmp(newSource, subscription_get_source(subscription))) { subscription_set_source(subscription, newSource); needsUpdate = TRUE; } g_free(newSource); /* Update interval handling */ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (GTK_WIDGET (dialog), "updateIntervalNever")))) subscription_set_update_interval (subscription, -2); else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (GTK_WIDGET (dialog), "updateIntervalDefault")))) subscription_set_update_interval (subscription, -1); else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (GTK_WIDGET (dialog), "updateIntervalSpecific")))) { gint intervalUnit = gtk_combo_box_get_active (GTK_COMBO_BOX (spd->priv->refreshIntervalUnit)); gint updateInterval = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spd->priv->refreshInterval)); if (intervalUnit == 1) updateInterval *= 60; /* hours */ if (intervalUnit == 2) updateInterval *= 1440; /* days */ subscription_set_update_interval (subscription, updateInterval); db_subscription_update (subscription); } } /* "Archive" handling */ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(liferea_dialog_lookup(GTK_WIDGET(dialog), "feedCacheDefault")))) feed->cacheLimit = CACHE_DEFAULT; else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(liferea_dialog_lookup(GTK_WIDGET(dialog), "feedCacheDisable")))) feed->cacheLimit = CACHE_DISABLE; else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(liferea_dialog_lookup(GTK_WIDGET(dialog), "feedCacheUnlimited")))) feed->cacheLimit = CACHE_UNLIMITED; else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(liferea_dialog_lookup(GTK_WIDGET(dialog), "feedCacheLimited")))) feed->cacheLimit = gtk_spin_button_get_value(GTK_SPIN_BUTTON(liferea_dialog_lookup(GTK_WIDGET(dialog), "cacheItemLimit"))); if (SUBSCRIPTION_TYPE(subscription) == feed_get_subscription_type ()) { /* "Download" Options */ subscription->updateOptions->dontUseProxy = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(liferea_dialog_lookup(GTK_WIDGET(dialog), "dontUseProxyCheck"))); } /* "Advanced" options */ feed->encAutoDownload = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (GTK_WIDGET (dialog), "enclosureDownloadCheck"))); node->loadItemLink = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (GTK_WIDGET (dialog), "loadItemLinkCheck"))); feed->ignoreComments = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (GTK_WIDGET (dialog), "ignoreCommentFeeds"))); feed->markAsRead = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (GTK_WIDGET (dialog), "markAsReadCheck"))); feed->html5Extract = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (GTK_WIDGET (dialog), "html5ExtractCheck"))); feed_list_node_update (node->id); feedlist_schedule_save (); db_subscription_update (subscription); if (needsUpdate) subscription_update (subscription, FEED_REQ_PRIORITY_HIGH); } g_object_unref(spd); } static void on_feed_prop_filtercheck (GtkToggleButton *button, gpointer user_data) { SubscriptionDialogPrivate *ui_data = (SubscriptionDialogPrivate *)user_data; gboolean filter = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (ui_data->dialog, "filterCheckbox"))); gtk_widget_set_sensitive (liferea_dialog_lookup(ui_data->dialog, "filterbox"), filter); } static void ui_subscription_prop_enable_httpauth (SubscriptionDialogPrivate *ui_data, gboolean enable) { gboolean on; if(ui_data->authcheckbox) { on = enable && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ui_data->authcheckbox)); gtk_widget_set_sensitive(ui_data->authcheckbox,enable); gtk_widget_set_sensitive(ui_data->credTable,on); } } static void on_feed_prop_authcheck (GtkToggleButton *button, gpointer user_data) { SubscriptionDialogPrivate *ui_data = (SubscriptionDialogPrivate *)user_data; gboolean url = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ui_data->urlRadio)); ui_subscription_prop_enable_httpauth(ui_data, url); } static void on_feed_prop_url_radio (GtkToggleButton *button, gpointer user_data) { SubscriptionDialogPrivate *ui_data = (SubscriptionDialogPrivate *)user_data; gboolean url = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ui_data->urlRadio)); gboolean file = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ui_data->fileRadio)); gboolean cmd = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ui_data->cmdRadio)); ui_subscription_prop_enable_httpauth(ui_data, url); gtk_widget_set_sensitive(ui_data->selectFile, file || cmd); } static void on_selectfileok_clicked (const gchar *filename, gpointer user_data) { SubscriptionDialogPrivate *ui_data = (SubscriptionDialogPrivate *)user_data; gchar *utfname; if (!filename) return; utfname = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL); if (utfname) { if (ui_data->selector == 'u') gtk_entry_set_text (GTK_ENTRY (ui_data->sourceEntry), utfname); else gtk_entry_set_text (GTK_ENTRY (liferea_dialog_lookup (ui_data->dialog, "filterEntry")), utfname); } g_free (utfname); } static void on_selectfile_pressed (GtkButton *button, gpointer user_data) { SubscriptionDialogPrivate *ui_data = (SubscriptionDialogPrivate *)user_data; const gchar *utfname; gchar *name; if (GTK_WIDGET (button) == ui_data->selectFile) { ui_data->selector = 'u'; utfname = gtk_entry_get_text (GTK_ENTRY (ui_data->sourceEntry)); } else { ui_data->selector = 'f'; utfname = gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (ui_data->dialog, "filterEntry"))); } name = g_filename_from_utf8 (utfname, -1, NULL, NULL, NULL); ui_choose_file (_("Choose File"), _("_Open"), FALSE, on_selectfileok_clicked, name, NULL, NULL, NULL, ui_data); g_free (name); } static void on_feed_prop_cache_radio (GtkToggleButton *button, gpointer user_data) { SubscriptionDialogPrivate *ui_data = (SubscriptionDialogPrivate *)user_data; gboolean limited = gtk_toggle_button_get_active(button); gtk_widget_set_sensitive(liferea_dialog_lookup(GTK_WIDGET(ui_data->dialog), "cacheItemLimit"), limited); } static void on_feed_prop_update_radio (GtkToggleButton *button, gpointer user_data) { SubscriptionDialogPrivate *priv = (SubscriptionDialogPrivate *) user_data; gboolean limited = gtk_toggle_button_get_active (button); gtk_widget_set_sensitive (priv->refreshInterval, limited); gtk_widget_set_sensitive (priv->refreshIntervalUnit, limited); } static void subscription_prop_dialog_load (SubscriptionPropDialog *spd, subscriptionPtr subscription) { gint interval; gint default_update_interval; gint defaultInterval, spinSetInterval; gchar *defaultIntervalStr; nodePtr node = subscription->node; feedPtr feed = (feedPtr)node->data; spd->priv->subscription = subscription; /* General */ gtk_entry_set_text(GTK_ENTRY(spd->priv->feedNameEntry), node_get_title(node)); spd->priv->refreshInterval = liferea_dialog_lookup(spd->priv->dialog,"refreshIntervalSpinButton"); interval = subscription_get_update_interval(subscription); defaultInterval = subscription_get_default_update_interval(subscription); conf_get_int_value (DEFAULT_UPDATE_INTERVAL, &default_update_interval); spinSetInterval = defaultInterval > 0 ? defaultInterval : default_update_interval; if (-2 >= interval) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup(spd->priv->dialog, "updateIntervalNever")), TRUE); } else if (-1 == interval) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup(spd->priv->dialog, "updateIntervalDefault")), TRUE); } else { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup(spd->priv->dialog, "updateIntervalSpecific")), TRUE); spinSetInterval = interval; } /* Set refresh interval spin button and combo box */ if (spinSetInterval % 1440 == 0) { /* days */ gtk_combo_box_set_active (GTK_COMBO_BOX (spd->priv->refreshIntervalUnit), 2); spinSetInterval /= 1440; } else if (spinSetInterval % 60 == 0) { /* hours */ gtk_combo_box_set_active (GTK_COMBO_BOX (spd->priv->refreshIntervalUnit), 1); spinSetInterval /= 60; } else { gtk_combo_box_set_active (GTK_COMBO_BOX (spd->priv->refreshIntervalUnit), 0); } gtk_spin_button_set_value (GTK_SPIN_BUTTON (spd->priv->refreshInterval), spinSetInterval); gtk_widget_set_sensitive (spd->priv->refreshInterval, interval > 0); gtk_widget_set_sensitive (spd->priv->refreshIntervalUnit, interval > 0); /* setup info label about default update interval */ if(-1 != defaultInterval) defaultIntervalStr = g_strdup_printf(ngettext("The provider of this feed suggests an update interval of %d minute.", "The provider of this feed suggests an update interval of %d minutes.", defaultInterval), defaultInterval); else defaultIntervalStr = g_strdup(_("This feed specifies no default update interval.")); gtk_label_set_text(GTK_LABEL(liferea_dialog_lookup(spd->priv->dialog, "feedUpdateInfo")), defaultIntervalStr); g_free(defaultIntervalStr); /* Source (only for feeds) */ if (SUBSCRIPTION_TYPE(subscription) == feed_get_subscription_type ()) { if(subscription_get_source(subscription)[0] == '|') { gtk_entry_set_text(GTK_ENTRY(spd->priv->sourceEntry), &(subscription_get_source(subscription)[1])); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(spd->priv->cmdRadio), TRUE); ui_subscription_prop_enable_httpauth(spd->priv, FALSE); gtk_widget_set_sensitive(spd->priv->selectFile, TRUE); } else if(strstr(subscription_get_source(subscription), "://") != NULL) { xmlURIPtr uri = xmlParseURI(subscription_get_source(subscription)); xmlChar *parsedUrl; if(uri) { if(uri->user) { gchar *user = uri->user; gchar *pass = strstr(user, ":"); if(pass) { pass[0] = '\0'; pass++; gtk_entry_set_text(GTK_ENTRY(spd->priv->password), pass); } gtk_entry_set_text(GTK_ENTRY(spd->priv->username), user); xmlFree(uri->user); uri->user = NULL; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(spd->priv->authcheckbox), TRUE); } parsedUrl = xmlSaveUri(uri); gtk_entry_set_text(GTK_ENTRY(spd->priv->sourceEntry), (gchar *) parsedUrl); xmlFree(parsedUrl); xmlFreeURI(uri); } else { gtk_entry_set_text(GTK_ENTRY(spd->priv->sourceEntry), subscription_get_source(subscription)); } ui_subscription_prop_enable_httpauth(spd->priv, TRUE); gtk_widget_set_sensitive(spd->priv->selectFile, FALSE); } else { /* File */ gtk_entry_set_text(GTK_ENTRY(spd->priv->sourceEntry), subscription_get_source(subscription)); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(spd->priv->fileRadio), TRUE); ui_subscription_prop_enable_httpauth(spd->priv, FALSE); gtk_widget_set_sensitive(spd->priv->selectFile, TRUE); } if(subscription_get_filter(subscription)) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(liferea_dialog_lookup(spd->priv->dialog, "filterCheckbox")), TRUE); gtk_entry_set_text(GTK_ENTRY(liferea_dialog_lookup(spd->priv->dialog, "filterEntry")), subscription_get_filter(subscription)); } } /* Archive */ if(feed->cacheLimit == CACHE_DISABLE) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(liferea_dialog_lookup(spd->priv->dialog, "feedCacheDisable")), TRUE); } else if(feed->cacheLimit == CACHE_DEFAULT) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(liferea_dialog_lookup(spd->priv->dialog, "feedCacheDefault")), TRUE); } else if(feed->cacheLimit == CACHE_UNLIMITED) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(liferea_dialog_lookup(spd->priv->dialog, "feedCacheUnlimited")), TRUE); } else { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(liferea_dialog_lookup(spd->priv->dialog, "feedCacheLimited")), TRUE); gtk_spin_button_set_value(GTK_SPIN_BUTTON(liferea_dialog_lookup(spd->priv->dialog, "cacheItemLimit")), feed->cacheLimit); } gtk_widget_set_sensitive(liferea_dialog_lookup(spd->priv->dialog, "cacheItemLimit"), feed->cacheLimit > 0); on_feed_prop_filtercheck(GTK_TOGGLE_BUTTON(liferea_dialog_lookup(spd->priv->dialog, "filterCheckbox")), spd->priv); /* Download */ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(liferea_dialog_lookup(spd->priv->dialog, "dontUseProxyCheck")), subscription->updateOptions->dontUseProxy); /* Advanced */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (spd->priv->dialog, "enclosureDownloadCheck")), feed->encAutoDownload); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (spd->priv->dialog, "loadItemLinkCheck")), node->loadItemLink); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (spd->priv->dialog, "ignoreCommentFeeds")), feed->ignoreComments); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (spd->priv->dialog, "markAsReadCheck")), feed->markAsRead); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (spd->priv->dialog, "html5ExtractCheck")), feed->html5Extract); /* Remove tabs we do not need... */ if (SUBSCRIPTION_TYPE(subscription) != feed_get_subscription_type ()) { /* Remove "General", "Source" and "Download" tab */ gtk_notebook_remove_page (GTK_NOTEBOOK (liferea_dialog_lookup (spd->priv->dialog, "subscriptionPropNotebook")), 0); gtk_notebook_remove_page (GTK_NOTEBOOK (liferea_dialog_lookup (spd->priv->dialog, "subscriptionPropNotebook")), 0); gtk_notebook_remove_page (GTK_NOTEBOOK (liferea_dialog_lookup (spd->priv->dialog, "subscriptionPropNotebook")), 1); } } static void subscription_prop_dialog_init (SubscriptionPropDialog *spd) { GtkWidget *propdialog; spd->priv = SUBSCRIPTION_PROP_DIALOG_GET_PRIVATE (spd); spd->priv->dialog = propdialog = liferea_dialog_new ("properties"); /* set default update interval spin button and unit combo box */ ui_common_setup_combo_menu (liferea_dialog_lookup (propdialog, "refreshIntervalUnitComboBox"), default_update_interval_unit_options, NULL /* no callback */, -1 /* default value */ ); spd->priv->feedNameEntry = liferea_dialog_lookup (propdialog, "feedNameEntry"); spd->priv->refreshInterval = liferea_dialog_lookup (propdialog, "refreshIntervalSpinButton"); spd->priv->refreshIntervalUnit = liferea_dialog_lookup (propdialog, "refreshIntervalUnitComboBox"); spd->priv->sourceEntry = liferea_dialog_lookup (propdialog, "sourceEntry"); spd->priv->selectFile = liferea_dialog_lookup (propdialog, "selectSourceFileButton"); spd->priv->fileRadio = liferea_dialog_lookup (propdialog, "feed_loc_file"); spd->priv->urlRadio = liferea_dialog_lookup (propdialog, "feed_loc_url"); spd->priv->cmdRadio = liferea_dialog_lookup (propdialog, "feed_loc_command"); spd->priv->authcheckbox = liferea_dialog_lookup (propdialog, "HTTPauthCheck"); spd->priv->username = liferea_dialog_lookup (propdialog, "usernameEntry"); spd->priv->password = liferea_dialog_lookup (propdialog, "passwordEntry"); spd->priv->credTable = liferea_dialog_lookup (propdialog, "httpAuthBox"); g_signal_connect (spd->priv->selectFile, "clicked", G_CALLBACK (on_selectfile_pressed), spd->priv); g_signal_connect (spd->priv->urlRadio, "toggled", G_CALLBACK (on_feed_prop_url_radio), spd->priv); g_signal_connect (spd->priv->fileRadio, "toggled", G_CALLBACK (on_feed_prop_url_radio), spd->priv); g_signal_connect (spd->priv->cmdRadio, "toggled", G_CALLBACK (on_feed_prop_url_radio), spd->priv); g_signal_connect (spd->priv->authcheckbox, "toggled", G_CALLBACK (on_feed_prop_authcheck), spd->priv); g_signal_connect (liferea_dialog_lookup (propdialog, "filterCheckbox"), "toggled", G_CALLBACK (on_feed_prop_filtercheck), spd->priv); g_signal_connect (liferea_dialog_lookup (propdialog, "filterSelectFile"), "clicked", G_CALLBACK (on_selectfile_pressed), spd->priv); g_signal_connect (liferea_dialog_lookup (propdialog, "feedCacheLimited"), "toggled", G_CALLBACK (on_feed_prop_cache_radio), spd->priv); g_signal_connect (liferea_dialog_lookup (propdialog, "updateIntervalSpecific"), "toggled", G_CALLBACK(on_feed_prop_update_radio), spd->priv); g_signal_connect (G_OBJECT (propdialog), "response", G_CALLBACK (on_propdialog_response), spd); gtk_widget_show_all (propdialog); } SubscriptionPropDialog * subscription_prop_dialog_new (subscriptionPtr subscription) { SubscriptionPropDialog *spd; spd = SUBSCRIPTION_PROP_DIALOG (g_object_new (SUBSCRIPTION_PROP_DIALOG_TYPE, NULL)); subscription_prop_dialog_load(spd, subscription); return spd; } /* complex "New" dialog */ #define NEW_SUBSCRIPTION_DIALOG_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), NEW_SUBSCRIPTION_DIALOG_TYPE, SubscriptionDialogPrivate)) G_DEFINE_TYPE (NewSubscriptionDialog, new_subscription_dialog, G_TYPE_OBJECT); static void new_subscription_dialog_finalize (GObject *object) { NewSubscriptionDialog *nsd = NEW_SUBSCRIPTION_DIALOG (object); gtk_widget_destroy (nsd->priv->dialog); G_OBJECT_CLASS (parent_class)->finalize (object); } static void new_subscription_dialog_class_init (NewSubscriptionDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = new_subscription_dialog_finalize; g_type_class_add_private (object_class, sizeof(SubscriptionDialogPrivate)); } static void on_newdialog_response (GtkDialog *dialog, gint response_id, gpointer user_data) { NewSubscriptionDialog *nsd = (NewSubscriptionDialog *)user_data; if (response_id == GTK_RESPONSE_OK) { gchar *source = NULL; const gchar *filter = NULL; updateOptionsPtr options; nodePtr duplicateUrlNode = NULL; /* Source */ source = ui_subscription_dialog_decode_source (nsd->priv); /* Filter handling */ filter = gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (nsd->priv->dialog, "filterEntry"))); if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (nsd->priv->dialog, "filterCheckbox"))) || !strcmp(filter,"")) { /* Maybe this should be a test to see if the file exists? */ filter = NULL; } options = g_new0 (struct updateOptions, 1); options->dontUseProxy = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup(GTK_WIDGET (dialog), "dontUseProxyCheck"))); duplicateUrlNode = feedlist_find_node (feedlist_get_root (), NODE_BY_URL, source); if (duplicateUrlNode == NULL) { feedlist_add_subscription (source, filter, options, FEED_REQ_PRIORITY_HIGH); g_free (source); } else { feed_list_node_add_duplicate_url_subscription (subscription_new (source, filter, options), duplicateUrlNode); } } g_object_unref (nsd); } static void new_subscription_dialog_init (NewSubscriptionDialog *nsd) { GtkWidget *newdialog; nsd->priv = NEW_SUBSCRIPTION_DIALOG_GET_PRIVATE (nsd); nsd->priv->dialog = newdialog = liferea_dialog_new ("new_subscription"); /* Setup source entry */ nsd->priv->sourceEntry = liferea_dialog_lookup (newdialog,"sourceEntry"); gtk_widget_grab_focus (GTK_WIDGET (nsd->priv->sourceEntry)); gtk_entry_set_activates_default (GTK_ENTRY (nsd->priv->sourceEntry), TRUE); nsd->priv->selectFile = liferea_dialog_lookup (newdialog,"selectSourceFileButton"); g_signal_connect (nsd->priv->selectFile, "clicked", G_CALLBACK (on_selectfile_pressed), nsd->priv); /* Feed location radio buttons */ nsd->priv->fileRadio = liferea_dialog_lookup (newdialog, "feed_loc_file"); nsd->priv->urlRadio = liferea_dialog_lookup (newdialog, "feed_loc_url"); nsd->priv->cmdRadio = liferea_dialog_lookup (newdialog, "feed_loc_command"); g_signal_connect (nsd->priv->urlRadio, "toggled", G_CALLBACK (on_feed_prop_url_radio), nsd->priv); g_signal_connect (nsd->priv->fileRadio, "toggled", G_CALLBACK (on_feed_prop_url_radio), nsd->priv); g_signal_connect (nsd->priv->cmdRadio, "toggled", G_CALLBACK (on_feed_prop_url_radio), nsd->priv); g_signal_connect (liferea_dialog_lookup (newdialog, "filterCheckbox"), "toggled", G_CALLBACK (on_feed_prop_filtercheck), nsd->priv); g_signal_connect (liferea_dialog_lookup (newdialog, "filterSelectFile"), "clicked", G_CALLBACK (on_selectfile_pressed), nsd->priv); gtk_widget_grab_default (liferea_dialog_lookup (newdialog, "newfeedbtn")); g_signal_connect (G_OBJECT (newdialog), "response", G_CALLBACK (on_newdialog_response), nsd); on_feed_prop_filtercheck (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (newdialog, "filterCheckbox")), nsd->priv); on_feed_prop_url_radio (GTK_TOGGLE_BUTTON (nsd->priv->urlRadio), nsd->priv); gtk_widget_show_all (newdialog); } static NewSubscriptionDialog * ui_complex_subscription_dialog_new (void) { NewSubscriptionDialog *nsd; nsd = NEW_SUBSCRIPTION_DIALOG (g_object_new (NEW_SUBSCRIPTION_DIALOG_TYPE, NULL)); return nsd; } /* simple "New" dialog */ #define SIMPLE_SUBSCRIPTION_DIALOG_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), SIMPLE_SUBSCRIPTION_DIALOG_TYPE, SubscriptionDialogPrivate)) G_DEFINE_TYPE (SimpleSubscriptionDialog, simple_subscription_dialog, G_TYPE_OBJECT); static void simple_subscription_dialog_finalize (GObject *object) { SimpleSubscriptionDialog *ssd = SIMPLE_SUBSCRIPTION_DIALOG (object); gtk_widget_destroy (ssd->priv->dialog); G_OBJECT_CLASS (parent_class)->finalize (object); } static void simple_subscription_dialog_class_init (SimpleSubscriptionDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = simple_subscription_dialog_finalize; g_type_class_add_private (object_class, sizeof (SubscriptionDialogPrivate)); } static void on_simple_newdialog_response (GtkDialog *dialog, gint response_id, gpointer user_data) { SimpleSubscriptionDialog *ssd = (SimpleSubscriptionDialog *) user_data; gchar *source = NULL; nodePtr duplicateUrlNode = NULL; if (response_id == GTK_RESPONSE_OK) { source = ui_subscription_create_url (g_strdup (gtk_entry_get_text (GTK_ENTRY(ssd->priv->sourceEntry))), FALSE /* auth */, NULL /* user */, NULL /* passwd */); duplicateUrlNode = feedlist_find_node (feedlist_get_root (), NODE_BY_URL, source); if (duplicateUrlNode == NULL) { feedlist_add_subscription (source, NULL, NULL, FEED_REQ_PRIORITY_HIGH); g_free (source); } else { feed_list_node_add_duplicate_url_subscription (subscription_new (source, NULL, NULL), duplicateUrlNode); } } if (response_id == GTK_RESPONSE_APPLY) /* misused for "Advanced" */ ui_complex_subscription_dialog_new (); g_object_unref (ssd); } static void simple_subscription_dialog_init (SimpleSubscriptionDialog *ssd) { GtkWidget *newdialog; ssd->priv = SIMPLE_SUBSCRIPTION_DIALOG_GET_PRIVATE (ssd); ssd->priv->dialog = newdialog = liferea_dialog_new ("simple_subscription"); /* Setup source entry */ ssd->priv->sourceEntry = liferea_dialog_lookup (newdialog, "sourceEntry"); gtk_widget_grab_focus (GTK_WIDGET (ssd->priv->sourceEntry)); gtk_entry_set_activates_default (GTK_ENTRY (ssd->priv->sourceEntry), TRUE); g_signal_connect (G_OBJECT (newdialog), "response", G_CALLBACK (on_simple_newdialog_response), ssd); gtk_widget_show_all (newdialog); } SimpleSubscriptionDialog * subscription_dialog_new (void) { SimpleSubscriptionDialog *ssd; ssd = SIMPLE_SUBSCRIPTION_DIALOG (g_object_new (SIMPLE_SUBSCRIPTION_DIALOG_TYPE, NULL)); return ssd; } liferea-1.12.7/src/ui/subscription_dialog.h000066400000000000000000000104171352135647700206510ustar00rootroot00000000000000/** * @file subscription_dialog.h property dialog for feed subscriptions * * Copyright (C) 2007-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _SUBSCRIPTION_DIALOG_H #define _SUBSCRIPTION_DIALOG_H #include #include "subscription.h" G_BEGIN_DECLS typedef struct SubscriptionDialogPrivate SubscriptionDialogPrivate; #define SUBSCRIPTION_PROP_DIALOG_TYPE (subscription_prop_dialog_get_type ()) #define SUBSCRIPTION_PROP_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SUBSCRIPTION_PROP_DIALOG_TYPE, SubscriptionPropDialog)) #define SUBSCRIPTION_PROP_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SUBSCRIPTION_PROP_DIALOG_TYPE, SubscriptionPropDialogClass)) #define IS_SUBSCRIPTION_PROP_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SUBSCRIPTION_PROP_DIALOG_TYPE)) #define IS_SUBSCRIPTION_PROP_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SUBSCRIPTION_PROP_DIALOG_TYPE)) typedef struct SubscriptionPropDialog SubscriptionPropDialog; typedef struct SubscriptionPropDialogClass SubscriptionPropDialogClass; struct SubscriptionPropDialog { GObject parent; /*< private >*/ SubscriptionDialogPrivate *priv; }; struct SubscriptionPropDialogClass { GObjectClass parent_class; }; GType subscription_prop_dialog_get_type (void); /** * Creates a feed properties dialog (FIXME: handle * generic subscriptions too) * * @param subscription the subscription to load into the dialog * * @returns a properties dialog */ SubscriptionPropDialog *subscription_prop_dialog_new (subscriptionPtr subscription); #define NEW_SUBSCRIPTION_DIALOG_TYPE (new_subscription_dialog_get_type ()) #define NEW_SUBSCRIPTION_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NEW_SUBSCRIPTION_DIALOG_TYPE, NewSubscriptionDialog)) #define NEW_SUBSCRIPTION_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NEW_SUBSCRIPTION_DIALOG_TYPE, NewSubscriptionDialogClass)) #define IS_NEW_SUBSCRIPTION_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NEW_SUBSCRIPTION_DIALOG_TYPE)) #define IS_NEW_SUBSCRIPTION_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NEW_SUBSCRIPTION_DIALOG_TYPE)) typedef struct NewSubscriptionDialog NewSubscriptionDialog; typedef struct NewSubscriptionDialogClass NewSubscriptionDialogClass; struct NewSubscriptionDialog { GObject parent; /*< private >*/ SubscriptionDialogPrivate *priv; }; struct NewSubscriptionDialogClass { GObjectClass parent_class; }; GType new_subscription_dialog_get_type (void); #define SIMPLE_SUBSCRIPTION_DIALOG_TYPE (simple_subscription_dialog_get_type ()) #define SIMPLE_SUBSCRIPTION_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SIMPLE_SUBSCRIPTION_DIALOG_TYPE, SimpleSubscriptionDialog)) #define SIMPLE_SUBSCRIPTION_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SIMPLE_SUBSCRIPTION_DIALOG_TYPE, SimpleSubscriptionDialogClass)) #define IS_SIMPLE_SUBSCRIPTION_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SIMPLE_SUBSCRIPTION_DIALOG_TYPE)) #define IS_SIMPLE_SUBSCRIPTION_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SIMPLE_SUBSCRIPTION_DIALOG_TYPE)) typedef struct SimpleSubscriptionDialog SimpleSubscriptionDialog; typedef struct SimpleSubscriptionDialogClass SimpleSubscriptionDialogClass; struct SimpleSubscriptionDialog { GObject parent; /*< private >*/ SubscriptionDialogPrivate *priv; }; struct SimpleSubscriptionDialogClass { GObjectClass parent_class; }; GType simple_subscription_dialog_get_type (void); /** * Create a simple subscription dialog. * * @returns dialog instance */ SimpleSubscriptionDialog *subscription_dialog_new (void); G_END_DECLS #endif /* _SUBSCRIPTION_DIALOG_H */ liferea-1.12.7/src/ui/ui_common.c000066400000000000000000000171011352135647700165630ustar00rootroot00000000000000/** * @file ui_common.c UI helper functions * * Copyright (C) 2008-2014 Lars Windolf * Copyright (C) 2009 Hubert Figuiere * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ui/ui_common.h" #include "common.h" #include "conf.h" #include "ui/liferea_shell.h" void ui_common_setup_combo_menu (GtkWidget *widget, const gchar **options, GCallback callback, gint defaultValue) { GtkListStore *listStore; GtkTreeIter treeiter; guint i; listStore = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT); g_assert (NULL != widget); for (i = 0; options[i] != NULL; i++) { gtk_list_store_append (listStore, &treeiter); gtk_list_store_set (listStore, &treeiter, 0, _(options[i]), 1, i, -1); } gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (listStore)); if (-1 <= defaultValue) gtk_combo_box_set_active (GTK_COMBO_BOX (widget), defaultValue); if (callback) g_signal_connect (G_OBJECT (widget), "changed", callback, widget); } void ui_common_setup_combo_text (GtkComboBox *combo, gint col) { GtkCellRenderer *rend = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), rend, TRUE); gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combo), rend, "text", col); } void ui_common_treeview_move_cursor (GtkTreeView *treeview, gint step) { gboolean ret; gtk_widget_grab_focus (GTK_WIDGET (treeview)); g_signal_emit_by_name (treeview, "move-cursor", GTK_MOVEMENT_DISPLAY_LINES, step, &ret); } void ui_common_treeview_move_cursor_to_first (GtkTreeView *treeview) { GtkTreePath *path; path = gtk_tree_path_new_first (); gtk_tree_view_set_cursor (treeview, path, NULL, FALSE); gtk_tree_path_free(path); } void ui_show_error_box (const char *format, ...) { GtkWidget *dialog; va_list args; gchar *msg; g_return_if_fail (format != NULL); va_start (args, format); msg = g_strdup_vprintf (format, args); va_end (args); dialog = gtk_message_dialog_new (GTK_WINDOW (liferea_shell_get_window ()), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", msg); (void)gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); g_free (msg); } void ui_show_info_box (const char *format, ...) { GtkWidget *dialog; va_list args; gchar *msg; g_return_if_fail (format != NULL); va_start (args, format); msg = g_strdup_vprintf (format, args); va_end (args); dialog = gtk_message_dialog_new (GTK_WINDOW (liferea_shell_get_window ()), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "%s", msg); (void)gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); g_free (msg); } struct file_chooser_tuple { GtkWidget *dialog; fileChoosenCallback func; gpointer user_data; }; static void ui_choose_file_save_cb (GtkDialog *dialog, gint response_id, gpointer user_data) { struct file_chooser_tuple *tuple = (struct file_chooser_tuple*)user_data; gchar *filename; if (response_id == GTK_RESPONSE_ACCEPT) { filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); tuple->func (filename, tuple->user_data); g_free (filename); } else { tuple->func (NULL, tuple->user_data); } gtk_widget_destroy (GTK_WIDGET (dialog)); g_free (tuple); } static void ui_choose_file_or_dir(gchar *title, const gchar *buttonName, gboolean saving, gboolean directory, fileChoosenCallback callback, const gchar *currentPath, const gchar *defaultFilename, const char *filterstring, const char *filtername, gpointer user_data) { GtkWidget *dialog; struct file_chooser_tuple *tuple; GtkWidget *button; gchar *path = NULL; g_assert (!(saving & directory)); g_assert (!(defaultFilename && !saving)); if (!currentPath) path = g_strdup (g_get_home_dir ()); else path = g_strdup (currentPath); dialog = gtk_file_chooser_dialog_new (title, GTK_WINDOW (liferea_shell_get_window ()), (directory?GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER: (saving ? GTK_FILE_CHOOSER_ACTION_SAVE : GTK_FILE_CHOOSER_ACTION_OPEN)), _("_Cancel"), GTK_RESPONSE_CANCEL, NULL); if (saving) gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); tuple = g_new0 (struct file_chooser_tuple, 1); tuple->dialog = dialog; tuple->func = callback; tuple->user_data = user_data; button = gtk_dialog_add_button (GTK_DIALOG (dialog), buttonName, GTK_RESPONSE_ACCEPT); gtk_widget_set_can_default (button, TRUE); gtk_widget_grab_default (button); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (ui_choose_file_save_cb), tuple); if (path && g_file_test (path, G_FILE_TEST_EXISTS)) { if (directory || defaultFilename) gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), path); else gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), path); } if (defaultFilename) gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), defaultFilename); if (filterstring && filtername) { GtkFileFilter *filter, *allfiles; gchar **filterstrings, **f; filter = gtk_file_filter_new (); filterstrings = g_strsplit (filterstring, "|", 0); for (f = filterstrings; *f != NULL; f++) gtk_file_filter_add_pattern (filter, *f); g_strfreev (filterstrings); gtk_file_filter_set_name (filter, filtername); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); allfiles = gtk_file_filter_new (); gtk_file_filter_add_pattern (allfiles, "*"); gtk_file_filter_set_name (allfiles, _("All Files")); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), allfiles); } gtk_widget_show_all (dialog); g_free (path); } void ui_choose_file (gchar *title, const gchar *buttonName, gboolean saving, fileChoosenCallback callback, const gchar *currentPath, const gchar *defaultFilename, const char *filterstring, const char *filtername, gpointer user_data) { ui_choose_file_or_dir (title, buttonName, saving, FALSE, callback, currentPath, defaultFilename, filterstring, filtername, user_data); } void ui_common_simple_action_group_set_enabled (GActionGroup *group, gboolean enabled) { gchar **actions_list = g_action_group_list_actions (group); gint i; for (i=0;actions_list[i] != NULL;i++) { g_simple_action_set_enabled (G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (group), actions_list [i])), enabled); } g_strfreev (actions_list); } void ui_common_add_action_group_to_map (GActionGroup *group, GActionMap *map) { gchar **actions_list = g_action_group_list_actions (group); gint i; for (i=0;actions_list[i] != NULL;i++) { g_action_map_add_action (map, g_action_map_lookup_action (G_ACTION_MAP (group), actions_list [i])); } g_strfreev (actions_list); } liferea-1.12.7/src/ui/ui_common.h000066400000000000000000000076511352135647700166010ustar00rootroot00000000000000/** * @file ui_common.h UI helper functions * * Copyright (C) 2008-2011 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _UI_COMMON_H #define _UI_COMMON_H #include /** * Helper function to set up a combo box option menu. * To be used to initialize dialogs. * * @param widget the option menu widget * @param options list of option literals * @param callback "changed" callback for the widget (or NULL) * @param defaultValue the default menu value */ void ui_common_setup_combo_menu (GtkWidget *widget, const gchar **options, GCallback callback, gint defaultValue); /** * Helper function to set up a combo to display the text from * a column of the model. * * @param combo the combo widget * @param col the column to use in the model */ void ui_common_setup_combo_text (GtkComboBox *combo, gint col); /** * Move cursor to nth next iter in a tree view. * * @param treeview the tree view * @param step how many iters to skip (negative values move backwards) */ void ui_common_treeview_move_cursor (GtkTreeView *treeview, gint step); /** * Move cursor to 1st iter in a tree view. * * @param treeview the tree view */ void ui_common_treeview_move_cursor_to_first (GtkTreeView *treeview); /** * Presents an "Info" type box with the given message. * * @param printf like format */ void ui_show_info_box (const char *format, ...); /** * Presents an "Error" type box with the given message. * Does not do error tracing or console output. * * @param printf like format */ void ui_show_error_box (const char *format, ...); /** Callback to be used with the filename choosing dialog */ typedef void (*fileChoosenCallback) (const gchar *title, gpointer user_data); /** * Open up a file selector * * @param title window title * @param buttonName Text to be used as the name of the accept button * @param saving TRUE if saving, FALSE if opening * @param callback that will be passed the filename (in the system's locale (NOT UTF-8), and some user data * @param currentPath This file or directory will be selected in the chooser * @param filename When saving, this is the suggested filename * @param filterstring a pattern for a GtkFileFilter or NULL * @param filtername a human readable name for the pattern or NULL (if pattern is NULL) * @param user_data user data passed to the callback */ void ui_choose_file (gchar *title, const gchar *buttonName, gboolean saving, fileChoosenCallback callback, const gchar *currentPath, const gchar *defaultFilename, const char *filterstring, const char *filtername, gpointer user_data); /** ui_common_simple_action_group_set_enabled: * @group: A GActionGroup containing only GSimpleActions. It must also implement * GActionMap in order to lookup the actions. * @enabled: TRUE to enable all actions in the group. * * Enable or disable all GSimpleActions in the group. */ void ui_common_simple_action_group_set_enabled (GActionGroup *group, gboolean enabled); /** ui_common_add_action_group_to_map: * @group: A GActionGroup which must also implement * GActionMap in order to lookup the actions. * @map: The GActionMap to which the actions will be added. * * Adds all actions from group to map. */ void ui_common_add_action_group_to_map (GActionGroup *group, GActionMap *map); #endif liferea-1.12.7/src/ui/ui_dnd.c000066400000000000000000000230201352135647700160350ustar00rootroot00000000000000/** * @file ui_dnd.c everything concerning Drag&Drop * * Copyright (C) 2003-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include /* For strcmp */ #include "common.h" #include "db.h" #include "feed.h" #include "feedlist.h" #include "folder.h" #include "debug.h" #include "ui/item_list_view.h" #include "ui/feed_list_view.h" #include "ui/feed_list_node.h" #include "ui/liferea_shell.h" #include "ui/ui_dnd.h" #include "fl_sources/node_source.h" /* Why does Liferea need such a complex DnD handling (for the feed list)? -> Because parts of the feed list might be un-draggable. -> Because drag source and target might be different node sources with even incompatible subscription types. -> Because removal at drag source and insertion at drop target must be atomic to avoid subscription losses. For simplicity the DnD code reuses the UI node removal and insertion methods that asynchronously apply the actions at the node source. (FIXME: implement the last part) */ static gboolean (*old_feed_drop_possible)(GtkTreeDragDest *drag_dest, GtkTreePath *dest_path, GtkSelectionData *selection_data); static gboolean (*old_feed_drag_data_received)(GtkTreeDragDest *drag_dest, GtkTreePath *dest, GtkSelectionData *selection_data); /* GtkTreeDragSource/GtkTreeDragDest implementation */ /** decides whether a feed cannot be dragged or not */ static gboolean ui_dnd_feed_draggable (GtkTreeDragSource *drag_source, GtkTreePath *path) { GtkTreeIter iter; nodePtr node; debug1 (DEBUG_GUI, "DnD check if feed dragging is possible (%d)", path); if (gtk_tree_model_get_iter (GTK_TREE_MODEL (drag_source), &iter, path)) { gtk_tree_model_get (GTK_TREE_MODEL (drag_source), &iter, FS_PTR, &node, -1); /* never drag "empty" entries or nodes of read-only subscription lists*/ if (!node || !(NODE_SOURCE_TYPE (node->parent)->capabilities & NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST)) return FALSE; return TRUE; } else { g_warning ("fatal error! could not resolve tree path!"); return FALSE; } } static gboolean ui_dnd_feed_drop_possible (GtkTreeDragDest *drag_dest, GtkTreePath *dest_path, GtkSelectionData *selection_data) { GtkTreeModel *model = NULL; GtkTreePath *src_path = NULL; GtkTreeIter iter; nodePtr sourceNode, targetNode; debug1 (DEBUG_GUI, "DnD check if feed dropping is possible (%d)", dest_path); if (!(old_feed_drop_possible) (drag_dest, dest_path, selection_data)) return FALSE; if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (drag_dest), &iter, dest_path)) return FALSE; /* Try to get an iterator, if we get none it means either feed list root or an "Empty" node. Both cases are fine */ gtk_tree_model_get (GTK_TREE_MODEL (drag_dest), &iter, FS_PTR, &targetNode, -1); if (!targetNode) return TRUE; /* If we got an iterator it's either a possible dropping candidate (a folder or source node to drop into, or a iterator to insert after). In any case we have to check if it is a writeable node source. */ /* Never drop into read-only subscription node sources */ if (!(NODE_SOURCE_TYPE (targetNode)->capabilities & NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST)) return FALSE; /* never drag folders into non-hierarchic node sources */ if (!gtk_tree_get_row_drag_data (selection_data, &model, &src_path)) return TRUE; if (gtk_tree_model_get_iter (GTK_TREE_MODEL (model), &iter, src_path)) { gtk_tree_model_get (GTK_TREE_MODEL (model), &iter, FS_PTR, &sourceNode, -1); g_assert (sourceNode); /* Never drop into another node source as this arises to many problems (e.g. remote sync, different subscription type, e.g. SF #2855990) */ if (NODE_SOURCE_TYPE (targetNode) != NODE_SOURCE_TYPE (sourceNode)) return FALSE; if (IS_FOLDER(sourceNode) && !(NODE_SOURCE_TYPE (targetNode)->capabilities & NODE_SOURCE_CAPABILITY_HIERARCHIC_FEEDLIST)) return FALSE; } gtk_tree_path_free (src_path); return TRUE; } static gboolean ui_dnd_feed_drag_data_received (GtkTreeDragDest *drag_dest, GtkTreePath *dest, GtkSelectionData *selection_data) { GtkTreeIter iter, iter2, parentIter; nodePtr node, oldParent, newParent; gboolean result, valid, added; gint oldPos, pos; result = old_feed_drag_data_received (drag_dest, dest, selection_data); if (result) { if (gtk_tree_model_get_iter (GTK_TREE_MODEL (drag_dest), &iter, dest)) { gtk_tree_model_get (GTK_TREE_MODEL (drag_dest), &iter, FS_PTR, &node, -1); /* If we don't do anything, then because DnD is implemented by removal and re-insertion, and the removed node is selected, the treeview selects the next row after the removal, which is supremely irritating. But setting a selection at this point is pointless, because the treeview will reset it as soon as the DnD callback returns. Instead, we set the cursor, which controls where treeview resets the selection later. */ gtk_tree_view_set_cursor(GTK_TREE_VIEW (liferea_shell_lookup ("feedlist")), dest, NULL, FALSE); /* remove from old parents child list */ oldParent = node->parent; g_assert (oldParent); oldPos = g_slist_index (oldParent->children, node); oldParent->children = g_slist_remove (oldParent->children, node); node_update_counters (oldParent); if (0 == g_slist_length (oldParent->children)) feed_list_node_add_empty_node (feed_list_node_to_iter (oldParent->id)); /* and rebuild new parents child list */ if (gtk_tree_model_iter_parent (GTK_TREE_MODEL (drag_dest), &parentIter, &iter)) { gtk_tree_model_get (GTK_TREE_MODEL (drag_dest), &parentIter, FS_PTR, &newParent, -1); } else { gtk_tree_model_get_iter_first (GTK_TREE_MODEL (drag_dest), &parentIter); newParent = feedlist_get_root (); } /* drop old list... */ debug3 (DEBUG_GUI, "old parent is %s (%d, position=%d)", oldParent->title, g_slist_length (oldParent->children), oldPos); debug2 (DEBUG_GUI, "new parent is %s (%d)", newParent->title, g_slist_length (newParent->children)); g_slist_free (newParent->children); newParent->children = NULL; node->parent = newParent; debug0 (DEBUG_GUI, "new newParent child list:"); /* and rebuild it from the tree model */ if (feedlist_get_root() != newParent) valid = gtk_tree_model_iter_children (GTK_TREE_MODEL (drag_dest), &iter2, &parentIter); else valid = gtk_tree_model_iter_children (GTK_TREE_MODEL (drag_dest), &iter2, NULL); pos = 0; added = FALSE; while (valid) { nodePtr child; gtk_tree_model_get (GTK_TREE_MODEL (drag_dest), &iter2, FS_PTR, &child, -1); if (child) { /* Well this is a bit complicated... If we move a feed inside a folder we need to skip the old insertion point (oldPos). This is easy if the feed is added behind this position. If it is dropped before the flag added is set once the new copy is encountered. The remaining copy is skipped automatically when the flag is set. */ /* check if this is a copy of the dragged node or the original itself */ if ((newParent == oldParent) && !strcmp(node->id, child->id)) { if ((pos == oldPos) || added) { /* it is the original */ debug2 (DEBUG_GUI, " -> %d: skipping old insertion point %s", pos, child->title); } else { /* it is a copy inserted before the original */ added = TRUE; debug2 (DEBUG_GUI, " -> %d: new insertion point of %s", pos, child->title); newParent->children = g_slist_append (newParent->children, child); } } else { /* all other nodes */ debug2 (DEBUG_GUI, " -> %d: adding %s", pos, child->title); newParent->children = g_slist_append (newParent->children, child); } } else { debug0 (DEBUG_GUI, " -> removing empty node"); /* remove possible existing "(empty)" node from newParent */ feed_list_node_remove_empty_node (&parentIter); } valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (drag_dest), &iter2); pos++; } db_node_update (node); node_update_counters (newParent); feedlist_schedule_save (); } } return result; } void ui_dnd_setup_feedlist (GtkTreeStore *feedstore) { GtkTreeDragSourceIface *drag_source_iface; GtkTreeDragDestIface *drag_dest_iface; drag_source_iface = GTK_TREE_DRAG_SOURCE_GET_IFACE (GTK_TREE_MODEL (feedstore)); drag_source_iface->row_draggable = ui_dnd_feed_draggable; drag_dest_iface = GTK_TREE_DRAG_DEST_GET_IFACE (GTK_TREE_MODEL (feedstore)); old_feed_drop_possible = drag_dest_iface->row_drop_possible; old_feed_drag_data_received = drag_dest_iface->drag_data_received; drag_dest_iface->row_drop_possible = ui_dnd_feed_drop_possible; drag_dest_iface->drag_data_received = ui_dnd_feed_drag_data_received; } liferea-1.12.7/src/ui/ui_dnd.h000066400000000000000000000020361352135647700160460ustar00rootroot00000000000000/** * @file ui_dnd.h everything concerning DnD * * Copyright (C) 2003, 2004 Lars Windolf * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _UI_DND_H #define _UI_DND_H #include /** sets up DnD for the feedlist model */ void ui_dnd_setup_feedlist(GtkTreeStore *feedstore); #endif liferea-1.12.7/src/ui/ui_folder.c000066400000000000000000000030721352135647700165500ustar00rootroot00000000000000/** * @file ui_folder.c GUI folder handling * * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2004-2016 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ui/ui_folder.h" #include "feedlist.h" #include "ui/liferea_dialog.h" static GtkWidget *newfolderdialog = NULL; gboolean ui_folder_add (void) { GtkWidget *foldernameentry; if (!newfolderdialog || !G_IS_OBJECT (newfolderdialog)) newfolderdialog = liferea_dialog_new ("new_folder"); foldernameentry = liferea_dialog_lookup (newfolderdialog, "foldertitleentry"); gtk_entry_set_text (GTK_ENTRY (foldernameentry), ""); gtk_widget_show (newfolderdialog); return TRUE; } void on_newfolderbtn_clicked (GtkButton *button, gpointer user_data) { feedlist_add_folder (gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (newfolderdialog, "foldertitleentry")))); } liferea-1.12.7/src/ui/ui_folder.h000066400000000000000000000023401352135647700165520ustar00rootroot00000000000000/** * @file ui_folder.h GUI folder handling * * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2004-2009 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _UI_FOLDER_H #define _UI_FOLDER_H #include #include "node.h" /** * Start interaction to create a new sub folder * attached to the given parent node. * * @returns TRUE on success */ gboolean ui_folder_add (void); /* menu callback */ void on_newfolderbtn_clicked(GtkButton *button, gpointer user_data); #endif liferea-1.12.7/src/ui/ui_update.c000066400000000000000000000131021352135647700165520ustar00rootroot00000000000000/** * @file ui_update.c GUI update monitor * * Copyright (C) 2006-2016 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "ui/ui_update.h" #include "common.h" #include "feedlist.h" #include "node.h" #include "subscription.h" #include "update.h" #include "ui/liferea_dialog.h" enum { UM_FAVICON, UM_REQUEST_TITLE, UM_LEN }; static GtkWidget *umdialog = NULL; static GtkTreeStore *um1store = NULL; static GtkTreeStore *um2store = NULL; static GHashTable *um1hash = NULL; static GHashTable *um2hash = NULL; static void ui_update_remove_request(nodePtr node, GtkTreeStore *store, GHashTable *hash) { GtkTreeIter *iter; iter = (GtkTreeIter *)g_hash_table_lookup(hash, node->id); if(iter) { gtk_tree_store_remove(store, iter); g_hash_table_remove(hash, (gpointer)node->id); g_free(iter); } } static void ui_update_merge_request(nodePtr node, GtkTreeStore *store, GHashTable *hash) { GtkTreeIter *iter; gchar *title; if(NULL != (iter = (GtkTreeIter *)g_hash_table_lookup(hash, (gpointer)node->id))) return; iter = g_new0(GtkTreeIter, 1); gtk_tree_store_append(store, iter, NULL); title = g_markup_escape_text (node_get_title (node), -1); gtk_tree_store_set(store, iter, UM_REQUEST_TITLE, title, UM_FAVICON, node_get_icon(node), -1); g_hash_table_insert(hash, (gpointer)node->id, (gpointer)iter); g_free (title); } static void ui_update_find_requests (nodePtr node) { if (node->children) node_foreach_child (node, ui_update_find_requests); if (!node->subscription) return; if (node->subscription->updateJob) { if (REQUEST_STATE_PROCESSING == update_job_get_state (node->subscription->updateJob)) { ui_update_merge_request (node, um1store, um1hash); ui_update_remove_request (node, um2store, um2hash); return; } if (REQUEST_STATE_PENDING == update_job_get_state (node->subscription->updateJob)) { ui_update_merge_request (node, um2store, um2hash); return; } } ui_update_remove_request (node, um1store, um1hash); ui_update_remove_request (node, um2store, um2hash); } static gboolean ui_update_monitor_update(void *data) { if(umdialog) { feedlist_foreach(ui_update_find_requests); return TRUE; } else { return FALSE; } } static void ui_update_cancel (nodePtr node) { if (node->children) node_foreach_child (node, ui_update_cancel); if (!node->subscription) return; subscription_cancel_update (node->subscription); } void on_cancel_all_requests_clicked(GtkButton *button, gpointer user_data) { feedlist_foreach(ui_update_cancel); } static void on_update_monitor_destroyed_cb(GtkWidget *widget, void *data) { g_hash_table_destroy(um1hash); g_hash_table_destroy(um2hash); um1hash = NULL; um2hash = NULL; umdialog = NULL; } void on_close_update_monitor_clicked(GtkButton *button, gpointer user_data) { gtk_widget_destroy(umdialog); } void on_menu_show_update_monitor(GSimpleAction *action, GVariant *parameter, gpointer user_data) { GtkCellRenderer *textRenderer, *iconRenderer; GtkTreeViewColumn *column; GtkTreeView *view; if(!umdialog) { umdialog = liferea_dialog_new ("update_monitor"); g_signal_connect (G_OBJECT (umdialog), "destroy", G_CALLBACK (on_update_monitor_destroyed_cb), NULL); /* Set up left store and view */ view = GTK_TREE_VIEW(liferea_dialog_lookup(umdialog, "left")); um1store = gtk_tree_store_new(UM_LEN, G_TYPE_ICON, G_TYPE_STRING); gtk_tree_view_set_model(view, GTK_TREE_MODEL(um1store)); textRenderer = gtk_cell_renderer_text_new(); iconRenderer = gtk_cell_renderer_pixbuf_new(); column = gtk_tree_view_column_new(); gtk_tree_view_column_pack_start(column, iconRenderer, FALSE); gtk_tree_view_column_pack_start(column, textRenderer, TRUE); gtk_tree_view_column_add_attribute(column, iconRenderer, "gicon", UM_FAVICON); gtk_tree_view_column_add_attribute(column, textRenderer, "markup", UM_REQUEST_TITLE); gtk_tree_view_append_column(view, column); /* Set up right store and view */ view = GTK_TREE_VIEW(liferea_dialog_lookup(umdialog, "right")); um2store = gtk_tree_store_new(UM_LEN, G_TYPE_ICON, G_TYPE_STRING); gtk_tree_view_set_model(view, GTK_TREE_MODEL(um2store)); textRenderer = gtk_cell_renderer_text_new(); iconRenderer = gtk_cell_renderer_pixbuf_new(); column = gtk_tree_view_column_new(); gtk_tree_view_column_pack_start(column, iconRenderer, FALSE); gtk_tree_view_column_pack_start(column, textRenderer, TRUE); gtk_tree_view_column_add_attribute(column, iconRenderer, "gicon", UM_FAVICON); gtk_tree_view_column_add_attribute(column, textRenderer, "markup", UM_REQUEST_TITLE); gtk_tree_view_append_column(view, column); /* Fill in data */ um1hash = g_hash_table_new(g_str_hash, g_str_equal); um2hash = g_hash_table_new(g_str_hash, g_str_equal); (void)g_timeout_add_seconds(1, ui_update_monitor_update, NULL); } gtk_window_present(GTK_WINDOW(umdialog)); } liferea-1.12.7/src/ui/ui_update.h000066400000000000000000000022041352135647700165600ustar00rootroot00000000000000/** * @file ui_update.h GUI update monitor * * Copyright (C) 2006 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _UI_UPDATE_H #define _UI_UPDATE_H #include void on_close_update_monitor_clicked(GtkButton *button, gpointer user_data); void on_menu_show_update_monitor(GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_cancel_all_requests_clicked(GtkButton *button, gpointer user_data); #endif liferea-1.12.7/src/update.c000066400000000000000000000373571352135647700154620ustar00rootroot00000000000000/** * @file update.c generic update request and state processing * * Copyright (C) 2003-2014 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2009 Adrian Bunk * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "update.h" #include #include #include #include #include #include #include #include #if !defined (G_OS_WIN32) || defined (HAVE_SYS_WAIT_H) #include #endif #include #include "auth_activatable.h" #include "common.h" #include "debug.h" #include "net.h" #include "plugins_engine.h" #include "xml.h" #include "ui/liferea_shell.h" #if defined (G_OS_WIN32) && !defined (WIFEXITED) && !defined (WEXITSTATUS) #define WIFEXITED(x) (x != 0) #define WEXITSTATUS(x) (x) #endif /** global update job list, used for lookups when cancelling */ static GSList *jobs = NULL; static GAsyncQueue *pendingHighPrioJobs = NULL; static GAsyncQueue *pendingJobs = NULL; static guint numberOfActiveJobs = 0; #define MAX_ACTIVE_JOBS 5 /* update state interface */ updateStatePtr update_state_new (void) { return g_new0 (struct updateState, 1); } glong update_state_get_lastmodified (updateStatePtr state) { return state->lastModified; } void update_state_set_lastmodified (updateStatePtr state, glong lastModified) { state->lastModified = lastModified; } const gchar * update_state_get_etag (updateStatePtr state) { return state->etag; } void update_state_set_etag (updateStatePtr state, const gchar *etag) { g_free (state->etag); state->etag = NULL; if (etag) state->etag = g_strdup(etag); } void update_state_set_cache_maxage (updateStatePtr state, const gint maxage) { if (0 < maxage) state->maxAgeMinutes = maxage; else state->maxAgeMinutes = -1; } gint update_state_get_cache_maxage (updateStatePtr state) { return state->maxAgeMinutes; } const gchar * update_state_get_cookies (updateStatePtr state) { return state->cookies; } void update_state_set_cookies (updateStatePtr state, const gchar *cookies) { g_free (state->cookies); state->cookies = NULL; if (cookies) state->cookies = g_strdup (cookies); } updateStatePtr update_state_copy (updateStatePtr state) { updateStatePtr newState; newState = update_state_new (); update_state_set_lastmodified (newState, update_state_get_lastmodified (state)); update_state_set_cookies (newState, update_state_get_cookies (state)); update_state_set_etag (newState, update_state_get_etag (state)); return newState; } void update_state_free (updateStatePtr updateState) { if (!updateState) return; g_free (updateState->cookies); g_free (updateState->etag); g_free (updateState); } /* update request processing */ updateRequestPtr update_request_new (void) { return g_new0 (struct updateRequest, 1); } void update_request_free (updateRequestPtr request) { if (!request) return; update_state_free (request->updateState); update_options_free (request->options); g_free (request->postdata); g_free (request->source); g_free (request->filtercmd); g_free (request); } void update_request_set_source(updateRequestPtr request, const gchar* source) { g_free (request->source); request->source = g_strdup(source) ; } void update_request_set_auth_value(updateRequestPtr request, const gchar* authValue) { g_free(request->authValue); request->authValue = g_strdup(authValue); } updateResultPtr update_result_new (void) { updateResultPtr result; result = g_new0 (struct updateResult, 1); result->updateState = update_state_new (); return result; } void update_result_free (updateResultPtr result) { if (!result) return; update_state_free (result->updateState); g_free (result->data); g_free (result->source); g_free (result->contentType); g_free (result->filterErrors); g_free (result); } updateOptionsPtr update_options_copy (updateOptionsPtr options) { updateOptionsPtr newOptions; newOptions = g_new0 (struct updateOptions, 1); newOptions->username = g_strdup (options->username); newOptions->password = g_strdup (options->password); newOptions->dontUseProxy = options->dontUseProxy; return newOptions; } void update_options_free (updateOptionsPtr options) { if (!options) return; g_free (options->username); g_free (options->password); g_free (options); } /* update job handling */ static updateJobPtr update_job_new (gpointer owner, updateRequestPtr request, update_result_cb callback, gpointer user_data, updateFlags flags) { updateJobPtr job; job = g_new0 (struct updateJob, 1); job->owner = owner; job->request = request; job->result = update_result_new (); job->callback = callback; job->user_data = user_data; job->flags = flags; job->state = REQUEST_STATE_INITIALIZED; return job; } gint update_job_get_state (updateJobPtr job) { return job->state; } static void update_job_free (updateJobPtr job) { if (!job) return; jobs = g_slist_remove (jobs, job); update_request_free (job->request); update_result_free (job->result); g_free (job); } /* filter idea (and some of the code) was taken from Snownews */ static gchar * update_exec_filter_cmd (gchar *cmd, gchar *data, gchar **errorOutput, size_t *size) { int fd, status; gchar *command; const gchar *tmpdir = g_get_tmp_dir(); char *tmpfilename; char *out = NULL; FILE *file, *p; *errorOutput = NULL; tmpfilename = g_build_filename (tmpdir, "liferea-XXXXXX", NULL); fd = g_mkstemp(tmpfilename); if(fd == -1) { debug1(DEBUG_UPDATE, "Error opening temp file %s to use for filtering!", tmpfilename); *errorOutput = g_strdup_printf(_("Error opening temp file %s to use for filtering!"), tmpfilename); g_free(tmpfilename); return NULL; } file = fdopen(fd, "w"); fwrite(data, strlen(data), 1, file); fclose(file); *size = 0; command = g_strdup_printf("%s < %s", cmd, tmpfilename); p = popen(command, "r"); g_free(command); if(NULL != p) { while(!feof(p) && !ferror(p)) { size_t len; out = g_realloc(out, *size+1025); len = fread(&out[*size], 1, 1024, p); if(len > 0) *size += len; } status = pclose(p); if(!(WIFEXITED(status) && WEXITSTATUS(status) == 0)) { *errorOutput = g_strdup_printf(_("%s exited with status %d"), cmd, WEXITSTATUS(status)); *size = 0; } out[*size] = '\0'; } else { g_warning(_("Error: Could not open pipe \"%s\""), command); *errorOutput = g_strdup_printf(_("Error: Could not open pipe \"%s\""), command); } /* Clean up. */ unlink (tmpfilename); g_free (tmpfilename); return out; } static gchar * update_apply_xslt (updateJobPtr job) { xsltStylesheetPtr xslt = NULL; xmlOutputBufferPtr buf; xmlDocPtr srcDoc = NULL, resDoc = NULL; gchar *output = NULL; g_assert (NULL != job->result); do { srcDoc = xml_parse (job->result->data, job->result->size, NULL); if (!srcDoc) { g_warning("fatal: parsing request result XML source failed (%s)!", job->request->filtercmd); break; } /* load localization stylesheet */ xslt = xsltParseStylesheetFile (job->request->filtercmd); if (!xslt) { g_warning ("fatal: could not load filter stylesheet \"%s\"!", job->request->filtercmd); break; } resDoc = xsltApplyStylesheet (xslt, srcDoc, NULL); if (!resDoc) { g_warning ("fatal: applying stylesheet \"%s\" failed!", job->request->filtercmd); break; } buf = xmlAllocOutputBuffer (NULL); if (-1 == xsltSaveResultTo (buf, resDoc, xslt)) { g_warning ("fatal: retrieving result of filter stylesheet failed (%s)!", job->request->filtercmd); break; } #ifdef LIBXML2_NEW_BUFFER if (xmlOutputBufferGetSize (buf) > 0) output = xmlCharStrdup (xmlOutputBufferGetContent (buf)); #else if (xmlBufferLength (buf->buffer) > 0) output = xmlCharStrdup (xmlBufferContent (buf->buffer)); #endif xmlOutputBufferClose (buf); } while (FALSE); if (srcDoc) xmlFreeDoc (srcDoc); if (resDoc) xmlFreeDoc (resDoc); if (xslt) xsltFreeStylesheet (xslt); return output; } static void update_apply_filter (updateJobPtr job) { gchar *filterResult; size_t len = 0; g_assert (NULL == job->result->filterErrors); /* we allow two types of filters: XSLT stylesheets and arbitrary commands */ if ((strlen (job->request->filtercmd) > 4) && (0 == strcmp (".xsl", job->request->filtercmd + strlen (job->request->filtercmd) - 4))) { filterResult = update_apply_xslt (job); len = strlen (filterResult); } else { filterResult = update_exec_filter_cmd (job->request->filtercmd, job->result->data, &(job->result->filterErrors), &len); } if (filterResult) { g_free (job->result->data); job->result->data = filterResult; job->result->size = len; } } static void update_exec_cmd (updateJobPtr job) { FILE *f; int status; size_t len; job->result = update_result_new (); /* if the first char is a | we have a pipe else a file */ debug1 (DEBUG_UPDATE, "executing command \"%s\"...", (job->request->source) + 1); f = popen ((job->request->source) + 1, "r"); if (f) { while (!feof (f) && !ferror (f)) { job->result->data = g_realloc (job->result->data, job->result->size + 1025); len = fread (&job->result->data[job->result->size], 1, 1024, f); if (len > 0) job->result->size += len; } status = pclose (f); if (WIFEXITED (status) && WEXITSTATUS (status) == 0) job->result->httpstatus = 200; else job->result->httpstatus = 404; /* FIXME: maybe setting request->returncode would be better */ if (job->result->data) job->result->data[job->result->size] = '\0'; } else { liferea_shell_set_status_bar (_("Error: Could not open pipe \"%s\""), (job->request->source) + 1); job->result->httpstatus = 404; /* FIXME: maybe setting request->returncode would be better */ } update_process_finished_job (job); } static void update_load_file (updateJobPtr job) { gchar *filename = job->request->source; gchar *anchor; job->result = update_result_new (); if (!strncmp (filename, "file://",7)) filename += 7; anchor = strchr (filename, '#'); if (anchor) *anchor = 0; /* strip anchors from filenames */ if (g_file_test (filename, G_FILE_TEST_EXISTS)) { /* we have a file... */ if ((!g_file_get_contents (filename, &(job->result->data), &(job->result->size), NULL)) || (job->result->data[0] == '\0')) { job->result->httpstatus = 403; /* FIXME: maybe setting request->returncode would be better */ liferea_shell_set_status_bar (_("Error: Could not open file \"%s\""), filename); } else { job->result->httpstatus = 200; debug2 (DEBUG_UPDATE, "Successfully read %d bytes from file %s.", job->result->size, filename); } } else { liferea_shell_set_status_bar (_("Error: There is no file \"%s\""), filename); job->result->httpstatus = 404; /* FIXME: maybe setting request->returncode would be better */ } update_process_finished_job (job); } static void update_job_run (updateJobPtr job) { /* Here we decide on the source type and the proper execution methods which then do anything they want with the job and pass the processed job to update_process_finished_job() for result dequeuing */ /* everything starting with '|' is a local command */ if (*(job->request->source) == '|') { debug1 (DEBUG_UPDATE, "Recognized local command: %s", job->request->source); update_exec_cmd (job); return; } /* if it has a protocol "://" prefix, but not "file://" it is an URI */ if (strstr (job->request->source, "://") && strncmp (job->request->source, "file://", 7)) { network_process_request (job); return; } /* otherwise it must be a local file... */ { debug1 (DEBUG_UPDATE, "Recognized file URI: %s", job->request->source); update_load_file (job); return; } } static gboolean update_dequeue_job (gpointer user_data) { updateJobPtr job; if (!pendingJobs) return FALSE; /* we must be in shutdown */ if (numberOfActiveJobs >= MAX_ACTIVE_JOBS) return FALSE; /* we'll be called again when a job finishes */ job = (updateJobPtr)g_async_queue_try_pop(pendingHighPrioJobs); if (!job) job = (updateJobPtr)g_async_queue_try_pop(pendingJobs); if(!job) return FALSE; /* no request at the moment */ numberOfActiveJobs++; job->state = REQUEST_STATE_PROCESSING; debug1 (DEBUG_UPDATE, "processing request (%s)", job->request->source); if (job->callback == NULL) { update_process_finished_job (job); } else { update_job_run (job); } return FALSE; } updateJobPtr update_execute_request (gpointer owner, updateRequestPtr request, update_result_cb callback, gpointer user_data, updateFlags flags) { updateJobPtr job; g_assert (request->options != NULL); g_assert (request->source != NULL); job = update_job_new (owner, request, callback, user_data, flags); job->state = REQUEST_STATE_PENDING; jobs = g_slist_append (jobs, job); if (flags & FEED_REQ_PRIORITY_HIGH) { g_async_queue_push (pendingHighPrioJobs, (gpointer)job); } else { g_async_queue_push (pendingJobs, (gpointer)job); } g_idle_add (update_dequeue_job, NULL); return job; } void update_job_cancel_by_owner (gpointer owner) { GSList *iter = jobs; while (iter) { updateJobPtr job = (updateJobPtr)iter->data; if (job->owner == owner) job->callback = NULL; iter = g_slist_next (iter); } } static gboolean update_process_result_idle_cb (gpointer user_data) { updateJobPtr job = (updateJobPtr)user_data; if (job->callback) (job->callback) (job->result, job->user_data, job->flags); update_job_free (job); return FALSE; } static void update_apply_filter_async(GTask *task, gpointer src, gpointer tdata, GCancellable *ccan) { updateJobPtr job = tdata; update_apply_filter(job); g_task_return_int(task, 0); } static void update_apply_filter_finish(GObject *src, GAsyncResult *result, gpointer user_data) { updateJobPtr job = user_data; g_idle_add(update_process_result_idle_cb, job); } void update_process_finished_job (updateJobPtr job) { job->state = REQUEST_STATE_DEQUEUE; g_assert(numberOfActiveJobs > 0); numberOfActiveJobs--; g_idle_add (update_dequeue_job, NULL); /* Handling abandoned requests (e.g. after feed deletion) */ if (job->callback == NULL) { debug1 (DEBUG_UPDATE, "freeing cancelled request (%s)", job->request->source); update_job_free (job); return; } /* Finally execute the postfilter */ if (job->result->data && job->request->filtercmd) { GTask *task = g_task_new(NULL, NULL, update_apply_filter_finish, job); g_task_set_task_data(task, job, NULL); g_task_run_in_thread(task, update_apply_filter_async); g_object_unref(task); return; } g_idle_add (update_process_result_idle_cb, job); } void update_init (void) { pendingJobs = g_async_queue_new (); pendingHighPrioJobs = g_async_queue_new (); } void update_deinit (void) { GSList *iter = jobs; /* Cancel all jobs, to avoid async callbacks accessing the GUI */ while (iter) { updateJobPtr job = (updateJobPtr)iter->data; job->callback = NULL; iter = g_slist_next (iter); } g_async_queue_unref (pendingJobs); g_async_queue_unref (pendingHighPrioJobs); g_slist_free (jobs); jobs = NULL; } liferea-1.12.7/src/update.h000066400000000000000000000230171352135647700154530ustar00rootroot00000000000000/** * @file update.h generic update request and state processing * * Copyright (C) 2003-2014 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _UPDATE_H #define _UPDATE_H #include #include /* Update requests do represent feed updates, favicon and enclosure downloads. A request can be started synchronously or asynchronously. In the latter case it can be cancelled at any time. If the processing of a update request is done the request callback will be triggered. A request can have an update state assigned. This is to support the different bandwidth saving methods. For caching along feeds there are XML (de)serialization functions for the update state. For proxy support and authentication an update request can have update options assigned. Finally the request system has an on/offline state. When offline no new network requests are accepted. Filesystem and internal requests are still processed. Currently running downloads are not terminated. */ typedef enum { REQUEST_STATE_INITIALIZED = 0, /**< request struct newly created */ REQUEST_STATE_PENDING, /**< request added to download queue */ REQUEST_STATE_PROCESSING, /**< request currently in download */ REQUEST_STATE_DEQUEUE, /**< download finished, callback processing */ REQUEST_STATE_FINISHED /**< request processing finished */ } request_state; struct updateJob; struct updateResult; typedef guint32 updateFlags; /** * Generic update result processing callback type. * This callback must not free the result structure. It will be * free'd by the download system after the callback returns. * * @param result the update result * @param user_data update processing callback data * @param flags update processing flags */ typedef void (*update_result_cb) (const struct updateResult * const result, gpointer user_data, updateFlags flags); /** defines update options to be passed to an update request */ typedef struct updateOptions { gchar *username; /**< username for HTTP auth */ gchar *password; /**< password for HTTP auth */ gboolean dontUseProxy; /**< no proxy flag */ } *updateOptionsPtr; /** defines all state data an updatable object (e.g. a feed) needs */ typedef struct updateState { glong lastModified; /**< Last modified string as sent by the server */ GTimeVal lastPoll; /**< time at which the feed was last updated */ GTimeVal lastFaviconPoll; /**< time at which the feeds favicon was last updated */ gchar *cookies; /**< cookies to be used */ gchar *etag; /**< ETag sent by the server */ gint maxAgeMinutes; /**< default update interval, greatest value sourced from HTTP and XML */ gint synFrequency; /**< syn:updateFrequency */ gint synPeriod; /**< syn:updatePeriod */ gint timeToLive; /**< ttl */ } *updateStatePtr; /** structure describing a HTTP update request */ typedef struct updateRequest { gchar *source; /**< Location of the source. If it starts with '|', it is a command. If it contains "://", then it is parsed as a URL, otherwise it is a filename. Eventually, everything should be a URL. Use file:// and exec:// */ gchar *postdata; /**< HTTP POST request data (NULL for non-POST requests) */ gchar *authValue; /**< Custom value for Authorization: header */ updateOptionsPtr options; /**< Update options for the request */ gchar *filtercmd; /**< Command will filter output of URL */ updateStatePtr updateState; /**< Update state of the requested object (etags, last modified...) */ } *updateRequestPtr; /** structure to store results of the processing of an update request */ typedef struct updateResult { gchar *source; /**< Location of the downloaded document, in case of redirects different from the one given along with the update request */ int returncode; /**< Download status (0=success, otherwise error) */ int httpstatus; /**< HTTP status. Set to 200 for any valid command, file access, etc.... Set to 0 for unknown */ gchar *data; /**< Downloaded data */ size_t size; /**< Size of downloaded data */ gchar *contentType; /**< Content type of received data */ gchar *filterErrors; /**< Error messages from filter execution */ updateStatePtr updateState; /**< New update state of the requested object (etags, last modified...) */ } *updateResultPtr; /** structure describing an HTTP update job */ typedef struct updateJob { updateRequestPtr request; updateResultPtr result; gpointer owner; /**< owner of this job (used for matching when cancelling) */ update_result_cb callback; /**< result processing callback */ gpointer user_data; /**< result processing user data */ updateFlags flags; /**< request and result processing flags */ gint state; /**< State of the job (enum request_state) */ } *updateJobPtr; /** * Creates a new update state structure * * @return a new state structure (to be free'd using update_state_free()) */ updateStatePtr update_state_new (void); glong update_state_get_lastmodified (updateStatePtr state); void update_state_set_lastmodified (updateStatePtr state, glong lastmodified); const gchar * update_state_get_etag (updateStatePtr state); void update_state_set_etag (updateStatePtr state, const gchar *etag); gint update_state_get_cache_maxage (updateStatePtr state); void update_state_set_cache_maxage (updateStatePtr state, const gint maxage); const gchar * update_state_get_cookies (updateStatePtr state); void update_state_set_cookies (updateStatePtr state, const gchar *cookies); /** * Copies the given update state. * * @returns a new update state structure (to be free'd using update_state_free()) */ updateStatePtr update_state_copy (updateStatePtr state); /** * Frees the given update state. * * @param updateState the update state */ void update_state_free (updateStatePtr updateState); /** * Copies the given update options. * * @returns a new update options structure (to be free'd using update_options_free()) */ updateOptionsPtr update_options_copy (updateOptionsPtr options); /** * Frees the given update options * * @param options the update options */ void update_options_free (updateOptionsPtr options); /** * Initialises the download subsystem. * * Must be called before gtk_init() and after thread initialization * as threads are used and for proper network-manager initialization. */ void update_init (void); /** * Stops all update processing and frees all used memory. */ void update_deinit (void); /** * Creates a new request structure. * * @returns a new request (to be passed and free'd by update_execute_request()) */ updateRequestPtr update_request_new (void); /** * Free's the given update request. * * @param request the update request */ void update_request_free (updateRequestPtr request); /** * Sets the source for an updateRequest * * @param request the update request * @param source the new source */ void update_request_set_source(updateRequestPtr request, const gchar* source); /** * Sets a custom authorization header value. * * @param request the update request * @param authValue the authorization header value */ void update_request_set_auth_value(updateRequestPtr request, const gchar* authValue); /** * Creates a new update result for the given update request. * * @param request the update request * * @returns update result (to be free'd using update_result_free()) */ updateResultPtr update_result_new (void); /** * Free's the given update result. * * @param result the result */ void update_result_free (updateResultPtr result); /** * Executes the given request. The request might be * delayed if other requests are pending. * * @param owner request owner (allows cancelling, can be NULL) * @param request the request to execute * @param callback result processing callback * @param user_data result processing callback parameters (or NULL) * @param flags request/result processing flags * * @returns the new update job */ updateJobPtr update_execute_request (gpointer owner, updateRequestPtr request, update_result_cb callback, gpointer user_data, updateFlags flags); /* Update job handling */ /** * To be called when an update job has been executed. Triggers * the job specific result processing callback. * * @param job the update job */ void update_process_finished_job (updateJobPtr job); /** * Cancel all pending requests for the given owner. * * @param owner pointer passed in update_request_new() */ void update_job_cancel_by_owner (gpointer owner); /** * Method to query the update state of currently processed jobs. * * @returns update job state (see enum request_state) */ gint update_job_get_state (updateJobPtr job); #endif liferea-1.12.7/src/vfolder.c000066400000000000000000000164221352135647700156270ustar00rootroot00000000000000/** * @file vfolder.c search folder node type * * Copyright (C) 2003-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "vfolder.h" #include "common.h" #include "db.h" #include "debug.h" #include "feedlist.h" #include "itemset.h" #include "itemlist.h" #include "node.h" #include "rule.h" #include "vfolder_loader.h" #include "ui/icons.h" #include "ui/search_folder_dialog.h" /** The list of all existing vfolders. Used for updating vfolder information upon item changes */ static GSList *vfolders = NULL; vfolderPtr vfolder_new (nodePtr node) { vfolderPtr vfolder; debug_enter ("vfolder_new"); vfolder = g_new0 (struct vfolder, 1); vfolder->itemset = g_new0 (struct itemSet, 1); vfolder->itemset->nodeId = node->id; vfolder->itemset->ids = NULL; vfolder->itemset->anyMatch = TRUE; vfolder->node = node; vfolders = g_slist_append (vfolders, vfolder); if (!node->title) node_set_title (node, _("New Search Folder")); /* set default title */ node_set_data (node, (gpointer) vfolder); debug_exit ("vfolder_new"); return vfolder; } static void vfolder_import_rules (xmlNodePtr cur, vfolderPtr vfolder) { xmlChar *matchType, *type, *ruleId, *value, *additive; matchType = xmlGetProp (cur, BAD_CAST"matchType"); if (matchType) { /* currently we only OR or AND the rules, "any" is the value for OR'ing, "all" for AND'ing */ vfolder->itemset->anyMatch = (0 != xmlStrcmp (matchType, BAD_CAST"all")); } else { vfolder->itemset->anyMatch = TRUE; } xmlFree (matchType); /* process any children */ cur = cur->xmlChildrenNode; while (cur) { if (!xmlStrcmp (cur->name, BAD_CAST"outline")) { type = xmlGetProp (cur, BAD_CAST"type"); if (type && !xmlStrcmp (type, BAD_CAST"rule")) { ruleId = xmlGetProp (cur, BAD_CAST"rule"); value = xmlGetProp (cur, BAD_CAST"value"); additive = xmlGetProp (cur, BAD_CAST"additive"); if (ruleId && value) { debug2 (DEBUG_CACHE, "loading rule \"%s\" \"%s\"", ruleId, value); if (additive && !xmlStrcmp (additive, BAD_CAST"true")) itemset_add_rule (vfolder->itemset, ruleId, value, TRUE); else itemset_add_rule (vfolder->itemset, ruleId, value, FALSE); } else { g_warning ("ignoring invalid rule entry for vfolder \"%s\"...\n", node_get_title (vfolder->node)); } xmlFree (ruleId); xmlFree (value); xmlFree (additive); } xmlFree (type); } cur = cur->next; } } static itemSetPtr vfolder_load (nodePtr node) { return db_search_folder_load (node->id); } void vfolder_foreach (nodeActionFunc func) { GSList *iter = vfolders; g_assert (NULL != func); while (iter) { vfolderPtr vfolder = (vfolderPtr)iter->data; (*func)(vfolder->node); iter = g_slist_next (iter); } } GSList * vfolder_get_all_with_item_id (itemPtr item) { GSList *result = NULL; GSList *iter = vfolders; while (iter) { vfolderPtr vfolder = (vfolderPtr)iter->data; if (itemset_check_item (vfolder->itemset, item)) result = g_slist_append (result, vfolder); iter = g_slist_next (iter); } return result; } GSList * vfolder_get_all_without_item_id (itemPtr item) { GSList *result = NULL; GSList *iter = vfolders; while (iter) { vfolderPtr vfolder = (vfolderPtr)iter->data; if (!itemset_check_item (vfolder->itemset, item)) result = g_slist_append (result, vfolder); iter = g_slist_next (iter); } return result; } static void vfolder_import (nodePtr node, nodePtr parent, xmlNodePtr cur, gboolean trusted) { vfolderPtr vfolder; debug1 (DEBUG_CACHE, "import vfolder: title=%s", node_get_title (node)); vfolder = vfolder_new (node); /* We use the itemset only to keep itemset rules, not to have the items in memory! Maybe the itemset<->filtering dependency is not a good idea... */ vfolder_import_rules (cur, vfolder); } static void vfolder_export (nodePtr node, xmlNodePtr cur, gboolean trusted) { vfolderPtr vfolder = (vfolderPtr) node->data; xmlNodePtr ruleNode; rulePtr rule; GSList *iter; debug_enter ("vfolder_export"); g_assert (TRUE == trusted); xmlNewProp (cur, BAD_CAST"matchType", BAD_CAST (vfolder->itemset->anyMatch?"any":"all")); iter = vfolder->itemset->rules; while (iter) { rule = iter->data; ruleNode = xmlNewChild (cur, NULL, BAD_CAST"outline", NULL); xmlNewProp (ruleNode, BAD_CAST"type", BAD_CAST "rule"); xmlNewProp (ruleNode, BAD_CAST"text", BAD_CAST rule->ruleInfo->title); xmlNewProp (ruleNode, BAD_CAST"rule", BAD_CAST rule->ruleInfo->ruleId); xmlNewProp (ruleNode, BAD_CAST"value", BAD_CAST rule->value); if (rule->additive) xmlNewProp (ruleNode, BAD_CAST"additive", BAD_CAST "true"); else xmlNewProp (ruleNode, BAD_CAST"additive", BAD_CAST "false"); iter = g_slist_next (iter); } debug1 (DEBUG_CACHE, "adding vfolder: title=%s", node_get_title (node)); debug_exit ("vfolder_export"); } void vfolder_reset (vfolderPtr vfolder) { itemlist_unload (FALSE); g_list_free (vfolder->itemset->ids); vfolder->itemset->ids = NULL; db_search_folder_reset (vfolder->node->id); } void vfolder_rebuild (nodePtr node) { vfolderPtr vfolder = (vfolderPtr)node->data; vfolder_reset (vfolder); itemlist_add_search_result (vfolder_loader_new (node)); } static void vfolder_free (nodePtr node) { vfolderPtr vfolder = (vfolderPtr) node->data; debug_enter ("vfolder_free"); vfolders = g_slist_remove (vfolders, vfolder); itemset_free (vfolder->itemset); debug_exit ("vfolder_free"); } /* implementation of the node type interface */ static void vfolder_save (nodePtr node) { } static void vfolder_update_counters (nodePtr node) { /* There is no unread handling for search folders for performance * reasons.So set everything to 0 here and don't bother with GUI * updates... */ node->needsUpdate = TRUE; node->unreadCount = 0; node->itemCount = db_search_folder_get_item_count (node->id); } static void vfolder_remove (nodePtr node) { vfolder_reset (node->data); } static void vfolder_properties (nodePtr node) { search_folder_dialog_new (node); } static gboolean vfolder_add (void) { nodePtr node; node = node_new (vfolder_get_node_type ()); vfolder_new (node); vfolder_properties (node); return TRUE; } nodeTypePtr vfolder_get_node_type (void) { static struct nodeType nti = { NODE_CAPABILITY_SHOW_ITEM_FAVICONS | NODE_CAPABILITY_SHOW_ITEM_COUNT, "vfolder", NULL, vfolder_import, vfolder_export, vfolder_load, vfolder_save, vfolder_update_counters, vfolder_remove, node_default_render, vfolder_add, vfolder_properties, vfolder_free }; nti.icon = icon_get (ICON_VFOLDER); return &nti; } liferea-1.12.7/src/vfolder.h000066400000000000000000000061251352135647700156330ustar00rootroot00000000000000/** * @file vfolder.h search folder node type * * Copyright (C) 2003-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _VFOLDER_H #define _VFOLDER_H #include #include "itemset.h" #include "node_type.h" /* The search folder implementation of Liferea is similar to the one in Evolution. Search folders are effectivly permanent searches. As Liferea realizes filtered lists of items using rule based itemsets, search folders are effectively persistent rule based itemsets. GUI wise a search folder is a type of node in the subscription list. */ /** search folder data structure */ typedef struct vfolder { struct node *node; /**< the feed list node of this search folder */ itemSetPtr itemset; /**< the itemset with the rules and matching items */ gboolean reloading; /**< if the search folder is in async reloading */ gulong loadOffset; /**< when in reloading: current offset */ } *vfolderPtr; /** * Sets up a new search folder structure. * * @param node the feed list node of the search folder * * @returns a new search folder structure */ vfolderPtr vfolder_new (struct node *node); /** * Method to unconditionally invoke an node callback for all search folders. * * @param func callback */ void vfolder_foreach (nodeActionFunc func); typedef void (*vfolderActionDataFunc) (vfolderPtr vfolder, itemPtr item); /** * Returns a list of all search folders currently matching the given item. * * @param item the item * * @returns a list of vfolderPtr (to be free'd using g_slist_free()) */ GSList * vfolder_get_all_with_item_id (itemPtr item); /** * Returns a list of all search folders currently not matching the given item. * * @param item the item * * @returns a list of vfolderPtr (to be free'd using g_slist_free()) */ GSList * vfolder_get_all_without_item_id (itemPtr item); /** * Resets vfolder state. Drops all items from it. * To be called after vfolder_(add|remove)_rule(). * * @param vfolder search folder to reset */ void vfolder_reset (vfolderPtr vfolder); /** * Rebuilds a search folder by scanning all existing items. * * @param vfolder search folder to rebuild */ void vfolder_rebuild (nodePtr node); /* implementation of the node type interface */ #define IS_VFOLDER(node) (node->type == vfolder_get_node_type ()) /** * Returns the node type implementation for search folder nodes. */ nodeTypePtr vfolder_get_node_type (void); #endif liferea-1.12.7/src/vfolder_loader.c000066400000000000000000000051601352135647700171520ustar00rootroot00000000000000/** * @file vfolder_loader.c Loader for search folder items * * Copyright (C) 2011-2012 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "vfolder_loader.h" #include "db.h" #include "debug.h" #include "itemset.h" #include "node.h" #include "vfolder.h" #include "ui/feed_list_node.h" #define VFOLDER_LOADER_BATCH_SIZE 100 static gboolean vfolder_loader_fetch_cb (gpointer user_data, GSList **resultItems) { vfolderPtr vfolder = (vfolderPtr)user_data; itemSetPtr items = g_new0 (struct itemSet, 1); GList *iter; gboolean result; /* 1. Fetch a batch of items */ result = db_itemset_get (items, vfolder->loadOffset, VFOLDER_LOADER_BATCH_SIZE); vfolder->loadOffset += VFOLDER_LOADER_BATCH_SIZE; if (result) { /* 2. Match all items against search folder */ iter = items->ids; while (iter) { gulong id = GPOINTER_TO_UINT (iter->data); itemPtr item = db_item_load (id); if (itemset_check_item (vfolder->itemset, item)) *resultItems = g_slist_append (*resultItems, item); else item_unload (item); iter = g_list_next (iter); } } else { debug1 (DEBUG_CACHE, "search folder '%s' reload complete", vfolder->node->title); vfolder->reloading = FALSE; } itemset_free (items); /* 3. Save items to DB and update UI (except for search results) */ if (vfolder->node) { db_search_folder_add_items (vfolder->node->id, *resultItems); node_update_counters (vfolder->node); feed_list_node_update (vfolder->node->id); } return result; /* FALSE on last fetch */ } ItemLoader * vfolder_loader_new (nodePtr node) { vfolderPtr vfolder = (vfolderPtr)node->data; if(vfolder->reloading) { debug1 (DEBUG_CACHE, "search folder '%s' still reloading", node->title); return NULL; } debug1 (DEBUG_CACHE, "search folder '%s' reload started", node->title); vfolder_reset (vfolder); vfolder->reloading = TRUE; vfolder->loadOffset = 0; return item_loader_new (vfolder_loader_fetch_cb, node, vfolder); } liferea-1.12.7/src/vfolder_loader.h000066400000000000000000000022121352135647700171520ustar00rootroot00000000000000/** * @file vfolder_loader.h Loader for search folder items * * Copyright (C) 2011 Lars Windolf * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _VFOLDER_LOADER_H #define _VFOLDER_LOADER_H #include "item_loader.h" #include "node.h" /** * Create a new item loader for the given search folder node. * * @param vfolder the search folder to load * * @returns an ItemLoader instance */ ItemLoader * vfolder_loader_new (nodePtr vfolder); #endif liferea-1.12.7/src/webkit/000077500000000000000000000000001352135647700153025ustar00rootroot00000000000000liferea-1.12.7/src/webkit/Makefile.am000066400000000000000000000005561352135647700173440ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in SUBDIRS = web_extension AM_CPPFLAGS = -I$(top_srcdir)/src $(PACKAGE_CFLAGS) $(WEBKIT_CFLAGS) -DWEB_EXTENSIONS_DIR=\""$(pkglibdir)/web-extension"\" noinst_LIBRARIES = libwebkit.a libwebkit_a_SOURCES = webkit.c liferea_web_view.c liferea_web_view.h libwebkit_a_CFLAGS = $(PACKAGE_CFLAGS) $(WEBKIT_CFLAGS) liferea-1.12.7/src/webkit/liferea_web_view.c000066400000000000000000000511671352135647700207560ustar00rootroot00000000000000/** * @file liferea_web_view.c Webkit2 widget for Liferea * * Copyright (C) 2016 Leiaz * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "liferea_web_view.h" #include "browser.h" #include "common.h" #include "enclosure.h" #include "feedlist.h" #include "social.h" #include "ui/browser_tabs.h" #include "ui/liferea_htmlview.h" #include "ui/item_list_view.h" #include "ui/itemview.h" #include "web_extension/liferea_web_extension_names.h" struct _LifereaWebView { WebKitWebView parent; GActionGroup *menu_action_group; GDBusConnection *dbus_connection; }; struct _LifereaWebViewClass { WebKitWebViewClass parent_class; }; G_DEFINE_TYPE (LifereaWebView, liferea_web_view, WEBKIT_TYPE_WEB_VIEW) static void liferea_web_view_finalize(GObject *gobject) { LifereaWebView *self = LIFEREA_WEB_VIEW(gobject); if (self->dbus_connection) { g_object_remove_weak_pointer (G_OBJECT (self->dbus_connection), (gpointer *) &self->dbus_connection); } /* Chaining fianlize from parent class. */ G_OBJECT_CLASS(liferea_web_view_parent_class)->finalize(gobject); } static void liferea_web_view_class_init(LifereaWebViewClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); gobject_class->finalize = liferea_web_view_finalize; } static void can_copy_callback (GObject *web_view, GAsyncResult *result, gpointer user_data) { gboolean enabled; GError *error = NULL; GActionGroup *action_group; GSimpleAction *copy_action; enabled = webkit_web_view_can_execute_editing_command_finish (WEBKIT_WEB_VIEW (web_view), result, &error); if (error) { g_warning ("Error can_execute_editing_command callback : %s\n", error->message); g_error_free (error); return; } action_group = LIFEREA_WEB_VIEW (web_view)->menu_action_group; copy_action = G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (action_group), "copy-selection")); g_simple_action_set_enabled (copy_action, enabled); } static void liferea_web_view_update_actions_sensitivity (LifereaWebView *self) { webkit_web_view_can_execute_editing_command ( WEBKIT_WEB_VIEW (self), WEBKIT_EDITING_COMMAND_COPY, NULL, can_copy_callback, NULL); } /* * Copied from liferea_htmlview.c Perhaps could go in common.h ? */ static gboolean liferea_web_view_is_special_url (const gchar *url) { /* match against all special protocols, simple convention: all have to start with "liferea-" */ if (url == strstr (url, "liferea-")) return TRUE; return FALSE; } static void menu_add_item (GMenu *menu, const gchar *label, const gchar *action, const gchar *parameter) { GMenuItem *menu_item; menu_item = g_menu_item_new (label, NULL); g_menu_item_set_action_and_target (menu_item, action, "s", parameter); g_menu_append_item (menu, menu_item); g_object_unref (menu_item); } /** * Callback for WebKitWebView::context-menu signal. * * @view: the object on which the signal is emitted * @context_menu: the context menu proposed by WebKit * @event: the event that triggered the menu * @hit_result: result of hit test at that location. * * When a context menu is about to be displayed this signal is emitted. * */ static gboolean liferea_web_view_on_menu (WebKitWebView *view, WebKitContextMenu *context_menu, GdkEvent *event, WebKitHitTestResult *hit_result, gpointer user_data) { GtkWidget *menu; GMenu *menu_model,*section; gchar *image_uri = NULL; gchar *link_uri = NULL; gchar *link_title = NULL; gboolean link, image; if (webkit_hit_test_result_context_is_link (hit_result)) g_object_get (hit_result, "link-uri", &link_uri, "link-title", &link_title, NULL); if (webkit_hit_test_result_context_is_image (hit_result)) g_object_get (hit_result, "image-uri", &image_uri, NULL); if (webkit_hit_test_result_context_is_media (hit_result)) g_object_get (hit_result, "media-uri", &link_uri, NULL); /* treat media as normal link */ /* Making the menu */ link = (link_uri != NULL); image = (image_uri != NULL); /* do not expose internal links */ if (link_uri && liferea_web_view_is_special_url (link_uri) && !g_str_has_prefix (link_uri, "javascript:") && !g_str_has_prefix (link_uri, "data:")) link = FALSE; liferea_web_view_update_actions_sensitivity (LIFEREA_WEB_VIEW (view)); menu_model = g_menu_new (); section = g_menu_new (); /* Sections are used to get separators.*/ /* and now add all we want to see */ if (link) { gchar *path; GMenuItem *menu_item; menu_add_item (section, _("Open Link In _Tab"), "app.open-link-in-tab", link_uri); menu_add_item (section, _("Open Link In Browser"), "app.open-link-in-browser", link_uri); menu_add_item (section, _("Open Link In External Browser"), "app.open-link-in-external-browser", link_uri); g_menu_append_section (menu_model, NULL, G_MENU_MODEL (section)); g_object_unref (section); section = g_menu_new (); path = g_strdup_printf (_("_Bookmark Link at %s"), social_get_bookmark_site ()); menu_item = g_menu_item_new (path, NULL); g_menu_item_set_action_and_target (menu_item, "app.social-bookmark-link", "(ss)", link_uri, link_title?link_title:""); g_menu_append_item (section, menu_item); g_object_unref (menu_item); g_free (path); menu_add_item (section, _("_Copy Link Location"), "app.copy-link-to-clipboard", link_uri); } if (image) { menu_add_item (section, _("_View Image"), "app.open-link-in-tab", image_uri); menu_add_item (section, _("_Copy Image Location"), "app.copy-link-to-clipboard", image_uri); } if (link) { menu_add_item (section, _("S_ave Link As"), "liferea_web_view.save-link", link_uri); } if (image) { menu_add_item (section, _("S_ave Image As"), "liferea_web_view.save-link", image_uri); } if (link) { g_menu_append_section (menu_model, NULL, G_MENU_MODEL (section)); g_object_unref (section); section = g_menu_new (); menu_add_item (section, _("_Subscribe..."), "liferea_web_view.subscribe-link", link_uri); } if(!link && !image) { g_menu_append (section, _("_Copy"), "liferea_web_view.copy-selection"); g_menu_append_section (menu_model, NULL, G_MENU_MODEL (section)); g_object_unref (section); section = g_menu_new (); g_menu_append (section, _("_Increase Text Size"), "liferea_web_view.zoom-in"); g_menu_append (section, _("_Decrease Text Size"), "liferea_web_view.zoom-out"); } g_menu_append_section (menu_model, NULL, G_MENU_MODEL (section)); g_object_unref (section); g_free (link_uri); g_free (image_uri); g_free (link_title); menu = gtk_menu_new_from_model (G_MENU_MODEL (menu_model)); gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (view), NULL); gtk_menu_popup(GTK_MENU (menu), NULL,NULL,NULL,NULL, ((GdkEventButton *)event)->button, ((GdkEventButton*)event)->time); return TRUE; // TRUE to ignore WebKit's menu as we make our own menu. } static void on_popup_copy_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { webkit_web_view_execute_editing_command (WEBKIT_WEB_VIEW (user_data), WEBKIT_EDITING_COMMAND_COPY); } static void on_popup_save_link_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { enclosure_download (NULL, g_variant_get_string (parameter, NULL), TRUE); } static void on_popup_subscribe_link_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { feedlist_add_subscription (g_variant_get_string (parameter, NULL), NULL, NULL, 0); } static void on_popup_zoomin_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { LifereaHtmlView *htmlview = g_object_get_data (G_OBJECT (user_data), "htmlview"); liferea_htmlview_do_zoom (htmlview, TRUE); } static void on_popup_zoomout_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { LifereaHtmlView *htmlview = g_object_get_data (G_OBJECT (user_data), "htmlview"); liferea_htmlview_do_zoom (htmlview, FALSE); } static const GActionEntry liferea_web_view_gaction_entries[] = { {"save-link", on_popup_save_link_activate, "s", NULL, NULL}, {"subscribe-link", on_popup_subscribe_link_activate, "s", NULL, NULL}, {"copy-selection", on_popup_copy_activate, NULL, NULL, NULL}, {"zoom-in", on_popup_zoomin_activate, NULL, NULL, NULL}, {"zoom-out", on_popup_zoomout_activate, NULL, NULL, NULL} }; static void liferea_web_view_title_changed (WebKitWebView *view, GParamSpec *pspec, gpointer user_data) { LifereaHtmlView *htmlview; gchar *title; htmlview = g_object_get_data (G_OBJECT (view), "htmlview"); g_object_get (view, "title", &title, NULL); liferea_htmlview_title_changed (htmlview, title); g_free (title); } /* * Callback for the mouse-target-changed signal. * * Updates selected_url with hovered link. */ static void liferea_web_view_on_mouse_target_changed (WebKitWebView *view, WebKitHitTestResult *hit_result, guint modifiers, gpointer user_data) { LifereaHtmlView *htmlview; gchar *selected_url; htmlview = g_object_get_data (G_OBJECT (view), "htmlview"); selected_url = g_object_get_data (G_OBJECT (view), "selected_url"); if (selected_url) g_free (selected_url); if (webkit_hit_test_result_context_is_link (hit_result)) { g_object_get (hit_result, "link-uri", &selected_url, NULL); } else { selected_url = g_strdup (""); } /* overwrite or clear last status line text */ liferea_htmlview_on_url (htmlview, selected_url); g_object_set_data (G_OBJECT (view), "selected_url", selected_url); } struct FullscreenData { GtkWidget *me; gboolean visible; }; /** * callback for fullscreen mode gtk_container_foreach() */ static void fullscreen_toggle_widget_visible(GtkWidget *wid, gpointer user_data) { gchar* data_label; struct FullscreenData *fdata; gboolean old_v; gchar *propName; fdata = user_data; // remove shadow of scrolled window if (GTK_IS_SCROLLED_WINDOW(wid)) { GtkShadowType shadow_type; data_label = "fullscreen_shadow_type"; propName = "shadow-type"; if (fdata->visible == FALSE) { g_object_get(G_OBJECT(wid), propName, &shadow_type, NULL); g_object_set(G_OBJECT(wid), propName, GTK_SHADOW_NONE, NULL); g_object_set_data(G_OBJECT(wid), data_label, GINT_TO_POINTER(shadow_type)); } else { shadow_type = GPOINTER_TO_INT(g_object_steal_data( G_OBJECT(wid), data_label)); if (shadow_type && shadow_type != GTK_SHADOW_NONE) { g_object_set(G_OBJECT(wid), propName, shadow_type, NULL); } } } if (wid == fdata->me && !GTK_IS_NOTEBOOK(wid)) { return; } data_label = "fullscreen_visible"; if (GTK_IS_NOTEBOOK(wid)) { propName = "show-tabs"; } else { propName = "visible"; } if (fdata->visible == FALSE) { g_object_get(G_OBJECT(wid), propName, &old_v, NULL); g_object_set(G_OBJECT(wid), propName, FALSE, NULL); g_object_set_data(G_OBJECT(wid), data_label, GINT_TO_POINTER(old_v)); } else { old_v = GPOINTER_TO_INT(g_object_steal_data( G_OBJECT(wid), data_label)); if (old_v == TRUE) { g_object_set(G_OBJECT(wid), propName, TRUE, NULL); } } } /** * For fullscreen mode, hide everything except the current webview */ static void fullscreen_toggle_parent_visible(GtkWidget *me, gboolean visible) { GtkWidget *parent; struct FullscreenData *fdata; fdata = (struct FullscreenData *)g_new0(struct FullscreenData, 1); // Flag fullscreen status g_object_set_data(G_OBJECT(me), "fullscreen_on", GINT_TO_POINTER(!visible)); parent = gtk_widget_get_parent(me); fdata->visible = visible; while (parent != NULL) { fdata->me = me; gtk_container_foreach(GTK_CONTAINER(parent), (GtkCallback)fullscreen_toggle_widget_visible, (gpointer)fdata); me = parent; parent = gtk_widget_get_parent(me); } g_free(fdata); } /** * WebKitWebView "enter-fullscreen" signal * Hide all the widget except current WebView */ static gboolean liferea_web_view_entering_fullscreen (WebKitWebView *view, gpointer user_data) { fullscreen_toggle_parent_visible(GTK_WIDGET(view), FALSE); return FALSE; } /** * WebKitWebView "leave-fullscreen" signal * Restore visibility of hidden widgets */ static gboolean liferea_web_view_leaving_fullscreen (WebKitWebView *view, gpointer user_data) { fullscreen_toggle_parent_visible(GTK_WIDGET(view), TRUE); return FALSE; } /** * A link has been clicked * * When a link has been clicked the link management is dispatched to Liferea * core in order to manage the different filetypes, remote URLs. */ static gboolean liferea_web_view_link_clicked ( WebKitWebView *view, WebKitPolicyDecision *policy_decision) { const gchar *uri; WebKitNavigationAction *navigation_action; WebKitURIRequest *request; WebKitNavigationType reason; gboolean url_handled; g_return_val_if_fail (WEBKIT_IS_WEB_VIEW (view), FALSE); g_return_val_if_fail (WEBKIT_IS_POLICY_DECISION (policy_decision), FALSE); navigation_action = webkit_navigation_policy_decision_get_navigation_action (WEBKIT_NAVIGATION_POLICY_DECISION (policy_decision)); reason = webkit_navigation_action_get_navigation_type (navigation_action); /* iframes in items return WEBKIT_WEB_NAVIGATION_REASON_OTHER and shouldn't be handled as clicks */ if (reason != WEBKIT_NAVIGATION_TYPE_LINK_CLICKED) return FALSE; request = webkit_navigation_action_get_request (navigation_action); uri = webkit_uri_request_get_uri (request); if (webkit_navigation_action_get_mouse_button (navigation_action) == 2) { /* middle click */ browser_tabs_add_new (uri, uri, FALSE); webkit_policy_decision_ignore (policy_decision); return TRUE; } url_handled = liferea_htmlview_handle_URL (g_object_get_data (G_OBJECT (view), "htmlview"), uri); if (url_handled) webkit_policy_decision_ignore (policy_decision); return url_handled; } /** * A new window was requested. This is the case e.g. if the link * has target="_blank". In that case, we don't open the link in a new * tab, but do what the user requested as if it didn't have a target. */ static gboolean liferea_web_view_new_window_requested ( WebKitWebView *view, WebKitPolicyDecision *policy_decision) { WebKitNavigationAction *navigation_action; WebKitURIRequest *request; const gchar *uri; navigation_action = webkit_navigation_policy_decision_get_navigation_action (WEBKIT_NAVIGATION_POLICY_DECISION (policy_decision)); request = webkit_navigation_action_get_request (navigation_action); uri = webkit_uri_request_get_uri (request); if (webkit_navigation_action_get_mouse_button (navigation_action) == 2) { /* middle-click, let's open the link in a new tab */ browser_tabs_add_new (uri, uri, FALSE); } else if (liferea_htmlview_handle_URL (g_object_get_data (G_OBJECT (view), "htmlview"), uri)) { /* The link is to be opened externally, let's do nothing here */ } else { /* If the link is not to be opened in a new tab, nor externally, * it was likely a normal click on a target="_blank" link. * Let's open it in the current view to not disturb users */ webkit_web_view_load_uri (view, uri); } /* We handled the request ourselves */ webkit_policy_decision_ignore (policy_decision); return TRUE; } static gboolean liferea_web_view_response_decision_requested (WebKitWebView *view, WebKitPolicyDecision *decision) { g_return_val_if_fail (WEBKIT_IS_RESPONSE_POLICY_DECISION (decision), FALSE); if (!webkit_response_policy_decision_is_mime_type_supported (WEBKIT_RESPONSE_POLICY_DECISION (decision))) { webkit_policy_decision_download (decision); return TRUE; } return FALSE; } static gboolean liferea_web_view_decide_policy (WebKitWebView *view, WebKitPolicyDecision *decision, WebKitPolicyDecisionType type) { switch (type) { case WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION: return liferea_web_view_link_clicked (view, decision); case WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION: return liferea_web_view_new_window_requested(view, decision); case WEBKIT_POLICY_DECISION_TYPE_RESPONSE: return liferea_web_view_response_decision_requested (view, decision); default: return FALSE; } return FALSE; } /** * e.g. after a click on javascript:openZoom() */ static WebKitWebView* liferea_web_view_create_web_view (WebKitWebView *view, WebKitNavigationAction *action, gpointer user_data) { LifereaHtmlView *htmlview; GtkWidget *container; GtkWidget *htmlwidget; GList *children; htmlview = browser_tabs_add_new (NULL, NULL, TRUE); container = liferea_htmlview_get_widget (htmlview); /* Ugly lookup of the webview. LifereaHtmlView uses a GtkBox with first a URL bar (sometimes invisble) and the HTML renderer as 2nd child */ children = gtk_container_get_children (GTK_CONTAINER (container)); htmlwidget = children->next->data; return WEBKIT_WEB_VIEW (htmlwidget); } static void liferea_webkit_load_status_changed (WebKitWebView *view, WebKitLoadEvent event, gpointer user_data) { LifereaHtmlView *htmlview; gboolean isFullscreen; switch (event) { case WEBKIT_LOAD_STARTED: // Hack to force webview exit from fullscreen mode on new page isFullscreen = GPOINTER_TO_INT(g_object_steal_data( G_OBJECT(view), "fullscreen_on")); if (isFullscreen == TRUE) { webkit_web_view_run_javascript (view, "document.webkitExitFullscreen();", NULL, NULL, NULL); } break; case WEBKIT_LOAD_COMMITTED: htmlview = g_object_get_data (G_OBJECT (view), "htmlview"); liferea_htmlview_location_changed (htmlview, webkit_web_view_get_uri (view)); break; default: break; } } static void liferea_web_view_init(LifereaWebView *self) { self->dbus_connection = NULL; g_signal_connect ( self, "context-menu", G_CALLBACK (liferea_web_view_on_menu), NULL ); /* Context menu actions */ self->menu_action_group = G_ACTION_GROUP (g_simple_action_group_new ()); g_action_map_add_action_entries (G_ACTION_MAP(self->menu_action_group), liferea_web_view_gaction_entries, G_N_ELEMENTS (liferea_web_view_gaction_entries), self); gtk_widget_insert_action_group (GTK_WIDGET (self), "liferea_web_view", self->menu_action_group); g_signal_connect ( self, "notify::title", G_CALLBACK (liferea_web_view_title_changed), NULL ); g_signal_connect ( self, "mouse-target-changed", G_CALLBACK (liferea_web_view_on_mouse_target_changed), NULL ); g_signal_connect ( self, "enter-fullscreen", G_CALLBACK (liferea_web_view_entering_fullscreen), NULL ); g_signal_connect ( self, "leave-fullscreen", G_CALLBACK (liferea_web_view_leaving_fullscreen), NULL ); g_signal_connect ( self, "decide-policy", G_CALLBACK (liferea_web_view_decide_policy), NULL ); g_signal_connect ( self, "create", G_CALLBACK (liferea_web_view_create_web_view), NULL ); g_signal_connect ( self, "load-changed", G_CALLBACK (liferea_webkit_load_status_changed), NULL ); } static void scroll_pagedown_callback (GObject *source_object, GAsyncResult *res, gpointer user_data) { GVariant *result = NULL; GError *error = NULL; gboolean scrolled; result = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source_object), res, &error); if (result == NULL) { g_warning ("Error invoking scrollPageDown: %s\n", error->message); g_error_free (error); return; } g_variant_get (result, "(b)", &scrolled); if (!scrolled) { on_next_unread_item_activate (NULL, NULL, NULL); } } void liferea_web_view_scroll_pagedown (LifereaWebView *self) { if (!self->dbus_connection) return; g_dbus_connection_call (self->dbus_connection, LIFEREA_WEB_EXTENSION_BUS_NAME, LIFEREA_WEB_EXTENSION_OBJECT_PATH, LIFEREA_WEB_EXTENSION_INTERFACE_NAME, "ScrollPageDown", g_variant_new ("(t)", webkit_web_view_get_page_id (WEBKIT_WEB_VIEW (self))), ((const GVariantType *) "(b)"), G_DBUS_CALL_FLAGS_NONE, -1, /* Default timeout */ NULL, scroll_pagedown_callback, NULL); } void liferea_web_view_set_dbus_connection (LifereaWebView *self, GDBusConnection *connection) { if (self->dbus_connection) { g_object_remove_weak_pointer (G_OBJECT (self->dbus_connection), (gpointer *) &self->dbus_connection); } self->dbus_connection = connection; g_object_add_weak_pointer (G_OBJECT (self->dbus_connection), (gpointer *) &self->dbus_connection); } LifereaWebView * liferea_web_view_new () { return g_object_new(LIFEREA_TYPE_WEB_VIEW, NULL); } liferea-1.12.7/src/webkit/liferea_web_view.h000066400000000000000000000035171352135647700207570ustar00rootroot00000000000000/** * @file liferea_web_view.h Webkit2 widget for Liferea * * Copyright (C) 2016 Leiaz * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _LIFEREA_WEB_VIEW_H #define _LIFEREA_WEB_VIEW_H #include #define LIFEREA_TYPE_WEB_VIEW liferea_web_view_get_type () #define LIFEREA_WEB_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIFEREA_TYPE_WEB_VIEW, LifereaWebView)) #define IS_LIFEREA_WEB_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LIFEREA_TYPE_WEB_VIEW)) #define LIFEREA_WEB_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LIFEREA_TYPE_WEB_VIEW, LifereaWebViewClass)) #define IS_LIFEREA_WEB_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LIFEREA_TYPE_WEB_VIEW)) #define LIFEREA_WEB_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LIFEREA_TYPE_WEB_VIEW, LifereaWebViewClass)) typedef struct _LifereaWebView LifereaWebView; typedef struct _LifereaWebViewClass LifereaWebViewClass; GType liferea_web_view_get_type (void); LifereaWebView * liferea_web_view_new (void); void liferea_web_view_set_dbus_connection (LifereaWebView *self, GDBusConnection *connection); void liferea_web_view_scroll_pagedown (LifereaWebView *self); #endif liferea-1.12.7/src/webkit/web_extension/000077500000000000000000000000001352135647700201535ustar00rootroot00000000000000liferea-1.12.7/src/webkit/web_extension/Makefile.am000066400000000000000000000006501352135647700222100ustar00rootroot00000000000000webextension_LTLIBRARIES = liblifereawebextension.la webextensiondir = $(pkglibdir)/web-extension liblifereawebextension_la_SOURCES = web_extension_main.c liferea_web_extension.c liferea_web_extension.h liferea_web_extension_names.h liblifereawebextension_la_CFLAGS = $(WEB_EXTENSION_CFLAGS) liblifereawebextension_la_LIBADD = $(WEB_EXTENSION_LIBS) liblifereawebextension_la_LDFLAGS = -module -avoid-version -no-undefined liferea-1.12.7/src/webkit/web_extension/liferea_web_extension.c000066400000000000000000000221061352135647700246600ustar00rootroot00000000000000/** * @file liferea_web_extension.c Control WebKit2 via DBUS from Liferea * * Copyright (C) 2016 Leiaz * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #define WEBKIT_DOM_USE_UNSTABLE_API #include #include "liferea_web_extension.h" #include "liferea_web_extension_names.h" struct _LifereaWebExtension { GObject parent; GDBusConnection *connection; WebKitWebExtension *webkit_extension; GArray *pending_pages_created; gboolean initialized; GSettings *liferea_settings; }; struct _LifereaWebExtensionClass { GObjectClass parent_class; }; G_DEFINE_TYPE (LifereaWebExtension, liferea_web_extension, G_TYPE_OBJECT) static const char introspection_xml[] = "" " " " " " " " " " " " " " " " " " " ""; static void liferea_web_extension_dispose (GObject *object) { LifereaWebExtension *extension = LIFEREA_WEB_EXTENSION (object); g_clear_object (&extension->connection); g_clear_object (&extension->webkit_extension); g_clear_object (&extension->liferea_settings); } static void liferea_web_extension_class_init (LifereaWebExtensionClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = liferea_web_extension_dispose; } static void liferea_web_extension_init (LifereaWebExtension *self) { self->webkit_extension = NULL; self->connection = NULL; self->pending_pages_created = NULL; self->initialized = FALSE; self->liferea_settings = g_settings_new ("net.sf.liferea"); } static WebKitDOMDOMWindow* liferea_web_extension_get_dom_window (LifereaWebExtension *self, guint64 page_id) { WebKitWebPage *page; WebKitDOMDocument *document; WebKitDOMDOMWindow *window; page = webkit_web_extension_get_page (self->webkit_extension, page_id); document = webkit_web_page_get_dom_document (page); window = webkit_dom_document_get_default_view (document); return window; } /* * \returns TRUE if scrolling happened, FALSE if the end was reached */ static gboolean liferea_web_extension_scroll_page_down (LifereaWebExtension *self, guint64 page_id) { glong old_scroll_y, new_scroll_y, increment; WebKitDOMDOMWindow *window; window = liferea_web_extension_get_dom_window (self, page_id); old_scroll_y = webkit_dom_dom_window_get_scroll_y (window); increment = webkit_dom_dom_window_get_inner_height (window); webkit_dom_dom_window_scroll_by (window, 0, increment); new_scroll_y = webkit_dom_dom_window_get_scroll_y (window); return (new_scroll_y > old_scroll_y); } static gboolean on_authorize_authenticated_peer (GDBusAuthObserver *observer, GIOStream *stream, GCredentials *credentials, gpointer extension) { gboolean authorized = FALSE; GCredentials *own_credentials = NULL; GError *error = NULL; if (!credentials) { g_warning ("No credentials received from Liferea.\n"); return FALSE; } own_credentials = g_credentials_new (); if (g_credentials_is_same_user (credentials, own_credentials, &error)) { authorized = TRUE; } else { g_warning ("Error authorizing connection to Liferea : %s\n", error->message); g_error_free (error); } g_object_unref (own_credentials); return authorized; } static void handle_dbus_method_call (GDBusConnection *connection, const gchar *sender, const gchar *object_path, const gchar *interface_name, const gchar *method_name, GVariant *parameters, GDBusMethodInvocation *invocation, gpointer user_data) { if (g_strcmp0 (method_name, "ScrollPageDown") == 0) { guint64 page_id; gboolean scrolled; g_variant_get (parameters, "(t)", &page_id); scrolled = liferea_web_extension_scroll_page_down (LIFEREA_WEB_EXTENSION (user_data), page_id); g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", scrolled)); } } static const GDBusInterfaceVTable interface_vtable = { handle_dbus_method_call, NULL, NULL }; static void liferea_web_extension_emit_page_created (LifereaWebExtension *extension, guint64 page_id) { g_dbus_connection_emit_signal ( extension->connection, NULL, LIFEREA_WEB_EXTENSION_OBJECT_PATH, LIFEREA_WEB_EXTENSION_INTERFACE_NAME, "PageCreated", g_variant_new ("(t)", page_id), NULL); } static void liferea_web_extension_queue_page_created (LifereaWebExtension *extension, guint64 page_id) { if (!extension->pending_pages_created) { extension->pending_pages_created = g_array_new (FALSE, FALSE, sizeof (guint64)); } g_array_append_val (extension->pending_pages_created, page_id); } static void liferea_web_extension_emit_pending_pages_created (LifereaWebExtension *extension) { guint i; if (!extension->pending_pages_created) return; for (i = 0;ipending_pages_created->len;++i) { guint64 page_id = g_array_index (extension->pending_pages_created, guint64, i); liferea_web_extension_emit_page_created (extension, page_id); } g_array_free (extension->pending_pages_created, TRUE); extension->pending_pages_created = NULL; } static gboolean on_send_request (WebKitWebPage *web_page, WebKitURIRequest *request, WebKitURIResponse *redirected_response, gpointer web_extension) { SoupMessageHeaders *headers = webkit_uri_request_get_http_headers (request); gboolean do_not_track; do_not_track = g_settings_get_boolean ( LIFEREA_WEB_EXTENSION (web_extension)->liferea_settings, "do-not-track"); if (do_not_track && headers) { soup_message_headers_append (headers, "DNT", "1"); } return FALSE; } static void on_page_created (WebKitWebExtension *webkit_extension, WebKitWebPage *web_page, gpointer extension) { guint64 page_id; g_signal_connect ( web_page, "send-request", G_CALLBACK (on_send_request), extension ); page_id = webkit_web_page_get_id (web_page); if (LIFEREA_WEB_EXTENSION (extension)->connection) { liferea_web_extension_emit_page_created (LIFEREA_WEB_EXTENSION (extension), page_id); } else { liferea_web_extension_queue_page_created (LIFEREA_WEB_EXTENSION (extension), page_id); } } static void on_dbus_connection_created (GObject *source_object, GAsyncResult *result, gpointer user_data) { GDBusNodeInfo *introspection_data = NULL; GDBusConnection *connection = NULL; guint registration_id = 0; GError *error = NULL; LifereaWebExtension *extension = LIFEREA_WEB_EXTENSION (user_data); introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL); connection = g_dbus_connection_new_for_address_finish (result, &error); if (error) { g_warning ("Extension failed to connect : %s", error->message); g_error_free (error); return; } registration_id = g_dbus_connection_register_object (connection, LIFEREA_WEB_EXTENSION_OBJECT_PATH, introspection_data->interfaces[0], &interface_vtable, extension, NULL, &error); g_dbus_node_info_unref (introspection_data); if (!registration_id) { g_warning ("Failed to register web extension object: %s\n", error->message); g_error_free (error); g_object_unref (connection); return; } extension->connection = connection; liferea_web_extension_emit_pending_pages_created (extension); } static gpointer liferea_web_extension_new (gpointer data) { return g_object_new (LIFEREA_TYPE_WEB_EXTENSION, NULL); } LifereaWebExtension * liferea_web_extension_get (void) { static GOnce init_once = G_ONCE_INIT; g_once (&init_once, liferea_web_extension_new, NULL); return init_once.retval; } void liferea_web_extension_initialize (LifereaWebExtension *extension, WebKitWebExtension *webkit_extension, const gchar *server_address) { if (extension->initialized) return; g_signal_connect ( webkit_extension, "page-created", G_CALLBACK (on_page_created), extension); GDBusAuthObserver *observer; extension->initialized = TRUE; extension->webkit_extension = g_object_ref (webkit_extension); observer = g_dbus_auth_observer_new (); g_signal_connect ( observer, "authorize-authenticated-peer", G_CALLBACK (on_authorize_authenticated_peer), extension); g_dbus_connection_new_for_address ( server_address, G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, observer, NULL, (GAsyncReadyCallback)on_dbus_connection_created, extension); g_object_unref (observer); } liferea-1.12.7/src/webkit/web_extension/liferea_web_extension.h000066400000000000000000000037531352135647700246740ustar00rootroot00000000000000/** * @file liferea_web_extension.h Control WebKit2 via DBUS from Liferea * * Copyright (C) 2016 Leiaz * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _LIFEREA_WEB_EXTENSION_H #define _LIFEREA_WEB_EXTENSION_H #include #include #define LIFEREA_TYPE_WEB_EXTENSION liferea_web_extension_get_type () #define LIFEREA_WEB_EXTENSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIFEREA_TYPE_WEB_EXTENSION, LifereaWebExtension)) #define IS_LIFEREA_WEB_EXTENSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LIFEREA_TYPE_WEB_EXTENSION)) #define LIFEREA_WEB_EXTENSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LIFEREA_TYPE_WEB_EXTENSION, LifereaWebExtensionClass)) #define IS_LIFEREA_WEB_EXTENSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LIFEREA_TYPE_WEB_EXTENSION)) #define LIFEREA_WEB_EXTENSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LIFEREA_TYPE_WEB_EXTENSION, LifereaWebExtensionClass)) typedef struct _LifereaWebExtension LifereaWebExtension; typedef struct _LifereaWebExtensionClass LifereaWebExtensionClass; GType liferea_web_extension_get_type (void); LifereaWebExtension* liferea_web_extension_get (void); void liferea_web_extension_initialize (LifereaWebExtension *extension, WebKitWebExtension *webkit_extension, const gchar *server_address); #endif liferea-1.12.7/src/webkit/web_extension/liferea_web_extension_names.h000066400000000000000000000022021352135647700260430ustar00rootroot00000000000000/** * @file liferea_web_extension_names.h Control WebKit2 via DBUS from Liferea * * Copyright (C) 2016 Leiaz * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _LIFEREA_WEB_EXTENSION_NAMES_H #define _LIFEREA_WEB_EXTENSION_NAMES_H #define LIFEREA_WEB_EXTENSION_OBJECT_PATH "/net/sf/liferea/WebExtension" #define LIFEREA_WEB_EXTENSION_BUS_NAME "net.sf.liferea.WebExtension" #define LIFEREA_WEB_EXTENSION_INTERFACE_NAME "net.sf.liferea.WebExtension" #endif liferea-1.12.7/src/webkit/web_extension/web_extension_main.c000066400000000000000000000025341352135647700242000ustar00rootroot00000000000000/** * @file web_extension_main.c Control WebKit2 via DBUS from Liferea * * Copyright (C) 2016 Leiaz * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "liferea_web_extension.h" static LifereaWebExtension *extension = NULL; G_MODULE_EXPORT void webkit_web_extension_initialize_with_user_data (WebKitWebExtension *webkit_extension, GVariant *userdata) { extension = liferea_web_extension_get (); liferea_web_extension_initialize (extension, webkit_extension, g_variant_get_string (userdata, NULL)); } static void __attribute__((destructor)) web_extension_shutdown (void) { if (extension) g_object_unref (extension); } liferea-1.12.7/src/webkit/webkit.c000066400000000000000000000416031352135647700167370ustar00rootroot00000000000000/** * @file webkit.c WebKit2 browser module for Liferea * * Copyright (C) 2016 Leiaz * Copyright (C) 2007-2010 Lars Windolf * Copyright (C) 2008 Lars Strojny * Copyright (C) 2009-2012 Emilio Pozuelo Monfort * Copyright (C) 2009 Adrian Bunk * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "browser.h" #include "conf.h" #include "common.h" #include "enclosure.h" /* Only for enclosure_download */ #include "ui/browser_tabs.h" #include "ui/liferea_htmlview.h" #include "web_extension/liferea_web_extension_names.h" #include "liferea_web_view.h" #define LIFEREA_TYPE_WEBKIT_IMPL liferea_webkit_impl_get_type () #define LIFEREA_WEBKIT_IMPL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIFEREA_TYPE_WEBKIT_IMPL, LifereaWebKitImpl)) #define IS_LIFEREA_WEBKIT_IMPL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LIFEREA_TYPE_WEBKIT_IMPL)) #define LIFEREA_WEBKIT_IMPL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LIFEREA_TYPE_WEBKIT_IMPL, LifereaWebKitImplClass)) #define IS_LIFEREA_WEBKIT_IMPL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LIFEREA_TYPE_WEBKIT_IMPL)) #define LIFEREA_WEBKIT_IMPL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LIFEREA_TYPE_WEBKIT_IMPL, LifereaWebKitImplClass)) typedef struct _LifereaWebKitImpl { GObject parent; WebKitSettings *settings; GDBusServer *dbus_server; GList *dbus_connections; } LifereaWebKitImpl; typedef struct _LifereaWebKitImplClass { GObjectClass parent_class; } LifereaWebKitImplClass; G_DEFINE_TYPE (LifereaWebKitImpl, liferea_webkit_impl, G_TYPE_OBJECT) enum { PAGE_CREATED_SIGNAL, N_SIGNALS }; static guint liferea_webkit_impl_signals [N_SIGNALS]; static void liferea_webkit_impl_dispose (GObject *gobject) { LifereaWebKitImpl *self = LIFEREA_WEBKIT_IMPL(gobject); g_object_unref (self->settings); g_clear_object (&self->dbus_server); g_list_free_full (self->dbus_connections, g_object_unref); /* Chaining dispose from parent class. */ G_OBJECT_CLASS(liferea_webkit_impl_parent_class)->dispose(gobject); } static void liferea_webkit_impl_class_init (LifereaWebKitImplClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); GType signal_params[2] = {G_TYPE_POINTER, G_TYPE_UINT64}; liferea_webkit_impl_signals[PAGE_CREATED_SIGNAL] = g_signal_newv ( "page-created", LIFEREA_TYPE_WEBKIT_IMPL, G_SIGNAL_RUN_FIRST, NULL, NULL, NULL, NULL, G_TYPE_NONE, 2, signal_params); gobject_class->dispose = liferea_webkit_impl_dispose; } static LifereaWebKitImpl * liferea_webkit_impl_new (void) { return g_object_new (LIFEREA_TYPE_WEBKIT_IMPL,NULL); } /** * Update the settings object if the preferences change. * This will affect all the webviews as they all use the same * settings object. */ static void liferea_webkit_disable_javascript_cb (GSettings *gsettings, gchar *key, gpointer webkit_settings) { g_return_if_fail (key != NULL); g_object_set ( webkit_settings, "enable-javascript", !g_settings_get_boolean (gsettings, key), NULL ); } /** * Update the settings object if the preferences change. * This will affect all the webviews as they all use the same * settings object. */ static void liferea_webkit_enable_plugins_cb (GSettings *gsettings, gchar *key, gpointer webkit_settings) { g_return_if_fail (key != NULL); g_object_set ( webkit_settings, "enable-plugins", g_settings_get_boolean (gsettings, key), NULL ); } /* Font size math from Epiphany embed/ephy-embed-prefs.c to get font size in * pixels according to actual screen dpi. */ static gdouble get_screen_dpi (GdkScreen *screen) { gdouble dpi; gdouble dp, di; dpi = gdk_screen_get_resolution (screen); if (dpi != -1) return dpi; dp = hypot (gdk_screen_get_width (screen), gdk_screen_get_height (screen)); di = hypot (gdk_screen_get_width_mm (screen), gdk_screen_get_height_mm (screen)) / 25.4; return dp / di; } static guint normalize_font_size (gdouble font_size) { /* WebKit2 uses font sizes in pixels. */ GdkScreen *screen; gdouble dpi; /* FIXME: We should use the view screen instead of the detault one * but we don't have access to the view here. */ screen = gdk_screen_get_default (); dpi = screen ? get_screen_dpi (screen) : 96; return font_size / 72.0 * dpi; } static gchar * webkit_get_font (guint *size) { gchar *font = NULL; *size = 11; /* default fallback */ /* font configuration support */ conf_get_str_value (USER_FONT, &font); if (NULL == font || 0 == strlen (font)) { if (NULL != font) { g_free (font); font = NULL; } conf_get_default_font_from_schema (DEFAULT_FONT, &font); } if (font) { /* The GTK2/GNOME font name format is " " */ gchar *tmp = strrchr(font, ' '); if (tmp) { *tmp++ = 0; *size = atoi(tmp); } } return font; } static gboolean liferea_webkit_authorize_authenticated_peer (GDBusAuthObserver *observer, GIOStream *stream, GCredentials *credentials, gpointer user_data) { gboolean authorized = FALSE; GCredentials *own_credentials = NULL; GError *error = NULL; if (!credentials) { g_printerr ("No credentials received from web extension.\n"); return FALSE; } own_credentials = g_credentials_new (); if (g_credentials_is_same_user (credentials, own_credentials, &error)) { authorized = TRUE; } else { g_printerr ("Error authorizing web extension : %s\n", error->message); g_error_free (error); } g_object_unref (own_credentials); return authorized; } static void liferea_webkit_on_dbus_connection_close (GDBusConnection *connection, gboolean remote_peer_vanished, GError *error, gpointer user_data) { LifereaWebKitImpl *webkit_impl = LIFEREA_WEBKIT_IMPL (user_data); if (!remote_peer_vanished && error) { g_warning ("DBus connection closed with error : %s", error->message); } webkit_impl->dbus_connections = g_list_remove (webkit_impl->dbus_connections, connection); g_object_unref (connection); } static void liferea_webkit_emit_page_created (GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data) { guint64 page_id; LifereaWebKitImpl *webkit_impl = LIFEREA_WEBKIT_IMPL (user_data); g_variant_get (parameters, "(t)", &page_id); g_signal_emit (webkit_impl, liferea_webkit_impl_signals[PAGE_CREATED_SIGNAL], 0, (gpointer) connection, page_id); } static void on_page_created (LifereaWebKitImpl *instance, GDBusConnection *connection, guint64 page_id, gpointer web_view) { if (webkit_web_view_get_page_id (WEBKIT_WEB_VIEW (web_view)) == page_id) { liferea_web_view_set_dbus_connection (LIFEREA_WEB_VIEW (web_view), connection); } } static gboolean liferea_webkit_on_new_dbus_connection (GDBusServer *server, GDBusConnection *connection, gpointer user_data) { LifereaWebKitImpl *webkit_impl = LIFEREA_WEBKIT_IMPL (user_data); webkit_impl->dbus_connections = g_list_append (webkit_impl->dbus_connections, g_object_ref (connection)); g_signal_connect (connection, "closed", G_CALLBACK (liferea_webkit_on_dbus_connection_close), webkit_impl); g_dbus_connection_signal_subscribe ( connection, NULL, LIFEREA_WEB_EXTENSION_INTERFACE_NAME, "PageCreated", LIFEREA_WEB_EXTENSION_OBJECT_PATH, NULL, G_DBUS_SIGNAL_FLAGS_NONE, (GDBusSignalCallback)liferea_webkit_emit_page_created, webkit_impl, NULL); return TRUE; } static void liferea_webkit_initialize_web_extensions (WebKitWebContext *context, gpointer user_data) { gchar *guid = NULL; gchar *address = NULL; gchar *server_address = NULL; GError *error = NULL; GDBusAuthObserver *observer = NULL; LifereaWebKitImpl *webkit_impl = LIFEREA_WEBKIT_IMPL (user_data); guid = g_dbus_generate_guid (); address = g_strdup_printf ("unix:tmpdir=%s", g_get_tmp_dir ()); observer = g_dbus_auth_observer_new (); g_signal_connect (observer, "authorize-authenticated-peer", G_CALLBACK (liferea_webkit_authorize_authenticated_peer), NULL); webkit_impl->dbus_server = g_dbus_server_new_sync (address, G_DBUS_SERVER_FLAGS_NONE,//Flags guid, observer, NULL, //Cancellable &error); g_free (guid); g_free (address); g_object_unref (observer); if (webkit_impl->dbus_server == NULL) { g_printerr ("Error creating DBus server : %s\n", error->message); g_error_free (error); return; } g_dbus_server_start (webkit_impl->dbus_server); g_signal_connect (webkit_impl->dbus_server, "new-connection", G_CALLBACK (liferea_webkit_on_new_dbus_connection), webkit_impl); webkit_web_context_set_web_extensions_directory (context, WEB_EXTENSIONS_DIR); server_address = g_strdup (g_dbus_server_get_client_address (webkit_impl->dbus_server)); webkit_web_context_set_web_extensions_initialization_user_data (context, g_variant_new_take_string (server_address)); } static void liferea_webkit_impl_download_started (WebKitWebContext *context, WebKitDownload *download, gpointer user_data) { WebKitURIRequest *request = webkit_download_get_request (download); webkit_download_cancel (download); enclosure_download (NULL, webkit_uri_request_get_uri (request), TRUE); } static void liferea_webkit_impl_init (LifereaWebKitImpl *self) { gboolean disable_javascript, enable_plugins; gchar *font; guint fontSize; WebKitSecurityManager *security_manager; self->dbus_connections = NULL; self->settings = webkit_settings_new (); font = webkit_get_font (&fontSize); security_manager = webkit_web_context_get_security_manager (webkit_web_context_get_default ()); webkit_security_manager_register_uri_scheme_as_local (security_manager, "liferea"); if (font) { g_object_set ( self->settings, "default-font-family", font, NULL ); g_object_set ( self->settings, "default-font-size", normalize_font_size (fontSize), NULL ); g_free (font); } g_object_set ( self->settings, "minimum-font-size", normalize_font_size (7), NULL ); conf_get_bool_value (DISABLE_JAVASCRIPT, &disable_javascript); g_object_set ( self->settings, "enable-javascript", !disable_javascript, NULL ); conf_get_bool_value (ENABLE_PLUGINS, &enable_plugins); g_object_set ( self->settings, "enable-plugins", enable_plugins, NULL ); conf_signal_connect ( "changed::" DISABLE_JAVASCRIPT, G_CALLBACK (liferea_webkit_disable_javascript_cb), self->settings ); conf_signal_connect ( "changed::" ENABLE_PLUGINS, G_CALLBACK (liferea_webkit_enable_plugins_cb), self->settings ); /* Webkit web extensions */ g_signal_connect ( webkit_web_context_get_default (), "initialize-web-extensions", G_CALLBACK (liferea_webkit_initialize_web_extensions), self); g_signal_connect ( webkit_web_context_get_default (), "download-started", G_CALLBACK (liferea_webkit_impl_download_started), self); } static LifereaWebKitImpl *liferea_webkit_impl = NULL; /** * HTML renderer init method */ static void liferea_webkit_init (void) { g_assert (!liferea_webkit_impl); liferea_webkit_impl = liferea_webkit_impl_new (); } /** * Load HTML string into the rendering scrollpane * * Load an HTML string into the web view. This is used to render * HTML documents created internally. */ static void liferea_webkit_write_html ( GtkWidget *webview, const gchar *string, const guint length, const gchar *base, const gchar *content_type ) { // FIXME Avoid doing a copy ? GBytes *string_bytes = g_bytes_new (string, length); /* Note: we explicitely ignore the passed base URL because we don't need it as Webkit supports
and throws a security exception when accessing file:// with a non-file:// base URL */ webkit_web_view_load_bytes (WEBKIT_WEB_VIEW (webview), string_bytes, content_type, "UTF-8", "liferea://"); g_bytes_unref (string_bytes); } /** * Initializes WebKit * * Initializes the WebKit HTML rendering engine. Creates a WebKitWebView. */ static GtkWidget * liferea_webkit_new (LifereaHtmlView *htmlview) { WebKitWebView *view; view = WEBKIT_WEB_VIEW (liferea_web_view_new ()); webkit_web_view_set_settings (view, liferea_webkit_impl->settings); webkit_settings_set_user_agent_with_application_details (liferea_webkit_impl->settings, "Liferea", VERSION); g_signal_connect_object ( liferea_webkit_impl, "page-created", G_CALLBACK (on_page_created), view, G_CONNECT_AFTER); /** Pass LifereaHtmlView into the WebKitWebView object */ g_object_set_data ( G_OBJECT (view), "htmlview", htmlview ); gtk_widget_show (GTK_WIDGET (view)); return GTK_WIDGET (view); } /** * Launch URL */ static void liferea_webkit_launch_url (GtkWidget *webview, const gchar *url) { // FIXME: hack to make URIs like "gnome.org" work // https://bugs.webkit.org/show_bug.cgi?id=24195 gchar *http_url; if (!strstr (url, "://")) { http_url = g_strdup_printf ("http://%s", url); } else { http_url = g_strdup (url); } webkit_web_view_load_uri ( WEBKIT_WEB_VIEW (webview), http_url ); g_free (http_url); } /** * Change zoom level of the HTML scrollpane */ static void liferea_webkit_change_zoom_level (GtkWidget *webview, gfloat zoom_level) { webkit_web_view_set_zoom_level (WEBKIT_WEB_VIEW (webview), zoom_level); } /** * Copy selected text to the clipboard */ static void liferea_webkit_copy_selection (GtkWidget *webview) { webkit_web_view_execute_editing_command (WEBKIT_WEB_VIEW (webview), WEBKIT_EDITING_COMMAND_COPY); } /** * Return current zoom level as a float */ static gfloat liferea_webkit_get_zoom_level (GtkWidget *webview) { return webkit_web_view_get_zoom_level (WEBKIT_WEB_VIEW (webview)); } /** * Scroll page down (via shortcut key) */ static void liferea_webkit_scroll_pagedown (GtkWidget *webview) { liferea_web_view_scroll_pagedown (LIFEREA_WEB_VIEW (webview)); } static void liferea_webkit_set_proxy (ProxyDetectMode mode, const gchar *host, guint port, const gchar *user, const gchar *pwd) { #if WEBKIT_CHECK_VERSION (2, 15, 3) WebKitNetworkProxySettings *proxy_settings = NULL; gchar *proxy_uri = NULL; gchar *user_pass = NULL, *host_port = NULL; switch (mode) { case PROXY_DETECT_MODE_AUTO: webkit_web_context_set_network_proxy_settings (webkit_web_context_get_default (), WEBKIT_NETWORK_PROXY_MODE_DEFAULT, NULL); break; case PROXY_DETECT_MODE_NONE: webkit_web_context_set_network_proxy_settings (webkit_web_context_get_default (), WEBKIT_NETWORK_PROXY_MODE_NO_PROXY, NULL); break; case PROXY_DETECT_MODE_MANUAL: /* Construct user:password part of the URI if specified. */ if (user) { user_pass = g_uri_escape_string (user, NULL, TRUE); if (pwd) { gchar *enc_user = user_pass; gchar *enc_pass = g_uri_escape_string (pwd, NULL, TRUE); user_pass = g_strdup_printf ("%s:%s", enc_user, enc_pass); g_free (enc_user); g_free (enc_pass); } } /* Construct the host:port part of the URI. */ if (port) { host_port = g_strdup_printf ("%s:%d", host, port); } else { host_port = g_strdup (host); } /* Construct proxy URI. */ if (user) { proxy_uri = g_strdup_printf("http://%s@%s", user_pass, host_port); } else { proxy_uri = g_strdup_printf("http://%s", host_port); } g_free (user_pass); g_free (host_port); proxy_settings = webkit_network_proxy_settings_new (proxy_uri, NULL); g_free (proxy_uri); webkit_web_context_set_network_proxy_settings (webkit_web_context_get_default (), WEBKIT_NETWORK_PROXY_MODE_CUSTOM, proxy_settings); webkit_network_proxy_settings_free (proxy_settings); break; } #endif } static struct htmlviewImpl webkitImpl = { .init = liferea_webkit_init, .create = liferea_webkit_new, .write = liferea_webkit_write_html, .launch = liferea_webkit_launch_url, .zoomLevelGet = liferea_webkit_get_zoom_level, .zoomLevelSet = liferea_webkit_change_zoom_level, .hasSelection = NULL, /* Was only useful for the context menu, can be removed */ .copySelection = liferea_webkit_copy_selection, /* Same. */ .scrollPagedown = liferea_webkit_scroll_pagedown, .setProxy = liferea_webkit_set_proxy, .setOffLine = NULL // FIXME: blocked on https://bugs.webkit.org/show_bug.cgi?id=18893 }; DECLARE_HTMLVIEW_IMPL (webkitImpl); liferea-1.12.7/src/xml.c000066400000000000000000000376401352135647700147730ustar00rootroot00000000000000/** * @file xml.c XML helper methods for Liferea * * Copyright (C) 2003-2016 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "xml.h" #include #include #include #include #include #include #include #include #include #include "common.h" #include "debug.h" static void xml_buffer_parse_error(void *ctxt, const gchar * msg, ...); xmlDocPtr xhtml_parse (const gchar *html, gint len) { xmlDocPtr out = NULL; g_assert (html != NULL); g_assert (len >= 0); /* Note: NONET is not implemented so it will return an error because it doesn't know how to handle NONET. But, it might learn in the future. */ out = htmlReadMemory (html, len, NULL, "utf-8", HTML_PARSE_RECOVER | HTML_PARSE_NONET | ((debug_level & DEBUG_HTML)?0:(HTML_PARSE_NOERROR | HTML_PARSE_NOWARNING))); return out; } static xmlNodePtr xhtml_find_body (xmlDocPtr doc) { xmlXPathContextPtr xpathCtxt = NULL; xmlXPathObjectPtr xpathObj = NULL; xmlNodePtr node = NULL; xpathCtxt = xmlXPathNewContext (doc); if (!xpathCtxt) goto error; xpathObj = xmlXPathEvalExpression ("/html/body", xpathCtxt); if (!xpathObj) goto error; if (!xpathObj->nodesetval->nodeMax) goto error; node = xpathObj->nodesetval->nodeTab[0]; error: if (xpathObj) xmlXPathFreeObject (xpathObj); if (xpathCtxt) xmlXPathFreeContext (xpathCtxt); return node; } gchar * xhtml_extract (xmlNodePtr xml, gint xhtmlMode, const gchar *defaultBase) { xmlBufferPtr buf; xmlChar *xml_base = NULL; gchar *result = NULL; xmlNs *ns; /* Create the new document and add the div tag*/ xmlDocPtr newDoc = xmlNewDoc (BAD_CAST "1.0" ); xmlNodePtr divNode = xmlNewNode (NULL, BAD_CAST "div"); xmlDocSetRootElement (newDoc, divNode); xmlNewNs (divNode, BAD_CAST "http://www.w3.org/1999/xhtml", NULL); /* Set the xml:base of the div tag */ xml_base = xmlNodeGetBase (xml->doc, xml); if (xml_base) { xmlNodeSetBase (divNode, xml_base ); xmlFree (xml_base); } else if (defaultBase) xmlNodeSetBase (divNode, defaultBase); if (xhtmlMode == 0) { /* Read escaped HTML and convert to XHTML, placing in a div tag */ xmlDocPtr oldDoc; xmlNodePtr copiedNodes = NULL; xmlChar *escapedhtml; /* Parse the HTML into oldDoc*/ escapedhtml = xmlNodeListGetString (xml->doc, xml->xmlChildrenNode, 1); if (escapedhtml) { escapedhtml = g_strstrip (escapedhtml); /* stripping whitespaces to make empty string detection easier */ if (*escapedhtml) { /* never process empty content, xmlDocCopy() doesn't like it... */ xmlNodePtr body; oldDoc = xhtml_parse (escapedhtml, strlen (escapedhtml)); body = xhtml_find_body (oldDoc); /* Copy namespace from original documents root node. This is to determine additional namespaces for item content. For example to handle RSS 2.0 feeds as provided by LiveJournal: ... ... ... <span class='ljuser' lj:user='someone' style='white-space: nowrap;'><a href='http://community.livejournal.com/someone/profile'><img src='http://stat.livejournal.com/img/community.gif' alt='[info]' width='16' height='16' style='vertical-align: bottom; border: 0; padding-right: 2px;' /></a><a href='http://community.livejournal.com/someone/'><b>someone</b></a></span> ... ... ... Then we will want to extract and need to honour the xmlns:lj definition... */ ns = (xmlDocGetRootElement (xml->doc))->nsDef; while (ns) { xmlNewNs (divNode, ns->href, ns->prefix); ns = ns->next; } if (body) { /* Copy in the html tags */ copiedNodes = xmlDocCopyNodeList (newDoc, body->xmlChildrenNode); // FIXME: is the above correct? Why only operate on the first child node? // It might be unproblematic because all content is wrapped in a
... xmlAddChildList (divNode, copiedNodes); } xmlFreeDoc (oldDoc); xmlFree (escapedhtml); } } } else if (xhtmlMode == 1 || xhtmlMode == 2) { /* Read multiple XHTML tags and embed in div tag */ xmlNodePtr copiedNodes = xmlDocCopyNodeList (newDoc, xml->xmlChildrenNode); xmlAddChildList (divNode, copiedNodes); } buf = xmlBufferCreate (); xmlNodeDump (buf, newDoc, xmlDocGetRootElement (newDoc), 0, 0 ); if (xmlBufferLength(buf) > 0) result = xmlCharStrdup (xmlBufferContent (buf)); xmlBufferFree (buf); xmlFreeDoc (newDoc); return result; } /* * Read HTML string and convert to XHTML, placing in a div tag */ gchar * xhtml_extract_from_string (const gchar *html, const gchar *defaultBase) { xmlDocPtr doc = NULL; xmlNodePtr body = NULL; gchar *result; /* never process empty content, xmlDocCopy() doesn't like it... */ if (html != NULL && !common_str_is_empty (html)) { doc = xhtml_parse (html, strlen (html)); body = xhtml_find_body (doc); if (body == NULL) body = xmlDocGetRootElement (doc); } if (body != NULL) result = xhtml_extract (body, 1, defaultBase); else result = xmlCharStrdup ("
"); xmlFreeDoc (doc); return result; } gboolean xhtml_is_well_formed (const gchar *data) { gchar *xml; gboolean result; errorCtxtPtr errors; xmlDocPtr doc; if (!data) return FALSE; errors = g_new0 (struct errorCtxt, 1); errors->msg = g_string_new (NULL); xml = g_strdup_printf ("\n\n%s", data); doc = xml_parse (xml, strlen (xml), errors); if (doc) xmlFreeDoc (doc); g_free (xml); g_string_free (errors->msg, TRUE); result = (0 == errors->errorCount); g_free (errors); return result; } static GSList *dhtml_strippers = NULL; static GSList *unsupported_tag_strippers = NULL; static void xhtml_stripper_add (GSList **strippers, const gchar *pattern) { GError *err = NULL; GRegex *expr; expr = g_regex_new (pattern, G_REGEX_CASELESS | G_REGEX_UNGREEDY | G_REGEX_DOTALL | G_REGEX_OPTIMIZE, 0, &err); if (err) { g_warning ("xhtml_strip_setup: %s\n", err->message); g_error_free (err); return; } *strippers = g_slist_append (*strippers, expr); } static gchar * xhtml_strip (const gchar *html, GSList *strippers) { gchar *result = g_strdup (html); GSList *iter = strippers; while (iter) { GError *err = NULL; GRegex *expr = (GRegex *)iter->data; gchar *tmp = result; result = g_regex_replace (expr, tmp, -1, 0, "", 0, &err); if (err) { g_warning ("xhtml_strip: %s\n", err->message); g_error_free (err); err = NULL; } g_free (tmp); iter = g_slist_next (iter); } return result; } gchar * xhtml_strip_dhtml (const gchar *html) { if (!dhtml_strippers) { xhtml_stripper_add (&dhtml_strippers, "\\s+onload='[^']+'"); xhtml_stripper_add (&dhtml_strippers, "\\s+onload=\"[^\"]+\""); xhtml_stripper_add (&dhtml_strippers, "<\\s*script\\s*>.*"); xhtml_stripper_add (&dhtml_strippers, "<\\s*meta\\s*>.*"); xhtml_stripper_add (&dhtml_strippers, "<\\s*iframe[^>]*\\s*>.*"); } return xhtml_strip (html, dhtml_strippers); } gchar * xhtml_strip_unsupported_tags (const gchar *html) { if (!unsupported_tag_strippers) { xhtml_stripper_add(&unsupported_tag_strippers, "<\\s*/?wbr[^>]*/?\\s*>"); xhtml_stripper_add(&unsupported_tag_strippers, "<\\s*/?body[^>]*/?\\s*>"); } return xhtml_strip(html, unsupported_tag_strippers); } typedef struct { gchar *data; gint length; } result_buffer; static void unhtmlizeHandleCharacters (void *user_data, const xmlChar *string, int length) { result_buffer *buffer = (result_buffer *)user_data; gint old_length; old_length = buffer->length; buffer->length += length; buffer->data = g_renew (gchar, buffer->data, buffer->length + 1); strncpy (buffer->data + old_length, (gchar *)string, length); buffer->data[buffer->length] = 0; } static void _unhtmlize (gchar *string, result_buffer *buffer) { htmlParserCtxtPtr ctxt; htmlSAXHandlerPtr sax_p; sax_p = g_new0 (htmlSAXHandler, 1); sax_p->characters = unhtmlizeHandleCharacters; ctxt = htmlCreatePushParserCtxt (sax_p, buffer, string, strlen (string), "", XML_CHAR_ENCODING_UTF8); htmlParseChunk (ctxt, string, 0, 1); htmlFreeParserCtxt (ctxt); g_free (sax_p); } static void _unxmlize (gchar *string, result_buffer *buffer) { xmlParserCtxtPtr ctxt; xmlSAXHandler *sax_p; sax_p = g_new0 (xmlSAXHandler, 1); sax_p->characters = unhtmlizeHandleCharacters; ctxt = xmlCreatePushParserCtxt (sax_p, buffer, string, strlen (string), ""); xmlParseChunk (ctxt, string, 0, 1); xmlFreeParserCtxt (ctxt); g_free(sax_p); } /* Converts a UTF-8 strings containing any XML stuff to a string without any entities or tags containing all text nodes of the given HTML string. The original string will be freed. */ static gchar * unmarkupize (gchar *string, void(*parse)(gchar *string, result_buffer *buffer)) { gchar *result; result_buffer *buffer; if (!string) return NULL; /* only do something if there are any entities or tags */ if(NULL == (strpbrk (string, "&<>"))) return string; buffer = g_new0 (result_buffer, 1); parse (string, buffer); result = buffer->data; g_free (buffer); if (result == NULL || !g_utf8_strlen (result, -1)) { /* Something went wrong in the parsing. * Use original string instead */ g_free (result); return string; } else { g_free (string); return result; } } gchar * unhtmlize (gchar * string) { return unmarkupize (string, _unhtmlize); } gchar * unxmlize (gchar * string) { return unmarkupize (string, _unxmlize); } #define MAX_PARSE_ERROR_LINES 10 /** * Error buffering function to be registered by * xmlSetGenericErrorFunc(). This function is called on * each libxml2 error output and collects all output as * HTML in the buffer ctxt points to. * * @param ctxt error context * @param msg printf like format string */ static void xml_buffer_parse_error (void *ctxt, const gchar * msg, ...) { va_list params; errorCtxtPtr errors = (errorCtxtPtr)ctxt; gchar *newmsg; gchar *tmp; if (MAX_PARSE_ERROR_LINES > errors->errorCount++) { va_start (params, msg); newmsg = g_strdup_vprintf (msg, params); va_end (params); /* Do never encode any invalid characters from error messages */ if (g_utf8_validate (newmsg, -1, NULL)) { tmp = g_markup_escape_text (newmsg, -1); g_free (newmsg); newmsg = tmp; g_string_append_printf(errors->msg, "
%s
\n", newmsg); } g_free(newmsg); } if (MAX_PARSE_ERROR_LINES == errors->errorCount) g_string_append_printf (errors->msg, "
%s", _("[There were more errors. Output was truncated!]")); } static xmlDocPtr entities = NULL; static xmlEntityPtr xml_process_entities (void *ctxt, const xmlChar *name) { xmlEntityPtr entity, found; xmlChar *tmp; entity = xmlGetPredefinedEntity (name); if (!entity) { if(!entities) { /* loading HTML entities from external DTD file */ entities = xmlNewDoc (BAD_CAST "1.0"); xmlCreateIntSubset (entities, BAD_CAST "HTML entities", NULL, PACKAGE_DATA_DIR "/" PACKAGE "/dtd/html.ent"); entities->extSubset = xmlParseDTD (entities->intSubset->ExternalID, entities->intSubset->SystemID); } if (NULL != (found = xmlGetDocEntity (entities, name))) { /* returning as faked predefined entity... */ tmp = xmlStrdup (found->content); tmp = unhtmlize (tmp); /* arghh ... slow... */ entity = g_new0 (xmlEntity, 1); entity->type = XML_ENTITY_DECL; entity->name = name; entity->orig = NULL; entity->content = tmp; entity->length = g_utf8_strlen (tmp, -1); entity->etype = XML_INTERNAL_PREDEFINED_ENTITY; } } if (!entity) { g_print("unsupported entity: %s\n", name); } return entity; } xmlNodePtr xpath_find (xmlNodePtr node, const gchar *expr) { xmlNodePtr result = NULL; if (node && node->doc) { xmlXPathContextPtr xpathCtxt = NULL; xmlXPathObjectPtr xpathObj = NULL; if (NULL != (xpathCtxt = xmlXPathNewContext (node->doc))) { xpathCtxt->node = node; xpathObj = xmlXPathEval (expr, xpathCtxt); } if (xpathObj && !xmlXPathNodeSetIsEmpty (xpathObj->nodesetval)) result = xpathObj->nodesetval->nodeTab[0]; if (xpathObj) xmlXPathFreeObject(xpathObj); if (xpathCtxt) xmlXPathFreeContext(xpathCtxt); } return result; } gboolean xpath_foreach_match (xmlNodePtr node, const gchar *expr, xpathMatchFunc func, gpointer user_data) { if (node && node->doc) { xmlXPathContextPtr xpathCtxt = NULL; xmlXPathObjectPtr xpathObj = NULL; if (NULL != (xpathCtxt = xmlXPathNewContext (node->doc))) { xpathCtxt->node = node; xpathObj = xmlXPathEval (expr, xpathCtxt); } if (xpathObj && xpathObj->nodesetval && xpathObj->nodesetval->nodeMax) { int i; for (i = 0; i < xpathObj->nodesetval->nodeNr; i++) (*func) (xpathObj->nodesetval->nodeTab[i], user_data); } if (xpathObj) xmlXPathFreeObject (xpathObj); if (xpathCtxt) xmlXPathFreeContext (xpathCtxt); return TRUE; } return FALSE; } gchar * xml_get_attribute (xmlNodePtr node, const gchar *name) { return xmlGetProp (node, BAD_CAST name); } gchar * xml_get_ns_attribute (xmlNodePtr node, const gchar *name, const gchar *namespace) { return xmlGetNsProp (node, BAD_CAST name, BAD_CAST namespace); } xmlDocPtr xml_parse (gchar *data, size_t length, errorCtxtPtr errCtx) { xmlParserCtxtPtr ctxt; xmlDocPtr doc; g_assert (NULL != data); ctxt = xmlNewParserCtxt (); ctxt->sax->getEntity = xml_process_entities; if (errCtx) xmlSetGenericErrorFunc (errCtx, (xmlGenericErrorFunc)xml_buffer_parse_error); doc = xmlSAXParseMemory (ctxt->sax, data, length, 0); /* This seems to reset the errorfunc to its default, so that the GtkHTML2 module is not unhappy because it also tries to call the errorfunc on occasion. */ xmlSetGenericErrorFunc (NULL, NULL); xmlFreeParserCtxt (ctxt); return doc; } xmlDocPtr xml_parse_feed (feedParserCtxtPtr fpc) { errorCtxtPtr errors; g_assert (NULL != fpc->data); g_assert (NULL != fpc->feed); fpc->feed->valid = FALSE; /* we don't like no data */ if (0 == fpc->dataLength) { debug1 (DEBUG_PARSING, "xml_parse_feed(): empty input while parsing \"%s\"!", fpc->subscription->node->title); g_string_append (fpc->feed->parseErrors, "Empty input!\n"); return NULL; } errors = g_new0 (struct errorCtxt, 1); errors->msg = fpc->feed->parseErrors; fpc->doc = xml_parse (fpc->data, (size_t)fpc->dataLength, errors); if (!fpc->doc) { debug1 (DEBUG_PARSING, "xml_parse_feed(): could not parse feed \"%s\"!", fpc->subscription->node->title); g_string_prepend (fpc->feed->parseErrors, _("XML Parser: Could not parse document:\n")); g_string_append (fpc->feed->parseErrors, "\n"); } fpc->feed->valid = !(errors->errorCount > 0); g_free (errors); return fpc->doc; } void xml_init (void) { /* set libxml2 to use glib allocation, so that we can free() and reuse libxml2 allocated memory chunks */ xmlMemSetup (g_free, g_malloc, g_realloc, g_strdup); /* has to be called for multithreaded programs */ xmlInitParser (); } liferea-1.12.7/src/xml.h000066400000000000000000000131471352135647700147740ustar00rootroot00000000000000/** * @file xml.h XML helper methods for Liferea * * Copyright (C) 2003-2017 Lars Windolf * Copyright (C) 2004-2006 Nathan J. Conrad * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _XML_H #define _XML_H #include #include #include #include "feed_parser.h" /** * Initialize XML parsing. */ void xml_init (void); /** * Retrieves the text content of an HTML chunk. All entities * will be replaced. All HTML tags are stripped. The passed * string will be freed. * * @param string the string to strip * * @returns stripped UTF-8 plain text string */ gchar * unhtmlize (gchar *string); /** * Retrieves the text content of an XML chunk. All entities * will be replaced. All XML tags are stripped. The passed * string will be freed.s * * @param string the chunk to strip * * @returns stripped UTF-8 XHTML string */ gchar * unxmlize (gchar *string); /** * xhtml_parse: * * DOM parse an XHTML string. * * @html: The HTML * @nodeBase: An URI to set as xml:base, or #NULL * * Returns: XHTML version of the HTML */ xmlDocPtr xhtml_parse (const gchar *html, gint len); /** * Extract XHTML from a string of HTML and place it in a div tag. * * @param html The HTML * @param nodeBase An URI to set as xml:base, or #NULL * * @returns XHTML version of the HTML */ gchar * xhtml_extract_from_string (const gchar *html, const gchar *nodeBase); /** * Extract XHTML from the children of the passed node. * * @param cur parent of the nodes that will be returned * @param xhtmlMode If 0, reads escaped HTML. * If 1, reads XHTML nodes as children, and wrap in div tag * If 2, Find a div tag, and return it as a string * @param defaultBase * @returns XHTML version of children of passed node */ gchar * xhtml_extract (xmlNodePtr cur, gint xhtmlMode, const gchar *defaultBase); /** * Strips some DHTML constructs from the given HTML string. * * @param html some HTML content * * @return newly allocated stripped HTML string */ gchar * xhtml_strip_dhtml (const gchar *html); /** * Strips HTML tags we cannot or do not want to render, which * would mess up HTML rendering. * * @param html some HTML content * * @return newly allocated stripped HTML string */ gchar * xhtml_strip_unsupported_tags (const gchar *html); /** * Checks the given string for XHTML well formedness. * * @returns TRUE if the string is well formed XHTML */ gboolean xhtml_is_well_formed (const gchar *text); /** * Find the first XML node matching an XPath expression. * * @param node node to apply the XPath expression to * @param expr an XPath expression string * * @return first node found that matches expr (or NULL) */ xmlNodePtr xpath_find (xmlNodePtr node, const gchar *expr); /** Function type used by xpath_foreach_match() */ typedef void (*xpathMatchFunc)(xmlNodePtr match, gpointer user_data); /** * Executes an XPath expression and calls the given function for each matching node. * * @param node node to apply the XPath expression to * @param expr an XPath expression string * @param func the function to call for each result * * @return TRUE if result set was not empty */ gboolean xpath_foreach_match (xmlNodePtr node, const gchar *expr, xpathMatchFunc func, gpointer user_data); /** * Return the value of a attribute. * * @param node XML node * @param name attribute name * * @returns the attribute value (or NULL) to be free'd with g_free */ gchar * xml_get_attribute (xmlNodePtr node, const gchar *name); /** * Return the value of a attribute. * This is the namespace sensitive version of xml_get_attribute(). * * @param node XML node * @param name attribute name * @param namespace attribute namespace * * @returns the attribute value (or NULL) to be free'd with g_free */ gchar * xml_get_ns_attribute (xmlNodePtr node, const gchar *name, const gchar *namespace); /** used to keep track of error messages during parsing */ typedef struct errorCtxt { GString *msg; /**< message buffer */ gint errorCount; /**< error counter */ } *errorCtxtPtr; /** * Common function to create a XML DOM object from a given XML buffer. * * The function returns a XML document pointer or NULL * if the document could not be read. * * @param data XML document buffer * @param length length of buffer * @param errors parser error context (can be NULL) * * @return XML document */ xmlDocPtr xml_parse (gchar *data, size_t length, errorCtxtPtr errors); /** * Common function to create a XML DOM object from a given * XML buffer. This function sets up a parser context * and sets up the error handler. * * The function returns a XML document pointer or NULL * if the document could not be read. It also sets * errormsg to the last error messages on parsing * errors. * * @param fpc feed parsing context with valid data * * @return XML document */ xmlDocPtr xml_parse_feed (feedParserCtxtPtr fpc); #endif liferea-1.12.7/xslt/000077500000000000000000000000001352135647700142205ustar00rootroot00000000000000liferea-1.12.7/xslt/Makefile.am000066400000000000000000000006111352135647700162520ustar00rootroot00000000000000 xslt_in_files = item.xml.in \ feed.xml.in \ source.xml.in \ folder.xml.in \ newsbin.xml.in \ vfolder.xml.in xslt_files = $(xslt_in_files:.xml.in=.xml) i18n-filter.xslt xsltdir = $(pkgdatadir)/xslt xslt_DATA = $(xslt_files) @INTLTOOL_XML_RULE@ EXTRA_DIST = \ $(xslt_DATA) $(xslt_in_files) DISTCLEANFILES = $(xslt_in_files:.xml.in=.xml) liferea-1.12.7/xslt/feed.xml.in000066400000000000000000000154201352135647700162540ustar00rootroot00000000000000
<_span>This feed is discontinued. It's no longer available. Liferea won't update it anymore but you can still access the cached headlines.
<_span>The last update of this subscription failed!
HTTP error code :
<_span>There were errors while parsing this feed! ( <_span>Parser Error Details ) <_span>Details

<_span>You may want to contact the author/webmaster of the feed about this!
<_span>There were errors while filtering this feed! ( <_span>Filter Error Details ) <_span>Details
<_span>Feed:
<_span>Source:
<_span>Publisher

://
liferea-1.12.7/xslt/folder.xml.in000066400000000000000000000036521352135647700166300ustar00rootroot00000000000000
<_span>Folder:

<_span>children with <_span>unread headlines

liferea-1.12.7/xslt/i18n-filter.xslt000066400000000000000000000037301352135647700172010ustar00rootroot00000000000000 liferea-1.12.7/xslt/item.xml.in000066400000000000000000000311331352135647700163060ustar00rootroot00000000000000
doShow(' - ');
<_span>Source
<_span>Feed
<_span>Filed under ,
<_span>Author
<_span>Shared by
<_span>Via
<_span>Related
<_span>Also posted in
<_span>Creator
<_span>Coordinates ,
<_span>Map OpenStreeMap
itemshaded itemunshaded

<_span>Comments ( <_span>Updating... )

<_span>Section <_span>Department
summaryshaded summaryunshaded
liferea-1.12.7/xslt/newsbin.xml.in000066400000000000000000000036561352135647700170260ustar00rootroot00000000000000
<_span>News Bin:

<_span>Add items to this news bin by selecting "Copy to News Bin" from the item list context menu.

liferea-1.12.7/xslt/source.xml.in000066400000000000000000000036571352135647700166620ustar00rootroot00000000000000
<_span>Source:

<_span>children with <_span>unread headlines

liferea-1.12.7/xslt/vfolder.xml.in000066400000000000000000000035531352135647700170160ustar00rootroot00000000000000
<_span>Search Folder:

<_span>unread headlines