pax_global_header00006660000000000000000000000064126147562010014516gustar00rootroot0000000000000052 comment=db8b83b00591e73cd03ea487e6390c12740921bb liferea-1.10.17/000077500000000000000000000000001261475620100132745ustar00rootroot00000000000000liferea-1.10.17/.gitignore000066400000000000000000000010161261475620100152620ustar00rootroot00000000000000.deps *.a *.gmo *.o 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 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 xslt/*.xml org.gnome.liferea.gschema.valid stamp-h1 liferea-1.10.17/AUTHORS000066400000000000000000000152501261475620100143470ustar00rootroot00000000000000The 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 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 French Vincent Lefèvre French Guillaume Bernard Swedish Daniel Nylander 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 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.10.17/COPYING000066400000000000000000000432551261475620100143400ustar00rootroot00000000000000 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.10.17/ChangeLog000066400000000000000000001037461261475620100150610ustar00rootroot000000000000002015-10-30 Lars Windolf * Fixes Github #194: Add source dialog visually broken (reported by k0377) * Fixes Github #195: Out-dated documentation on enclosure download (reported by brian-in-crawford) * Fixes Github #223: Search folder dialog don't show rules (reported by Guido Masella) * Fixes Github #227: Preference dialog fails to load with latest GtkBuilder (patch by Yanko Kaneti) * Fixes Github #234: Segmentation fault upon attempting to add an OPML (reported by GreenLunar) * Fixes compilation error when there is no libnotify * Added debugging for #258: Dialog loading issues (patch by glitsj16) 2015-06-19 Lars Windolf Version 1.10.16 * 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) 2015-04-20 Lars Windolf Version 1.10.15 * Fixes launching URLs in Firefox 36+ (reported by Geoffrey Leach) * Fixes Github #30: Segfault after updating from 1.8 to 1.10 (reported by vakuum) * Improves Github #36, #113: UI lock up during refresh (suggested by mozbugbox) * Fixes typo in Italian translation. 2015-02-26 Lars Windolf Version 1.10.14 * Fixes Github #154: Crashes while starting (on corrupt icon) (reported by jcamposz) * Fixes Github #134: Broken default news feed. (reported by pvdl) * Fixes Github #122: Crashes at launch, "segmentation fault" (reported by geoffm) * Fixes some memory leaks (patch by Rich Coe) * Fixes Github #145: Wrong method triggered on 'Launch External' (patch by mozbugbox) * Fixes Github #149: Fixes a random crash on startup (patch by mozbugbox) * Fixes all issues reported by Coverity scan 2015-01-07 Lars Windolf Version 1.10.13 * Fixes Github #112: Wrapping issue in folder display (reported by Jeff Fortin) * Fixes Github #114: Avoid termination on UTF-8 validation error * Fixes Github #132: Broken link in documentation (reported by kallus) 2014-10-14 Lars Windolf Version 1.10.12 * Fixes Github #86: Support HTTP content negotiation (suggested by DanMan) * Fixes Github #98: Stop calling Atom person constructs w/ URI invalid (patch by Aristotle Pagaltzis) * Fixes Github #100: Problems with dark Adwaita theme in GTK 3.14 (reported by majutsushi) 2014-08-24 Lars Windolf Version 1.10.11 * Fixes Github #53: Doesn't automatically update feed name and favicon for new feed (reported by asl97) * Fixes Github #67: Missing dist files for documentation (patch by Mikel Olasagasti) * Fixes Javascript links not opening in new browser tabs * Updated French translation (Guillaume Bernard) * Updated Hebrew translation (Genghis Khan) 2014-07-20 Lars Windolf Version 1.10.10 * Fixes Github #26: RTL comments appear incorrectly (reported by yaronf) * Fixes Github #21: No notifications for Tiny Tiny RSS feeds (reported by simontunnat) 2014-04-21 Lars Windolf Version 1.10.9 * Fixes Github #19: non void function should return value (reported by kwm81) * 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) 2014-03-26 Lars Windolf Version 1.10.8 * Fixes Github #13: Parsing errors not visible with dark themes (reported by Steve Kelly) * Fixes SF #1137, #1142: startup race with LifereaHtmlView (reported by Yanko Kaneti) 2014-03-17 Lars Windolf Version 1.10.7 * Make Liferea use ETags and send If-None-Match (patch by Chris Siebenmann) 2014-02-24 Lars Windolf Version 1.10.6 * Fixes SF #1135: liferea-add-feed doesn't process feed:https// (patch by Kevin Walke) * Fixes SF #1137: crash on startup in enclosure_list_view_load (reported in Redhat #1048499, Fedora #214888) 2014-01-15 Lars Windolf Version 1.10.5 * Fixes #1056, #1089, #1098: Honor preferences when opening links (patch by Daniel Seither) * Fixes SF #1096: missing installation of liferea.convert file (reported by stqn) * Fixes Redhat #947358: popup notification only for new items (patch by Fabrice Bellet) 2014-01-13 Lars Windolf Version 1.10.4 * 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 #1117: Selecting last unread item in reduced feed list jumps to next feed (reported by Bruce Guenter) * 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 Lindner 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 Lindner 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 Lindner 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 Lindner 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 Lindner 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 Lindner 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 Lindner 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 Lindner 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 Lindner 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 Lindner) * 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 Lindner) * 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 Lindner) * Added feature to sort feeds in a folder alphabetically. (Lars Lindner) * 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 Lindner) * Added "Copy Link/Image Location" to HTML view (Lars Lindner) * Added "Save Link/Image As" to HTML view (Lars Lindner) * 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 Lindner) * 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 Lindner) * 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 Lindner) * Permanently removed LUA scripting support. (Lars Lindner) * Added more default feeds to be not so open source specific. (Lars Lindner) * Require libsoup >= 2.28.2 to avoid bugs in older versions. (Adrian Bunk) * Updated Spanish translation. (Rodrigo Gallardo) 2010-01-24 Lars Lindner 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 Lindner) * Updated proxy settings are now forwarded to the internal renderer again. (Lars Lindner) * 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 Lindner) * Using g_time_val_from_iso8601 instead of propietary solution we had. (Lars Lindner) * Simplified pixmaps resolving as we used only one source directory anyway. (Lars Lindner) * 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 Lindner, reported by Eric Drechsel) * Fixes a unique node id check that could have caused duplicate node ids. (Lars Lindner) * Removes the GConf option for a user defined date format. (Lars Lindner) * We do not update comment feeds returning HTTP 410 anymore. (Lars Lindner) * Fixes SF #2897668: Crash when adding Bloglines subscriptions. (Lars Lindner) * Fixes a crash when deleting items. (Lars Lindner) * 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 Lindner) * 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.10.17/INSTALL000066400000000000000000000224321261475620100143300ustar00rootroot00000000000000Installation 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. `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. Running `configure' takes awhile. 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.10.17/Makefile.am000066400000000000000000000025331261475620100153330ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in SUBDIRS = doc man opml pixmaps po src xslt glade desktop_in_files = liferea.desktop.in desktopdir = $(datadir)/applications desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) @INTLTOOL_DESKTOP_RULE@ 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/gnome-keyring.py \ plugins/gnome-keyring.plugin \ plugins/media-player.py \ plugins/media-player.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.10.17/README000066400000000000000000000241001261475620100141510ustar00rootroot00000000000000This documentation was last updated for Liferea version 1.10.3 (02.11.2013). Contents ======== 1. ............. Introduction 2. ............. Installing from Package 3. ............. Compiling Liferea Yourself 3.1. ............. Dependencies 3.2. ............. Compiling From Tarball 3.3. ............. Compiling From Git 4. ............. Contributing 4.1. ............. No Feature Requests! 4.2. ............. How to Provide Patches 4.3. ............. How to Translate Liferea 4.3.1 .............. Create a New Translation 4.3.2 .............. Update an Existing Translation 4.3.3 .............. Provide a Localized Feed List 4.4. ............. How to Help With Testing 4.4.1. ............. Bug Reports 4.4.2. ............. Debugging Crashes 4.4.3. ............. Debugging Memory Leaks 5. ............. Browser Integration 6. ............. How to Get Support 1. Introduction =============== 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. 2. Installation from Package ============================ Detailed instructions on how to install Liferea on the different distributions can be found online on our homepage at http://lzone.de/liferea/install.htm 3. Building Liferea Yourself ============================ This section describes how to compile Liferea yourself. If you have any problems compiling the packages or from GIT don't hesitate to contact us in IRC (see Support section) to help you with it! 3.1 Dependencies ---------------- Liferea 1.10+ is to be built against GTK+ 3. If you need to build for GTK+ 2 please use the most recent 1.8 release. The compilation and runtime dependencies are: Mandatory: gtk3 libxml2 libxslt sqlite3 libwebkit3 libjson-glib libgirepository1.0 libpeas gsettings-desktop-schemas Optional: -> For normal GTK popup notifications: libnotify >= 0.3.2 -> For Ubuntu indicator support libnotify >= 0.3.2, libindicate-0.6 or libindicate-0.7, libindicate-gtk-0.6 or libindicate-gtk-0.7 -> For the keyring support Python >= 2 -> For the media player plugin Python >= 2 GStreamer library and codecs Ensure that you have installed the libraries and their headers. If you use distribution packages then you usually need to install a package named like the library and one with a suffix "-dev" or "-devel". You need both to compile Liferea. 3.2 Compiling from Tarball -------------------------- If you do not like version control systems you might want to compile Liferea from a release tarball. Those are supplied at our SourceForge project homepage (http://lzone.de/liferea). After you downloaded it extract it like this: tar jxvf liferea-1.10.0.tar.bz2 After unpacking run the standard autotools commands: ./configure make make install After this Liferea will be installed in /usr/local and you should be able to start it by calling "/usr/local/bin/liferea". 3.3 Compiling from Git ---------------------- To anonymously check out a source copy execute this: git clone https://github.com/lwindolf/liferea.git Then build it with: ./autogen.sh make make install 4. Contributing =============== This section describes how you can contribute to Liferea. We currently try to provide additional help on contributing via OpenHatch.org which provides help and easy tasks to start contributing. http://openhatch.org/+projects/Liferea 4.1. No Feature Requests! ------------------------- First: *Feature requests are no contributions*. A lot of users think so and don't see at all why this should not be the case. While there might be a bit of interest on what new features the users would like to have, feature requests tend to take up *a lot* of the time spent on support. Short of ignoring feature requests the only polite way to answer them is an elaborate explanation of the reason why the developers have decided not to implement this feature requests and that they already have thought about it. So feature requests are a constant justification exercise invented to punish developers. Please be kind and do not participate in this. 4.2. How to Provide Patches --------------------------- Here are some rules to supply patches: 1.) Before spending time on your topic announce it first on the mailing list or the IRC channel. This avoids duplicate work and ensures your patch will be accepted. 2.) Try to be close to our coding style. 3.) Please include a ChangeLog entry in your patch. 4.) If possible provide the patch as a Github pull request. If you are not familiar with pull requests post the patch in the mailing list. In such a case please always specify for which release or commit id you created the patch. If you are working on some topic feel free to contact us with any question on the mailing list on the IRC channel (see Support section). 4.3. How to Translate Liferea ----------------------------- 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! 4.3.1. Create a New Translation ------------------------------- 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"). 4.3.2. Update an Existing Translation -------------------------------------- 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. 4.3.3. Providing a Localized Feed List -------------------------------------- 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: 1.) Keep the English part of the default feed list 2.) Only add neutral content feeds (no sex, no ideologic politics, no illegal stuff) 3.) Provide good and short feed titles 4.) Provide HTML URLs for each feed. Once finished post the result OPML file in the mailing list or the SF patch tracker. 4.4 How to Help With Testing ---------------------------- 4.4.1. 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 the SF tracker. Check if you see any of the open bugs on your setup. 4.4.2. 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. 4.4.3. Debugging Memory Leakage ------------------------------- 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. 5. Browser Integration ====================== Liferea allows subscribing directly from Firefox 2.0+ and Epiphany. 5.1. Ephiphany -------------- Epiphany provides a standard plugin that allows adding subscription directly to Liferea. Ensure you have installed the Epiphany plugins (often a separate package in the distribution) and enabled the plugin in the Epiphany settings. 5.2. Firefox 2.0+ ----------------- If you want to subscribe from within Firefox 2.0 you can configure Firefox 2.0 to add subscriptions to Liferea directly. To do so click the feed icon in the location entry. Firefox will then present a menu where you can configure a manual command instead of the Live Bookmarks to add subscriptions. Liferea supplies a script named "liferea-add-feed" that you can tell Firefox to use. If this doesn't work for you please try to run "liferea-add-feed" from the command line and look for error messages. Often DBUS problems cause the script to fail. 6. 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! Now there are three major support channels: 1.) The IRC channel "#liferea" on freenode.org. If you have easy to solve problems and simple questions feel free to ask the people hanging around there. 2.) The mailing list. Good for posting compilation problems and starting longer discussions. 3.) The SourceForge bug tracker (http://sf.net/projects/liferea) 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.10.17/autogen.sh000077500000000000000000000004121261475620100152720ustar00rootroot00000000000000#!/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 autoreconf -i intltoolize ./configure "$@" liferea-1.10.17/configure.ac000066400000000000000000000077501261475620100155730ustar00rootroot00000000000000dnl Process this file with autoconf to produce a configure script. AC_INIT([liferea],[1.10.17],[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_ARG_ENABLE(libnotify, AS_HELP_STRING([--disable-libnotify],[compile without libnotify support]),,enable_libnotify=yes) AC_ARG_ENABLE(libindicate, AS_HELP_STRING([--disable-libindicate],[compile without libindicate support]),,enable_libindicate=yes) AC_CHECK_FUNCS([strsep]) PKG_PROG_PKG_CONFIG() dnl ********* dnl libnotify dnl ********* if test "x$enable_libnotify" = "xyes"; then PKG_CHECK_MODULES([LIBNOTIFY], libnotify >= 0.7,enable_libnotify=yes,enable_libnotify=no) if test "x$enable_libnotify" = "xyes"; then AC_DEFINE(HAVE_LIBNOTIFY, 1, [Define if libnotify support is enabled]) fi AC_SUBST(LIBNOTIFY_CFLAGS) AC_SUBST(LIBNOTIFY_LIBS) else enable_libnotify=no fi AM_CONDITIONAL(WITH_LIBNOTIFY, test "x$enable_libnotify" = "xyes") dnl ********* dnl libindicate dnl ********* if test "x$enable_libindicate" = "xyes"; then dnl Try 0.7 first PKG_CHECK_MODULES([LIBINDICATE], indicate-0.7 indicate-gtk3-0.7,enable_libindicate=yes,enable_libindicate=no) AC_SUBST(LIBINDICATE_CFLAGS) AC_SUBST(LIBINDICATE_LIBS) dnl But 0.6 will also do... if test "x$enable_libindicate" = "xno"; then PKG_CHECK_MODULES([LIBINDICATE], indicate-0.6 indicate-gtk3-0.6,enable_libindicate=yes,enable_libindicate=no) AC_SUBST(LIBINDICATE_CFLAGS) AC_SUBST(LIBINDICATE_LIBS) fi else enable_libindicate=no fi if test "x$enable_libindicate" = "xyes"; then AC_DEFINE(HAVE_LIBINDICATE, 1, [Define if libindicate support is enabled]) fi AM_CONDITIONAL(WITH_LIBINDICATE, test "x$enable_libindicate" = "xyes") ################################################################################ # Mandatory library dependencies pkg_modules=" gtk+-3.0 >= 3.4.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.28.2 webkitgtk-3.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) 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/parsers/Makefile src/fl_sources/Makefile src/notification/Makefile src/ui/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 echo "Use libnotify................... : $enable_libnotify" echo "Use libindicate................. : $enable_libindicate" echo eval eval echo Liferea will be installed in $bindir. echo echo configure complete, now type \'make\' echo liferea-1.10.17/css/000077500000000000000000000000001261475620100140645ustar00rootroot00000000000000liferea-1.10.17/css/adblock.css000066400000000000000000000022641261475620100162010ustar00rootroot00000000000000/* * Liferea ad blocking stylesheet * * (C) 2005-2007 Lars Linder * * 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.10.17/css/liferea.css000066400000000000000000000130701261475620100162060ustar00rootroot00000000000000/** * @file liferea.css Liferea rendering stylesheet * * Copyright (C) 2004-2010 Lars Linder * 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; } 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.10.17/css/user.css000066400000000000000000000054021261475620100155550ustar00rootroot00000000000000/** 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 ~/.liferea_1.8/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.10.17/doc/000077500000000000000000000000001261475620100140415ustar00rootroot00000000000000liferea-1.10.17/doc/Doxyfile000066400000000000000000001313671261475620100155620ustar00rootroot00000000000000# 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.10.17/doc/Makefile.am000066400000000000000000000000511261475620100160710ustar00rootroot00000000000000EXTRA_DIST = \ Doxyfile SUBDIRS = html liferea-1.10.17/doc/html/000077500000000000000000000000001261475620100150055ustar00rootroot00000000000000liferea-1.10.17/doc/html/Makefile.am000066400000000000000000000030211261475620100170350ustar00rootroot00000000000000html_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.10.17/doc/html/about_de.html000066400000000000000000000034521261475620100174610ustar00rootroot00000000000000 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 SourceForge 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.10.17/doc/html/about_en.html000066400000000000000000000032361261475620100174730ustar00rootroot00000000000000 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 SourceForge 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.10.17/doc/html/concepts_de.html000066400000000000000000000143301261475620100201620ustar00rootroot00000000000000 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.10.17/doc/html/concepts_en.html000066400000000000000000000132231261475620100201740ustar00rootroot00000000000000 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.10.17/doc/html/enclosures_de.html000066400000000000000000000071771261475620100205410ustar00rootroot00000000000000 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.10.17/doc/html/enclosures_en.html000066400000000000000000000063031261475620100205410ustar00rootroot00000000000000 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.10.17/doc/html/faq_de.html000066400000000000000000000135171261475620100171210ustar00rootroot00000000000000 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 SourceForge 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 Cookies wenn diese in Form einer Textdatei unter ~/.config/liferea/cookies.txt vorliegen. Diese Datei sollte dem Netscape Cookie Format entsprechen. Der leichteste Weg eine solche zu erstellen ist die Cookies erzeugenden Seite mit einer Mozilla-Installation zu besuchen und dann die Cookie-Datei aus dem Mozilla-Profil in das Liferea-Verzeichnis zu kopieren.
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!
liferea-1.10.17/doc/html/faq_en.html000066400000000000000000000132571261475620100171340ustar00rootroot00000000000000 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 SourceForge 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 cookies provided by a text file ~/.config/liferea/cookies.txt which contains cookies in Netscape format. The easiest way is to copy the file from your Mozilla profile after you created the cookies with the browser.
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.
liferea-1.10.17/doc/html/folders_de.html000066400000000000000000000075521261475620100200120ustar00rootroot00000000000000 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.10.17/doc/html/folders_en.html000066400000000000000000000073151261475620100200210ustar00rootroot00000000000000 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.10.17/doc/html/headlines_de.html000066400000000000000000000135301261475620100203010ustar00rootroot00000000000000 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.10.17/doc/html/headlines_en.html000066400000000000000000000134431261475620100203160ustar00rootroot00000000000000 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 settting 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.10.17/doc/html/help_feed_default.png000066400000000000000000000013741261475620100211370ustar00rootroot00000000000000PNG  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.10.17/doc/html/help_feed_error.png000066400000000000000000000011721261475620100206400ustar00rootroot00000000000000PNG  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.10.17/doc/html/help_feed_prop_cache_1.6.0.png000066400000000000000000000506301261475620100223370ustar00rootroot00000000000000PNG  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.10.17/doc/html/help_feed_prop_general_1.6.0.png000066400000000000000000000545101261475620100227120ustar00rootroot00000000000000PNG  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.10.17/doc/html/help_folder.png000066400000000000000000000006151261475620100200000ustar00rootroot00000000000000PNG  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.10.17/doc/html/help_item_flag.png000066400000000000000000000010011261475620100204420ustar00rootroot00000000000000PNG  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.10.17/doc/html/help_item_unread.png000066400000000000000000000006431261475620100210220ustar00rootroot00000000000000PNG  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.10.17/doc/html/help_opml.png000066400000000000000000000014311261475620100174710ustar00rootroot00000000000000PNG  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.10.17/doc/html/help_prefs_browser_1.6.0.png000066400000000000000000000563031261475620100221360ustar00rootroot00000000000000PNG  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.10.17/doc/html/help_prefs_enclosures_1.6.0.png000066400000000000000000000575101261475620100226360ustar00rootroot00000000000000PNG  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.10.17/doc/html/help_prefs_feeds_1.6.0.png000066400000000000000000000551401261475620100215370ustar00rootroot00000000000000PNG  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.10.17/doc/html/help_prefs_folders_1.6.0.png000066400000000000000000000521231261475620100221050ustar00rootroot00000000000000PNG  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.10.17/doc/html/help_prefs_gui_1.6.0.png000066400000000000000000000563301261475620100212370ustar00rootroot00000000000000PNG  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.10.17/doc/html/help_prefs_headlines_1.6.0.png000066400000000000000000000430051261475620100224020ustar00rootroot00000000000000PNG  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.10.17/doc/html/help_prefs_proxy_1.6.0.png000066400000000000000000000544341261475620100216370ustar00rootroot00000000000000PNG  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.10.17/doc/html/help_subscribe_1.6.0.png000066400000000000000000000253721261475620100212370ustar00rootroot00000000000000PNG  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.10.17/doc/html/help_vfolder_1.6.0.png000066400000000000000000000355501261475620100207160ustar00rootroot00000000000000PNG  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.10.17/doc/html/newsbin_en.html000066400000000000000000000040321261475620100200210ustar00rootroot00000000000000 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 no 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.10.17/doc/html/onlineservices_de.html000066400000000000000000000112201261475620100213670ustar00rootroot00000000000000 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.10.17/doc/html/onlineservices_en.html000066400000000000000000000105111261475620100214030ustar00rootroot00000000000000 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 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.


Prev Contents Next
liferea-1.10.17/doc/html/preferences_de.html000066400000000000000000000155561261475620100206600ustar00rootroot00000000000000 Ä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 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 von Enclosures 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.10.17/doc/html/preferences_en.html000066400000000000000000000160111261475620100206550ustar00rootroot00000000000000 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 to download enclosures.

    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.10.17/doc/html/reference.css000066400000000000000000000002261261475620100174550ustar00rootroot00000000000000table.reftable { border:1px solid black; border-collapse:collapse; } table.reftable tr td { border:1px solid black; } dt { font-weight: bold; }liferea-1.10.17/doc/html/reference_de.html000066400000000000000000000036641261475620100203120ustar00rootroot00000000000000 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.10.17/doc/html/reference_en.html000066400000000000000000000031501261475620100203120ustar00rootroot00000000000000 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.10.17/doc/html/searching_de.html000066400000000000000000000136631261475620100203170ustar00rootroot00000000000000 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.10.17/doc/html/searching_en.html000066400000000000000000000135431261475620100203260ustar00rootroot00000000000000 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 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.10.17/doc/html/subscriptions_de.html000066400000000000000000000243711261475620100212610ustar00rootroot00000000000000 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.10.17/doc/html/subscriptions_en.html000066400000000000000000000246401261475620100212720ustar00rootroot00000000000000 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 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 inappropiate 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 pasword-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.10.17/doc/html/topics_de.html000066400000000000000000000031731261475620100176500ustar00rootroot00000000000000 Hilfe Inhalt
  Liferea Hilfe  

Dies ist die Endnutzerdokumentation für Liferea 1.10.

Hilfe Themen

Online Support

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

liferea-1.10.17/doc/html/topics_en.html000066400000000000000000000031131261475620100176540ustar00rootroot00000000000000 Help Contents
  Liferea Help  

This user documentation applies for Liferea 1.10.

Help Topics

Online Support

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

liferea-1.10.17/doc/html/updating_de.html000066400000000000000000000057601261475620100201660ustar00rootroot00000000000000 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.10.17/doc/html/updating_en.html000066400000000000000000000054051261475620100201740ustar00rootroot00000000000000 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.10.17/dtd/000077500000000000000000000000001261475620100140475ustar00rootroot00000000000000liferea-1.10.17/dtd/html.ent000066400000000000000000000725631261475620100155400ustar00rootroot00000000000000 liferea-1.10.17/glade/000077500000000000000000000000001261475620100143505ustar00rootroot00000000000000liferea-1.10.17/glade/Makefile.am000066400000000000000000000005431261475620100164060ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in gladedir = $(pkgdatadir) glade_DATA = liferea.ui \ auth.ui \ new_subscription.ui \ simple_subscription.ui \ google_source.ui \ inoreader_source.ui \ node_source.ui \ opml_source.ui \ prefs.ui \ reedah_source.ui \ ttrss_source.ui \ theoldreader_source.ui EXTRA_DIST = \ $(glade_DATA) liferea-1.10.17/glade/auth.ui000066400000000000000000000171401261475620100156530ustar00rootroot00000000000000 True 5 Authentication False dialog True 2 True 5 12 True 0 Enter the username and password for "%s" (%s): True False False 0 True 2 2 12 6 True True False True 1 2 1 2 True True True 1 2 True 0 _Password: True passwordEntry 1 2 GTK_FILL True 0 User_name: True usernameEntry GTK_FILL 1 True 0 Note: <i>The username and password will be saved to your Liferea feedlist file without using encryption.</i> True True False False 2 1 True end gtk-cancel True True True False True False False 0 gtk-ok True True True True False True False False 1 False end 0 cancelbutton2 okbutton1 liferea-1.10.17/glade/google_source.ui000066400000000000000000000151421261475620100175460ustar00rootroot00000000000000 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.10.17/glade/inoreader_source.ui000066400000000000000000000170471261475620100202500ustar00rootroot00000000000000 True False Add InoReader 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 InoReader 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.10.17/glade/liferea.ui000066400000000000000000004760771261475620100163430ustar00rootroot00000000000000 Liferea 640 480 liferea True True True 170 True True never automatic in True True True False True False True True True False True True True False False True True 199 True none False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True none 0 True True True normal view False True True 100 True none False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True none 0 True True 1 True wide view 1 False True True gtk-go-back True True False True False True gtk-go-forward True True False True False True True True adjustment6 1 False True True View Headlines False False False 0 True none 1 2 True combined view 2 False 0 True Headlines False True True 0 True True True False none True gtk-missing-image Online/Offline Button False False 0 True 1 False False 1 True 5 Subscription Properties True center dialog True 2 True True 5 True 12 18 True 6 True 0 Feed Name False False 0 True 12 True 12 True Feed _Name: True feedNameEntry False False 0 True True True 1 1 False 0 True 6 True 0 Update Interval False False 0 True 12 True 6 _Use global default update interval. True True False True True False False 0 True 6 _Feed specific update interval of True True False True True updateIntervalDefault False False 0 True 6 True True adjustment5 1 0 True liststore6 0 False False 1 1 False False 1 _Don't update this feed automatically. True True False True True updateIntervalDefault False False 2 True False False 3 339 True 0 This feed provider suggests an update interval of %d minutes. True False False 4 False 1 False 1 True General False True 12 18 True 6 True 0 Feed Source False False 0 True 12 True 6 True 2 2 12 6 True 0 0 Source Type: GTK_FILL GTK_FILL True 0 _Source: True sourceEntry 1 2 GTK_FILL True 6 _URL True True False True True False False 0 _Command True True False True True feed_loc_url False False 1 True _Local File True True False True True feed_loc_url False False 0 True 10 False 1 Select File... True True False True False False 2 False 2 1 2 GTK_FILL GTK_FILL True True 1 2 1 2 False 0 True 6 Use conversion _filter True True False True True False False 0 True 12 True 6 True 0 Liferea can use external filter plugins in order to access feeds and directories in non-supported formats. See the documentation for more information. True False False 0 True 12 True Convert _using: True filterEntry False False 0 True 6 True True 0 Select File... True True False True False False 1 1 False False 1 1 1 1 0 1 True Source 1 False True 12 6 347 True 0 The cache setting controls if the contents of feeds are saved when Liferea exits. Marked items are always saved to the cache. True False False 0 _Default cache settings True True False True True False False 1 Di_sable cache True True False True True feedCacheDefault False False 2 _Unlimited cache True True False True True feedCacheDefault False False 3 True 6 _Number of items to save: True True False True True feedCacheDefault False False 0 True True adjustment4 1 True True False False 1 False False 4 2 True Archive 2 False True 12 6 Use HTTP _authentication True True False True True False False 0 True 12 True 2 2 12 6 True True False 1 2 1 2 True True 1 2 True 0 _Password: True passwordEntry 1 2 GTK_FILL True 0 User_name: True usernameEntry GTK_FILL False False 1 _Don't use proxy for download True True False True True False False 6 2 3 True Download 3 False True 12 6 _Automatically download all enclosures of this feed. True True False True True False False 0 Auto-_load item link in configured browser when selecting articles. True True False True True False False 1 Ignore _comment feeds for this subscription. True True False True True False 2 _Enforce popup notification for this subscription. True True False True True False 3 _Never do popup notification for this subscription. True True False True True False 4 _Mark downloaded items as read. True True False True True False 5 4 True Advanced 4 False 1 True end gtk-cancel True True True False True False False 0 gtk-ok True True True True False True False False 1 False end 0 prop_cancel prop_ok True 5 New Folder False True dialog True 2 True True 5 12 True _Folder name: True foldertitleentry False False 0 True True True 1 0 1 True end gtk-cancel True True True False True False False 0 gtk-ok True True True True False True False False 1 False end 0 button3 button2 True 5 Rename False True dialog True 2 True 5 12 True _New Name: True nameentry False False 0 True True True 1 False False 1 True end gtk-cancel True True True False True False False 0 gtk-ok True True True True False True False False 1 False end 0 cancelbutton1 namechangebtn True 5 Search Folder Properties 550 320 dialog True 2 True 5 12 True 12 True Search _Name: True False False 0 True True 1 False 0 True True 0 Find Items that meet the following criteria False False 0 True 12 True 6 True 12 True 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 True True allRuleRadioBtn False 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 True True 2 False 0 True True automatic automatic True True 6 1 1 1 1 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 cancelbutton3 okbutton2 True 5 Open Enclosure False dialog True 2 True 5 12 True 6 True 0 Open an enclosure of type: False False 0 True 6 text/plain False False 1 True 0 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 False False 2 True 6 True True 0 _Browse True True False True False False 1 3 _Do this automatically for enclosures like this from now on. True True False True True False False 4 False 0 1 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 cancelbutton4 okbutton3 True 5 Search All Feeds False dialog True 2 True 5 12 True 12 True _Search for: True searchentry False False 0 True True Enter a search string Liferea should find either in a items title or in its content. 1 False 0 6 1 True 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 end 0 closebutton2 advancedbtn searchstartbtn True Update Monitor 400 300 True dialog True True 6 2 2 6 6 True True automatic automatic in True True False 1 2 True True automatic automatic in True True False 1 2 1 2 True 0 Pending Requests 1 2 GTK_FILL True 0 Downloading Now GTK_FILL 2 True end True True True False True 0 0 True 2 True Cancel _All True False False 1 False False 0 gtk-close True True True False True False False 1 False end 0 button4 button5 True Create News Bin center dialog True True True 5 12 True _News Bin Name: True False False 0 True True True 1 0 2 True end gtk-cancel True True True False True False False 0 gtk-ok True True True True False True False False 1 False end 0 cancelbutton6 newnewsbinbtn 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+ http://liferea.sf.net Liferea Homepage 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. GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 Library 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. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> 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 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. <signature of Ty Coon>, 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 Library General Public License instead of this License. Developers: Lars Windolf Nathan Conrad Arnold Noronha Adrian Bunk Emilio Pozuelo Monfort Contributers: 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 Lindner 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 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 liferea True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 2 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK end False end 0 True 5 Advanced Search 500 250 dialog True 2 True True 0 Find Items that meet the following criteria False False 0 True 12 True 6 True 12 True 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 True True allRuleRadioBtn2 False 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 True True 2 False 0 True True automatic automatic True True 6 1 1 1 True 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 GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-add 0 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK _Search Folder... True savesearchbtn 1 False False 1 gtk-find True True True False True False False 2 False end 0 cancelbutton8 savesearchbtn okbutton5 GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 5 Create Search Engine Feed center-on-parent dialog True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 2 True 5 6 True 12 True _Search for: True searchkeywords False False 0 True True True enter any search string you want True 1 0 True 12 True Maximal _Number Of Result Items: True resultcount False False 0 True True adjustment1 1 1 1 True 0 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. True False False 2 1 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK end gtk-cancel True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True False False 0 gtk-apply True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True False False 1 False end 0 button12 button13 15 1 1000 1 10000 1 1 1 10000 1 1 100 1 liferea-1.10.17/glade/new_subscription.ui000066400000000000000000000576621261475620100203240ustar00rootroot00000000000000 True 5 New Subscription False True center 400 dialog True 2 True True 5 6 True 0 Feed Source False False 0 True True 10 False False 0 True 2 2 12 6 True True 1 2 1 2 True 0 _Source: True sourceEntry 1 2 GTK_FILL True _URL True True False True True False False 0 _Command True True False True True feed_loc_url False False 1 True _Local File True True False True True feed_loc_url False False 0 True 10 False 1 Select File... True True False True False False 2 False 2 1 2 GTK_FILL GTK_FILL True 0 0 Source Type: GTK_FILL GTK_FILL 1 False False 1 True 0 Download / Postprocessing False False 2 True True 10 False False 0 _Don't use proxy for download True True False True True False False 1 3 6 True True 10 False False 0 Use conversion _filter True True False True True False False 1 False False 0 True 10 False False 0 True 6 True 0 Liferea can use external filter plugins in order to access feeds and directories in non-supported formats. See the documentation for more information. True False False 0 True 6 True 10 False False 0 True Convert _using: True filterEntry False False 1 True True 2 Select File... True True False True False False 3 False False 1 1 1 4 0 1 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 cancelbtn newfeedbtn liferea-1.10.17/glade/node_source.ui000066400000000000000000000127431261475620100172230ustar00rootroot00000000000000 True False Source Selection True 300 200 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 False end 0 True False 6 6 True False Select the source type you want to add... 0 False False 0 True True never in 400 True True False True True True 1 True True 2 cancelbutton1 ok_button liferea-1.10.17/glade/opml_source.ui000066400000000000000000000131121261475620100172340ustar00rootroot00000000000000 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.10.17/glade/prefs.ui000066400000000000000000003603141261475620100160350ustar00rootroot00000000000000 1 10000 1 1 1000000 1 1 True False 5 Liferea Preferences False center 300 dialog True False vertical 2 True False end gtk-close False True True True False False True False False 0 False True end 0 True True 5 True True False 12 18 True False 6 True False 0 Feed Cache Handling False False 0 True False 12 True False 12 True False Default _number of items per feed to save: True True itemCountBtn False False 0 60 True True adjustment3 1 True False False 1 False False 1 False False 0 True False 6 True False 0 Feed Update Settings False False 0 True False 12 True False 6 _Update all subscriptions at startup. False True True False False True 0 True False False 0 True False 12 True False Default Feed Refresh _Interval: True globalRefreshIntervalSpinButton False False 0 True False 6 60 True True adjustment2 1 True True 0 True False liststore5 0 False False 1 False True 1 False True 1 True info 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 True 0 False False 2 False False 1 False False 1 False True False Feeds False True False 12 18 True False 6 True False 0 Folder Display Settings False False 0 True False 12 True False 6 _Show the items of all child feeds when a folder is selected. False True True False False True 0 True False False 0 _Hide read items. False True True False False True 0 True False False 1 False False 1 False False 0 True False 6 True False 0 Feed Icons (Favicons) False False 0 True False 12 True False _Update all favicons now False True True False False True False False 0 False False 1 False False 1 1 False True False Folders 1 False True False 12 18 True False 6 True False 0 Reading Headlines False False 0 True False 12 True False 6 12 True False liststore3 0 1 0 1 1 True False 0 _Skim through articles with: True skimKeyCombo 0 0 1 1 True False 0 _Default View Mode: True defaultViewModeCombo 0 1 1 1 True False liststore3 0 1 1 1 1 False False 1 False False 0 True False 6 True False 0 Web Integration False False 0 True False 12 True False 2 6 6 True True 1 2 GTK_FILL True False 0 _Post Bookmarks to True socialpopup GTK_FILL False False 1 False False 1 2 False True False Headlines 2 False True False 12 18 True False 6 True False 6 True False 0 Internal Browser Settings False False 0 True False 12 True False 6 Open links in Liferea's _window. False True True False False True 0 True False False 0 _Disable Javascript. False True True False False True 0 True False False 1 _Enable browser plugins. False True True False False True 0 True False False 2 False True 6 1 False True 0 False True 0 True False 6 True False 0 External Browser Settings False False 0 True False 12 True False 3 2 12 6 True True 1 2 GTK_FILL True True 1 2 1 2 GTK_FILL True False 0 _Open link in: True browserlocpopup 1 2 GTK_FILL True True True 1 2 2 3 True False 0 _Manual: True browsercmd 2 3 GTK_FILL True False 0 <small>(%s for URL)</small> True True browsercmd 1 2 3 4 GTK_FILL True False 0 _Browser: True browserpopup GTK_FILL False True 6 1 False True 1 3 True False Browser 3 False True False 12 18 True False 6 True False 0 Notification Settings False False 0 True False 12 True False 6 Show a _popup window with new headlines. False True True False False True 0 True False False 0 True False 6 Show a status _icon in the notification area (system tray). False True True False False True 0 True False False 0 True False True False 10 False False 0 True False 6 Show _number of new items in the tray icon. False True True False False True 0 True False False 0 T_erminate instead of minimizing to tray icon. False True True False False True 0 True False False 1 _Start in tray icon. False True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK False True 0 True True True 2 False True 1 True True 1 True True 1 True True 1 False True 0 True False 6 True False 0 0.51999998092651367 Toolbar Settings False False 0 True False 12 True False 6 _Hide toolbar. False True True False False True 0 True True True 0 True False 12 True False 0 Toolbar _button labels: True toolbarCombo False False 0 True False liststore2 0 False False 1 True False 1 True True 1 False True 1 4 True False GUI 4 False True False True False 12 18 True False 6 True False 0 HTTP Proxy Server False False 0 True False 12 True False 6 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 6 _Auto Detect (GNOME or environment) False True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK False True 0 True True True True 0 _No Proxy False True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK False True 0 True True proxyAutoDetectRadio True True 1 _Manual Setting: False True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK False True 0 True True proxyAutoDetectRadio True True 2 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 10 False False 0 True False 6 True False 2 2 12 6 True False 0 Proxy _Port: True proxyportentry 1 2 GTK_FILL True True True 1 2 1 2 True True True 1 2 True False 0 Proxy _Host: True proxyhostentry GTK_FILL True True 3 0 Use Proxy Au_thentication False True True False False True 0 True False False 1 True False 21 True False 2 2 12 6 True False 0 Proxy Pass_word: True proxypasswordentry 1 2 GTK_FILL True True False True 1 2 1 2 True True True 1 2 True False 0 Proxy _Username: True GTK_FILL True True 2 True True 1 True True 3 False False 0 True True 1 False True 0 False True 0 5 True False Proxy 5 False True False 12 18 True False 6 True False 0 Downloading Enclosures False False 0 True False 12 True False 2 12 6 True False True False liststore1 0 False False 0 True False True False 1 1 2 GTK_FILL GTK_FILL True False 0 _Download using True GTK_FILL False False 1 False False 0 True False True 6 True False 0 Opening Enclosures False False 0 True False True 12 True False True 6 True 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 True True 0 True False 6 gtk-properties False True True False False True False False 0 gtk-delete False True True False False True False False 1 False False 1 True True 1 False True 1 6 False True False Enclosures 6 False True False vertical 6 7 True False Plugins 7 False False True 1 prefclosebtn liferea-1.10.17/glade/reedah_source.ui000066400000000000000000000170371261475620100175270ustar00rootroot00000000000000 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.10.17/glade/search_folder.ui000066400000000000000000000275061261475620100175210ustar00rootroot00000000000000 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.10.17/glade/simple_subscription.ui000066400000000000000000000171101261475620100210040ustar00rootroot00000000000000 True False New Subscription dialog True False vertical True False end gtk-cancel False True True True False False True False False 0 Advanced... False True True True False False True False False 1 gtk-ok False True True True True False False True False False 2 False True end 0 True False 12 6 True False 0 Feed Source False False 0 True False 6 12 True False vertical 12 True False 0 0 Enter a website location to use feed autodiscovery or in case you know it the exact feed location. True False True 0 True True False True 1 False False 1 False False 2 cancelbutton5 advancedbtn1 button6 liferea-1.10.17/glade/theoldreader_source.ui000066400000000000000000000151461261475620100207400ustar00rootroot00000000000000 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.10.17/glade/ttrss_source.ui000066400000000000000000000177371261475620100174650ustar00rootroot00000000000000 True Add Tiny Tiny RSS Account dialog True True 12 12 True 0 Please enter your tt-rss 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.10.17/liferea.appdata.xml.in000066400000000000000000000042131261475620100174430ustar00rootroot00000000000000 liferea.desktop CC0 <_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>Permanently save headlines in news bins <_li>Match items using search folders <_li>Play Podcasts
http://lzone.de/liferea/screenshots/screenshot1.png http://lzone.de/liferea/screenshots/screenshot2.png http://lzone.de/liferea/screenshots/screenshot3.png http://lzone.de/liferea/screenshots/screenshot4.png http://lzone.de/liferea/screenshots/screenshot5.png http://lzone.de/liferea/screenshots/screenshot6.png http://lzone.de/liferea/screenshots/screenshot7.png http://lzone.de/liferea/screenshots/screenshot8.png http://lzone.de/liferea/screenshots/screenshot9.png http://lzone.de/liferea/ liferea-devel@lists.sf.net
liferea-1.10.17/liferea.convert000066400000000000000000000043771261475620100163200ustar00rootroot00000000000000[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 browser-place = /apps/liferea/browser_place 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 enable-fetch-retries = /apps/liferea/enable-fetch-retries 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-itemlist-mode = /apps/liferea/last-itemlist-mode 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 show-popup-windows = /apps/liferea/show-popup-windows startup-feed-action = /apps/liferea/startup_feed_action toolbar-style = /apps/liferea/toolbar_style trayicon = /apps/liferea/trayicon trayicon-new-count = /apps/liferea/trayicon-new-count dont-minimize-to-tray = /apps/liferea/dont-minimize-to-tray update-thread-concurrency = /apps/liferea/update-thread-concurrency popup-placement = /apps/liferea/popup-placement 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 start-in-tray = /apps/liferea/start-in-tray enable-plugins = /apps/liferea/enable-plugins browser-font = /apps/liferea/browser-font liferea-1.10.17/liferea.desktop.in000066400000000000000000000005461261475620100167100ustar00rootroot00000000000000[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; Exec=liferea Icon=liferea StartupNotify=true Terminal=false Type=Application Categories=Network;Feed; Version=1.1 MimeType=application/rss+xml;application/atom+xml;application/rdf+xml; liferea-1.10.17/man/000077500000000000000000000000001261475620100140475ustar00rootroot00000000000000liferea-1.10.17/man/Makefile.am000066400000000000000000000000721261475620100161020ustar00rootroot00000000000000SUBDIRS = pl EXTRA_DIST = liferea.1 man_MANS = liferea.1liferea-1.10.17/man/liferea.1000066400000000000000000000054631261475620100155500ustar00rootroot00000000000000.TH LIFEREA "1" "Jul 26, 2013" .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 Google Reader and TinyTinyRSS. .SH OPTIONS Liferea options: .TP .B \-\-version Print version information and exit .TP .B \-\-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.10.17/man/pl/000077500000000000000000000000001261475620100144625ustar00rootroot00000000000000liferea-1.10.17/man/pl/Makefile.am000066400000000000000000000001021261475620100165070ustar00rootroot00000000000000mandir = @mandir@/pl EXTRA_DIST = liferea.1 man_MANS = liferea.1liferea-1.10.17/man/pl/liferea.1000066400000000000000000000041121261475620100161510ustar00rootroot00000000000000.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.10.17/net.sf.liferea.gschema.xml.in000066400000000000000000000332121261475620100206350ustar00rootroot00000000000000 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 "gnome", "mozilla", "firefox", "netscape", "opera", "konqueror", and "manual". 0 Location of position to open up the link in the selected browser Selects the location in the browser to open up the link. Use 0 for the browser's default, 1 for in an existing window, 2 for in a new window, and 3 for in a new tab. 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. true Try to refetch feeds after network errors? If set to true, and a network error is encountered while fetching a feed, Liferea will do a few more tries. This is useful in case of temporary loss of network/internet connection. 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. false Enables condensed mode Set to true to make Liferea use condensed mode or false to make Liferea use the three pane mode. 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. 0 Item id of the last item list selection When shutting down Liferea saves the last selected item 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. false Display popup window advertising new items as they are downloaded Display popup window advertising new items as they are downloaded. 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. true Determines if the system tray icon is to be shown Determines if the system tray icon is to be shown false Determines if the number of new items is shown in the system tray icon Determines if the number of new items is shown in the system tray icon false Determines if minimize to tray is not desired Determines if minimize to tray is not desired. This is relevant when the user clicks the close button or presses the window close hotkey of the window manager. If this option is disabled Liferea will just hide the window and keep running. If the option is enabled the application will terminate. 3 Number of update threads used in downloading Number of threads used to download feeds and web objects in Liferea. An additional thread is created that only services 'interactive' requests (for example when a user manually selects a feed to update). 0 Placement of the mini popup window The placement of the mini popup window that is opened to notify the user of new items. The popup window is positioned at one of the desktop borders (1 = upper left, 2 = upper right, 3 = lower right, 4 = lower left). 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. 0 Which tool to download enclosures. This options determines which download tool Liferea uses to download enclosures (0 = steadyflow, 1 = gwget, 2=kget). 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. false Start in tray This option determines if liferea should start in tray mode. 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. ['gnome-keyring','media-player'] Active plugins List of active plugins. It contains the "Location" of the active plugins. See the .liferea-plugin file for obtaining the "Location" of a given plugin. liferea-1.10.17/opml/000077500000000000000000000000001261475620100142435ustar00rootroot00000000000000liferea-1.10.17/opml/Makefile.am000066400000000000000000000006671261475620100163100ustar00rootroot00000000000000EXTRA_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_it.opml \ feedlist_pl.opml \ feedlist_pt.opml \ feedlist_pt_BR.opml \ feedlist_sk.opml \ feedlist_sv.opml \ feedlist_nl.opml lifereadistopmldir = $(datadir)/liferea/opml lifereadistopml_DATA = $(EXTRA_DIST) liferea-1.10.17/opml/feedlist_bg.opml000066400000000000000000000101041261475620100173770ustar00rootroot00000000000000 Liferea Default Feed List liferea-1.10.17/opml/feedlist_ca.opml000066400000000000000000000060141261475620100173770ustar00rootroot00000000000000 Canals predeterminats liferea-1.10.17/opml/feedlist_de.opml000066400000000000000000000062501261475620100174060ustar00rootroot00000000000000 Liferea Default Feed List liferea-1.10.17/opml/feedlist_en.opml000066400000000000000000000053171261475620100174230ustar00rootroot00000000000000 Liferea Default Feed List liferea-1.10.17/opml/feedlist_es.opml000066400000000000000000000054071261475620100174300ustar00rootroot00000000000000 Fuentes por defecto liferea-1.10.17/opml/feedlist_eu.opml000066400000000000000000000055751261475620100174400ustar00rootroot00000000000000 Iturri lehenetsiak liferea-1.10.17/opml/feedlist_fr.opml000066400000000000000000000063331261475620100174270ustar00rootroot00000000000000 Liste des flux par défaut de Liferea liferea-1.10.17/opml/feedlist_gl.opml000066400000000000000000000053061261475620100174210ustar00rootroot00000000000000 Lista de fontes predeterminadas do Liferea liferea-1.10.17/opml/feedlist_he.opml000066400000000000000000000267011261475620100174150ustar00rootroot00000000000000 Liferea Default Feed List liferea-1.10.17/opml/feedlist_hu.opml000066400000000000000000000054411261475620100174330ustar00rootroot00000000000000 Liferea alapértelmezett hírforráslista liferea-1.10.17/opml/feedlist_it.opml000066400000000000000000000072011261475620100174270ustar00rootroot00000000000000 Elenco notiziari predefiniti liferea-1.10.17/opml/feedlist_nl.opml000066400000000000000000000055031261475620100174270ustar00rootroot00000000000000 Liferea Dutch Feed List liferea-1.10.17/opml/feedlist_pl.opml000066400000000000000000000052441261475620100174330ustar00rootroot00000000000000 Przykładowa lista subskrypcji Liferea liferea-1.10.17/opml/feedlist_pt.opml000066400000000000000000000066621261475620100174500ustar00rootroot00000000000000 Lista de Fontes liferea-1.10.17/opml/feedlist_pt_BR.opml000066400000000000000000000055701261475620100200300ustar00rootroot00000000000000 Lista de Fontes de Notícias liferea-1.10.17/opml/feedlist_sk.opml000066400000000000000000000056441261475620100174410ustar00rootroot00000000000000 Liferea Default Feed List liferea-1.10.17/opml/feedlist_sv.opml000066400000000000000000000054561261475620100174550ustar00rootroot00000000000000 Liferea Default Feed List liferea-1.10.17/pixmaps/000077500000000000000000000000001261475620100147555ustar00rootroot00000000000000liferea-1.10.17/pixmaps/16x16/000077500000000000000000000000001261475620100155425ustar00rootroot00000000000000liferea-1.10.17/pixmaps/16x16/Makefile.am000066400000000000000000000002601261475620100175740ustar00rootroot00000000000000themedir = $(datadir)/icons/hicolor size = 16x16 context = apps EXTRA_DIST = liferea.png lifereadistpixdir = $(themedir)/$(size)/$(context) lifereadistpix_DATA = $(EXTRA_DIST) liferea-1.10.17/pixmaps/16x16/liferea.png000066400000000000000000000013711261475620100176610ustar00rootroot00000000000000PNG  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.10.17/pixmaps/22x22/000077500000000000000000000000001261475620100155345ustar00rootroot00000000000000liferea-1.10.17/pixmaps/22x22/Makefile.am000066400000000000000000000002601261475620100175660ustar00rootroot00000000000000themedir = $(datadir)/icons/hicolor size = 22x22 context = apps EXTRA_DIST = liferea.png lifereadistpixdir = $(themedir)/$(size)/$(context) lifereadistpix_DATA = $(EXTRA_DIST) liferea-1.10.17/pixmaps/22x22/liferea.png000066400000000000000000000016721261475620100176570ustar00rootroot00000000000000PNG  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.10.17/pixmaps/24x24/000077500000000000000000000000001261475620100155405ustar00rootroot00000000000000liferea-1.10.17/pixmaps/24x24/Makefile.am000066400000000000000000000002601261475620100175720ustar00rootroot00000000000000themedir = $(datadir)/icons/hicolor size = 24x24 context = apps EXTRA_DIST = liferea.png lifereadistpixdir = $(themedir)/$(size)/$(context) lifereadistpix_DATA = $(EXTRA_DIST) liferea-1.10.17/pixmaps/24x24/liferea.png000066400000000000000000000017161261475620100176620ustar00rootroot00000000000000PNG  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.10.17/pixmaps/32x32/000077500000000000000000000000001261475620100155365ustar00rootroot00000000000000liferea-1.10.17/pixmaps/32x32/Makefile.am000066400000000000000000000002601261475620100175700ustar00rootroot00000000000000themedir = $(datadir)/icons/hicolor size = 32x32 context = apps EXTRA_DIST = liferea.png lifereadistpixdir = $(themedir)/$(size)/$(context) lifereadistpix_DATA = $(EXTRA_DIST) liferea-1.10.17/pixmaps/32x32/liferea.png000066400000000000000000000030121261475620100176470ustar00rootroot00000000000000PNG  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.10.17/pixmaps/48x48/000077500000000000000000000000001261475620100155545ustar00rootroot00000000000000liferea-1.10.17/pixmaps/48x48/Makefile.am000066400000000000000000000002601261475620100176060ustar00rootroot00000000000000themedir = $(datadir)/icons/hicolor size = 48x48 context = apps EXTRA_DIST = liferea.png lifereadistpixdir = $(themedir)/$(size)/$(context) lifereadistpix_DATA = $(EXTRA_DIST) liferea-1.10.17/pixmaps/48x48/liferea.png000066400000000000000000000055341261475620100177000ustar00rootroot00000000000000PNG  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.10.17/pixmaps/Makefile.am000066400000000000000000000014041261475620100170100ustar00rootroot00000000000000SUBDIRS = 16x16 22x22 24x24 32x32 48x48 scalable EXTRA_DIST = \ attachment.png \ available.png \ available_offline.png \ default.png \ directory.png \ empty.png \ empty_offline.png \ flag.png \ grayflag.png \ unread.png \ vfolder.png \ fl_opml.png \ newsbin.png \ comments.png \ bookmark.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.10.17/pixmaps/attachment.png000066400000000000000000000005701261475620100176150ustar00rootroot00000000000000PNG  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˵o[]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.10.17/pixmaps/available_offline.png000066400000000000000000000015751261475620100211150ustar00rootroot00000000000000PNG  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,\qq/*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.10.17/pixmaps/empty.png000066400000000000000000000014601261475620100166220ustar00rootroot00000000000000PNG  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.10.17/pixmaps/fl_opml.png000066400000000000000000000014311261475620100171120ustar00rootroot00000000000000PNG  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.10.17/pixmaps/flag.png000066400000000000000000000010011261475620100163640ustar00rootroot00000000000000PNG  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.10.17/pixmaps/grayflag.png000066400000000000000000000004221261475620100172550ustar00rootroot00000000000000PNG  IHDR7IDAT(ύнm`_Rr L@aW ! 6`2iRRP 5.XVHaE׉P>zwϝ.y{|gjaCz`:|Rc%tyϻ̫5HRj6`*SY?ܶVL6Oo" p$G zyXjR,&+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.10.17/pixmaps/scalable/000077500000000000000000000000001261475620100165235ustar00rootroot00000000000000liferea-1.10.17/pixmaps/scalable/Makefile.am000066400000000000000000000002631261475620100205600ustar00rootroot00000000000000themedir = $(datadir)/icons/hicolor size = scalable context = apps EXTRA_DIST = liferea.svg lifereadistpixdir = $(themedir)/$(size)/$(context) lifereadistpix_DATA = $(EXTRA_DIST) liferea-1.10.17/pixmaps/scalable/liferea.svg000066400000000000000000001723511261475620100206640ustar00rootroot00000000000000 image/svg+xml News 2005-03-11 Jakub Steiner http://jimmac.musichall.cz/ news usenet new N E W S liferea-1.10.17/pixmaps/unread.png000066400000000000000000000006431261475620100167440ustar00rootroot00000000000000PNG  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.10.17/pixmaps/vfolder.png000066400000000000000000000017341261475620100171310ustar00rootroot00000000000000PNG  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.10.17/plugins/000077500000000000000000000000001261475620100147555ustar00rootroot00000000000000liferea-1.10.17/plugins/gnome-keyring.plugin000066400000000000000000000004401261475620100207460ustar00rootroot00000000000000[Plugin] Module=gnome-keyring Loader=python IAge=2 Name=GNOME Keyring Support Description=Allow Liferea to use GNOME keyring as password store Authors=Lars Windolf Copyright=Copyright © 2012 Lars Windolf Website=http://liferea.sf.net Help=http://liferea.sf.net liferea-1.10.17/plugins/gnome-keyring.py000066400000000000000000000050351261475620100201050ustar00rootroot00000000000000from gi.repository import GObject from gi.repository import Peas from gi.repository import PeasGtk from gi.repository import Gtk from gi.repository import Liferea from gi.repository import GnomeKeyring class GnomeKeyringPlugin(GObject.Object, Liferea.AuthActivatable): __gtype_name__ = 'GnomeKeyringPlugin' object = GObject.property(type=GObject.Object) def do_activate(self): GnomeKeyring.unlock_sync("liferea", None) # # Dump all passwords for debugging: # #print "=== dump list on activate" #(result, ids) = GnomeKeyring.list_item_ids_sync("liferea") #for id in ids: # (result, item) = GnomeKeyring.item_get_info_sync("liferea", id) # if result != GnomeKeyring.Result.OK: # print '%s is locked!' % (id) # else: # print '%s = %s' % (item.get_display_name(), item.get_secret()) # self.attrs = GnomeKeyring.Attribute.list_new() # result = GnomeKeyring.item_get_attributes_sync("liferea", id, self.attrs) # for attr in GnomeKeyring.Attribute.list_to_glist(self.attrs): # print ' %s => %s ' % (attr.name, attr.get_string()) #print "=== dump list end" def do_deactivate(self): window = self.object def do_query(self, id): # Fetch secret by id attrs = GnomeKeyring.Attribute.list_new() GnomeKeyring.Attribute.list_append_string(attrs, 'id', id) result, value = GnomeKeyring.find_items_sync(GnomeKeyring.ItemType.GENERIC_SECRET, attrs) if result != GnomeKeyring.Result.OK: return #print 'password %s = %s' % (id, value[0].secret) #print 'password id = %s' % value[0].item_id username, password = value[0].secret.split('@@@') Liferea.auth_info_from_store(id, username, password) def do_delete(self, id): keyring = GnomeKeyring.get_default_keyring_sync()[1] GnomeKeyring.item_delete_sync(keyring, id) def do_store(self, id, username, password): GnomeKeyring.create_sync("liferea", None) attrs = GnomeKeyring.Attribute.list_new() GnomeKeyring.Attribute.list_append_string(attrs, 'id', id) GnomeKeyring.Attribute.list_append_string(attrs, 'user', username) GnomeKeyring.item_create_sync("liferea", GnomeKeyring.ItemType.GENERIC_SECRET, repr(id), attrs, '@@@'.join([username, password]), True) #class GnomeKeyringConfigurable(GObject.Object, PeasGtk.Configurable): # __gtype_name__ = 'GnomeKeyringConfigurable' # # def do_create_configure_widget(self): # return Gtk.Label.new("GNOME Keyring configure widget") liferea-1.10.17/plugins/media-player.plugin000066400000000000000000000004151261475620100205460ustar00rootroot00000000000000[Plugin] Module=media-player Loader=python IAge=2 Name=Media Player Description=Play music and videos directly from Liferea Authors=Lars Windolf Copyright=Copyright © 2012 Lars Windolf Website=http://liferea.sf.net Help=http://liferea.sf.net liferea-1.10.17/plugins/media-player.py000066400000000000000000000176521261475620100177130ustar00rootroot00000000000000# Make code still work under Python 2.6/2.7 from __future__ import print_function, division from gi.repository import GObject from gi.repository import Peas from gi.repository import PeasGtk from gi.repository import GLib from gi.repository import Gtk from gi.repository import Liferea from gi.repository import Gst # FIXME: Upgrade to 0.11 #import gi #gi.require_version('Gst', '0.11') #from gi.repository import Gst 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.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.player.set_state(Gst.State.NULL) err, debug = message.parse_error() print("Error: %s" % err, debug) self.playing = False self.updateButtons() def on_eos(self, bus, message): self.player.set_state(Gst.State.NULL) self.playing = False self.updateButtons() def on_finished(self, player): self.playing = False self.slider.set_value(0) self.set_label(0) self.updateButtons() def play(self): 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) GObject.timeout_add(1000, self.updateSlider) def stop(self): self.player.set_state(Gst.State.NULL) def playToggled(self, w): self.slider.set_value(0) self.set_label(0) if(self.playing == False): self.play() else: self.stop() self.playing=not(self.playing) self.updateButtons() def next(self, w): self.stop() self.pos+=1 self.play() self.updateButtons() def prev(self, w): self.stop() self.pos-=1 self.play() self.updateButtons() 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 not self.playing 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 == False): self.playButtonImage.set_from_stock("gtk-media-play", Gtk.IconSize.BUTTON) else: self.playButtonImage.set_from_stock("gtk-media-stop", 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: 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.set_margin_top(3) vbox.set_margin_bottom(3) Gtk.Box.pack_start(parentWidget, vbox, True, True, 0); image = Gtk.Image() image.set_from_stock("gtk-media-previous", 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_stock("gtk-media-play", 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_stock("gtk-media-next", 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_margin_left(6) self.slider.set_margin_right(6) 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) self.label.set_margin_left(6) self.label.set_margin_right(6) 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.10.17/po/000077500000000000000000000000001261475620100137125ustar00rootroot00000000000000liferea-1.10.17/po/LINGUAS000066400000000000000000000001741261475620100147410ustar00rootroot00000000000000ar ast be@latin bg ca cs da de el es eu fi fr gl he hu 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.10.17/po/POTFILES.in000066400000000000000000000110001261475620100154570ustar00rootroot00000000000000[encoding: UTF-8] # List of source files containing translatable strings. liferea.appdata.xml.in 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/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_tray.c src/ui/ui_tray.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/aol_source.c 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/inoreader_source.c src/fl_sources/inoreader_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_edit.c src/fl_sources/theoldreader_source_feed.c src/fl_sources/theoldreader_source_feed_list.c src/fl_sources/theoldreader_source_feed_list.h src/notification/libnotify.c src/notification/notification.c src/notification/notification.h src/webkit/webkit.c [type: gettext/glade]glade/auth.ui [type: gettext/glade]glade/google_source.ui [type: gettext/glade]glade/inoreader_source.ui [type: gettext/glade]glade/liferea.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/reedah_source.ui [type: gettext/glade]glade/simple_subscription.ui [type: gettext/glade]glade/search_folder.ui [type: gettext/glade]glade/ttrss_source.ui [type: gettext/glade]glade/theoldreader_source.ui liferea-1.10.17/po/ar.po000066400000000000000000002541561261475620100146710ustar00rootroot00000000000000# 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. msgid "" msgstr "" "Project-Id-Version: liferea_trunk_ar\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-03 14:55+0200\n" "PO-Revision-Date: 2013-11-03 16:07+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 0.7.1-rc1\n" "X-Project-Style: gnome\n" #: ../liferea.appdata.xml.in.h:1 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:2 msgid "Distinguishing features:" msgstr "الخصائص المميزة:" #: ../liferea.appdata.xml.in.h:3 msgid "Read articles when offline" msgstr "قراءة المقالات دون اتصال" #: ../liferea.appdata.xml.in.h:4 msgid "Synchronizes with TheOldReader" msgstr "المزامنة مع قارئ TheOldReader" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TinyTinyRSS" msgstr "المزامنة مع TinyTinyRSS" #: ../liferea.appdata.xml.in.h:6 msgid "Permanently save headlines in news bins" msgstr "حفظ عناوين الأخبار بشكل دائم في سلة الأخبار" #: ../liferea.appdata.xml.in.h:7 msgid "Match items using search folders" msgstr "تجميع العناصر باستخدام مجلدات البحث" #: ../liferea.appdata.xml.in.h:8 msgid "Play Podcasts" msgstr "تشغيل التدوين صوتي" #: ../liferea.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "لايفريا" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "قارئ تلقيمات" # ARABEYES: keep the html code, this is # intentional #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "قارئ التلقيمات لايفريا" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "اقرأ تلقيمات الأخبار و المدونات" #: ../liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;" 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/liferea.ui.h:29 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 "Comments" msgstr "التعليقات" #: ../xslt/item.xml.in.h:11 msgid "Updating..." msgstr "يجري تحديث..." #: ../xslt/item.xml.in.h:12 msgid "Section" msgstr "القسم" #: ../xslt/item.xml.in.h:13 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:32 msgid "Default Browser" msgstr "المتصفح المبدئي" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "فشل أمر المتصفح: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "يبدأ: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "خطأ في الاستيثاق" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "تعذّر إنشاء مجلّد المخبئية \"%s\"!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "اليوم %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" ليس ملف إعداد أنواع مغلّفات سليم!" #: ../src/enclosure.c:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" "لم تضبط أداة للتنزيلات، يمكنك ضبطها من لسان 'التنزيل' في أدوات ← التفضيلات." #: ../src/enclosure.c:306 #, 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:185 #, c-format msgid "Error renaming %s to %s\n" msgstr "خطأ أثناء إعادة تسمية %s إلى %s\n" #: ../src/export.c:414 ../src/export.c:416 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "خطأ XML أثناء قراءة ملف OPML! تعذّر استيراد \"%s\"!" #: ../src/export.c:422 ../src/export.c:424 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "مستند فارغ! يجب ألا يكون مستند OPML \"%s\" فارغا أثناء التصدير." #: ../src/export.c:445 ../src/export.c:447 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "‏\"%s\" ليس مستند OPML صالحاً! لا يستطيع لايفريا استيراد هذا الملف!" #: ../src/export.c:466 msgid "Imported feed list" msgstr "قائمة التلقيمات المستوردة" #: ../src/export.c:478 msgid "Import Feed List" msgstr "استورد قائمة التلقيمات" #: ../src/export.c:478 msgid "Import" msgstr "استورد" #: ../src/export.c:478 ../src/export.c:495 ../src/fl_sources/opml_source.c:394 msgid "OPML Files" msgstr "ملفات OPML" #: ../src/export.c:486 msgid "Error while exporting feed list!" msgstr "خطأ أثناء تصدير قائمة التلقيمات!" #: ../src/export.c:488 msgid "Feed List exported!" msgstr "صُدّرت قائمة التلقيمات!" #: ../src/export.c:495 msgid "Export Feed List" msgstr "صدّر قائمة التلقيمات" #: ../src/export.c:495 msgid "Export" msgstr "صدّر" #: ../src/feed.c:254 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:283 #, c-format msgid "\"%s\" updated..." msgstr "حُدِّث \"%s\"..." #: ../src/feed.c:293 #, 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:404 msgid "There are no unread items" msgstr "لا توجد عناصر غير مقروءة" #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" #: ../src/main.c:164 msgid "STATE" msgstr "STATE" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "" #: ../src/main.c:166 msgid "Add a new subscription" msgstr "أضف اشتراكا جديدا" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "" #: ../src/main.c:173 msgid "Print debugging messages for the configuration handling" msgstr "" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "" #: ../src/main.c:179 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "" #: ../src/main.c:182 msgid "Print debugging messages of the search folder matching" msgstr "" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "" # ARABEYES: keep the html code, this is # intentional #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "

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

" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "للمزيد من المعلومات، طالع http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:329 msgid "The update request was cancelled" msgstr "أُلغي طلب التحديث" #: ../src/net.c:330 msgid "Unable to resolve destination host name" msgstr "تعذّر الوصول إلى المستضيف المقصود" #: ../src/net.c:331 msgid "Unable to resolve proxy host name" msgstr "تعذّر الوصول إلى الوسيط" #: ../src/net.c:332 msgid "Unable to connect to remote host" msgstr "تعذّر الاتصال بالمستضيف البعيد" #: ../src/net.c:333 msgid "Unable to connect to proxy" msgstr "تعذّر الاتصال بالوسيط" #: ../src/net.c:334 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "حدث خطأ شبكي، أو أن الطرف الآخر أنهى الاتصال فجأة" #. http 3xx redirection #: ../src/net.c:337 msgid "The resource moved permanently to a new location" msgstr "انتقل المورد إلى مكان جديد بشكل دائم" #. http 4xx client error #: ../src/net.c:340 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "غير مرخّص لك بتنزيل هذه التلقيمة. رجاء حدّث اسم مستخدمك وكلمة سرّك في صندوق " "حوار خصائص التلقيمة" #: ../src/net.c:342 msgid "Payment required" msgstr "الدّفع مطلوب" #: ../src/net.c:343 msgid "You're not allowed to access this resource" msgstr "غير مسموح لك بالوصول إلى هذا المورد" #: ../src/net.c:344 msgid "Resource Not Found" msgstr "المورِد غير موجود" #: ../src/net.c:345 msgid "Method Not Allowed" msgstr "الطريقة غير مسموحة" #: ../src/net.c:346 msgid "Not Acceptable" msgstr "غير مقبول" #: ../src/net.c:347 msgid "Proxy authentication required" msgstr "استيثاق الوسيط مطلوب" #: ../src/net.c:348 msgid "Request timed out" msgstr "انتهت مهلة الطلب" #: ../src/net.c:349 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "ذهب. المورِد غير موجود. رجاء اشترك!" #: ../src/net.c:354 msgid "There was an internal error in the update process" msgstr "حدث خطأ داخلي أثناء عملية التحديث" #: ../src/net.c:356 msgid "Feed not available: Server requested unsupported redirection!" msgstr "التلقيم غير متوفّر: طلب الخادم إعادة توجيه غير مدعوم!" #: ../src/net.c:358 msgid "Client Error" msgstr "خطأ عميل" #: ../src/net.c:360 msgid "Server Error" msgstr "خطأ خادوم" #: ../src/net.c:362 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "يجري تحديث الاشتراك \"%s\" بالفعل!" #: ../src/subscription.c:110 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "أُوقِف الاشتراك \"%s\". لن يقوم لايفريا بالتحديث بعد الآن!" #: ../src/subscription.c:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "يجري تحديث أيقونة \"%s\"" #: ../src/subscription.c:193 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "كانت هناك مشكلة أثناء قراءة هذا الاشتراك. رجاء تحقق من العنوان وخرْج الطرفية." #: ../src/subscription.c:211 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "تغير عنوان \"%s\" بشكل دائم وتم تحديثه" #: ../src/subscription.c:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "توقّف \"%s\". لن يحدّثه لايفريا بعد الآن!" #: ../src/subscription.c:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "لم يتغيّر \"%s\" منذ آخر تحديث" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "يجري تحديث \"%s\"" #: ../src/update.c:258 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "خطأ أثناء فتح الملف المؤقّت %s لاستخدامه في الترشيح!" #: ../src/update.c:281 #, c-format msgid "%s exited with status %d" msgstr "خرج %s بالحالة %d" #: ../src/update.c:287 ../src/update.c:288 ../src/update.c:400 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "خطأ: تعذّر فتح الأنبوب \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:426 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "خطأ: تعذّر فتح الملف \"%s\"" #: ../src/update.c:432 #, 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, 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:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "اختر ملفا" #: ../src/ui/enclosure_list_view.c:438 #, 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:328 #, 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:333 #, 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:719 msgid "Help Topics" msgstr "مواضيع المساعدة" #: ../src/ui/liferea_shell.c:725 msgid "Quick Reference" msgstr "مرجع سريع" #: ../src/ui/liferea_shell.c:731 msgid "FAQ" msgstr "أسئلة شائعة" #: ../src/ui/liferea_shell.c:798 msgid "Liferea is now online" msgstr "الآن لايفريا متّصل" #: ../src/ui/liferea_shell.c:800 msgid "Work Offline" msgstr "اعمل دون اتّصال" #: ../src/ui/liferea_shell.c:802 msgid "Liferea is now offline" msgstr "الآن لايفريا غير متّصل" #: ../src/ui/liferea_shell.c:804 msgid "Work Online" msgstr "اعمل باتّصال" #: ../src/ui/liferea_shell.c:900 msgid "_Subscriptions" msgstr "الا_شتراكات" #: ../src/ui/liferea_shell.c:901 msgid "Update _All" msgstr "حدّث ال_كل" #: ../src/ui/liferea_shell.c:901 msgid "Updates all subscriptions." msgstr "حدّث كل الاشتراكات." #: ../src/ui/liferea_shell.c:903 msgid "Mark All As _Read" msgstr "علّم الكل _مقروء" #: ../src/ui/liferea_shell.c:903 msgid "Marks read every item of every subscription." msgstr "علّم كل عنصر في كل اشتراك مقروء." #: ../src/ui/liferea_shell.c:905 msgid "_Import Feed List..." msgstr "ا_ستورد قائمة التلقيمات..." #: ../src/ui/liferea_shell.c:905 msgid "Imports an OPML feed list." msgstr "استورد قائمة تلقيمات OPML." #: ../src/ui/liferea_shell.c:906 msgid "_Export Feed List..." msgstr "_صدّر قائمة التلقيمات..." #: ../src/ui/liferea_shell.c:906 msgid "Exports the feed list as OPML." msgstr "يصدّر قائمة التلقيمات كـ OPML." #: ../src/ui/liferea_shell.c:907 msgid "_Quit" msgstr "ا_خرج" #: ../src/ui/liferea_shell.c:909 msgid "_Feed" msgstr "_تلقيم" #: ../src/ui/liferea_shell.c:910 msgid "Remove _All Items" msgstr "احذف _كل العناصر" #: ../src/ui/liferea_shell.c:910 msgid "Removes all items of the currently selected feed." msgstr "يحذف كل عناصر التلقيمات المُحددة حالياً." #: ../src/ui/liferea_shell.c:913 msgid "_Item" msgstr "_عنصر" #: ../src/ui/liferea_shell.c:914 msgid "Previous Item" msgstr "العنصر السابق" #: ../src/ui/liferea_shell.c:916 msgid "Next Item" msgstr "العنصر التالي" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:921 msgid "_Next Unread Item" msgstr "العنصر غير المقروء ال_تالي" #: ../src/ui/liferea_shell.c:924 msgid "_View" msgstr "_عرض" #: ../src/ui/liferea_shell.c:925 ../src/ui/liferea_htmlview.c:653 msgid "_Increase Text Size" msgstr "زِ_د حجم النص" #: ../src/ui/liferea_shell.c:925 msgid "Increases the text size of the item view." msgstr "يزيد حجم النص عند عرض العنصر." #: ../src/ui/liferea_shell.c:927 ../src/ui/liferea_htmlview.c:654 msgid "_Decrease Text Size" msgstr "_قلل حجم النص" #: ../src/ui/liferea_shell.c:927 msgid "Decreases the text size of the item view." msgstr "يقلل حجم النص عند عرض العنصر." #: ../src/ui/liferea_shell.c:930 msgid "_Tools" msgstr "أ_دوات" #: ../src/ui/liferea_shell.c:931 msgid "_Update Monitor" msgstr "_مراقب التحديثات" #: ../src/ui/liferea_shell.c:931 msgid "Show a list of all feeds currently in the update queue" msgstr "اعرض قائمة بكل التلقيمات الموجودة حاليا في طابور التحديث" #: ../src/ui/liferea_shell.c:933 msgid "_Preferences" msgstr "ال_تفضيلات" #: ../src/ui/liferea_shell.c:933 msgid "Edit Preferences." msgstr "حرّر التفضيلات." #: ../src/ui/liferea_shell.c:936 msgid "S_earch" msgstr "_بحث" #: ../src/ui/liferea_shell.c:937 msgid "Search All Feeds..." msgstr "ابحث في كل التلقيمات..." #: ../src/ui/liferea_shell.c:937 msgid "Show the search dialog." msgstr "اعرض حوار البحث." #: ../src/ui/liferea_shell.c:939 msgid "_Help" msgstr "_مساعدة" #: ../src/ui/liferea_shell.c:940 msgid "_Contents" msgstr "الم_حتويات" #: ../src/ui/liferea_shell.c:940 msgid "View help for this application." msgstr "اعرض مساعدة هذا التطبيق." #: ../src/ui/liferea_shell.c:941 msgid "_Quick Reference" msgstr "مرجع _سريع" #: ../src/ui/liferea_shell.c:941 msgid "View a list of all Liferea shortcuts." msgstr "اعرض قائمة بكل اختصارات لايفريا." #: ../src/ui/liferea_shell.c:943 msgid "_FAQ" msgstr "أ_سئلة شائعة" #: ../src/ui/liferea_shell.c:943 msgid "View the FAQ for this application." msgstr "اعرض الأسئلة الشائعة عن التطبيق." #: ../src/ui/liferea_shell.c:944 msgid "_About" msgstr "_عن" #: ../src/ui/liferea_shell.c:944 msgid "Shows an about dialog." msgstr "اعرض حوار عن." #: ../src/ui/liferea_shell.c:948 msgid "_Normal View" msgstr "المنظور ال_عادي" #: ../src/ui/liferea_shell.c:948 msgid "Set view mode to mail client mode." msgstr "اضبط نمط العرض كنمط عميل البريد." #: ../src/ui/liferea_shell.c:950 msgid "_Wide View" msgstr "منظور _عريض" #: ../src/ui/liferea_shell.c:950 msgid "Set view mode to use three vertical panes." msgstr "اضبط نمط العرض ليستخدم ثلاث ألواح رأسيّة." #: ../src/ui/liferea_shell.c:952 msgid "_Combined View" msgstr "منظور مركّ_ب" #: ../src/ui/liferea_shell.c:952 msgid "Set view mode to two pane mode." msgstr "اضبط نمط العرض إلى نمط اللوحين." #: ../src/ui/liferea_shell.c:957 msgid "_Reduced Feed List" msgstr "_ضُم قائمة التلقيمات" #: ../src/ui/liferea_shell.c:957 msgid "Hide feeds with no unread items." msgstr "أخفِ التلقيمات التي لا تحتوي عناصر غير مقروءة." #: ../src/ui/liferea_shell.c:962 msgid "_New Subscription..." msgstr "اشتراك _جديد..." #: ../src/ui/liferea_shell.c:962 msgid "Adds a subscription to the feed list." msgstr "أضِف اشتراك إلى قائمة التلقيمات." #: ../src/ui/liferea_shell.c:964 ../src/ui/popup_menu.c:320 msgid "New _Folder..." msgstr "_مجلّد جديد..." #: ../src/ui/liferea_shell.c:964 msgid "Adds a folder to the feed list." msgstr "أضِف مجلّد إلى قائمة التلقيمات." #: ../src/ui/liferea_shell.c:965 ../src/ui/popup_menu.c:323 msgid "New S_earch Folder..." msgstr "مجلّد _بحث جديد..." #: ../src/ui/liferea_shell.c:965 msgid "Adds a new search folder to the feed list." msgstr "أضِف مجلّد بحث جديد إلى قائمة التلقيمات." #: ../src/ui/liferea_shell.c:966 msgid "New _Source..." msgstr "م_صدر جديد..." #: ../src/ui/liferea_shell.c:966 msgid "Adds a new feed list source." msgstr "أضِف مصدر قائمة تلقيمات جديد." #: ../src/ui/liferea_shell.c:967 ../src/ui/popup_menu.c:325 msgid "New _News Bin..." msgstr "_سلّة أخبار جديدة..." #: ../src/ui/liferea_shell.c:967 msgid "Adds a new news bin." msgstr "أضِف سلّة أخبار جديدة." #: ../src/ui/liferea_shell.c:971 msgid "_Mark Items Read" msgstr "_علّم العناصر مقروءة" #: ../src/ui/liferea_shell.c:971 msgid "" "Marks all items of the selected feed list node / in the item list as read." msgstr "علّم كل عناصر الاشتراك المحدد مقروءة." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:300 msgid "_Update" msgstr "_حدّث" #: ../src/ui/liferea_shell.c:973 msgid "" "Updates the selected subscription or all subscriptions of the selected " "folder." msgstr "يُحدّث الاشتراك المُحدد أو كل الاشتراكات في المجلّد المُحدد." #: ../src/ui/liferea_shell.c:978 msgid "_Properties" msgstr "ال_خصائص" #: ../src/ui/liferea_shell.c:978 msgid "Opens the property dialog for the selected subscription." msgstr "يفتح حوار خصائص الاشتراك المحدد." #: ../src/ui/liferea_shell.c:979 msgid "_Remove" msgstr "ا_حذف" #: ../src/ui/liferea_shell.c:979 msgid "Removes the selected subscription." msgstr "يحذف الاشتراك المحدد." #: ../src/ui/liferea_shell.c:983 ../src/ui/popup_menu.c:163 msgid "Toggle _Read Status" msgstr "بدّل حالة ال_قراءة" #: ../src/ui/liferea_shell.c:983 msgid "Toggles the read status of the selected item." msgstr "تبدّل حالة قراءة العناصر المحددة." #: ../src/ui/liferea_shell.c:985 ../src/ui/popup_menu.c:164 msgid "Toggle Item _Flag" msgstr "بدّل _شارة العنصر" #: ../src/ui/liferea_shell.c:985 msgid "Toggles the flag status of the selected item." msgstr "تبدّل حالة شارة العنصر المحدد." #: ../src/ui/liferea_shell.c:987 msgid "R_emove" msgstr "أ_زل" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected item." msgstr "يحذف العنصر المحدد." #: ../src/ui/liferea_shell.c:989 ../src/ui/popup_menu.c:127 msgid "Open In _Tab" msgstr "افتح _لسان" #: ../src/ui/liferea_shell.c:989 msgid "Launches the item's link in a new Liferea browser tab." msgstr "يفتح وصله العنصر في لسان جديد في متصفّح لايفريا." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:128 msgid "_Open In Browser" msgstr "ا_فتح في المتصفح" #: ../src/ui/liferea_shell.c:991 msgid "Launches the item's link in the Liferea item pane." msgstr "يفتح وصله العنصر في عمود العنصر في لايفريا." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:129 msgid "Open In _External Browser" msgstr "افتح في متصفح _خارجي" #: ../src/ui/liferea_shell.c:993 msgid "Launches the item's link in the configured external browser." msgstr "يفتح وصله العنصر في المتصفّح الخارجي المعدّ." #: ../src/ui/liferea_shell.c:998 ../src/ui/popup_menu.c:193 msgid "_Work Offline" msgstr "ا_عمل دون اتّصال" #: ../src/ui/liferea_shell.c:998 msgid "This option allows you to disable subscription updating." msgstr "يسمح لك هذا الخيار بتعطيل تحديث الاشتراك." #: ../src/ui/liferea_shell.c:1000 msgid "_Fullscreen" msgstr "_ملء الشاشة" #: ../src/ui/liferea_shell.c:1000 msgid "Browse at full screen" 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:211 msgid "All Files" msgstr "كل الملفات" #: ../src/ui/feed_list_view.c:348 msgid "Deleting entry" msgstr "يجريِ حذف الخانة" #: ../src/ui/feed_list_view.c:349 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "أواثق من رغبتك في حذف \"%s\" ومحتوياته؟" #: ../src/ui/feed_list_view.c:349 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "أواثق من رغبتك في حذف \"%s\"؟" #: ../src/ui/feed_list_view.c:361 msgid "Deletion Confirmation" msgstr "تأكيد الحذف" #: ../src/ui/feed_list_view.c:392 msgid "Liferea is in offline mode. No update possible." msgstr "لايفريا في وضع دون اتصال. لا يمكن التحديث." #: ../src/ui/liferea_htmlview.c:624 msgid "Open Link In _Tab" msgstr "افتح الوصلة في _لسان" #: ../src/ui/liferea_htmlview.c:625 msgid "_Open Link In Browser" msgstr "ا_فتح الوصلة في المتصفّح" #: ../src/ui/liferea_htmlview.c:626 msgid "_Open Link In External Browser" msgstr "ا_فتح الوصلة في المتصفّح الخارجي" #: ../src/ui/liferea_htmlview.c:629 #, c-format msgid "_Bookmark Link at %s" msgstr "_علّم الوصلة في %s" #: ../src/ui/liferea_htmlview.c:633 msgid "_Copy Link Location" msgstr "ا_نسخ مكان الوصلة" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Image Location" msgstr "انسخ مكان ال_صورة" #: ../src/ui/liferea_htmlview.c:638 msgid "S_ave Link As" msgstr "احفظ الو_صلة ك‍" #: ../src/ui/liferea_htmlview.c:640 msgid "S_ave Image As" msgstr "احف_ظ الصورة ك‍" #: ../src/ui/liferea_htmlview.c:643 msgid "_Subscribe..." msgstr "ا_شترك..." #: ../src/ui/item_list_view.c:398 msgid "*** No title ***" msgstr "*** بلا عنوان ***" #: ../src/ui/item_list_view.c:661 msgid "Date" msgstr "التاريخ" #: ../src/ui/item_list_view.c:675 msgid "Headline" msgstr "عنوان رئيسي" #: ../src/ui/item_list_view.c:776 ../src/ui/item_list_view.c:797 #: ../src/ui/item_list_view.c:818 msgid "This item has no link specified!" msgstr "لا وصلة محددة لهذا العنصر!" #: ../src/ui/item_list_view.c:780 ../src/ui/item_list_view.c:801 #: ../src/ui/item_list_view.c:822 ../src/ui/item_list_view.c:886 #: ../src/ui/item_list_view.c:971 ../src/ui/item_list_view.c:986 msgid "No item has been selected" msgstr "لم تختر أية عناصر" #: ../src/ui/item_list_view.c:874 msgid "You must select a feed to delete its items!" msgstr "يجب أن تختار تلقيمة لحذف عناصرها!" #: ../src/ui/popup_menu.c:141 msgid "Copy to News Bin" msgstr "انسخ لسلّة الأخبار" #: ../src/ui/popup_menu.c:155 #, c-format msgid "_Bookmark at %s" msgstr "_علّم في %s" #: ../src/ui/popup_menu.c:159 msgid "Copy Item _Location" msgstr "انسخ م_كان العنصر" #: ../src/ui/popup_menu.c:165 msgid "R_emove Item" msgstr "أ_زل العنصر" #: ../src/ui/popup_menu.c:178 msgid "Open Enclosure..." msgstr "افتح مغلّفا..." #: ../src/ui/popup_menu.c:179 msgid "Save As..." msgstr "احفظ ك‍..." #: ../src/ui/popup_menu.c:180 msgid "Copy Link Location" msgstr "انسخ موقع الوصلة" #: ../src/ui/popup_menu.c:194 msgid "_Update All" msgstr "_حدّث الكل" #: ../src/ui/popup_menu.c:199 msgid "_Show Liferea" msgstr "أ_ظهر لايفريا" #: ../src/ui/popup_menu.c:302 msgid "_Update Folder" msgstr "_حدّث المجلّد" #: ../src/ui/popup_menu.c:304 msgid "_Mark All As Read" msgstr "_علّم الكل مقروء" #: ../src/ui/popup_menu.c:314 msgid "_New" msgstr "_جديد" #: ../src/ui/popup_menu.c:317 msgid "New _Subscription..." msgstr "اشتراك _جديد..." #: ../src/ui/popup_menu.c:324 msgid "New S_ource..." msgstr "م_صدر جديد..." #: ../src/ui/popup_menu.c:333 msgid "Sort Feeds" msgstr "رتّب التلقيمات" #: ../src/ui/popup_menu.c:339 msgid "_Rebuild" msgstr "أعد الب_ناء" #: ../src/ui/popup_menu.c:351 msgid "Convert To Local Subscriptions..." msgstr "حوّل إلى اشتراكات محلية..." #: ../src/ui/preferences_dialog.c:87 msgid "GNOME default" msgstr "افتراضي جنوم" #: ../src/ui/preferences_dialog.c:88 msgid "Text below icons" msgstr "نص تحت الأيقونات" #: ../src/ui/preferences_dialog.c:89 msgid "Text beside icons" msgstr "نص بجانب الأيقونات" #: ../src/ui/preferences_dialog.c:90 msgid "Icons only" msgstr "أيقونات فقط" #: ../src/ui/preferences_dialog.c:91 msgid "Text only" msgstr "نص فقط" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "دقائق" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "ساعات" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "أيّام" #: ../src/ui/preferences_dialog.c:106 msgid "Space" msgstr "مسافة" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Space" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Space" #: ../src/ui/preferences_dialog.c:113 msgid "Normal View" msgstr "المنظور العادي" #: ../src/ui/preferences_dialog.c:114 msgid "Wide View" msgstr "المنظور العريض" #: ../src/ui/preferences_dialog.c:115 msgid "Combined View" msgstr "المنظور المركّب" #: ../src/ui/preferences_dialog.c:500 msgid "Manual" msgstr "يدوي" #: ../src/ui/preferences_dialog.c:515 msgid "Browser default" msgstr "افتراضي المتصفح" #: ../src/ui/preferences_dialog.c:518 msgid "Existing window" msgstr "نافذة موجودة" #: ../src/ui/preferences_dialog.c:521 msgid "New window" msgstr "نافذة جديدة" #: ../src/ui/preferences_dialog.c:524 msgid "New tab" msgstr "لسان جديد" #: ../src/ui/preferences_dialog.c:684 msgid "Integrate with the messaging menu (indicator)" msgstr "ادمج مع قائمة الرسائل" #: ../src/ui/preferences_dialog.c:687 msgid "Terminate instead of minimizing to the messaging menu" msgstr "أنهِ بدلا من التصغير إلى قائمة الرسائل" #: ../src/ui/preferences_dialog.c:690 msgid "Start minimized to the messaging menu" msgstr "ابدأ مصغّرًا في قائمة الرسائل" #: ../src/ui/preferences_dialog.c:790 msgid "Type" msgstr "النوع" #: ../src/ui/preferences_dialog.c:793 msgid "Program" msgstr "البرنامج" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(فارغ)" #: ../src/ui/feed_list_node.c:343 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "يُعيد البناء" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "لا تُحدِّد هذه التلقيمة فترة تحديث افتراضيّة." #: ../src/ui/browser_tabs.c:153 msgid "Untitled" msgstr "بدون عنوان" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "لا عناصر جديدة" msgstr[1] "عنصر جديد" msgstr[2] "عنصران جديدان" msgstr[3] "%d عناصر جديدة" msgstr[4] "%d عنصرا جديدا" msgstr[5] "%d عنصر جديد" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "لا عناصر جديدة" #: ../src/ui/ui_tray.c:228 #, c-format 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 عنصر غير مقروء" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "لا عناصر غير مقروءة" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "الموقع" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "تلقيمة Atom غير صحيحة: مؤلف مجهول" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/aol_source.c:123 msgid "AOL Reader login failed!" msgstr "فشل الولوج إلى قارئ AOL!" #: ../src/fl_sources/aol_source.c:153 msgid "AOL Reader Login" msgstr "ولوج قارئ AOL" #: ../src/fl_sources/aol_source.c:268 ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/inoreader_source.c:272 #: ../src/fl_sources/reedah_source.c:272 #: ../src/fl_sources/theoldreader_source.c:278 #: ../glade/new_subscription.ui.h:1 ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "اشتراك جديد" #: ../src/fl_sources/aol_source.c:361 msgid "AOL Reader" msgstr "قارئ AOL" #: ../src/fl_sources/aol_source.c:362 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." #: ../src/fl_sources/inoreader_source.c:115 msgid "InoReader login failed!" msgstr "فشل الولوج إلى قارئ InoReader!" #: ../src/fl_sources/inoreader_source.c:387 msgid "InoReader" msgstr "قارئ InoReader" #: ../src/fl_sources/inoreader_source.c:388 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." #: ../src/fl_sources/google_source.c:148 msgid "Google Reader" msgstr "قارئ جوجل" #: ../src/fl_sources/google_source.c:149 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 "" "يتكامل مع قائمة تلقيمات حسابك في قارئ جوجل. سيعرض لايفريا اشتراكات قارئ جوجل " "وسيزامن قائمة التلقيمات مع قائمة قراءة جوجل." #: ../src/fl_sources/opml_source.c:326 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:327 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 " #: ../src/fl_sources/opml_source.c:394 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:246 msgid "No feed list source types found!" msgstr "لم يُعثر على أنواع مصادر قائمة التلقيمات!" #: ../src/fl_sources/node_source.c:276 msgid "Source Type" 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:420 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "حُوِّلَ اشتراك '%s' بنجاح إلى تلقيمات محلية." #: ../src/fl_sources/reedah_source.c:115 msgid "Reedah login failed!" msgstr "فشل الولوج إلى قارئ Reedah!" #: ../src/fl_sources/reedah_source.c:387 msgid "Reedah" msgstr "قارئ Reedah" #: ../src/fl_sources/reedah_source.c:388 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." #: ../src/fl_sources/reedah_source_feed.c:236 msgid "Could not parse JSON returned by Reedah API!" msgstr "" #: ../src/fl_sources/ttrss_source.c:93 msgid "" "This TinyTinyRSS source is not self-updating and Liferea does not support " "updating TinyTinyRSS remotely at the moment. Please change the TinyTinyRSS " "preferences to automatic updating!" msgstr "" #: ../src/fl_sources/ttrss_source.c:410 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:411 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." #: ../src/fl_sources/ttrss_source_feed.c:119 msgid "Could not parse JSON returned by TinyTinyRSS API!" msgstr "" #: ../src/fl_sources/theoldreader_source.c:115 msgid "TheOldReader login failed!" msgstr "فشل الولوج إلى قارئ TheOldReader!" #: ../src/fl_sources/theoldreader_source.c:393 msgid "TheOldReader" msgstr "قارئ TheOldReader" #: ../src/fl_sources/theoldreader_source.c:394 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." #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "لا وجود لهذه التلقيمة بعد الآن!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "مدخلة الأخبار بلا عناوين رئيسية" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "زُر" #: ../src/notification/libnotify.c:167 ../src/notification/libnotify.c:263 msgid "Open feed" msgstr "افتح التلقيمة" #: ../src/notification/libnotify.c:170 ../src/notification/libnotify.c:266 msgid "Mark all as read" msgstr "علّم الكل مقروء" #: ../src/notification/libnotify.c:247 #, c-format 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" #: ../src/notification/libnotify.c:249 msgid "Feed Update" msgstr "تحديث التلقيمة" #: ../src/notification/libnotify.c:260 msgid "Show details" msgstr "اعرض التفاصيل" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "الاستيثاق" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_كلمة السر:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "ا_سم المستخدم:" #: ../glade/auth.ui.h:6 msgid "" "Note: The username and password will be saved to your Liferea feedlist " "file without using encryption." 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/inoreader_source.ui.h:3 #: ../glade/reedah_source.ui.h:3 ../glade/ttrss_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:3 msgid "_Password" msgstr "_كلمة السر" #: ../glade/google_source.ui.h:4 ../glade/inoreader_source.ui.h:4 #: ../glade/reedah_source.ui.h:4 ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "ا_سم المستخدم (البريد)" #: ../glade/inoreader_source.ui.h:1 msgid "Add InoReader Account" msgstr "أضِف حساب قارئ InoReader" #: ../glade/inoreader_source.ui.h:2 msgid "Please enter your InoReader account settings" msgstr "من فضلِك أدخل إعدادات حسابك في قارئ InoReader." #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "المنظور العادي" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "المنظور العريض" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "اعرض العناوين الرئيسية" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "المنظور المركّب" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "رؤوس العناوين" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "زر متصّل/غير متّصل" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "خصائص الاشتراك" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "اسم التلقيمة" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "ا_سم التلقيمة:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "فترة التحديث" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "ا_ستخدم فترة التحديث الإفتراضية العموميّة." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "فترة التحديث الخاصة بال_تلقيمة من" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_لا تحدّث هذه التلقيمة آلياً." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "يقترح مُزوّد التلقيمة فترة تحديث %d من الدقائق." #: ../glade/liferea.ui.h:18 msgid "General" msgstr "عام" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "مصدر التلقيمة" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "نوع المصدر:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "ال_مصدر:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_مسار" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "أ_مر" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "ملف _محلّي" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "اختر ملفا..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "استخدم _مرشّح تحويل" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "حوّل با_ستخدام:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "إعدادات الذاكرة المخبأة الا_فتراضيّة" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_عطّل الذاكرة المخبّأة" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "ذاكرة مخبّأة _غير محدودة" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "_عدد العناصر التي ستُحفظ:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "أرشيف" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "استخدم ا_ستيثاق HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "_لا تستخدم وسيط للتنزيل" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "تنزيل" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "نزّل كل مغلّفات هذه التلقيمة آ_ليّاً." #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "_حمّل عنصر الوصلة آليا في المتصفّح المحدد عند انتقاء المقالات." #: ../glade/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "تجاهل تلقيمات تعليقات _هذا الاشتراك." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "ا_فرض إشعار قافز لهذا الاشتراك." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "_لا تعرض إشعار قافز لهذا الاشتراك، أبدا." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_علّم العناصر المنزّلة مقروءة." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "متقدّم" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "مجلّد جديد" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "ا_سم المجلّد:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "أعِد التسمية" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "اسم _جديد:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "خصائص مجلّد البحث" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "ا_سم البحث:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "ابحث عن العناصر التي تُطابق هذه المعايير" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "أي _قاعدة تطابق" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "_كل القواعد يجب أن تطابق" #: ../glade/liferea.ui.h:57 msgid "Open Enclosure" msgstr "افتح مغلّفًا" #: ../glade/liferea.ui.h:58 msgid "Open an enclosure of type:" msgstr "افتح مغلّفًا من نوع:" #: ../glade/liferea.ui.h:59 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/liferea.ui.h:60 msgid "_Browse" msgstr "_تصفّح" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "ا_فعل هذا تلقائيا مع المغلّفات مثل هذا من الآن فصاعداَ." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "ابحث في كل التلقيمات" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "ا_بحث عن:" #: ../glade/liferea.ui.h:64 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "أدخل نص بحث ليبحث عنه ليعثر عليه لايفريا في عنصر أو مُحتواه." #: ../glade/liferea.ui.h:65 msgid "_Advanced..." msgstr "_متقدّم..." #: ../glade/liferea.ui.h:66 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "يبدأ البحث عن النصّ المحدد في كل التلقيمات. ستظهر نتيجة البحث في قائمة " "العناصر." #: ../glade/liferea.ui.h:67 msgid "Update Monitor" msgstr "مراقب التحديثات" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "الطلبات المنتظرة" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "يُنزّل الآن" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "ألغِ ال_كل" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "أنشئ سلّة أخبار" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "اسم سلّة الأ_خبار:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "عن" #: ../glade/liferea.ui.h:74 msgid "Liferea is a news aggregator for GTK+" msgstr "لايفريا هو مُجمِّع أخبار لجتك+" # ARABEYES: keep the html code, this is # intentional #: ../glade/liferea.ui.h:75 msgid "Liferea Homepage" msgstr "صفحة لايفريا" #: ../glade/liferea.ui.h:76 msgid "Advanced Search" msgstr "بحث متقدّم" #: ../glade/liferea.ui.h:77 msgid "_Search Folder..." msgstr "ا_بحث في المجلّد..." #: ../glade/liferea.ui.h:78 msgid "Create Search Engine Feed" msgstr "أنشئ تلقيمة محرّك بحث" #: ../glade/liferea.ui.h:79 msgid "enter any search string you want" msgstr "ادخل أي عبارة بحث ترغب فيها" #: ../glade/liferea.ui.h:80 msgid "Maximal _Number Of Result Items:" msgstr "ال_عدد الأقصى من عناصر الناتج:" #: ../glade/liferea.ui.h:81 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 "" "ملاحظة: سيوّلد لايفريا اشتراك تلقيم سيستخدم للاستعلام عن نتائج محرّك البحث " "لعبارة البحث المحدّدة. يمكنك إبقاء هذه التلقيمة وتحديثها كأي اشتراك آخر." #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" 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:4 msgid "Feed Update Settings" msgstr "إعدادات تحديث التلقيمات" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "ح_دّث كل الاشتراكات عند بدء التشغيل." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "_فترة تحديث التلقيمات الافتراضيّة:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "التلقيمات" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "إعدادات عرض المجلّد" #: ../glade/prefs.ui.h:11 msgid "_Show the items of all child feeds when a folder is selected." msgstr "أ_ظهر العناصر لكل التلقيمات الإبنة عند اختيار مجلّد." #: ../glade/prefs.ui.h:12 msgid "_Hide read items." msgstr "أ_خفِ العناصر المقروءة." #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "أيقونات التلقيمات (Favicons)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_حدّث كل الأيقونات الآن" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "المجلّدات" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "قراءة رؤوس العناوين" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "_تصفّع عبر المقالات باستخدام:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "و_ضع المنظور الافتراضي:" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "التكامل مع الوب" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "ا_نشر العلامات في" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "إعدادات المتصفّح الداخلي" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "افتح الوصلات في _نافذة لايفريا." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_عطّل جافاسكريبت." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "_فعّل ملحقات المتصفح." #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "إعدادات المتصفّح الخارجي" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "ا_فتح الوصلة في:" #: ../glade/prefs.ui.h:28 msgid "_Manual:" msgstr "ي_دويا:" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "(%s للمسار)" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "ال_متصفح:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "المتصفح" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "إعدادات التنبيه" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "اعرض نافذة _منبثقة مع العناوين الرئيسية الجديدة." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "اعرض أ_يقونة حالة في منطقة التنبيه (لوح النظام)." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "اعرض _عدد العناصر الجديدة في أيقونة اللوحة." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "أ_نهِ بدلا من التصغير إلى أيقونة اللوحة." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "ابدأ _كأيقونة في اللوحة." #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "إعدادات شريط الأدوات" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "أخفِ _شريط الأدوات." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "عناوين أ_زرار شريط الأدوات:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "الواجهة" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "خادم وكيل HTTP" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_تعرف آلي (جنوم أو البيئة)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_لا وسيط" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "إعدادات _يدويّة:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "م_نفذ الوسيط:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "_مضيف الوسيط:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "استخدم استيثاق ال_وسيط" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "_كلمة سرّ الوسيط:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "اسم م_ستخدم الوسيط:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "الوسيط" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "تنزيل المغلّفات" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_نزّل باستخدام" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "فتح المغلّفات" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "المغلّفات" #: ../glade/prefs.ui.h:57 msgid "Plugins" 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/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/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 tt-rss account settings." msgstr "من فضلِك أدخل إعدادات حسابك في Tiny Tiny RSS." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "عنوان ال_خادوم" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" 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." #~ 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 "_Delete" #~ 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 "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 " Start Liferea with its main window in STATE." #~ msgstr " ابدأ لايفريا والنافذة الرئيسية في الحالة 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://liferea.sf.net" #~ msgstr "http://liferea.sf.net" #~ msgid "_Limit cache to" #~ msgstr "حُدّ الذاكرة المخبّأة بـ" #~ msgid "items." #~ msgstr "عناصر." liferea-1.10.17/po/ast.po000066400000000000000000002065171261475620100150540ustar00rootroot00000000000000# 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: 2013-04-27 14:08+0300\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.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Llector de noticies" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea, llector de noticies" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 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 "No comments yet." msgstr "Entá nun hai comentarios." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Comentarios" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Anovando..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Anovar" #: ../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:32 msgid "Default Browser" msgstr "Restolador predefiníu" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Falló al llanzar el restolador: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Aniciando: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Fallu n'autorización" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "¡Nun pudo criase'l direutoriu d'almacenamientu \"%s\"!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 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:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%b %d %Y" #: ../src/enclosure.c:197 #, 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:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Fallu al renomar %s a %s\n" #: ../src/export.c:406 ../src/export.c:408 #, 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:414 ../src/export.c:416 #, 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:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Llista de canales importaos" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Importar llista de canales" #: ../src/export.c:470 msgid "Import" msgstr "Importar" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 msgid "OPML Files" msgstr "Ficheros OPML" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Ocurrió un fallu mientres s'esportaba la llista de canales." #: ../src/export.c:480 msgid "Feed List exported!" msgstr "La llista de canales esportóse con ésitu." #: ../src/export.c:487 msgid "Export Feed List" msgstr "Esportar llista de canales" #: ../src/export.c:487 msgid "Export" msgstr "Esportar" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" anovada..." #: ../src/feed.c:294 #, 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:404 msgid "There are no unread items" msgstr "Nun hai artículos ensin lleer " #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', 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/main.c:164 msgid "STATE" msgstr "ESTÁU" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Amosar información de la versión y colar" #: ../src/main.c:166 msgid "Add a new subscription" msgstr "Amestar una nueva soscripción" #: ../src/main.c:166 msgid "uri" msgstr "uri" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Amosar tolos mensaxes de depuración" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "" "Amosar mensaxes de depuración tocante a remanar l'área d'almacenamientu" #: ../src/main.c:173 msgid "Print debugging messages for the configuration handling" msgstr "Amosar mensaxes de depuración tocante a la configuración" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Amosar mensaxes de depuración tocante a la base de datos" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "" "Amosar mensaxes de depuración tocante toles funciones de la interface gráfica" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Amosar mensaxes de depuración tocante a los accesos a la rede" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "" "Amosar mensaxes de depuración tocante a toles funciones de procesamientu" #: ../src/main.c:179 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/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "Amosar mensaxes de depuración al entrar y colar de funciones" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "" "Amosar mensaxes de depuración tocante al procesu d'anovamientu de canales" #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "" "Amosar mensaxes de depuración tocante a remanar l'área d'almacenamientu" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "Amosar información estra nos mensaxes de depuración" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "Amosar mensaxes de depuración tocante al tema especificáu" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, llector de noticies pa Linux" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "Pa más información, visita http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "L'anovamientu solicitáu encaboxóse" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Nun pudo resolvese'l nome del sirvidor remotu" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Nun pudo resolvese'l nome del sirvidor proxy" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Nun pudo coneutase col sirvidor" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Nun foi dable coneutar col proxy" #: ../src/net.c:325 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:328 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:331 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:333 msgid "Payment required" msgstr "Requierse Pagu" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Nun tienes permisu p'acceder a esti elementu" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Recursu non atopáu" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Métodu non permitíu" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Non aceutable" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "El proxy requier autenticación" #: ../src/net.c:339 msgid "Request timed out" msgstr "Espiró'l tiempu de rempuesta" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Esta fonte yá nun esiste. Por favor, desaníciala." #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Asocedió un fallu internu durante l'anovamientu" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Canal nun disponible: El sirvidor solicitó una redireición desconocida." #: ../src/net.c:349 msgid "Client Error" msgstr "Fallu del veceru" #: ../src/net.c:351 msgid "Server Error" msgstr "Fallu del sirvidor" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "La canal \"%s\" yá ta anovándose!" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Anovando'l iconu de \"%s\"" #: ../src/subscription.c:193 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:211 #, 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:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" Abandonóse. Liferea yá nun va anovala." #: ../src/subscription.c:222 #, 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:272 #, c-format msgid "Updating \"%s\"" msgstr "Anovando: \"%s\"" #: ../src/update.c:259 #, 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:282 #, c-format msgid "%s exited with status %d" msgstr "%s finóse col estáu %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Fallu: Nun pudo abrise'l ficheru \"%s\"" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Fallu: Nun esiste'l ficheru \"%s\"" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Nueva carpeta de gueta" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Hai más fallos. ¡La salida truncóse!]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d axuntu" msgstr[1] "%d axuntos" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Escoyer Ficheru" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d nuevu)" msgstr[1] " (%d nuevos)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Temes d'aida" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Manual de referencia" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "FAQ" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea ta coneutáu" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Trabayar ensin conexón" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea ta ensin conexón" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Trabayar coneutáu" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Soscripciones" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "_Anovar toes" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Anova toles soscripciones" #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Conseñar _too como lleío" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Conseña como lleíos tolos artículos de toles soscripciones." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Importar llista de canales..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Importa una llista de canales en formatu OPML." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Esportar llista de canales..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Esporta la llista de canales en formatu OPML." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Colar" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Canal" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Desanici_ar tolos elementos" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Desaniciar tolos artículos de la canal seleccionada." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "_Elementu" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "Siguiente artículu _nuevu" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "Siguiente artículu _nuevu" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Ver" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "_Aumentar el tamañu del testu" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Aumenta'l tamañu del testu na vista del artículu." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "_Amenorgar el tamañu del testu" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Amenorga'l tamañu del testu de la vista del artículu" #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "_Ferramientes" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "Monitor d'anovamiento_s" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "Amosar llista de tolos canales con anovamientos pendientes" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Preferencies" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Editar Preferencies." #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "Gu_etar" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Guetar en toles canales..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Amosar el ventanu de gueta." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "A_ida" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Conteníos" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Amosa aida pa esta aplicación." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Referencia rápida" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Amosar toles combinaciones de tecles de Liferea." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_FAQ" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Amosar les entrugues más frecuentes (FAQ) del programa." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_Tocante a" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Amosar el ventanu Tocante a." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "_Vista normal" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Visualiza en mou veceru de corréu." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "_Vista enantada" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Afita la visualización usando tres paneles verticales." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "Vista _combinada" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Afita la visualización usando dos paneles." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "Llista de canales _amenorgada" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Anubrir los canales ensin artículos nuevos" #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "_Nueva soscripción..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Axuntar una soscripción a la llista de canales." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Nueva _carpeta..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Axuntar una carpeta a la llista de canales." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Nueva carpeta de _gueta..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Axuntar una carpeta de gueta a la llista de canales." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Nueva _fonte..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Axuntar una nueva fonte de llistes de canales." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "Nueva ban_dexa..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Axuntar una nueva bandexa de noticies." #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "_Conseñar artículos lleíos" #: ../src/ui/liferea_shell.c:979 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." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Anovar" #: ../src/ui/liferea_shell.c:981 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." #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "_Propiedaes" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Abre'l cuadru de propiedaes de la canal esbillada." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "D_esaniciar" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Desaniciar la canal esbillada." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "_Camudar ente lleíu y non lleíu" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Pasa'l artículu actual de lleíu a non lleíu o viceversa." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Asignar o quitar _etiqueta" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Crea o desanicia una etiqueta nel artículu seleccionáu." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "D_esaniciar" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Desaniciar l'artículu esbilláu." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "Abre l'enllaz del artículu nel restolador." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "_Abrir nel restolador" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Abre l'enllaz del artículu nel restolador." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Opciones del restolador esternu" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Abre l'enllaz del artículu nel restolador." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "Trabayar ensin conexón" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Esta opción permite deshabilitar l'anovamientu de soscripciones." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea, llector de noticies Linux" #: ../src/ui/liferea_shell.c:1341 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

" #: ../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:205 msgid "All Files" msgstr "Tolos ficheros" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Desaniciando entrada" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "¿Daveres quies desaniciar \"%s\"?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Confirmar Desaniciu" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea ta trabayando ensin conexón. Nun pueden anovase les fontes" #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "Abrir l'enllaz nuna lli_ngüeta nueva" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "Abrir l'enllaz n_el restolador" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "Abrir l'enllaz n_el restolador" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "Crear un marcador del enllaz en %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_Copiar direición del enllaz" #: ../src/ui/liferea_htmlview.c:639 msgid "_Copy Image Location" msgstr "_Copiar direición de la imaxe" #: ../src/ui/liferea_htmlview.c:641 msgid "S_ave Link As" msgstr "Guardar enllaz c_omo" #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "G_uarda imaxe como" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "_Soscribise..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Ensin títulu ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Titular" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Nun se seleicionó dengún artículu" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "¡Esti artículu nun tien un enllaz asignáu!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "¡Seleiciona una canal pa desaniciar los sos artículos!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "Copiar a una bandexa" #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "Crear un marcador del enllaz en %s" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "_Copiar direición de la imaxe" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "_Desaniciar artículu" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Abrir axuntu..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Guardar como..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "_Copiar la direición del enllaz" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "_Anovar too" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "_Amosar Liferea" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "_Anovar Carpeta" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "_Conseñar toos como lleíos" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "_Nueva" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "Nueva _soscripción" #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "Nueva f_onte..." #: ../src/ui/popup_menu.c:329 msgid "Sort Feeds" msgstr "Ordenar canales" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "Predetermináu de Gnome" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Testu embaxo de los iconos" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Testu xunto a los iconos" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Namái iconos" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Namái testu" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minutos" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "hores" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "díes" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Espaciu" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Espaciu" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Espaciu" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "_Vista normal" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "_Vista enantada" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "Vista _combinada" #: ../src/ui/preferences_dialog.c:505 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:520 msgid "Browser default" msgstr "Restolador predetermináu" #: ../src/ui/preferences_dialog.c:523 msgid "Existing window" msgstr "Ventana esistente" #: ../src/ui/preferences_dialog.c:526 msgid "New window" msgstr "Nueva ventana" #: ../src/ui/preferences_dialog.c:529 msgid "New tab" msgstr "Nueva llingüeta" #: ../src/ui/preferences_dialog.c:688 #, fuzzy msgid "Integrate with the messaging menu (indicator)" msgstr "Aniciar amenorgáu nel menú mensaxería" #: ../src/ui/preferences_dialog.c:691 #, fuzzy msgid "Terminate instead of minimizing to the messaging menu" msgstr "Finar, _en llugar de minimizar na estaya de notificación." #: ../src/ui/preferences_dialog.c:694 msgid "Start minimized to the messaging menu" msgstr "Aniciar amenorgáu nel menú mensaxería" #: ../src/ui/preferences_dialog.c:794 msgid "Type" msgstr "Triba" #: ../src/ui/preferences_dialog.c:797 msgid "Program" msgstr "Programa" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Esta canal nun especifica un intervalu d'anovamientos predetermináu." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d artículu nuevu" msgstr[1] "%d artículos nuevos" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Nun hai artículos nuevos" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Nun hai artículos ensin lleer" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Sitiu web" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Canal Atom inválida: autor desconocíu" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nueva canal" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "Falló l'accesu a Google Reader" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Llector Google" #: ../src/fl_sources/google_source.c:384 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." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:326 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" #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Nun s'atoparon tribes de fontes de llistes de canales." #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Triba de fonte" #: ../src/fl_sources/ttrss_source.c:367 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:368 #, 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." #: ../src/fl_sources/ttrss_source_feed.c:111 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "¡Esta canal yá nun esiste!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Esti artículu nun tien titular" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Visitar" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Ver la canal" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Conseñar too como lleíu" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "%s tien %d anovamientu" msgstr[1] "%s tien %d anovamientos" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Anovar canal" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Amosar detalles" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autenticación" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "Contraseña:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_Nome d'usuariu:" #: ../glade/auth.ui.h:6 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." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "Cont_raseña" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "Nome d'_usuariu (Email)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "vista normal" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "vista panorámica" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Ver titulares" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "vista combinada" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Titulares" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Boton Coneutáu/Desconeutáu" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Propiedaes de la fonte" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Nome de la canal" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "_Nome de la canal:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "Intervalu anovamientu" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Usar l'intervalu establecíu globalmente." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "Afitar un intervalu especí_ficu de" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "Nun anovar automáticamente esta canal" #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Xeneral" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Orixe de la canal" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Mou d'accesu:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "Orixe:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Comandu" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "Ficheru _llocal" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Restolar Ficheru..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Usar _peñera de charra" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Convertir _usando:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "Usar la configuración _xeneral" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Desactivar almacenamientu" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "Almacenamientu _illimitáu" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "_Númberu d'artículos a atroxar:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Archivu" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Usar _autenticación HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "Nu_n usar proxy pa baxaes" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Baxar" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "Baxar _automáticamente tolos axuntos d'esta canal." #: ../glade/liferea.ui.h:42 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/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Inorar les canales de comentarios d'esta soscripción." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "Siempre xenerar notificaciones pa esta soscripción." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "Enxamás xenerar notificaciones pa esta soscripción." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Conseñar elementos descargaos como lleíos." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Avanzáu" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Nueva carpeta" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "_Nome de la carpeta:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Renomar" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Nuevu nome:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Propiedaes de la carpeta de gueta" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "Guetar _Nome:" #: ../glade/liferea.ui.h:54 #, fuzzy msgid "Find Items that meet the following criteria" msgstr "Alcontrar artículos colos criterios siguientes" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "Cúmpl_ese cualesquier regla" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "_Cúmplense toles regles" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "Abrir axuntu..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "Baxando un axuntu de triba:" #: ../glade/liferea.ui.h:59 #, 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/liferea.ui.h:60 msgid "_Browse" msgstr "Restolar" #: ../glade/liferea.ui.h:61 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/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Guetar en toles canales" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "Términu a guetar:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Avanzáu…" #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Monitor d'anovamientos" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "Solicitúes pendientes" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "Baxando agora" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Encaboxar _too" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Crea una bandexa de noticies" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Nome de la bandexa de noticies:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Tocante a" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea ye un llector de noticies pa GTK+" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Sitiu web de Liferea" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Gueta Avanzada" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "_Guetar carpeta..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Crear una canal de resultaos de gueta" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "escribi una cadena de testu a guetar" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "_Númberu máximu de resultaos:" #: ../glade/liferea.ui.h:84 #, 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. " #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Baxada / Postprocesamientu" #: ../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/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 tt-rss 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/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/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:4 msgid "Feed Update Settings" msgstr "Axustes d'anovamientu de canal" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Anova toles soscripciones" #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "_Intervalu d'anovamientu predetermináu" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Canales" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "Opciones de presentación de carpetes" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "_Anubrir elementos lleíos." #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Iconos de los canales (Favicons)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Anovar tolos favicons agora" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Carpetes" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Leendo titulares" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "_Saltar a artículos con:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Integración web" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Unviar los marcadores a" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Axustes del restolador internu" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Abrir los enllaces na ventana de Liferea." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Desautivar JavaScript." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "Habilitar «plugins» del restolador." #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "Opciones del restolador esternu" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "Abrir enllaz en:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "Manual" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "Restolador:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Restolador" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Axustes de notificación" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Amosar una ventana emerxente al recibir nuevos elementos." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Amosar un iconu na estaya de notificación (system tray)." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Amosar el _númberu d'elementos nuevos nel iconu de la bandexa." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "Finar, _en llugar de minimizar na estaya de notificación." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Aniciar na bandexa d'iconos." #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Axustes de la barra de ferramientes" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "Anubrir la barra de ferramientes." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Etiquetes de los _botones de la barra de ferramientes:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Interfaz gráfica" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "HTTP Proxy Server" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_Auto deteición (GNOME o entornu)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "Ensin proxy" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "Configuración _manual:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "_Puertu del proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "Sirvidor proxy:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "_Identificase énte'l proxy" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Contraseña del proxy:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Nome d'_usuariu nel proxy:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "Baxando axuntos" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "Baxar usan_do" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "Abrir axuntu..." #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Axuntos" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #~ 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" #, fuzzy #~ msgid "Synchronized with Nearby Hosts" #~ msgstr "Sincronización con equipos cercanos" #~ 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 "_Delete" #~ msgstr "_Desaniciar" #~ 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.10.17/po/be@latin.po000066400000000000000000002367311261475620100160040ustar00rootroot00000000000000# 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: 2013-01-25 23:54+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.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Hartač RSS" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Hartač RSS Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 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 "No comments yet." msgstr "Jašče niama kamentaroŭ." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Kamentary" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Aktualizacyja..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Aktualizuj" #: ../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:32 #, fuzzy msgid "Default Browser" msgstr "Zmoŭčany hartač GNOME'a" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Pamyłka zahadu hartača: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Startujecca: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Pamyłka aŭtaryzacyi" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Niemahčyma stvaryć kataloh padručnaj pamiaci \"%s\"!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 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:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%b %d %Y" #: ../src/enclosure.c:197 #, 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:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Pamyłka źmieny nazvy %s na %s\n" #: ../src/export.c:406 ../src/export.c:408 #, 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:414 ../src/export.c:416 #, 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:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Śpis impartavanych kanałaŭ" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Impartuj śpis kanałaŭ" #: ../src/export.c:470 msgid "Import" msgstr "Impartuj" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 #, fuzzy msgid "OPML Files" msgstr "Abiary fajł OPML" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Pamyłka pry ekspartavańni śpisu kanałaŭ!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Śpis kanałaŭ ekspartavany!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Ekspartuj śpis kanałaŭ" #: ../src/export.c:487 msgid "Export" msgstr "Ekspartuj" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" aktualizavany..." #: ../src/feed.c:294 #, 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:404 #, fuzzy msgid "There are no unread items" msgstr "Nia niečytanych elementaŭ " #: ../src/main.c:164 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr " STAN moža być `shown', `iconified' albo `hidden'" #: ../src/main.c:164 msgid "STATE" msgstr "" #: ../src/main.c:165 #, fuzzy msgid "Show version information and exit" msgstr " --version Pakažy źviestki ab versii i vyjdzi" #: ../src/main.c:166 #, fuzzy msgid "Add a new subscription" msgstr "Novaja padpiska" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 #, fuzzy msgid "Print debugging messages of all types" msgstr " --debug-all Pakazvaj debugavyja paviedamleńni ŭsich typaŭ" #: ../src/main.c:172 #, fuzzy msgid "Print debugging messages for the cache handling" msgstr "" " --debug-conf Pakazvaj debugavyja paviedamleńni dla pracy z " "kanfihuracyjaj" #: ../src/main.c:173 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "" " --debug-conf Pakazvaj debugavyja paviedamleńni dla pracy z " "kanfihuracyjaj" #: ../src/main.c:174 #, fuzzy msgid "Print debugging messages of the database handling" msgstr "" " --debug-conf Pakazvaj debugavyja paviedamleńni dla pracy z " "kanfihuracyjaj" #: ../src/main.c:175 #, fuzzy msgid "Print debugging messages of all GUI functions" msgstr "" " --debug-gui Pakazvaj debugavyja paviedamleńni dla ŭsich funkcyj GUI" #: ../src/main.c:176 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/main.c:177 #, fuzzy msgid "Print debugging messages of all network activity" msgstr "" " --debug-net Pakazvaj debugavyja paviedamleńni dla dostupu da sietki" #: ../src/main.c:178 #, fuzzy msgid "Print debugging messages of all parsing functions" msgstr "" " --debug-parsing Pakazvaj debugavyja paviedamleńni dla ŭsich funkcyj " "razboru" #: ../src/main.c:179 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/main.c:180 #, fuzzy msgid "Print debugging messages when entering/leaving functions" msgstr "" " --debug-trace Pakazvaj debugavyja paviedamleńni dla dunkcyj uvachodu/" "vychadu" #: ../src/main.c:181 #, fuzzy msgid "Print debugging messages of the feed update processing" msgstr "" " --debug-update Pakazvaj debugavyja paviedamleńni dla aktualizacyj kanałaŭ" #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "" " --debug-conf Pakazvaj debugavyja paviedamleńni dla pracy z " "kanfihuracyjaj" #: ../src/main.c:183 #, fuzzy msgid "Print verbose debugging messages" msgstr " --debug-verbose Pakazvaj padrabiaznyja debugavyja paviedamleńni" #: ../src/main.c:194 ../src/main.c:195 #, fuzzy msgid "Print debugging messages for the given topic" msgstr "" " --debug- Pakazvaj debugavyja paviedamleńni dla peŭnaj temypamiaćciu" #: ../src/main.c:202 #, fuzzy msgid "Liferea, the Linux Feed Reader" msgstr "Liferea - Čytač kanałaŭ dla Linuksa" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "" #: ../src/net.c:323 #, fuzzy msgid "Unable to connect to remote host" msgstr "Pamyłka spałučeńnia z addalenym kamputaram" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "" #: ../src/net.c:325 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:328 msgid "The resource moved permanently to a new location" msgstr "" #. http 4xx client error #: ../src/net.c:331 #, 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:333 #, fuzzy msgid "Payment required" msgstr "Patrabujecca apłata" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Resurs nia znojdzieny" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Metad nie dazvoleny" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Nie pryjmalna" #: ../src/net.c:338 #, fuzzy msgid "Proxy authentication required" msgstr "Patrabujecca aŭtaryzacyja dla proxy" #: ../src/net.c:339 #, fuzzy msgid "Request timed out" msgstr "Skončyŭsia termin čakańnia zapytu" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Źnik. Resurs nie isnuje. Kali łaska, adpišysia!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Kanał niedastupny: Server vymahaje niepadtrymanaje pieranakiravańnie!" #: ../src/net.c:349 msgid "Client Error" msgstr "Pamyłka klijenta" #: ../src/net.c:351 msgid "Server Error" msgstr "Pamyłka servera" #: ../src/net.c:353 #, 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Padpiska \"%s\" užo była aktualizavanaja!" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Aktualizacyja ikony kanału dla \"%s\"" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" nie źmianiŭsia ad apošniaj aktualizacyi" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Aktualizacyja \"%s\"" #: ../src/update.c:259 #, 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:282 #, c-format msgid "%s exited with status %d" msgstr "%s vyjšaŭ sa statusam %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Pamyłka: Niemahčyma adčynić fajł \"%s\"" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Pamyłka: Fajł \"%s\" nie isnuje" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Novy kataloh pošuku" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Byli jašče pamyłki. Vyjście abatnutaje!]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Abiary fajł" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, 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:330 #, 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:716 msgid "Help Topics" msgstr "Temy dapamohi" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Chutki ahlad" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "Pytańni j adkazy" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea ciapier spałučany" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Pracuj adłučana" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea ciapier adłučany" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Pracuj spałučana" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Padpiski" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "Aktualizuj _usie" #: ../src/ui/liferea_shell.c:909 #, fuzzy msgid "Updates all subscriptions." msgstr "Novaja padpiska" #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Paznač usie jak _čytanyja" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Paznačaje čytanym kožny element z kožnaje padpiski." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Impartuj śpis kanałaŭ..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Impartuje śpis kanałaŭ u farmacie OPML." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Ekspartuj śpis kanałaŭ..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Ekspartuje śpis kanałaŭ u farmacie OPML." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Vyjdzi" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "Kanał" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Vydal _usie elementy" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Vydalaje ŭsie elementy z dziejna abranaha kanału." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "_Element" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "_Nastupny niečytany element" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "_Nastupny niečytany element" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Vyhlad" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "Pa_vialič pamier tekstu" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Pavialičvaje pamier tekstu ŭ vyhladzie elementaŭ." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "Pa_mienš pamier tekstu" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Pamianšaje pamier tekstu ŭ vyhladzie elementaŭ." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "_Pryładździe" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "_Manitor aktualizacyj" #: ../src/ui/liferea_shell.c:939 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" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Nałady" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Redahuj nałady." #: ../src/ui/liferea_shell.c:944 #, fuzzy msgid "S_earch" msgstr "_Šukaj" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Šukaj va ŭsich kanałach..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Pakažy dyjalohavaje vakno pošuku." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Dapamoha" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Źmieściva" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Pakažy dapamohu dla hetaje aplikacyi." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Chutki ahlad" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Pakažy śpis usich skarotaŭ Liferea." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_Pytańni j adkazy" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Pakažy Pytańni j Adkazy dla hetaje aplikacyi." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_Ab prahramie" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Pakazvaje dyjalohavaje vakno sa źviestkami ab prahramie." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "_Zvyčajny vyhlad" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Vyznač režym ahladu paštovaha klijenta." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "Š_yroki vyhlad" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Vyznač režym ahladu z tryma vertykalnymi panelami." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "_Kambinavany vyhlad" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Vyznač režym ahladu z dvuma panelami." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "" #: ../src/ui/liferea_shell.c:965 #, fuzzy msgid "Hide feeds with no unread items." msgstr "Nia niečytanych elementaŭ " #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "_Novaja padpiska..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Dadaje padpisku ŭ śpis kanałaŭ." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Novy _kataloh..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Dadaje kataloh u śpis kanałaŭ." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Novy kataloh _pošuku..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Dadaje novy kataloh pošuku ŭ śpis kanałaŭ." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Novaja _krynica..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Dadaje novuju krynicu śpisu kanałaŭ." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "Novy _koš navinaŭ..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Dadaje novy koš navinaŭ." #: ../src/ui/liferea_shell.c:979 #, fuzzy msgid "_Mark Items Read" msgstr "/_Zaznač jak pračytanaje" #: ../src/ui/liferea_shell.c:979 #, 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." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Aktualizuj" #: ../src/ui/liferea_shell.c:981 msgid "" "Updates the selected subscription or all subscriptions of the selected " "folder." msgstr "Aktualizuje abranuju padpisku albo ŭsie padpiski z abranaha katalohu." #: ../src/ui/liferea_shell.c:986 #, fuzzy msgid "_Properties" msgstr "_Ułaścivaści..." #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Adčyniaje dyjalohavaje vakno ŭłaścivaściaŭ dla abranaje padpiski." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "_Vydal" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Vydalaje abranuju padpisku." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Źmiani _stan pračytanaści" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Źmianiaje stan pračytanaści abranaha elementu." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Źmiani ś_ciah elementu" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Źmianiaje stan ściahu dla abranaha elementu." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "_Vydal" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Vydalaje abrany element." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "Adčyniaja spasyłku elementu ŭ skanfihuravanym hartačy." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "_Adčyni ŭ hartačy" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Adčyniaja spasyłku elementu ŭ skanfihuravanym hartačy." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Nałady vonkavaha hartača" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Adčyniaja spasyłku elementu ŭ skanfihuravanym hartačy." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "_Pracuj adłučana" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Hetaja opcyja adklučaje aktualizacyi padpisak." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Čytač kanałaŭ dla Linuksa" #: ../src/ui/liferea_shell.c:1341 #, 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.

" #: ../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:205 #, fuzzy msgid "All Files" msgstr "_Lakalny fajł" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Vydaleńnie elementu" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, 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_view.c:354 msgid "Deletion Confirmation" msgstr "Paćvierdžańnie vydaleńnia" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea u adłučanym režymie. Aktualizacyja niemahčymaja." #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "/Adčyni spasyłku ŭ _kartcy" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "/_Adčyni spasyłku ŭ hartačy" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "/_Adčyni spasyłku ŭ hartačy" #: ../src/ui/liferea_htmlview.c:632 #, fuzzy, c-format msgid "_Bookmark Link at %s" msgstr "/_Zrabi zakładku dla spasyłki na %s" #: ../src/ui/liferea_htmlview.c:636 #, fuzzy msgid "_Copy Link Location" msgstr "/_Skapijuj adras spasyłki" #: ../src/ui/liferea_htmlview.c:639 #, fuzzy msgid "_Copy Image Location" msgstr "/_Skapijuj adras spasyłki" #: ../src/ui/liferea_htmlview.c:641 #, fuzzy msgid "S_ave Link As" msgstr "/Zapišy jak..." #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "" #: ../src/ui/liferea_htmlview.c:646 #, fuzzy msgid "_Subscribe..." msgstr "/_Padpišysia..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Biaz nazvy ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Zahałovak" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Elementy nie zaznačanyja" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Hety element nia maje akreślenaje spasyłki!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Ty pavinny abrać kanał, dla jakoha vydalić elementy!" #: ../src/ui/popup_menu.c:142 #, fuzzy msgid "Copy to News Bin" msgstr "/Skapijuj u koš navinaŭ/%s" #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "/_Zrabi zakładku dla spasyłki na %s" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "/_Skapijuj adras spasyłki" #: ../src/ui/popup_menu.c:166 #, fuzzy msgid "R_emove Item" msgstr "/_Vydal element" #: ../src/ui/popup_menu.c:179 #, fuzzy msgid "Open Enclosure..." msgstr "/Adčyni dałučeńnie..." #: ../src/ui/popup_menu.c:180 #, fuzzy msgid "Save As..." msgstr "/Zapišy jak..." #: ../src/ui/popup_menu.c:181 #, fuzzy msgid "Copy Link Location" msgstr "/_Skapijuj adras spasyłki" #: ../src/ui/popup_menu.c:195 #, fuzzy msgid "_Update All" msgstr "/_Aktualizuj usie" #: ../src/ui/popup_menu.c:200 #, fuzzy msgid "_Show Liferea" msgstr "Liferea" #: ../src/ui/popup_menu.c:298 #, fuzzy msgid "_Update Folder" msgstr "/_Aktualizuj kataloh" #: ../src/ui/popup_menu.c:300 #, fuzzy msgid "_Mark All As Read" msgstr "/_Zaznač usie jak pračytanyja" #: ../src/ui/popup_menu.c:310 #, fuzzy msgid "_New" msgstr "/_Novy" #: ../src/ui/popup_menu.c:313 #, fuzzy msgid "New _Subscription..." msgstr "_Novaja padpiska..." #: ../src/ui/popup_menu.c:320 #, fuzzy msgid "New S_ource..." msgstr "Novaja _krynica..." #: ../src/ui/popup_menu.c:329 #, fuzzy msgid "Sort Feeds" msgstr "Impartuj śpis kanałaŭ" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "zmoŭčany dla GNOME'a" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Tekst pad ikonami" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Tekst pa bakoch ikonaŭ" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Tolki ikony" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Tolki tekst" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "chvilin" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "hadzin" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dzion" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Prabieł" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Prabieł" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Prabieł" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "_Zvyčajny vyhlad" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "Š_yroki vyhlad" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "_Kambinavany vyhlad" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Admysłovy" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Zmoŭčanaje dla hartača" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Najaŭnaje vakno" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Novaje vakno" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Novaja kartka" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "" #: ../src/ui/preferences_dialog.c:685 #, fuzzy msgid "Terminate instead of minimizing to the messaging menu" msgstr "_Zakančvaj pracu zamiest minimizacyi ŭ ikonu traju." #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Typ" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Prahrama" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 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:155 msgid "Untitled" msgstr "Biaz nazvy" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d novy element" msgstr[1] "%d novyja elementy" msgstr[2] "%d novych elementaŭ" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Niama novych elementaŭ" #: ../src/ui/ui_tray.c:228 #, c-format 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ŭ" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Niama niepračytanych elementaŭ" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Niapravilny kanał Atom: nieviadomy aŭtar" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Novaja padpiska" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "Pamyłka ŭruchamleńnia kontu na Google Reader'y!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 #, 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ŭ." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:326 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." #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Typy krynic dla śpisu kanałaŭ nia znojdzienyja!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Typ krynicy" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source.c:363 #, 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ŭ." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Hety kanał bolš nie isnuje!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Hety element navinaŭ nia maje zahałoŭka" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Naviedaj" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Adčyni kanał" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Zaznač usie jak pračytanyja" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Aktualizacyja kanału" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Pakažy padrabiaznaści" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Aŭtaryzacyja" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Parol:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_Nazva karystalnika:" #: ../glade/auth.ui.h:6 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." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Parol" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "_Nazva karystalnika (Email)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "zvyčajny vyhlad" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "šyroki vyhlad" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Pakažy zahałoŭki" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "kambinavany vyhlad" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Zahałoŭki" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Knopka źmieny spałučanaści" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Ułaścivaści padpiski" #: ../glade/liferea.ui.h:9 #, fuzzy msgid "Feed Name" msgstr "_Nazva kanału:" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "_Nazva kanału:" #: ../glade/liferea.ui.h:11 #, fuzzy msgid "Update Interval" msgstr "Manitor aktualizacyj" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Užyj hlabalny zmoŭčany intervał aktualizacyi." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_Admysłovy intervał aktualizacyi kanału" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Nie aktualizuj aŭtamatyčna hety kanał." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Ahulnaje" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Krynica kanału" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Typ krynicy:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Krynica:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_Spasyłka" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Zahad" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Lakalny fajł" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Abiary fajł..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Užyj _filter kavertacyi" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Kanvertuj _praz:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "_Zmoŭčanyja nałady padručnaj pamiaci" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Adklučy padručnuju pamiać" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Nieabmiežavanaja padručnaja pamiać" #: ../glade/liferea.ui.h:34 #, fuzzy msgid "_Number of items to save:" msgstr "Zmoŭčanaja _kolkaść elementaŭ na kanał dziela zapisu:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Archiŭ" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Užyj _aŭtaryzacyju HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "_Nie ŭžyvaj proxy dziela zahruzki" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Zahruzi" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "_Aŭtamatyčna zahružaj usie dałučeńni dla hetaha kanału." #: ../glade/liferea.ui.h:42 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/liferea.ui.h:43 #, fuzzy msgid "Ignore _comment feeds for this subscription." msgstr "Adčyniaje dyjalohavaje vakno ŭłaścivaściaŭ dla abranaje padpiski." #: ../glade/liferea.ui.h:44 #, fuzzy msgid "_Enforce popup notification for this subscription." msgstr "Adčyniaje dyjalohavaje vakno ŭłaścivaściaŭ dla abranaje padpiski." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "" #: ../glade/liferea.ui.h:46 #, fuzzy msgid "_Mark downloaded items as read." msgstr "_Zaznač abranaje jak pračytanaje" #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Admysłovaje" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Novy kataloh" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "Nazva _katalohu:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Pieranazavi" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Novaja nazva:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Ułaścivaści katalohu pošuku" #: ../glade/liferea.ui.h:53 #, fuzzy msgid "Search _Name:" msgstr "_Nazva kanału:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "/Adčyni dałučeńnie..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "Zahruzka dałučeńnia typu:" #: ../glade/liferea.ui.h:59 #, 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Ahladaj" #: ../glade/liferea.ui.h:61 #, fuzzy msgid "_Do this automatically for enclosures like this from now on." msgstr "_Rabi heta aŭtamatyčna nadalej dla padobnych fajłaŭ." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Šukaj va ŭsich kanałach" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Šukaj:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 #, fuzzy msgid "_Advanced..." msgstr "Admysłovaje..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Manitor aktualizacyj" #: ../glade/liferea.ui.h:68 #, fuzzy msgid "Pending Requests" msgstr "Zapyty ŭ čakańni" #: ../glade/liferea.ui.h:69 #, fuzzy msgid "Downloading Now" msgstr "Zahružajecca zaraz" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Anuluj _usie" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Stvary koš navinaŭ" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Nazva dla koša navinaŭ:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Ab prahramie" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea - heta ahrehatar navinaŭ dziela GTK+" #: ../glade/liferea.ui.h:78 #, fuzzy msgid "Liferea Homepage" msgstr "Hartač RSS Liferea" #: ../glade/liferea.ui.h:79 #, fuzzy msgid "Advanced Search" msgstr "Admysłovaje" #: ../glade/liferea.ui.h:80 #, fuzzy msgid "_Search Folder..." msgstr "Kataloh pošuku" #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Stvary kanał pošukavika" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "uviadzi luby radok dziela pošuku" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "Maksymalnaja _kolkaść vynikovych elementaŭ:" #: ../glade/liferea.ui.h:84 #, 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. " #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Zahruzka / Kancavaja apracoŭka" #: ../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/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 tt-rss 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/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/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:4 #, fuzzy msgid "Feed Update Settings" msgstr "Aktualizacyja kanału" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Novaja padpiska" #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Zmoŭčany _intervał aktualizacyi kanału:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Kanały" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "Nałady pakazu katalohaŭ" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "_Schavaj pračytanyja elementy." #: ../glade/prefs.ui.h:13 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Ikony kanałaŭ" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Aktualizuj zaraz usie ikony kanałaŭ" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Katalohi" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "Reading Headlines" msgstr "niečytanyja zahałoŭki" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "_Pierachodź pa artykułach z:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "Web Integration" msgstr "Aryjentacyja" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "Ź_miaści zakładki na" #: ../glade/prefs.ui.h:22 #, fuzzy msgid "Internal Browser Settings" msgstr "Nałady ŭnutranaha hartača" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Adčyniaj spasyłki ŭ _vaknie Liferea." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Adklučy Javascript." #: ../glade/prefs.ui.h:25 #, fuzzy msgid "_Enable browser plugins." msgstr "Nałady vonkavaha hartača" #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "Nałady vonkavaha hartača" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Adčyni spasyłku ŭ:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "Admysłovy" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Hartač:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Hartač" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Notification Settings" msgstr "Nałady nahadvańnia" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Pakažy _padručnaje vakno z novymi zahałoŭkami." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Pakazvaj _ikonu stanu ŭ abšary nahadvańniaŭ (systemnym trai)." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Pakazvaj _kolkaść novych elementaŭ na ikonie ŭ trai." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "_Zakančvaj pracu zamiest minimizacyi ŭ ikonu traju." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "" #: ../glade/prefs.ui.h:39 #, fuzzy msgid "Toolbar Settings" msgstr "_Etykiety knopak z paneli pryładździa:" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "" #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "_Etykiety knopak z paneli pryładździa:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_Aŭtamatyčna vyznač (GNOME albo asiarodździe)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_Biaz proxy" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Admysłovaje akreśleńnie:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "_Port proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "_Host proxy:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Užyj _aŭtaryzacyju proxy" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Pa_rol proxy:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "_Nazva karystalnika proxy:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "Zahruzka dałučeńnia" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Zahružaj z dapamohaj" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "/Adčyni dałučeńnie..." #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Dałučeńni" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #~ 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 "Synchronized with Nearby Hosts" #~ msgstr "Nazva kanału" #, 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)" #, fuzzy #~ msgid "_Delete" #~ msgstr "/_Vydal" #~ 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://liferea.sf.net" #~ msgstr "http://liferea.sf.net" #~ 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.10.17/po/bg.po000066400000000000000000003062161261475620100146520ustar00rootroot00000000000000# 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: 2013-01-25 23:54+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.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Събирач на RSS емисии (Liferea)" #: ../liferea.desktop.in.h:2 #, fuzzy msgid "Feed Reader" msgstr "Временни файлове на емисията" #: ../liferea.desktop.in.h:3 #, fuzzy msgid "Liferea Feed Reader" msgstr "Събирач на RSS емисии (Liferea)" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 #, 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 #, fuzzy msgid "No comments yet." msgstr "коментари" #: ../xslt/item.xml.in.h:11 #, fuzzy msgid "Comments" msgstr "коментари" #: ../xslt/item.xml.in.h:12 #, fuzzy msgid "Updating..." msgstr "Актуализиране на „%s“" #: ../xslt/item.xml.in.h:13 msgid "Refresh" 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 #, 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:32 #, fuzzy msgid "Default Browser" msgstr "Браузър" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Командата за стартиране на браузъра е неуспешна: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Стартиране: „%s“" #. unauthorized #: ../src/comments.c:120 #, fuzzy msgid "Authorization Error" msgstr "Идентифициране" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Не може да създаде директорията за временните файлове „%s“!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "„%s“ не е валиден тип за файл с настройки за приложенията!" #: ../src/enclosure.c:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Грешка при преименуването на %s в %s\n" #: ../src/export.c:406 ../src/export.c:408 #, fuzzy, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "Грешка в XML по време на четенето на временния файл! „%s“ не може да бъде " "внесен!" #: ../src/export.c:414 ../src/export.c:416 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Празен документ! OPML документа „%s“ не трябва да е празен при внасяне." #: ../src/export.c:437 ../src/export.c:439 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "„%s“ не е валиден OPML документ! Liferea не може да внесе този файл!" #: ../src/export.c:458 msgid "Imported feed list" msgstr "Списък с внесените емисии" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Вмъкване на списък с емисии" #: ../src/export.c:470 msgid "Import" msgstr "Внасяне" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 #, fuzzy msgid "OPML Files" msgstr "Избор на файл" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Грешка при изнасянето на списъкът с емисии!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Списъкът с емисии е изнесен успешно!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Изнасяне на списък с емисиите" #: ../src/export.c:487 msgid "Export" msgstr "Изнасяне" #: ../src/feed.c:255 #, 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:284 #, c-format msgid "\"%s\" updated..." msgstr "„%s“ е актуализирана..." #: ../src/feed.c:294 #, 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:404 #, fuzzy msgid "There are no unread items" msgstr "Няма непрочетени записи " #: ../src/main.c:164 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" " СЪСТОЯНИЕ-то може да е „shown“, „iconified“ или „hidden“" #: ../src/main.c:164 msgid "STATE" msgstr "" #: ../src/main.c:165 #, fuzzy msgid "Show version information and exit" msgstr " --version Изписване на информация за версията и напускане" #: ../src/main.c:166 #, fuzzy msgid "Add a new subscription" msgstr "Нова емисия" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 #, fuzzy msgid "Print debugging messages of all types" msgstr "" " --debug-all Отпечатване на всички съобщения за откриване на грешки" #: ../src/main.c:172 #, fuzzy msgid "Print debugging messages for the cache handling" msgstr "" " --debug-cache Отпечатване на съобщенията за откриване на грешки при " "обработката на кеша" #: ../src/main.c:173 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "" " --debug-conf Отпечатване на съобщенията за откриване на грешки при " "обработката на настройките" #: ../src/main.c:174 #, fuzzy msgid "Print debugging messages of the database handling" msgstr "" " --debug-cache Отпечатване на съобщенията за откриване на грешки при " "обработката на кеша" #: ../src/main.c:175 #, fuzzy msgid "Print debugging messages of all GUI functions" msgstr "" " --debug-gui Отпечатване на съобщенията за откриване на грешки във " "всички функции за графичния интерфейс" #: ../src/main.c:176 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/main.c:177 #, fuzzy msgid "Print debugging messages of all network activity" msgstr "" " --debug-all Отпечатване на всички съобщения за откриване на грешки" #: ../src/main.c:178 #, fuzzy msgid "Print debugging messages of all parsing functions" msgstr "" " --debug-parsing Отпечатване на съобщенията за откриване на грешки във " "всички функции за синтактичен анализ" #: ../src/main.c:179 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/main.c:180 #, fuzzy msgid "Print debugging messages when entering/leaving functions" msgstr "" " --debug-trace Отпечатване на съобщенията за откриване на грешки при " "влизане и излизане от функции" #: ../src/main.c:181 #, fuzzy msgid "Print debugging messages of the feed update processing" msgstr "" " --debug-update Отпечатване на съобщенията за откриване на грешки при " "обработката на обновяването на емисиите" #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "" " --debug-cache Отпечатване на съобщенията за откриване на грешки при " "обработката на кеша" #: ../src/main.c:183 #, fuzzy msgid "Print verbose debugging messages" msgstr "" " --debug-verbose Отпечатване на подробни съобщения за откриване на грешки" #: ../src/main.c:194 ../src/main.c:195 #, fuzzy msgid "Print debugging messages for the given topic" msgstr "" " --debug-cache Отпечатване на съобщенията за откриване на грешки при " "обработката на кеша" #: ../src/main.c:202 #, fuzzy msgid "Liferea, the Linux Feed Reader" msgstr "Събирач на RSS емисии (Liferea)" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "" #: ../src/net.c:323 #, fuzzy msgid "Unable to connect to remote host" msgstr "Грешка при свързването с отдалечения адрес" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "" #: ../src/net.c:325 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:328 msgid "The resource moved permanently to a new location" msgstr "" #. http 4xx client error #: ../src/net.c:331 #, 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:333 #, fuzzy msgid "Payment required" msgstr "Изисква се заплащане" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Ресурсът не е намерен" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Непозволен метод" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Неприемлив" #: ../src/net.c:338 #, fuzzy msgid "Proxy authentication required" msgstr "Нужна е идентификация в сървъра-посредник" #: ../src/net.c:339 #, fuzzy msgid "Request timed out" msgstr "Заявката изтече" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Този ресурс вече не съществува. Изтрийте го!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Емисията не е на разположение: Сървърът докладва за неподдържано " "пренасочване!" #: ../src/net.c:349 msgid "Client Error" msgstr "Грешка в клиента" #: ../src/net.c:351 msgid "Server Error" msgstr "Грешка в сървъра" #: ../src/net.c:353 #, 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:105 #, fuzzy, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Тази емисия „%s“ вече беше актуализирана!" #: ../src/subscription.c:110 #, fuzzy, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "Емисията „%s“ няма продължение. Liferea няма да я актуализира повече!" #: ../src/subscription.c:144 #, fuzzy, c-format msgid "Updating favicon for \"%s\"" msgstr "Актуализиране иконата на емисията „%s“" #: ../src/subscription.c:193 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Имаше проблем при прочитането на емисията. Проверете адреса и изходната " "информация в конзолата." #: ../src/subscription.c:211 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "Адресът на „%s“ беше променен за постоянно и затова беше осъвременен" #: ../src/subscription.c:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "„%s“ не е продължен. Liferea няма да го осъвременява повече!" #: ../src/subscription.c:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "„%s“ не се промени след последното осъвременяване" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Актуализиране на „%s“" #: ../src/update.c:259 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Грешка при отваряне на временния файл %s за филтриране!" #: ../src/update.c:282 #, c-format msgid "%s exited with status %d" msgstr "%s приключи работа със статус %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Грешка: Тръбата „%s“ не може да бъде отворена" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Грешка: Файлът „%s“ не може да бъде отворен" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Грешка: Файлът „%s“ не съществува" #: ../src/vfolder.c:55 #, fuzzy msgid "New Search Folder" msgstr "Нова папка" #: ../src/xml.c:424 #, fuzzy msgid "[There were more errors. Output was truncated!]" msgstr "[Четенето беше прекъснато!]" #: ../src/xml.c:577 #, 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:288 #, c-format msgid "%d%s" msgstr "" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "" msgstr[1] "" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Избор на файл" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, fuzzy, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] "%d нов запис" msgstr[1] "%d нови записа" #: ../src/ui/liferea_shell.c:330 #, fuzzy, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "е непрочетен" msgstr[1] "е непрочетен" #: ../src/ui/liferea_shell.c:716 msgid "Help Topics" msgstr "Раздели в помощта" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Бърз справочник" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "Често задавани въпроси" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea е в режим „включен“" #: ../src/ui/liferea_shell.c:808 #, fuzzy msgid "Work Offline" msgstr "Режим: „_изключен“" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea е в режим „изключен“" #: ../src/ui/liferea_shell.c:812 #, fuzzy msgid "Work Online" msgstr "Режим: „_изключен“" #: ../src/ui/liferea_shell.c:908 #, fuzzy msgid "_Subscriptions" msgstr "Нова емисия" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "Актуализиране на _всички" #: ../src/ui/liferea_shell.c:909 #, fuzzy msgid "Updates all subscriptions." msgstr "Добавяне на нова емисия." #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Отбелязване на всички като _прочетени" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Отбелязване на абсолютно всички обекти като прочетени" #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Внасяне на списък с емисии..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Внасяне на списък с емисии в OPML формат." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Изнасяне на списък с емисии..." #: ../src/ui/liferea_shell.c:914 #, fuzzy msgid "Exports the feed list as OPML." msgstr ">Изнасяне на списък с емисии във формат OPML." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Спиране на програмата" #: ../src/ui/liferea_shell.c:917 #, fuzzy msgid "_Feed" msgstr "_Емисии" #: ../src/ui/liferea_shell.c:918 #, fuzzy msgid "Remove _All Items" msgstr "Премахване на _всички" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Премахване на всички записи от текущата емисия." #: ../src/ui/liferea_shell.c:921 #, fuzzy msgid "_Item" msgstr "_Записи" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "_Следващ непрочетен запис" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "_Следващ непрочетен запис" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Изглед" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "_Увеличаване на големината на шрифта" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Увеличаване на размера на текста на записите." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "_Намаляване на големината на шрифта" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Намаляване на размера на текста, при прегледа на записи." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "" #: ../src/ui/liferea_shell.c:939 #, fuzzy msgid "_Update Monitor" msgstr "/_Актуализиране на папка" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Настройки" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Промяна на настройките." #: ../src/ui/liferea_shell.c:944 #, fuzzy msgid "S_earch" msgstr "Търсене" #: ../src/ui/liferea_shell.c:945 #, fuzzy msgid "Search All Feeds..." msgstr "Търсене във всички емисии" #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Показване на полето за търсене." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Помощ" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Ръководство" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Преглед на помощта за тази програма." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Бърз справочник" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Преглед на списък с всички бързи клавиши в Liferea." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_Често задавани въпроси" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Преглед на често задаваните въпроси." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_Относно програмата" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Показване на диалогов прозорец с информация за програмата." #: ../src/ui/liferea_shell.c:956 #, fuzzy msgid "_Normal View" msgstr "Локален _файл" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "" #: ../src/ui/liferea_shell.c:958 #, fuzzy msgid "_Wide View" msgstr "_Изглед" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "" #: ../src/ui/liferea_shell.c:960 #, fuzzy msgid "_Combined View" msgstr "_Общ изглед" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "" #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "" #: ../src/ui/liferea_shell.c:965 #, fuzzy msgid "Hide feeds with no unread items." msgstr "Няма непрочетени записи " #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "_Нова емисия..." #: ../src/ui/liferea_shell.c:970 #, fuzzy msgid "Adds a subscription to the feed list." msgstr "Добавяне на нова емисия." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Нова _папка..." #: ../src/ui/liferea_shell.c:972 #, fuzzy msgid "Adds a folder to the feed list." msgstr "Добавяне на папка към списъка с емисии." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 #, fuzzy msgid "New S_earch Folder..." msgstr "Нова _папка..." #: ../src/ui/liferea_shell.c:973 #, fuzzy msgid "Adds a new search folder to the feed list." msgstr "Добавяне на нова виртуална папка към списъка с емисии." #: ../src/ui/liferea_shell.c:974 #, fuzzy msgid "New _Source..." msgstr "/_Нов/_Нова папка..." #: ../src/ui/liferea_shell.c:974 #, fuzzy msgid "Adds a new feed list source." msgstr "Добавяне на нова виртуална папка към списъка с емисии." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 #, fuzzy msgid "New _News Bin..." msgstr "/_Нов/Нова _приставка..." #: ../src/ui/liferea_shell.c:975 #, fuzzy msgid "Adds a new news bin." msgstr "Добавяне на нова емисия." #: ../src/ui/liferea_shell.c:979 #, fuzzy msgid "_Mark Items Read" msgstr "Избиране като прочетен" #: ../src/ui/liferea_shell.c:979 #, fuzzy msgid "" "Marks all items of the selected feed list node / in the item list as read." msgstr "Отбелязване като прочетено на всичко в избраната папка." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 #, fuzzy msgid "_Update" msgstr "/_Актуализиране" #: ../src/ui/liferea_shell.c:981 msgid "" "Updates the selected subscription or all subscriptions of the selected " "folder." msgstr "" "Актуализиране на избраните емисии или на всички емисии от избраната папка." #: ../src/ui/liferea_shell.c:986 #, fuzzy msgid "_Properties" msgstr "_Настройки..." #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Отваряне на прозореца за предпочитанията за избраната емисия." #: ../src/ui/liferea_shell.c:987 #, fuzzy msgid "_Remove" msgstr "Премахване на _всички" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Изтриване на избраната емисия." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "П_ревключване на състояние: \"прочетено/непрочетено“" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Превключване на състоянието „прочетено/непрочетено“ на избрания запис." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Прикрепяне на флаг към записа" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Превключване на флага за състоянието на избрания запис." #: ../src/ui/liferea_shell.c:995 #, fuzzy msgid "R_emove" msgstr "/Пре_махване на запис" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Премахване на избрания запис." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "Отваряне на адреса на записа в настроения за това браузър." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "_Отваряне в браузър" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Отваряне на адреса на записа в настроения за това браузър." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Външен браузър" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Отваряне на адреса на записа в настроения за това браузър." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "Режим: „_изключен“" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Тази настройка ще Ви позволи да спрете актуализирането на емисията." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 #, fuzzy msgid "Liferea - Linux Feed Reader" msgstr "Събирач на RSS емисии (Liferea)" #: ../src/ui/liferea_shell.c:1341 #, 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 емисии и новини.

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

" #: ../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:205 #, fuzzy msgid "All Files" msgstr "Локален _файл" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Изтриване на запис" #: ../src/ui/feed_list_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Сигурни ли сте, че искате да изтриете „%s“ и всички негови записи?" #: ../src/ui/feed_list_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Сигурни ли сте, че искате да изтриете „%s“?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Потвърждаване на изтриването" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea е в режим „изключен“. Не е възможно да актуализирате емисиите." #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "/_Зареждане на връзката в _таб" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "/_Зареждане на връзката в браузър" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "/_Зареждане на връзката в браузър" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "" #: ../src/ui/liferea_htmlview.c:636 #, fuzzy msgid "_Copy Link Location" msgstr "/_Копиране адреса на записа" #: ../src/ui/liferea_htmlview.c:639 #, fuzzy msgid "_Copy Image Location" msgstr "/_Копиране адреса на записа" #: ../src/ui/liferea_htmlview.c:641 #, fuzzy msgid "S_ave Link As" msgstr "/Запазване като..." #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "" #: ../src/ui/liferea_htmlview.c:646 #, fuzzy msgid "_Subscribe..." msgstr "/_Абониране..." #: ../src/ui/item_list_view.c:347 #, fuzzy msgid "*** No title ***" msgstr "[Без заглавие]" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Дата" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Заглавие" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Няма избран запис" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Този запис няма не съдържа връзка!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Трябва да изберете емисия, за да изтриете нейните записи!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "" #: ../src/ui/popup_menu.c:156 #, c-format msgid "_Bookmark at %s" msgstr "" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "/_Копиране адреса на записа" #: ../src/ui/popup_menu.c:166 #, fuzzy msgid "R_emove Item" msgstr "/Пре_махване на запис" #: ../src/ui/popup_menu.c:179 #, fuzzy msgid "Open Enclosure..." msgstr "/Отваряне на приложение..." #: ../src/ui/popup_menu.c:180 #, fuzzy msgid "Save As..." msgstr "/Запазване като..." #: ../src/ui/popup_menu.c:181 #, fuzzy msgid "Copy Link Location" msgstr "/_Копиране адреса на записа" #: ../src/ui/popup_menu.c:195 #, fuzzy msgid "_Update All" msgstr "/_Актуализиране на всички" #: ../src/ui/popup_menu.c:200 #, fuzzy msgid "_Show Liferea" msgstr "Събирач на RSS емисии (Liferea)" #: ../src/ui/popup_menu.c:298 #, fuzzy msgid "_Update Folder" msgstr "/_Актуализиране на папка" #: ../src/ui/popup_menu.c:300 #, fuzzy msgid "_Mark All As Read" msgstr "/_Отбелязване на всички като прочетени" #: ../src/ui/popup_menu.c:310 #, fuzzy msgid "_New" msgstr "/_Нов" #: ../src/ui/popup_menu.c:313 #, fuzzy msgid "New _Subscription..." msgstr "_Нова емисия..." #: ../src/ui/popup_menu.c:320 #, fuzzy msgid "New S_ource..." msgstr "/_Нов/_Нова папка..." #: ../src/ui/popup_menu.c:329 #, fuzzy msgid "Sort Feeds" msgstr "Вмъкване на списък с емисии" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 #, fuzzy msgid "minutes" msgstr "минути." #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Space" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Space" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Space" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "Локален _файл" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "_Изглед" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "_Общ изглед" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Ръчно зададено" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Стандартен браузър" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Съществуващ прозорец" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Нов прозорец" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Нов подпрозорец" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "" #: ../src/ui/preferences_dialog.c:685 msgid "Terminate instead of minimizing to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Тип" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Програма" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Този източник няма подразбиращ се интервал за осъвременяване" #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "Без име" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d нов запис" msgstr[1] "%d нови записа" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Няма нови записи" #: ../src/ui/ui_tray.c:228 #, c-format msgid "" "%s\n" "%d unread item" msgid_plural "" "%s\n" "%d unread items" msgstr[0] "" "%s\n" "%d непрочетен запис" msgstr[1] "" "%s\n" "%d непрочетени записа" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Няма непрочетени записи" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Невалидна Atom емисия: неизвестен автор" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Нова емисия" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "" #: ../src/fl_sources/google_source.c:383 #, fuzzy msgid "Google Reader" msgstr "Временни файлове на емисията" #: ../src/fl_sources/google_source.c:384 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 "" #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "" #: ../src/fl_sources/opml_source.c:326 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 "" #: ../src/fl_sources/opml_source.c:387 #, 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:238 msgid "No feed list source types found!" msgstr "" #: ../src/fl_sources/node_source.c:269 #, fuzzy msgid "Source Type" msgstr "Вид на източника:" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source.c:363 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 "" #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 #, fuzzy msgid "This feed does not exist anymore!" msgstr "Този запис не съдържа връзка!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 #, fuzzy msgid "Mark all as read" msgstr "Отбелязване на всички като _прочетени" #: ../src/notification/libnotify.c:254 #, fuzzy, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "%d записа \n" msgstr[1] "%d записа \n" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 #, fuzzy msgid "Feed Update" msgstr "Временни файлове на емисията" #: ../src/notification/libnotify.c:271 #, fuzzy msgid "Show details" msgstr "Подробности" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Идентифициране" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Парола:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "Потребителско _име:" #: ../glade/auth.ui.h:6 msgid "" "Note: The username and password will be saved to your Liferea feedlist " "file without using encryption." 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/ttrss_source.ui.h:4 #, fuzzy msgid "_Password" msgstr "_Парола:" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "" #: ../glade/liferea.ui.h:4 #, fuzzy msgid "View Headlines" msgstr "_Преглед на заглавията чрез" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Заглавия" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Настройки на емисията" #: ../glade/liferea.ui.h:9 #, fuzzy msgid "Feed Name" msgstr "_Име на емисията:" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "_Име на емисията:" #: ../glade/liferea.ui.h:11 #, fuzzy msgid "Update Interval" msgstr "/_Актуализиране на папка" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Използване на стандартния интервал за осъвременяване." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "Специфичен интервал за осъвременяване на _емисия" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "Тези емисии _да не бъдат осъвременявани автоматично." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "Доставчикът на тази емисия предлага да поставите период за осъвременяване от " "%d минути." #: ../glade/liferea.ui.h:18 msgid "General" msgstr "Основен" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Източник на емисията" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Вид на източника:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Изходен код:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Команда" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "Локален _файл" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Избиране на файл..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Използване на филтър за _конвертиране" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Конвертиране _чрез:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "_Настройки по подразбиране" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "Сп_иране на временните файлове" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Неограничени временни файлове" #: ../glade/liferea.ui.h:34 #, fuzzy msgid "_Number of items to save:" msgstr "Стандартен _брой записи, за запазване от източник:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Използване на HTTP _идентификация" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "" #: ../glade/liferea.ui.h:40 #, fuzzy msgid "Download" msgstr "_Чрез програмата" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "_Автоматично изтегляне на всички приложения към емисията." #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" #: ../glade/liferea.ui.h:43 #, fuzzy msgid "Ignore _comment feeds for this subscription." msgstr "Отваряне на прозореца за предпочитанията за избраната емисия." #: ../glade/liferea.ui.h:44 #, fuzzy msgid "_Enforce popup notification for this subscription." msgstr "Отваряне на прозореца за предпочитанията за избраната емисия." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "" #: ../glade/liferea.ui.h:46 #, fuzzy msgid "_Mark downloaded items as read." msgstr "_Отбелязване на избраните като прочетени" #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Нова папка" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "_Име на папката:" #: ../glade/liferea.ui.h:50 #, fuzzy msgid "Rename" msgstr "Преименуване на папката" #: ../glade/liferea.ui.h:51 #, fuzzy msgid "_New Name:" msgstr "_Име:" #: ../glade/liferea.ui.h:52 #, fuzzy msgid "Search Folder Properties" msgstr "Настройки на виртуалната папка" #: ../glade/liferea.ui.h:53 #, fuzzy msgid "Search _Name:" msgstr "_Име на емисията:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "/Отваряне на приложение..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "Изтегля се приложения от вида:" #: ../glade/liferea.ui.h:59 #, 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Преглед:" #: ../glade/liferea.ui.h:61 #, fuzzy msgid "_Do this automatically for enclosures like this from now on." msgstr "" "_Действието да се извършва автоматично за файловете подобни на този от сега " "нататък." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Търсене във всички емисии" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Търсене за:" #: ../glade/liferea.ui.h:64 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Въведете низа, който Liferea са търси както в заглавията, така и в " "съдържанието на емисиите." #: ../glade/liferea.ui.h:65 msgid "_Advanced..." msgstr "" #: ../glade/liferea.ui.h:66 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Стартиране на търсене на указания текст във всички емисии. Резултатът от " "търсенето ще се появи в списъка със записи." #: ../glade/liferea.ui.h:67 #, fuzzy msgid "Update Monitor" msgstr "/_Актуализиране на папка" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "" #: ../glade/liferea.ui.h:69 #, fuzzy msgid "Downloading Now" msgstr "Изтегля се приложения" #: ../glade/liferea.ui.h:70 #, fuzzy msgid "Cancel _All" msgstr "Актуализиране на _всички" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Относно програмата" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea е събирач на RSS емисии за GTK+" #: ../glade/liferea.ui.h:78 #, fuzzy msgid "Liferea Homepage" msgstr "Събирач на RSS емисии (Liferea)" #: ../glade/liferea.ui.h:79 #, fuzzy msgid "Advanced Search" msgstr "Търсене с Feedster" #: ../glade/liferea.ui.h:80 #, fuzzy msgid "_Search Folder..." msgstr "Нова _папка..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "въведете дума за търсене" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "Максимален брой резултати:" #: ../glade/liferea.ui.h:84 #, 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. Можете да запазите тази емисия за постоянно и да я " "осъвременявате като всяка друга обикновена емисия." #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" 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/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your tt-rss 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/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/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:4 #, fuzzy msgid "Feed Update Settings" msgstr "Временни файлове на емисията" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Добавяне на нова емисия." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "_Период за актуализиране на емисията:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 #, 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:9 msgid "Feeds" msgstr "Емисии" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "Изобразяване на папките" #: ../glade/prefs.ui.h:11 msgid "_Show the items of all child feeds when a folder is selected." msgstr "Показване на всички заглавия от всички под-емисии при избор на папка." #: ../glade/prefs.ui.h:12 msgid "_Hide read items." msgstr "_Скриване на прочетените записи." #: ../glade/prefs.ui.h:13 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Икони на емисиите" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Актуализиране на всички икони на емисии" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Папки" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "Reading Headlines" msgstr "Заглавия" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "Бърз преглед чрез:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "Web Integration" msgstr "Ориентация" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "" #: ../glade/prefs.ui.h:22 #, fuzzy msgid "Internal Browser Settings" msgstr "Вътрешен браузър" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Отваряне на връзките в _Liferea." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Забраняване на Javascript." #: ../glade/prefs.ui.h:25 #, fuzzy msgid "_Enable browser plugins." msgstr "Външен браузър" #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "Външен браузър" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Отваряне на връзката в:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "Ръчно зададено" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Браузър:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Браузър" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Notification Settings" msgstr "Уведомяване" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Показване на _изскачащ прозорец с новите заглавия." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Показване на _икона в зоната за уведомяване." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "" #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "" #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "" #: ../glade/prefs.ui.h:39 #, fuzzy msgid "Toolbar Settings" msgstr "Изобразяване на папките" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "" #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Интерфейс" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "" #: ../glade/prefs.ui.h:45 #, fuzzy msgid "_No Proxy" msgstr "Сървър-посредник" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "_Порт:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "_Адрес:" #: ../glade/prefs.ui.h:49 #, fuzzy msgid "Use Proxy Au_thentication" msgstr "Използване на _идентификация" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "_Парола:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Потребителско _име:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Сървър-посредник" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "Изтегля се приложения" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Чрез програмата" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "/Отваряне на приложение..." #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Приложения" #: ../glade/prefs.ui.h:57 #, fuzzy msgid "Plugins" 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 "_Запазване на изтеглянията в" #, fuzzy #~ msgid "Synchronized with Nearby Hosts" #~ 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 "(празен)" #, fuzzy #~ msgid "_Delete" #~ 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://liferea.sf.net" #~ msgstr "http://liferea.sf.net" #~ 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 "Search all feeds." #~ 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.10.17/po/ca.po000066400000000000000000002120731261475620100146420ustar00rootroot00000000000000# 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: 2013-01-25 23:54+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.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Lector de canals de notícies" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Lector de canals de notícies Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Llegiu canals de notícies i blocs" #: ../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/liferea.ui.h:29 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 "No comments yet." msgstr "Encara no hi ha cap comentari." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Comentaris" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "S'està actualitzant..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Actualitza" #: ../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:32 msgid "Default Browser" msgstr "Navegador predeterminat" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Ha fallat l'ordre del navegador: %s" #: ../src/browser.c:230 #, 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:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "No s'ha pogut crear el directori de memòria cau «%s»" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 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:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:197 #, 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:288 msgid "You have not configured a download tool yet! Please do so in the 'Download' 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:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "S'ha produït un error en canviar el nom de %s a %s\n" #: ../src/export.c:406 ../src/export.c:408 #, 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:414 ../src/export.c:416 #, 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:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Llista de canals importats" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Importa la llista de canals" #: ../src/export.c:470 msgid "Import" msgstr "Importa" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 msgid "OPML Files" msgstr "Fitxers OPML" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "S'ha produït un error en exportar la llista de canals" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "S'ha exportat la llista de canals" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Exporta la llista de canals" #: ../src/export.c:487 msgid "Export" msgstr "Exporta" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "s'ha actualitzat «%s»..." #: ../src/feed.c:294 #, 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:404 msgid "There are no unread items" msgstr "No hi ha elements sense llegir " #: ../src/main.c:164 msgid "Start Liferea with its main window in STATE. STATE may be `shown', `iconified', 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/main.c:164 msgid "STATE" msgstr "ESTAT" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Mostra la informació sobre la versió i surt" #: ../src/main.c:166 msgid "Add a new subscription" msgstr "Afegeix una subscripció nova" #: ../src/main.c:166 msgid "uri" msgstr "URI" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Mostra tot tipus de missatges de depuració" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "Mostra missatges de depuració de la gestió de la memòria cau" #: ../src/main.c:173 msgid "Print debugging messages for the configuration handling" msgstr "Mostra missatges de depuració de la gestió de la configuració" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Mostra missatges de depuració de la gestió de la base de dades" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "Mostra missatges de depuració de totes les funcions de l'interfície gràfica" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Mostra missatges de depuració de tota l'activitat de xarxa" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "Mostra missatges de depuració de totes les funcions d'anàlisi" #: ../src/main.c:179 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/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "Mostra missatges de depuració en entrar/sortir de les funcions" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "Mostra missatges de depuració del procés d'actualització dels canals" #: ../src/main.c:182 msgid "Print debugging messages of the search folder matching" msgstr "Mostra missatges de depuració de les coincidències de les carpetes de cerca" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "Mostra missatges de depuració detallats" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "Mostra missatges de depuració del tema seleccionat" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, el lector de canals per a Linux" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "Per a més informació, visiteu http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "S'ha cancel·lat la petició d'actualització" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "No s'ha pogut resoldre el nom de l'ordinador remot" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "No s'ha pogut resoldre el nom del servidor intermediari" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "No s'ha pogut connectar a l'ordinador remot" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "No s'ha pogut connectar al servidor intermediari" #: ../src/net.c:325 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:328 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:331 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:333 msgid "Payment required" msgstr "Es requereix pagament" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "No podeu accedir en aquest recurs" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "No s'ha trobat el recurs" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "No es permet utilitzar aquest mètode" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "No acceptable" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Es requereix autenticació a través de servidor intermediari" #: ../src/net.c:339 msgid "Request timed out" msgstr "S'ha esgotat el temps de la sol·licitud" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "El recurs ja no existeix, cancel·leu la subscripció." #: ../src/net.c:345 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:347 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:349 msgid "Client Error" msgstr "Error del client" #: ../src/net.c:351 msgid "Server Error" msgstr "Error del servidor" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Ja s'està actualitzant la subscripció «%s»" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "S'està actualitzant la icona del canal «%s»" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "«%s» no ha canviat des de l'última actualització" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "S'està actualitzant «%s»" #: ../src/update.c:259 #, 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:282 #, c-format msgid "%s exited with status %d" msgstr "%s ha sortit amb l'estat %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Error: no s'ha pogut obrir el fitxer «%s»" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Error: no hi ha cap fitxer «%s»" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Carpeta de cerca nova" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Hi ha hagut altres errors. S'ha truncat la sortida]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d adjunció" msgstr[1] "%d adjuncions" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Escolliu un fitxer" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d nova)" msgstr[1] " (%d noves)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Temes d'ajuda (en anglès)" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Referència ràpida (en anglès)" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "PMF (en anglès)" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "El Liferea és en línia" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Treballa fora de línia" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "El Liferea és fora de línia" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Treballa en línia" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Subscripcions" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "_Actualitza'ls tots" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Actualitza totes les subscripcions." #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Marca'ls tots com a _llegits" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Marca cada element de cada subscripció com a llegit." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Importa una llista de canals..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Importa una llista de canals OPML." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Exporta la llista de canals..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Exporta la llista de canals com a OPML." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Surt" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Canal" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Suprimeix tots els _elements" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Suprimeix tots els elements del canal seleccionat." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "_Element" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "Element anterior" #: ../src/ui/liferea_shell.c:924 msgid "Next Item" msgstr "Element següent" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "Element sense llegir _següent" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Visualitza" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "_Augmenta la mida del text" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Augmenta la mida del text de l'element visualitzat." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "_Redueix la mida del text" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Redueix la mida del text de l'element visualitzat." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "E_ines" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "_Monitor d'actualització" #: ../src/ui/liferea_shell.c:939 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ó" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Preferències" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Edita les preferències." #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "_Cerca" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Cerca a tots els canals..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Mostra el diàleg de cerca." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "A_juda" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Continguts" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Visualitza l'ajuda d'aquesta aplicació." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Referència ràpida" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Visualitza una llista de totes les dreceres del Liferea." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_PMF" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Visualitza les PMF d'aquesta aplicació." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_Quant a" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Mostra el diàleg de quant a." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "Visualització _normal" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Estableix el mode de visualització semblant al mode del client de correu." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "Visualització àmpli_a" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Estableix el mode de visualització a tres quadres verticals." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "Visualització _combinada" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Estableix el mode de visualització a dos quadres." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "Llista de canals _reduïda" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Oculta els canals sense cap element no llegit." #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "Subscripció _nova..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Afegeix una subscripció a la llista de canals." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "_Carpeta nova..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Afegeix una carpeta a la llista de canals." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Carpeta de c_erca nova..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Afegeix una carpeta de cerca nova a la llista de canals." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "_Font nova..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Afegeix una font de llista de canals nova." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "C_ontenidor de notícies nou..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Afegeix un contenidor de notícies nou." #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "_Marca'ls tots com a llegits" #: ../src/ui/liferea_shell.c:979 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." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Actualitza" #: ../src/ui/liferea_shell.c:981 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." #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "_Propietats" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Obre el diàleg de propietats de la subscripció seleccionada." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "_Suprimeix" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Suprimeix la subscripció seleccionada." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Commuta l'estat de _lectura" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Commuta l'estat de lectura de l'element seleccionat." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Commuta el _senyalador de l'element" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Commuta l'estat del senyalador de l'element seleccionat." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "_Suprimeix" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Suprimeix l'element seleccionat." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "Obre en una _pestanya" #: ../src/ui/liferea_shell.c:997 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." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 msgid "_Open In Browser" msgstr "_Obre'l en el navegador" #: ../src/ui/liferea_shell.c:999 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." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 msgid "Open In _External Browser" msgstr "Obre'l en un navegador _extern" #: ../src/ui/liferea_shell.c:1001 msgid "Launches the item's link in the configured external browser." msgstr "Obre l'enllaç de l'element en el navegador extern preconfigurat." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "_Treballa fora de línia" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Aquesta opció us permet inhabilitar l'actualització de les subscripcions." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "_Pantalla completa" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "Navega a pantalla completa" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Lector de canals per a Linux" #: ../src/ui/liferea_shell.c:1341 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

" #: ../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:205 msgid "All Files" msgstr "Tots els fitxers" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Supressió de l'entrada" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Segur que voleu suprimir «%s»?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Confirmació de la supressió" #: ../src/ui/feed_list_view.c:385 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/liferea_htmlview.c:627 msgid "Open Link In _Tab" msgstr "Obre l'enllaç en una _pestanya" #: ../src/ui/liferea_htmlview.c:628 msgid "_Open Link In Browser" msgstr "_Obre l'enllaç en el navegador" #: ../src/ui/liferea_htmlview.c:629 msgid "_Open Link In External Browser" msgstr "Obre l'enllaç en el navegador _extern" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "_Publica l'enllaç a %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_Copia la ubicació de l'enllaç" #: ../src/ui/liferea_htmlview.c:639 msgid "_Copy Image Location" msgstr "_Copia la ubicació de la imatge" #: ../src/ui/liferea_htmlview.c:641 msgid "S_ave Link As" msgstr "Anomena i desa l'enllaç" #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "Anomena i desa la _imatge" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "_Subscriu..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Sense títol ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Titular" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "No s'ha seleccionat cap element" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Aquest element no te cap enllaç especificat" #: ../src/ui/item_list_view.c:818 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/popup_menu.c:142 msgid "Copy to News Bin" msgstr "Copia'l al contenidor de notícies" #: ../src/ui/popup_menu.c:156 #, c-format msgid "_Bookmark at %s" msgstr "_Adreça d'interès a %s" #: ../src/ui/popup_menu.c:160 msgid "Copy Item _Location" msgstr "_Copia la ubicació de l'element" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "_Suprimeix l'element" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Obre l'adjunció..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Anomena i desa..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "Copia la ubicació de l'enllaç" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "_Actualitza-ho tot" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "_Mostra el Liferea" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "_Actualitza la carpeta" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "_Marca'ls tots com a llegits" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "_Nou" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "Subscripció _nova..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "_Font nova..." #: ../src/ui/popup_menu.c:329 msgid "Sort Feeds" msgstr "Ordena els canals" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "_Reconstrueix" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "Per defecte del GNOME" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Text sota les icones" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Text al costat de les icones" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Només icones" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Només text" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minuts" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "hores" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dies" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Tecla espaiadora" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " tecla espaiadora" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " tecla espaiadora" #: ../src/ui/preferences_dialog.c:114 msgid "Normal View" msgstr "Visualització normal" #: ../src/ui/preferences_dialog.c:115 msgid "Wide View" msgstr "Visualització àmplia" #: ../src/ui/preferences_dialog.c:116 msgid "Combined View" msgstr "Visualització combinada" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Per defecte del navegador" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Finestra existent" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Finestra nova" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Pestanya nova" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "Integra't amb el menú de missatgeria (indicació)" #: ../src/ui/preferences_dialog.c:685 msgid "Terminate instead of minimizing to the messaging menu" msgstr "Finalitza en comptes de minimitzar al menú de missatgeria" #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "Inicia minimitzat al menú de missatgeria" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Tipus" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Programa" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(buit)" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "S'està reconstruint" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Aquest canal no especifica cap interval d'actualització recomanat." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "Sense títol" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d element nou" msgstr[1] "%d elements nous" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "No hi ha elements nous" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "No hi ha elements per llegir" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Lloc web" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "El canal de tipus Atom no és vàlid: autor desconegut" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Subscripció nova" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "Ha fallat l'entrada al Google Reader" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 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." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planeta, llista de blocs, OPML" #: ../src/fl_sources/opml_source.c:326 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" #: ../src/fl_sources/opml_source.c:387 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:238 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:269 msgid "Source Type" msgstr "Tipus de font" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:363 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." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "No s'ha pogut analitzar el JSON que ha retornat l'API del tt-rss." #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Aquest canal ja no existeix" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "L'entrada de notícies no té titular" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Visiteu" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Obre el canal" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Marca'ls tots com a llegits" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "%s%d actualització" msgstr[1] "%s%d actualitzacions" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Actualització de canal" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Mostra els detalls" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autenticació" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Contrasenya:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_Nom d'usuari:" #: ../glade/auth.ui.h:6 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." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Contrasenya" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "Nom d'_usuari (correu electrònic)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "visualització normal" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "visualització àmplia" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Visualitza els titulars" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "visualització combinada" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Titulars" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Botó de en línia/fora de línia" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Propietats de la subscripció" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Nom del canal" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "_Nom del canal:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "Interval d'actualització" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Utilitza l'interval d'actualització global per defecte." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "Interval d'actualització específic del _canal" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_No actualitzis aquest canal automàticament." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "General" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Font del canal" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Tipus de font:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Font:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Ordre" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "Fitxer _local" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Seleccioneu un fitxer..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "_Utilitza un filtre de conversió" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Converteix _utilitzant:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "Paràmetres _per defecte de la memòria cau" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Inhabilita la memòria cau" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Memòria cau il·limitada" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "_Nombre d'elements a desar:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Arxiu" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Utilitza _autenticació HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "_No utilitzis el servidor intermediari per les baixades" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Baixades" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "_Baixa automàticament totes les adjuncions d'aquest canal." #: ../glade/liferea.ui.h:42 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/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Ignora els _comentaris dels canals per aquesta subscripció." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "_Força les notificacions emergents per aquesta subscripció." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "No mostris _mai notificacions emergents per aquesta subscripció." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Marca els elements baixats com a llegits." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Avançat" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Carpeta nova" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "Nom de la _carpeta:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Canvia el nom" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "Nom _nou:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Propietats de la carpeta de cerca" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "_Nom de la cerca:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "Cerca elements que coincideixen amb els criteris següents" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "Coincidència de _qualsevol regla" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "Han de coincidir _totes les regles" #: ../glade/liferea.ui.h:57 msgid "Open Enclosure" msgstr "Obre l'adjunció" #: ../glade/liferea.ui.h:58 msgid "Open an enclosure of type:" msgstr "Obre l'adjunció de tipus:" #: ../glade/liferea.ui.h:59 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Navega" #: ../glade/liferea.ui.h:61 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/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Cerca a tots els canals" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Cerca:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Avançat..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Monitor d'actualitzacions" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "Sol·licituds pendents" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "S'està baixant" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Cancel·la-ho _tot" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Crea un contenidor de notícies" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Nom del contenidor de notícies:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Quant a" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Copyright (c) 2003-2012\n" "L'equip del Liferea\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "El Liferea és un agregador de notícies per a GTK+" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Pàgina inicial del Liferea" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Cerca avançada" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "Carpeta de _cerca..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Crea un canal de motor de cerca" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "introduïu la cadena que voleu cercar" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "_Nombre màxim de resultats:" #: ../glade/liferea.ui.h:84 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ó." #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Baixada / Post processament" #: ../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/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 msgid "Please enter your tt-rss 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/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/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:4 msgid "Feed Update Settings" msgstr "Paràmetres de l'actualització del canal" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "_Actualitza totes les subscripcions en iniciar." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "_Interval d'actualització per defecte dels canals:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Canals" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "Paràmetres de visualització de les carpetes" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "_Oculta els elements llegits." #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Icones dels canals (Favicons)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Actualitza totes les icones dels canals ara" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Carpetes" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Lectura de titulars" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "_Fulleja els articles amb:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "Mode de visualització per _defecte:" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Integració web" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Publica les adreces d'interès a" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Paràmetres del navegador intern" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Obre els enllaços a la _finestra del Liferea." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Inhabilita el Javascript." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "_Habilita els connectors del navegador." #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "Paràmetres del navegador extern" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Obre l'enllaç a:" #: ../glade/prefs.ui.h:28 msgid "_Manual:" msgstr "_Manual:" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "(%s per l'URL)" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Navegador:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Navegador" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Paràmetres de notificació" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Mostra una finestra _emergent amb els titulars nous." #: ../glade/prefs.ui.h:35 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)." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Mostra el _nombre d'elements nous a la icona de la safata." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "_Finalitza en comptes de minimitzar a la icona de la safata." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Inicia a la icona de la safata." #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Paràmetres de la barra d'eines" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Oculta la barra d'eines." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Etiquetes dels _botons de la barra d'eines:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Interfície gràfica" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "Servidor intermediari HTTP" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "Detecta _automàticament (del GNOME o de l'entorn)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_Sense servidor intermediari" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "Paràmetres _manuals:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "_Port del servidor intermediari:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "_Ordinador del servidor intermediari:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Utilitza l'autenticació del _servidor intermediari" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "_Contrasenya del servidor intermediari:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "_Usuari del servidor intermediari:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Servidor intermediari" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "S'estan baixant les adjuncions" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Baixa-les utilitzant" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "Obre les adjuncions" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Adjuncions" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "Connectors" #~ 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 "Synchronized with Nearby Hosts" #~ msgstr "Sincronització amb els equips propers" #~ 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 "_Delete" #~ msgstr "_Suprimeix" #~ 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.10.17/po/cs.po000066400000000000000000002240521261475620100146640ustar00rootroot00000000000000# 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: 2013-01-25 23:54+0100\n" "PO-Revision-Date: 2008-07-29 19:19+0100\n" "Last-Translator: Martin Picek \n" "Language-Team: Martin Picek \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>=2 && n<=4) ? 1 : 2;\n" "X-Poedit-Language: Czech\n" "X-Poedit-Country: CZECH REPUBLIC\n" "X-Poedit-SourceCharset: utf-8\n" #: ../liferea.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Čtečka kanálů" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Čtečka kanálů Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 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 "No comments yet." msgstr "Zatím žádné komentáře." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Komentáře" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Aktualizuje se…" #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Aktualizovat" #: ../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:32 #, fuzzy msgid "Default Browser" msgstr "Výchozí prohlížeč GNOME" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Příkaz pro prohlížeč selhal: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Spouští se: „%s“" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Chyba autorizace" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Nepodařilo se vytvořit adresář „%s“ pro vyrovnávací paměť!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Dnes, %l.%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d. %b %Y, %l.%M" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "" #: ../src/enclosure.c:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Chyba při přejmenovávání %s na %s\n" #: ../src/export.c:406 ../src/export.c:408 #, fuzzy, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "Chyba XML při čtení souboru s vyrovnávací pamětí! Nepodařilo se importovat " "„%s“!" #: ../src/export.c:414 ../src/export.c:416 #, 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:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Seznam importovaných kanálů" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Importovat seznam kanálů" #: ../src/export.c:470 msgid "Import" msgstr "Importovat" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 #, fuzzy msgid "OPML Files" msgstr "Vybrat soubor OPML" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Chyba při exportování seznamu kanálů!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Seznam kanálů exportován!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Exportovat seznam kanálů" #: ../src/export.c:487 msgid "Export" msgstr "Exportovat" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "Kanál „%s“ aktualizován…" #: ../src/feed.c:294 #, 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:404 #, fuzzy msgid "There are no unread items" msgstr "Nejsou zde žádné nepřečtené články" #: ../src/main.c:164 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr " STAV může být „shown“, „iconified“ nebo „hidden“." #: ../src/main.c:164 msgid "STATE" msgstr "" #: ../src/main.c:165 #, fuzzy msgid "Show version information and exit" msgstr " --version Vypsat informace o verzi a ukončit." #: ../src/main.c:166 #, fuzzy msgid "Add a new subscription" msgstr "Nový odběr" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 #, fuzzy msgid "Print debugging messages of all types" msgstr " --debug- Vypsat ladící zprávy pro zadané téma." #: ../src/main.c:172 #, fuzzy msgid "Print debugging messages for the cache handling" msgstr " --debug- Vypsat ladící zprávy pro zadané téma." #: ../src/main.c:173 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr " --debug- Vypsat ladící zprávy pro zadané téma." #: ../src/main.c:174 #, fuzzy msgid "Print debugging messages of the database handling" msgstr " --debug- Vypsat ladící zprávy pro zadané téma." #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "" #: ../src/main.c:179 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "" #: ../src/main.c:181 #, fuzzy msgid "Print debugging messages of the feed update processing" msgstr " --debug- Vypsat ladící zprávy pro zadané téma." #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr " --debug- Vypsat ladící zprávy pro zadané téma." #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "" #: ../src/main.c:194 ../src/main.c:195 #, fuzzy msgid "Print debugging messages for the given topic" msgstr " --debug- Vypsat ladící zprávy pro zadané téma." #: ../src/main.c:202 #, fuzzy msgid "Liferea, the Linux Feed Reader" msgstr "Liferea – Linux Feed Reader" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "" #: ../src/net.c:325 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:328 msgid "The resource moved permanently to a new location" msgstr "" #. http 4xx client error #: ../src/net.c:331 #, 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:333 #, fuzzy msgid "Payment required" msgstr "Požadována platba" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Zdroj nenalezen" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Metoda není povolena" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Neakceptovatelné" #: ../src/net.c:338 #, fuzzy msgid "Proxy authentication required" msgstr "Požadována autentizace proxy" #: ../src/net.c:339 #, fuzzy msgid "Request timed out" msgstr "Požadovat časový limit" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Zdroj již neexistuje. Přestaňte jej prosím odebírat!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Kanál je nedostupný: server požadoval nepodporované přesměrování." #: ../src/net.c:349 msgid "Client Error" msgstr "Chyba klienta" #: ../src/net.c:351 msgid "Server Error" msgstr "Chyba serveru" #: ../src/net.c:353 #, 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Odběr „%s“ již byl aktualizován!" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Aktualizuje se ikonka pro „%s“" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "Kanál „%s“ se od poslední aktualizace nezměnil" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Aktualizuje se kanál „%s“" #: ../src/update.c:259 #, 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:282 #, c-format msgid "%s exited with status %d" msgstr "%s zavřeno se stavem %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Chyba: nepodařilo se otevřít soubor „%s“" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Chyba: Soubor „%s“ neexistuje" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Nová složka hledání" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "(Vyskytlo se více chyb. Výstup byl zkrácen!)" #: ../src/xml.c:577 msgid "XML Parser: Could not parse document:\n" msgstr "Zpracovatel XML: Nepodařilo se zpracovat dokument:\n" #: ../src/ui/enclosure_list_view.c:175 #, fuzzy msgid "Attachments" msgstr "%d příloha" #. 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:288 #, c-format msgid "%d%s" msgstr "" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, 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:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Vybrat soubor" #: ../src/ui/enclosure_list_view.c:438 #, fuzzy, 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:325 #, 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:330 #, 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:716 msgid "Help Topics" msgstr "Témata nápovědy" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Klávesové zkratky" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "Časté otázky" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea je nyní připojena k síti" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Odpojit od sítě" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea je nyní odpojena od sítě" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Připojit k síti" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Odběry" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "_Aktualizovat vše" #: ../src/ui/liferea_shell.c:909 #, fuzzy msgid "Updates all subscriptions." msgstr "Nový odběr" #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Označit vše jako _přečtené" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Označit všechny články všech kanálů jako přečtené." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Importovat seznam kanálů…" #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Importovat seznam kanálů OPML." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Exportovat seznam kanálů…" #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Exportovat seznam kanálů jako OPML." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Ukončit" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Kanál" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Odstranit _všechny články" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Odstranit všechny články právě vybraného kanálu." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "Č_lánek" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "_Další nepřečtený článek" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "_Další nepřečtený článek" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Zobrazit" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "Z_většit text" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Zvětšit velikost textu článku." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "Z_menšit text" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Změnšit velikost textu článku." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "_Nástroje" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "Sledování _aktualizací" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "Zobrazit seznam všech kanálů ve frontě na aktualizaci" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Nastavení" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Měnit nastavení." #: ../src/ui/liferea_shell.c:944 #, fuzzy msgid "S_earch" msgstr "_Hledání" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Prohledat všechny kanály…" #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Zobrazit dialog hledání." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "Nápo_věda" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Témata nápovědy" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Zobrazit nápovědu této aplikace." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Klávesové zkratky" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Zobrazit seznam klávesových zkratek Liferea." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "Časté _otázky" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Zobrazit časté otázky ohledně této aplikace." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "O _aplikaci" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Zobrazit dialog s informacemi o aplikaci." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "_Normální zobrazení" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Nastavit zobrazení na mód poštovního klienta." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "Ši_roké zobrazení" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Nastavit zobrazení na tři vertikální oblasti." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "_Kombinované zobrazení" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Nastavit zobrazení na mód dvou oblastí." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "" #: ../src/ui/liferea_shell.c:965 #, fuzzy msgid "Hide feeds with no unread items." msgstr "Nejsou zde žádné nepřečtené články" #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "Nový _odběr…" #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Přidat odběr do seznamu kanálů." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Nová _složka…" #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Přidat novou složku do seznamu kanálů." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Nová složka _hledání…" #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Přidat novou složku hledání do seznamu kanálů." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Nový _zdroj…" #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Přidat nový zdroj seznamu kanálů." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "Nová _rubrika…" #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Přidat novou rubriku." #: ../src/ui/liferea_shell.c:979 #, fuzzy msgid "_Mark Items Read" msgstr "Označit jako _přečtené" #: ../src/ui/liferea_shell.c:979 #, 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é." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Aktualizovat" #: ../src/ui/liferea_shell.c:981 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." #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "Vlastnos_ti" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Otevřít dialog s vlastnostmi vybraného odběru." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "_Odstranit" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Odstranit vybraný odběr." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Přepnout stav _přečtení" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Přepnout stav přečtení vybraného článku." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Přepnout stav _označení" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Přepnout stav označení vybraného článku." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "Odst_ranit" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Odstranit vybraný článek." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, 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." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "Otevřít v pro_hlížeči" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Otevřít odkaz článku v nastaveném prohlížeči." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Nastavení externího prohlížeče" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Otevřít odkaz článku v nastaveném prohlížeči." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "O_dpojit od sítě" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Zakázat aktualizaci odběrů." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea – Linux Feed Reader" #: ../src/ui/liferea_shell.c:1341 #, 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.

" #: ../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:205 #, fuzzy msgid "All Files" msgstr "_Místní soubor" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Odstraňuje se záznam" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Jste si jisti, že chcete odstranit „%s“?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Potvrzení odstranění" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea je odpojena od sítě. Nejsou dostupné žádné aktualizace." #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "/O_tevřít odkaz v kartě" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "/Otevřít odkaz v proh_lížeči" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "/Otevřít odkaz v proh_lížeči" #: ../src/ui/liferea_htmlview.c:632 #, fuzzy, c-format msgid "_Bookmark Link at %s" msgstr "/_Zazáložkovat odkaz do %s" #: ../src/ui/liferea_htmlview.c:636 #, fuzzy msgid "_Copy Link Location" msgstr "/_Kopírovat umístění odkazu" #: ../src/ui/liferea_htmlview.c:639 #, fuzzy msgid "_Copy Image Location" msgstr "/_Kopírovat umístění odkazu" #: ../src/ui/liferea_htmlview.c:641 #, fuzzy msgid "S_ave Link As" msgstr "/Uložit jako…" #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "" #: ../src/ui/liferea_htmlview.c:646 #, fuzzy msgid "_Subscribe..." msgstr "/_Odebírat…" #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Žádný titulek ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Datum" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Titulek" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Žádný článek nebyl vybrán" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Tento článek nemá specifikován žádný odkaz!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Musíte vybrat kanál, aby šlo odstranit články!" #: ../src/ui/popup_menu.c:142 #, fuzzy msgid "Copy to News Bin" msgstr "/Kopírovat do rubriky/%s" #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "/_Zazáložkovat odkaz do %s" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "/_Kopírovat umístění odkazu" #: ../src/ui/popup_menu.c:166 #, fuzzy msgid "R_emove Item" msgstr "/_Odstranit článek" #: ../src/ui/popup_menu.c:179 #, fuzzy msgid "Open Enclosure..." msgstr "/Otevřít přílohy…" #: ../src/ui/popup_menu.c:180 #, fuzzy msgid "Save As..." msgstr "/Uložit jako…" #: ../src/ui/popup_menu.c:181 #, fuzzy msgid "Copy Link Location" msgstr "/_Kopírovat umístění odkazu" #: ../src/ui/popup_menu.c:195 #, fuzzy msgid "_Update All" msgstr "/_Aktualizovat vše" #: ../src/ui/popup_menu.c:200 #, fuzzy msgid "_Show Liferea" msgstr "Liferea" #: ../src/ui/popup_menu.c:298 #, fuzzy msgid "_Update Folder" msgstr "/_Aktualizovat složku" #: ../src/ui/popup_menu.c:300 #, fuzzy msgid "_Mark All As Read" msgstr "/Označit vše jako _přečtené" #: ../src/ui/popup_menu.c:310 #, fuzzy msgid "_New" msgstr "/_Vytvořit" #: ../src/ui/popup_menu.c:313 #, fuzzy msgid "New _Subscription..." msgstr "Nový _odběr…" #: ../src/ui/popup_menu.c:320 #, fuzzy msgid "New S_ource..." msgstr "Nový _zdroj…" #: ../src/ui/popup_menu.c:329 #, fuzzy msgid "Sort Feeds" msgstr "Importovat seznam kanálů" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "Výchozí v GNOME" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Text pod ikonkami" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Text vedle ikonek" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Pouze ikonky" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Pouze text" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minuty" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "hodiny" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dny" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Mezerník" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr "Ctrl+Mezerník" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr "Alt+Mezerník" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "_Normální zobrazení" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "Ši_roké zobrazení" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "_Kombinované zobrazení" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Ručně" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Výchozí dle prohlížeče" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Existující okno" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Nové okno" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Nová karta" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "" #: ../src/ui/preferences_dialog.c:685 #, fuzzy msgid "Terminate instead of minimizing to the messaging menu" msgstr "_Ukončovat namísto minimalizování do stavové ikonky." #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Typ" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Tento kanál nespecifikuje žádný výchozí interval aktualizace." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "" #: ../src/ui/ui_tray.c:221 #, c-format 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ů" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Žádný nový článek" #: ../src/ui/ui_tray.c:228 #, c-format 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ů" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Žádné nepřečtené články" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Neplatný kanál Atom: neznámý autor" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d. %M., %G.%i" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../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:116 msgid "Google Reader login failed!" msgstr "Přihlášení ke Google Reader selhalo!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 #, 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í." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:326 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." #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Žádný seznam kanálů s typy zdroje nenalezen!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Typ zdroje" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source.c:363 #, 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í." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Tento kanál již neexistuje!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Tento kanál neobsahuje žádný článek" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Zobrazit" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Otevřít kanál" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Označit vše jako přečtené" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Aktualizovaný kanál" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Zobrazit podrobnosti" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autentizace" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Heslo:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_Uživatelské jméno:" #: ../glade/auth.ui.h:6 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í." #: ../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 "Prosím, vložte nastavení svého účtu na Google Reader." #: ../glade/google_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Heslo" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "_Uživatelské jméno" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "normální zobrazení" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "široké zobrazení" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Zobrazit články" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "kombinované zobrazení" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Články" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Tlačítka Připojit a Odpojit" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Vlastnosti odběru" #: ../glade/liferea.ui.h:9 #, fuzzy msgid "Feed Name" msgstr "_Název kanálu:" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "_Název kanálu:" #: ../glade/liferea.ui.h:11 #, fuzzy msgid "Update Interval" msgstr "Sledování aktualizací" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "Použít _výchozí interval aktualizace." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_Specifický interval aktualizace kanálu" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "Neaktualizovat tento kanál _automaticky." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Obecné" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Zdroj kanálu" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Typ zdroje" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Zdroj:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Příkaz" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Místní soubor" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Vybrat soubor…" #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Použít konverzní _filtr" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Konverze po_užije:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "_Výchozí nastavení vyrovnávací paměti" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Zakázat vyrovnávací paměť" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Neomezená vyrovnávací paměť" #: ../glade/liferea.ui.h:34 #, fuzzy msgid "_Number of items to save:" msgstr "Výchozí _počet uložených článků v jednom kanálu:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Archiv" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Použít _autentizaci HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "_Nepoužívat proxy pro stahování" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Stahování" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "_Automaticky stahovat všechny přílohy tohoto kanálu." #: ../glade/liferea.ui.h:42 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/liferea.ui.h:43 #, fuzzy msgid "Ignore _comment feeds for this subscription." msgstr "Otevřít dialog s vlastnostmi vybraného odběru." #: ../glade/liferea.ui.h:44 #, fuzzy msgid "_Enforce popup notification for this subscription." msgstr "Otevřít dialog s vlastnostmi vybraného odběru." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "" #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "" #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Pokročilé" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Nová složka" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "_Název složky:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Přejmenovat" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Nový název:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Vlastnosti složky hledání" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "_Název hledání:" #: ../glade/liferea.ui.h:54 #, fuzzy msgid "Find Items that meet the following criteria" msgstr "Najít články, které vyhovují následujícím kritériím" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "Všechn_a pravidla musí souhlasit" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "/Otevřít přílohy…" #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "Stahování příloh typu:" #: ../glade/liferea.ui.h:59 #, 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 "" "Co má Liferea provést s touto přílohou? Prosím, vložte příkaz, který chcete " "spustit. Stahované přílohy budou předány jako argument tohoto příkazu:" #: ../glade/liferea.ui.h:60 msgid "_Browse" msgstr "_Procházet" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "O_d těď toto provádět se všemi podobnými přílohami automaticky." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Prohledat všechny kanály" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Vyhledat:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 #, fuzzy msgid "_Advanced..." msgstr "Pokročilé…" #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Sledování aktualizací" #: ../glade/liferea.ui.h:68 #, fuzzy msgid "Pending Requests" msgstr "Nevyřešené požadavky" #: ../glade/liferea.ui.h:69 #, fuzzy msgid "Downloading Now" msgstr "Právě stahované" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Zrušit _vše" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Vytvořit rubriku" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Nová rubrika:" #: ../glade/liferea.ui.h:73 #, fuzzy msgid "About" msgstr "O _aplikaci" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea je agregátor novinek pro GTK+" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Domovská stránka Liferea" #: ../glade/liferea.ui.h:79 #, fuzzy msgid "Advanced Search" msgstr "Pokročilé" #: ../glade/liferea.ui.h:80 #, fuzzy msgid "_Search Folder..." msgstr "Složka hledání" #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Vytvořit vyhledávač kanálů" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "vložte řetězec, který chcete najít" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "Maximál_ní počet článků ve výsledku:" #: ../glade/liferea.ui.h:84 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 "" #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Stahování a následné zpracování" #: ../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/ttrss_source.ui.h:1 #, fuzzy msgid "Add Tiny Tiny RSS Account" msgstr "Přidat účet Bloglines" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your tt-rss account settings." msgstr "Prosím, vložte nastavení svého účtu na Bloglines." #: ../glade/ttrss_source.ui.h:3 #, fuzzy msgid "_Server URL" msgstr "Chyba serveru" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Uživatelské jméno" #: ../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/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Nastavení 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 "Výchozí _počet uložených článků v jednom kanálu:" #: ../glade/prefs.ui.h:4 #, fuzzy msgid "Feed Update Settings" msgstr "Aktualizovaný kanál" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Nový odběr" #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Výchozí _interval aktualizace kanálů:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Kanály" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "Nastavení zobrazování složek" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "Skrývat _přečtené články." #: ../glade/prefs.ui.h:13 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Ikonky kanálu" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Aktualizovat všechny ikonky" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Složky" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "Reading Headlines" msgstr "nepřečtené články" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "_Otevírat články klávesou:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "Web Integration" msgstr "Orientace" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Posílat záložky do" #: ../glade/prefs.ui.h:22 #, fuzzy msgid "Internal Browser Settings" msgstr "Nastavení interního prohlížeče" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Otevírat odkazy v okně _Liferea." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "Zakázat _JavaScript." #: ../glade/prefs.ui.h:25 #, fuzzy msgid "_Enable browser plugins." msgstr "Nastavení externího prohlížeče" #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "Nastavení externího prohlížeče" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "Otevírat _odkazy v:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "Ručně" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Prohlížeč:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Prohlížeč" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Notification Settings" msgstr "Nastavení notifikací" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Zobrazovat _vyskakovací okno s novými články." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Zobrazovat stavovou _ikonku v oznamovací oblasti." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Zobrazovat počet _nových článků ve stavové ikonce." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "_Ukončovat namísto minimalizování do stavové ikonky." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Spouštět do stavové ikonky." #: ../glade/prefs.ui.h:39 #, fuzzy msgid "Toolbar Settings" msgstr "_Popisky tlačítek na liště nástrojů:" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "" #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "_Popisky tlačítek na liště nástrojů:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Uživatelské rozhraní" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "Určit _automaticky (dle GNOME)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "Žád_ná proxy" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Ruční nastavení:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "_Port proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "_Hostitel proxy:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Použít au_tentizaci proxy" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Heslo pro pro_xy:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "_Uživatelské jméno pro proxy:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "Stahování příloh" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "Stahovat _pomocí" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "/Otevřít přílohy…" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Přílohy" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #~ 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 "_Delete" #~ msgstr "/_Odstranit" #, 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://liferea.sf.net" #~ msgstr "http://liferea.sf.net" #~ 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 "hledat" #~ 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.10.17/po/da.po000066400000000000000000001716021261475620100146450ustar00rootroot00000000000000# 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: 2013-06-11 22:55+0200\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.desktop.in.h:1 ../src/main.c:234 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Nyhedslæser" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea - Nyhedslæser" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Læs nyheds- og blogkilder" #: ../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/liferea.ui.h:29 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 "No comments yet." msgstr "Endnu ingen bemærkninger." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Bemærkninger" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Opdaterer ..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Opdater" #: ../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:32 msgid "Default Browser" msgstr "Standardbrowser" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Browserkommando mislykkedes: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Starter: »%s«" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Godkendelsesfejl" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Kan ikke oprette mellemlagermappe »%s«!" # 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:80 msgid "Today %l:%M %p" msgstr "I dag %H:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d. %b %Y" #: ../src/enclosure.c:197 #, 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:288 msgid "You have not configured a download tool yet! Please do so in the 'Download' 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:306 #, 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:185 #, c-format msgid "Error renaming %s to %s\n" msgstr "Fejl under omdøbelse af %s til %s\n" #: ../src/export.c:414 ../src/export.c:416 #, 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:422 ../src/export.c:424 #, 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:445 ../src/export.c:447 #, 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:466 msgid "Imported feed list" msgstr "Importeret nyhedskildeliste" #: ../src/export.c:478 msgid "Import Feed List" msgstr "Importer nyhedskildeliste" #: ../src/export.c:478 msgid "Import" msgstr "Importer" #: ../src/export.c:478 ../src/export.c:495 ../src/fl_sources/opml_source.c:394 msgid "OPML Files" msgstr "OPML-filer" #: ../src/export.c:486 msgid "Error while exporting feed list!" msgstr "Fejl under eksport af nyhedskildeliste!" #: ../src/export.c:488 msgid "Feed List exported!" msgstr "Nyhedskildeliste eksporteret!" #: ../src/export.c:495 msgid "Export Feed List" msgstr "Eksporter nyhedskildeliste" #: ../src/export.c:495 msgid "Export" msgstr "Eksporter" #: ../src/feed.c:254 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:283 #, c-format msgid "\"%s\" updated..." msgstr "»%s« opdateret ..." #: ../src/feed.c:293 #, 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:404 msgid "There are no unread items" msgstr "Der er ingen ulæste punkter" #: ../src/main.c:163 msgid "Start Liferea with its main window in STATE. STATE may be `shown', `iconified', or `hidden'" msgstr "Start Liferea med sit hovedvindue i TILSTAND. TILSTAND kan være »shown« (vist), »iconified« (som ikon) eller »hidden« (skjult)" #: ../src/main.c:163 msgid "STATE" msgstr "TILSTAND" #: ../src/main.c:164 msgid "Show version information and exit" msgstr "Vis versionsinformation og afslut" #: ../src/main.c:165 msgid "Add a new subscription" msgstr "Tilføj et nyt abonnement" #: ../src/main.c:165 msgid "uri" msgstr "uri" #: ../src/main.c:170 msgid "Print debugging messages of all types" msgstr "Udskriv fejlsøgningsbeskeder af alle typer" #: ../src/main.c:171 msgid "Print debugging messages for the cache handling" msgstr "Udskriv fejlsøgningsbeskeder for håndtering af mellemlager" #: ../src/main.c:172 msgid "Print debugging messages for the configuration handling" msgstr "Udskriv fejlsøgningsbeskeder for konfigurationshåndteringen" #: ../src/main.c:173 msgid "Print debugging messages of the database handling" msgstr "Udskriv fejlsøgningsbeskeder på databasehåndteringen" #: ../src/main.c:174 msgid "Print debugging messages of all GUI functions" msgstr "Udskriv fejlsøgningsbeskeder på alle GUI-funktioner" #: ../src/main.c:175 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/main.c:176 msgid "Print debugging messages of all network activity" msgstr "Vis fejlsøgningsbeskeder for al netværksaktivitet" #: ../src/main.c:177 msgid "Print debugging messages of all parsing functions" msgstr "Vis fejlsøgningsbeskeder for alle fortolkningsfunktioner" #: ../src/main.c:178 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/main.c:179 msgid "Print debugging messages when entering/leaving functions" msgstr "Vis fejlsøgningsbeskeder når funktioner startes/forlades" #: ../src/main.c:180 msgid "Print debugging messages of the feed update processing" msgstr "Vis fejlsøgningsbeskeder for opdateringsprocessen til nyhedskilden" #: ../src/main.c:181 msgid "Print debugging messages of the search folder matching" msgstr "Udskriv fejlsøgningsbeskeder for håndtering af mellemlager" #: ../src/main.c:182 msgid "Print verbose debugging messages" msgstr "Vis uddybende fejlsøgningsbeskeder" #: ../src/main.c:193 ../src/main.c:194 msgid "Print debugging messages for the given topic" msgstr "Vis fejlsøgningsbeskeder for det angivne emne" #: ../src/main.c:201 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea - nyhedslæseren til Linux" #: ../src/main.c:202 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "Besøg venligst http://lzone.de/liferea/ for yderligere information" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "Opdateringsforespørgslen blev afbrudt" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Kunne ikke afgøre destinationens værtsnavn" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Kunne ikke afgøre værtsnavn for proxy" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Kunne ikke forbinde til ekstern vært" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Kunne ikke forbinde til proxy" #: ../src/net.c:325 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:328 msgid "The resource moved permanently to a new location" msgstr "Ressourcen flyttede permanent til en ny placering" #. http 4xx client error #: ../src/net.c:331 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:333 msgid "Payment required" msgstr "Betaling krævet" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Du har ikke adgang til denne ressource" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Ressource blev ikke fundet" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Metode ikke tilladt" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Ikke acceptabel" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Proxygodkendelse krævet" # Forespørgsel fik tidsudløb #: ../src/net.c:339 msgid "Request timed out" msgstr "Forespørgselstiden udløb" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Forsvundet. Ressource findes ikke. Fjern venligst abonnement!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Der opstod en intern fejl under opdateringsprocessen" #: ../src/net.c:347 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:349 msgid "Client Error" msgstr "Klientfejl" #: ../src/net.c:351 msgid "Server Error" msgstr "Serverfejl" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Abonnement »%s« bliver allerede opdateret!" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Opdaterer favicon til »%s«" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "»%s« har ikke ændret sig siden sidste opdatering" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Opdaterer »%s«" #: ../src/update.c:258 #, 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:281 #, c-format msgid "%s exited with status %d" msgstr "%s afsluttede med status %d" #: ../src/update.c:287 ../src/update.c:288 ../src/update.c:400 #, 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:426 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Fejl: Kunne ikke åbne fil »%s«" #: ../src/update.c:432 #, 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d bilag" msgstr[1] "%d bilag" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Vælg fil" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d ny)" msgstr[1] " (%d nye)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Hjælpeemner" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Hurtig hjælp" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "OSS" #: ../src/ui/liferea_shell.c:795 msgid "Liferea is now online" msgstr "Liferea er nu på nettet" #: ../src/ui/liferea_shell.c:797 msgid "Work Offline" msgstr "Arbejd frakoblet" #: ../src/ui/liferea_shell.c:799 msgid "Liferea is now offline" msgstr "Liferea er nu frakoblet" #: ../src/ui/liferea_shell.c:801 msgid "Work Online" msgstr "Arbejd på nettet" #: ../src/ui/liferea_shell.c:897 msgid "_Subscriptions" msgstr "_Abonnementer" #: ../src/ui/liferea_shell.c:898 msgid "Update _All" msgstr "Opdater _alle" #: ../src/ui/liferea_shell.c:898 msgid "Updates all subscriptions." msgstr "Opdaterer alle abonnementer." #: ../src/ui/liferea_shell.c:900 msgid "Mark All As _Read" msgstr "Marker alle som _læst" #: ../src/ui/liferea_shell.c:900 msgid "Marks read every item of every subscription." msgstr "Markerer alle poster på alle abonnementer som læst." #: ../src/ui/liferea_shell.c:902 msgid "_Import Feed List..." msgstr "_Importer nyhedskildeliste ..." #: ../src/ui/liferea_shell.c:902 msgid "Imports an OPML feed list." msgstr "Importerer en OPML-nyhedskildeliste." #: ../src/ui/liferea_shell.c:903 msgid "_Export Feed List..." msgstr "_Eksporter nyhedskildeliste ..." #: ../src/ui/liferea_shell.c:903 msgid "Exports the feed list as OPML." msgstr "Eksporterer nyhedskildelisten som OPML." #: ../src/ui/liferea_shell.c:904 msgid "_Quit" msgstr "_Afslut" #: ../src/ui/liferea_shell.c:906 msgid "_Feed" msgstr "_Nyhedskilde" #: ../src/ui/liferea_shell.c:907 msgid "Remove _All Items" msgstr "Fjern _Alle punkter" #: ../src/ui/liferea_shell.c:907 msgid "Removes all items of the currently selected feed." msgstr "Fjern alle punkter på den aktuelt valgte nyhedskilde." #: ../src/ui/liferea_shell.c:910 msgid "_Item" msgstr "_Punkt" #: ../src/ui/liferea_shell.c:911 msgid "Previous Item" msgstr "Forrige punkt" #: ../src/ui/liferea_shell.c:913 msgid "Next Item" msgstr "Næste punkt" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:918 msgid "_Next Unread Item" msgstr "_Næste ulæste punkt" #: ../src/ui/liferea_shell.c:921 msgid "_View" msgstr "_Vis" #: ../src/ui/liferea_shell.c:922 ../src/ui/liferea_htmlview.c:653 msgid "_Increase Text Size" msgstr "_Øg tekststørrelse" #: ../src/ui/liferea_shell.c:922 msgid "Increases the text size of the item view." msgstr "Øger tekststørrelsen af punktvisningen." #: ../src/ui/liferea_shell.c:924 ../src/ui/liferea_htmlview.c:654 msgid "_Decrease Text Size" msgstr "_Formindsk tekststørrelse" #: ../src/ui/liferea_shell.c:924 msgid "Decreases the text size of the item view." msgstr "Formindsker tekststørrelsen på punktvisningen." #: ../src/ui/liferea_shell.c:927 msgid "_Tools" msgstr "_Værktøjer" #: ../src/ui/liferea_shell.c:928 msgid "_Update Monitor" msgstr "_Opdater skærm" #: ../src/ui/liferea_shell.c:928 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" #: ../src/ui/liferea_shell.c:930 msgid "_Preferences" msgstr "_Indstillinger" #: ../src/ui/liferea_shell.c:930 msgid "Edit Preferences." msgstr "Rediger indstillinger." #: ../src/ui/liferea_shell.c:933 msgid "S_earch" msgstr "S_øg" #: ../src/ui/liferea_shell.c:934 msgid "Search All Feeds..." msgstr "Søg i alle nyhedskilder ..." #: ../src/ui/liferea_shell.c:934 msgid "Show the search dialog." msgstr "Vis søgedialogen." #: ../src/ui/liferea_shell.c:936 msgid "_Help" msgstr "_Hjælp" #: ../src/ui/liferea_shell.c:937 msgid "_Contents" msgstr "_Indhold" #: ../src/ui/liferea_shell.c:937 msgid "View help for this application." msgstr "Vis hjælp for dette program." #: ../src/ui/liferea_shell.c:938 msgid "_Quick Reference" msgstr "_Hurtig hjælp" #: ../src/ui/liferea_shell.c:938 msgid "View a list of all Liferea shortcuts." msgstr "Vis en liste over alle genveje i Liferea." #: ../src/ui/liferea_shell.c:940 msgid "_FAQ" msgstr "_OSS" #: ../src/ui/liferea_shell.c:940 msgid "View the FAQ for this application." msgstr "Vis OSS'en for dette program." #: ../src/ui/liferea_shell.c:941 msgid "_About" msgstr "_Om" #: ../src/ui/liferea_shell.c:941 msgid "Shows an about dialog." msgstr "Viser en om-dialog." #: ../src/ui/liferea_shell.c:945 msgid "_Normal View" msgstr "_Normal visning" #: ../src/ui/liferea_shell.c:945 msgid "Set view mode to mail client mode." msgstr "Sæt visningstilstand til postklienttilstand." #: ../src/ui/liferea_shell.c:947 msgid "_Wide View" msgstr "_Bred visning" #: ../src/ui/liferea_shell.c:947 msgid "Set view mode to use three vertical panes." msgstr "Sæt visningstilstand til at bruge tre lodrette paneler." #: ../src/ui/liferea_shell.c:949 msgid "_Combined View" msgstr "_Kombineret visning" #: ../src/ui/liferea_shell.c:949 msgid "Set view mode to two pane mode." msgstr "Sæt visningstilstand til topaneltilstand." #: ../src/ui/liferea_shell.c:954 msgid "_Reduced Feed List" msgstr "_Reduceret nyhedskildeliste" #: ../src/ui/liferea_shell.c:954 msgid "Hide feeds with no unread items." msgstr "Skjul nyhedskilder uden ulæste punkter." #: ../src/ui/liferea_shell.c:959 msgid "_New Subscription..." msgstr "_Nyt abonnement ..." #: ../src/ui/liferea_shell.c:959 msgid "Adds a subscription to the feed list." msgstr "Tilføjer et abonnement til nyhedskildelisten." #: ../src/ui/liferea_shell.c:961 ../src/ui/popup_menu.c:320 msgid "New _Folder..." msgstr "Ny _mappe ..." #: ../src/ui/liferea_shell.c:961 msgid "Adds a folder to the feed list." msgstr "Tilføjer en mappe til kildelisten." #: ../src/ui/liferea_shell.c:962 ../src/ui/popup_menu.c:323 msgid "New S_earch Folder..." msgstr "Ny _søgemappe ..." #: ../src/ui/liferea_shell.c:962 msgid "Adds a new search folder to the feed list." msgstr "Tilføjer en ny søgemappe til nyhedskildelisten." #: ../src/ui/liferea_shell.c:963 msgid "New _Source..." msgstr "Ny _kilde ..." #: ../src/ui/liferea_shell.c:963 msgid "Adds a new feed list source." msgstr "Tilføjer en ny kilde for nyhedskildeliste." #: ../src/ui/liferea_shell.c:964 ../src/ui/popup_menu.c:325 msgid "New _News Bin..." msgstr "Ny _nyhedsbakke ..." #: ../src/ui/liferea_shell.c:964 msgid "Adds a new news bin." msgstr "Tilføjer en ny nyhedsbakke." #: ../src/ui/liferea_shell.c:968 msgid "_Mark Items Read" msgstr "_Marker punkter som læst" #: ../src/ui/liferea_shell.c:968 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." #: ../src/ui/liferea_shell.c:970 ../src/ui/popup_menu.c:300 msgid "_Update" msgstr "_Opdater" #: ../src/ui/liferea_shell.c:970 msgid "Updates the selected subscription or all subscriptions of the selected folder." msgstr "Opdaterer det valgte abonnement eller alle abonnementer på den valgte mappe." #: ../src/ui/liferea_shell.c:975 msgid "_Properties" msgstr "_Egenskaber" #: ../src/ui/liferea_shell.c:975 msgid "Opens the property dialog for the selected subscription." msgstr "Åbner egenskabsdialogen for det valgte abonnement." #: ../src/ui/liferea_shell.c:976 msgid "_Remove" msgstr "_Fjern" #: ../src/ui/liferea_shell.c:976 msgid "Removes the selected subscription." msgstr "Fjerner det valgte abonnement." #: ../src/ui/liferea_shell.c:980 ../src/ui/popup_menu.c:163 msgid "Toggle _Read Status" msgstr "Skift _læsningsstatus" #: ../src/ui/liferea_shell.c:980 msgid "Toggles the read status of the selected item." msgstr "Skifter læsningsstatus på det valgte punkt." #: ../src/ui/liferea_shell.c:982 ../src/ui/popup_menu.c:164 msgid "Toggle Item _Flag" msgstr "Skift punkt_flag" #: ../src/ui/liferea_shell.c:982 msgid "Toggles the flag status of the selected item." msgstr "Skifter flagstatus på det valgte punkt." #: ../src/ui/liferea_shell.c:984 msgid "R_emove" msgstr "_Fjern" #: ../src/ui/liferea_shell.c:984 msgid "Removes the selected item." msgstr "Fjerner det valgte punkt." #: ../src/ui/liferea_shell.c:986 ../src/ui/popup_menu.c:127 msgid "Open In _Tab" msgstr "Åbn i _faneblad" #: ../src/ui/liferea_shell.c:986 msgid "Launches the item's link in a new Liferea browser tab." msgstr "Åbner punktets adresse i et nyt browserfaneblad for Liferea." #: ../src/ui/liferea_shell.c:988 ../src/ui/popup_menu.c:128 msgid "_Open In Browser" msgstr "_Åbn i browser" #: ../src/ui/liferea_shell.c:988 msgid "Launches the item's link in the Liferea item pane." msgstr "Åbner punktets adresse i punktets panel for Liferea." #: ../src/ui/liferea_shell.c:990 ../src/ui/popup_menu.c:129 msgid "Open In _External Browser" msgstr "Åbn i _ekstern browser" #: ../src/ui/liferea_shell.c:990 msgid "Launches the item's link in the configured external browser." msgstr "Åbner punktets adresse i den konfigurerede eksterne browser." #: ../src/ui/liferea_shell.c:995 ../src/ui/popup_menu.c:193 msgid "_Work Offline" msgstr "_Arbejd frakoblet" #: ../src/ui/liferea_shell.c:995 msgid "This option allows you to disable subscription updating." msgstr "Denne indstilling giver dig mulighed for at deaktivere abonnementopdatering." #: ../src/ui/liferea_shell.c:997 msgid "_Fullscreen" msgstr "_Fuldskærm" # fuldskærmsvisning #: ../src/ui/liferea_shell.c:997 msgid "Browse at full screen" msgstr "Gennemse i fuld skærm" #: ../src/ui/liferea_shell.c:1328 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Nyhedslæser til Linux" #: ../src/ui/liferea_shell.c:1330 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

" #: ../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:211 msgid "All Files" msgstr "Alle filer" #: ../src/ui/feed_list_view.c:338 msgid "Deleting entry" msgstr "Sletter post" #: ../src/ui/feed_list_view.c:339 #, 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_view.c:339 #, 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_view.c:351 msgid "Deletion Confirmation" msgstr "Sletningsbekræftelse" #: ../src/ui/feed_list_view.c:382 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea er i frakoblet tilstand. Ingen opdatering mulig." #: ../src/ui/liferea_htmlview.c:624 msgid "Open Link In _Tab" msgstr "Åbn adresse i _faneblad" #: ../src/ui/liferea_htmlview.c:625 msgid "_Open Link In Browser" msgstr "_Åbn adresse i browser" #: ../src/ui/liferea_htmlview.c:626 msgid "_Open Link In External Browser" msgstr "_Åbn adresse i ekstern browser" #: ../src/ui/liferea_htmlview.c:629 #, c-format msgid "_Bookmark Link at %s" msgstr "_Bogmærk adresse på %s" #: ../src/ui/liferea_htmlview.c:633 msgid "_Copy Link Location" msgstr "_Kopier adresseplacering" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Image Location" msgstr "_Kopier billedplacering" #: ../src/ui/liferea_htmlview.c:638 msgid "S_ave Link As" msgstr "_Gem adresse som" #: ../src/ui/liferea_htmlview.c:640 msgid "S_ave Image As" msgstr "_Gem billede som" #: ../src/ui/liferea_htmlview.c:643 msgid "_Subscribe..." msgstr "_Abonner ..." #: ../src/ui/item_list_view.c:398 msgid "*** No title ***" msgstr "*** Ingen titel ***" #: ../src/ui/item_list_view.c:661 msgid "Date" msgstr "Dato" #: ../src/ui/item_list_view.c:675 msgid "Headline" msgstr "Overskrift" #: ../src/ui/item_list_view.c:777 ../src/ui/item_list_view.c:798 #: ../src/ui/item_list_view.c:819 ../src/ui/item_list_view.c:883 #: ../src/ui/item_list_view.c:968 ../src/ui/item_list_view.c:983 msgid "No item has been selected" msgstr "Intet punkt er blevet valgt" #: ../src/ui/item_list_view.c:794 ../src/ui/item_list_view.c:815 msgid "This item has no link specified!" msgstr "Dette punkt har ingen adresse angivet!" #: ../src/ui/item_list_view.c:871 msgid "You must select a feed to delete its items!" msgstr "Du skal vælge en nyhedskilde for at slette dens punkter!" #: ../src/ui/popup_menu.c:141 msgid "Copy to News Bin" msgstr "Kopier til nyhedsbakke" #: ../src/ui/popup_menu.c:155 #, c-format msgid "_Bookmark at %s" msgstr "_Bogmærk på %s" #: ../src/ui/popup_menu.c:159 msgid "Copy Item _Location" msgstr "Kopier _punktplacering" #: ../src/ui/popup_menu.c:165 msgid "R_emove Item" msgstr "_Fjern punkt" #: ../src/ui/popup_menu.c:178 msgid "Open Enclosure..." msgstr "Åbn pakke ..." #: ../src/ui/popup_menu.c:179 msgid "Save As..." msgstr "Gem som ..." #: ../src/ui/popup_menu.c:180 msgid "Copy Link Location" msgstr "Kopier adresseplacering" #: ../src/ui/popup_menu.c:194 msgid "_Update All" msgstr "_Opdater alle" #: ../src/ui/popup_menu.c:199 msgid "_Show Liferea" msgstr "_Vis Liferea" #: ../src/ui/popup_menu.c:302 msgid "_Update Folder" msgstr "_Opdater mappe" #: ../src/ui/popup_menu.c:304 msgid "_Mark All As Read" msgstr "_Marker alle som læst" #: ../src/ui/popup_menu.c:314 msgid "_New" msgstr "_Ny" #: ../src/ui/popup_menu.c:317 msgid "New _Subscription..." msgstr "Nyt _abonnement ..." #: ../src/ui/popup_menu.c:324 msgid "New S_ource..." msgstr "Ny _kilde ..." #: ../src/ui/popup_menu.c:333 msgid "Sort Feeds" msgstr "Sorter nyhedskilder" #: ../src/ui/popup_menu.c:339 msgid "_Rebuild" msgstr "_Genbyg" #: ../src/ui/popup_menu.c:351 msgid "Convert To Local Subscriptions..." msgstr "Konverter til lokale abonnementer ..." #: ../src/ui/preferences_dialog.c:87 msgid "GNOME default" msgstr "GNOME-standard" #: ../src/ui/preferences_dialog.c:88 msgid "Text below icons" msgstr "Tekst under ikoner" #: ../src/ui/preferences_dialog.c:89 msgid "Text beside icons" msgstr "Tekst ved siden af ikoner" #: ../src/ui/preferences_dialog.c:90 msgid "Icons only" msgstr "Kun ikoner" #: ../src/ui/preferences_dialog.c:91 msgid "Text only" msgstr "Kun tekst" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minutter" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "timer" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dage" #: ../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:108 msgid " Space" msgstr " mellemrum" #: ../src/ui/preferences_dialog.c:113 msgid "Normal View" msgstr "Normal visning" #: ../src/ui/preferences_dialog.c:114 msgid "Wide View" msgstr "Bred visning" #: ../src/ui/preferences_dialog.c:115 msgid "Combined View" msgstr "Kombineret visning" # måske 'Manuel' (som i manuel browser) afhænger måske af type #: ../src/ui/preferences_dialog.c:500 msgid "Manual" msgstr "Manuel" #: ../src/ui/preferences_dialog.c:515 msgid "Browser default" msgstr "Browserstandard" #: ../src/ui/preferences_dialog.c:518 msgid "Existing window" msgstr "Eksisterende vindue" #: ../src/ui/preferences_dialog.c:521 msgid "New window" msgstr "Nyt vindue" #: ../src/ui/preferences_dialog.c:524 msgid "New tab" msgstr "Nyt faneblad" #: ../src/ui/preferences_dialog.c:683 msgid "Integrate with the messaging menu (indicator)" msgstr "Integrer med beskedmenuen (indikator)" #: ../src/ui/preferences_dialog.c:686 msgid "Terminate instead of minimizing to the messaging menu" msgstr "Afslut i stedet for at minimere til beskedmenuen" #: ../src/ui/preferences_dialog.c:689 msgid "Start minimized to the messaging menu" msgstr "Start minimeret til beskedmenuen" # tast? #: ../src/ui/preferences_dialog.c:789 msgid "Type" msgstr "Type" #: ../src/ui/preferences_dialog.c:792 msgid "Program" msgstr "Program" #: ../src/ui/ui_node.c:123 msgid "(Empty)" msgstr "(Tom)" #: ../src/ui/ui_node.c:320 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Genbygger" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Denne nyhedskilde angiver ingen standard for opdateringsinterval." #: ../src/ui/browser_tabs.c:153 msgid "Untitled" msgstr "Uden titel" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d nyt punkt" msgstr[1] "%d nye punkter" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Ingen nye punkter" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Ingen ulæste punkter" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Internetside" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Ugyldig Atomnyhedskilde: Ukendt forfatter" # 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:145 #: ../src/fl_sources/google_source.c:273 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nyt abonnement" #: ../src/fl_sources/google_source.c:115 msgid "Google Reader login failed!" msgstr "Kunne ikke logge ind på Google Reader!" #: ../src/fl_sources/google_source.c:394 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:395 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." #: ../src/fl_sources/opml_source.c:326 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:327 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" #: ../src/fl_sources/opml_source.c:394 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:238 msgid "No feed list source types found!" msgstr "Ingen kildetyper fundet for nyhedskildeliste!" #: ../src/fl_sources/node_source.c:268 msgid "Source Type" msgstr "Kildetype" #. 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:412 #, 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/ttrss_source.c:360 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:361 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." #: ../src/fl_sources/ttrss_source_feed.c:119 msgid "Could not parse JSON returned by tt-rss API!" msgstr "Kunne ikke fortolke JSON returneret af tt-rss API!" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Denne nyhedskilde findes ikke mere!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Dette nyhedspunkt har ingen overskrift" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Besøg" #: ../src/notification/libnotify.c:167 ../src/notification/libnotify.c:263 msgid "Open feed" msgstr "Åbn nyhedskilde" #: ../src/notification/libnotify.c:170 ../src/notification/libnotify.c:266 msgid "Mark all as read" msgstr "Marker alle som læst" #: ../src/notification/libnotify.c:247 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "%s har %d opdatering" msgstr[1] "%s har %d opdateringer" #: ../src/notification/libnotify.c:249 msgid "Feed Update" msgstr "Nyhedskildeopdatering" #: ../src/notification/libnotify.c:260 msgid "Show details" msgstr "Vis detaljer" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Godkendelse" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Adgangskode:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "Bruger_navn:" #: ../glade/auth.ui.h:6 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." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Adgangskode" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "_Brugernavn (e-post)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "normal visning" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "bred visning" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Vis overskrifter" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "kombineret visning" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Overskrifter" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Knap for tilkoblet/frakoblet" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Abonnementegenskaber" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Navn på nyhedskilde" #: ../glade/liferea.ui.h:10 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/liferea.ui.h:11 msgid "Update Interval" msgstr "Opdater interval" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Brug globalt standardopdateringsinterval." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "Specifikt opdateringsinterval på _nyhedskilde" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Opdater ikke denne nyhedskilde automatisk." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Generelt" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Nyhedskilde" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Kildetype:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Kilde:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Kommando" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Lokal fil" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Vælg fil ..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Brug konversions_filter" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Konverter med _brug af:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "_Standardopsætning af mellemlager" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Deaktiver mellemlager" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Ubegrænset mellemlager" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "_Antal punkter at gemme:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Arkiv" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Brug HTTP-_godkendelse" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "_Brug ikke proxy til hentning" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Hent" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "_Hent automatisk alle pakker fra denne nyhedskilde." #: ../glade/liferea.ui.h:42 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/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorer _bemærkningsnyhedskilder for dette abonnement." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "_Gennemtving pop op-påmindelse for dette abonnement." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "_Udfør aldrig pop op-påmindelse for dette abonnement." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Marker hentede punkter som læst." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Avanceret" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Ny mappe" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "_Mappenavn:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Omdøb" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Nyt navn:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Egenskaber for søgemappe" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "Søge_navn:" #: ../glade/liferea.ui.h:54 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/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "_Mindst én regel opfyldt" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "_Alle regler skal være opfyldt" #: ../glade/liferea.ui.h:57 msgid "Open Enclosure" msgstr "Åbn pakke" #: ../glade/liferea.ui.h:58 msgid "Open an enclosure of type:" msgstr "Åbn pakketypen:" #: ../glade/liferea.ui.h:59 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Gennemse" # i fremtiden #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Gør dette automatisk for pakker som dette fremadrettet." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Søg i alle nyhedskilder" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Søg efter:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Avanceret ..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Opdater skærm" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "Afventende anmodninger" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "Henter nu" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Afbryd _alle" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Opret nyhedsbakke" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Nyhedsbakkenavn:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Om" #: ../glade/liferea.ui.h:74 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea er en nyhedsindsamler til GTK+" #: ../glade/liferea.ui.h:75 msgid "Liferea Homepage" msgstr "Lifereas hjemmeside" #: ../glade/liferea.ui.h:76 msgid "Advanced Search" msgstr "Avanceret søgning" # tror det skal forstås som 'søg i mappe' #: ../glade/liferea.ui.h:77 msgid "_Search Folder..." msgstr "_Søg i mappe ..." #: ../glade/liferea.ui.h:78 msgid "Create Search Engine Feed" msgstr "Opret søgemotornyhedskilde" #: ../glade/liferea.ui.h:79 msgid "enter any search string you want" msgstr "indtast en ønsket søgestreng" #: ../glade/liferea.ui.h:80 msgid "Maximal _Number Of Result Items:" msgstr "Maksimalt _antal resultatpunkter:" #: ../glade/liferea.ui.h:81 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." # 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/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/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Tilføj Tiny Tiny RSS-konto" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your tt-rss 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/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/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:4 msgid "Feed Update Settings" msgstr "Indstillinger for nyhedskildeopdatering" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "_Opdater alle abonnementer ved opstart." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Standardinterval for _nyhedskildeopdatering:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Nyhedskilder" #: ../glade/prefs.ui.h:10 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:11 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:12 msgid "_Hide read items." msgstr "_Skjul læste punkter." #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Ikoner for nyhedskilde (faviconer)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Opdater alle faviconer nu" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Mapper" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Læser overskrifter" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "_Skim igennem artikler med:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "_Normal visningstilstand:" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Internetintegrering" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Send bogmærker til" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Intern browseropsætning" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Åbn adresser i Lifereas _vindue." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Deaktiver Javascript." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "_Aktiver browserudvidelsesmoduler." #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "Ekstern browseropsætning" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Åbn adresse i:" # måske 'Manuel' (som i manuel browser) afhænger måske af type #: ../glade/prefs.ui.h:28 msgid "_Manual:" msgstr "_Manuel:" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "(%s for adresse)" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Browser:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Browser" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Påmindelsesopsætning" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Vis et _pop op-vindue med nye overskrifter." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Vis et status_ikon i statusfeltet." # statusfeltikon? #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Vis _antallet af nye punkter i statusikonet." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "_Afslut i steden for at minimere til statusikonet." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Start i statusikon." #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Værktøjsbjælkeopsætning" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Skjul værktøjsbjælke." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Etiketter for _værktøjsbjælkeknap:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Grafisk brugergrænseflade" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "Server for HTTP-proxy" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_Autodetekter (GNOME eller miljø)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_Ingen proxy" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Manuel indstilling:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "Proxy_port:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "Proxy_vært:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Brug proxy_godkendelse" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Proxy_adgangskode:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Proxy_brugernavn:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "Henter pakker" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Hent med brug af" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "Åbner pakker" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Pakker" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "Udvidelsesmodul" #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Ophavsret 2003-2012\n" #~ "Holdet bag Liferea\n" liferea-1.10.17/po/de.po000066400000000000000000001651661261475620100146610ustar00rootroot00000000000000# German translation for Liferea. # Copyright (C) 2003 # This file is distributed under the same license as the Liferea package. # Lars Windolf , 2003-2012. # Robin Stocker , 2008-2009. # Christian Dywan , 2008-2009. # msgid "" msgstr "" "Project-Id-Version: Liferea 1.9.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-01-25 23:54+0100\n" "PO-Revision-Date: 2013-07-06 01:24+0100\n" "Last-Translator: Lars Windolf \n" "Language-Team: German\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: German\n" "X-Poedit-Country: Germany\n" #: ../liferea.desktop.in.h:1 #: ../src/main.c:235 #: ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Feedreader" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea Feedreader" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "News-Feeds und Blogs lesen" #: ../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/liferea.ui.h:29 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 "No comments yet." msgstr "Keine Kommentare bisher." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Kommentare" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Aktualisiere..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Aktualisieren" #: ../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:32 msgid "Default Browser" msgstr "Standard-Browser" #: ../src/browser.c:207 #: ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Aufruf des Browsers fehlgeschlagen: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Starte: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Authorisierungsfehler" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Kann Cache-Verzeichnis \"%s\" nicht anlegen!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Heute %H:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" ist keine gültige Datei mit Anhangstypen!" #: ../src/enclosure.c:288 msgid "You have not configured a download tool yet! Please do so in the 'Download' tab in Tools/Preferences." msgstr "Es ist noch kein Download-Programm konfiguriert! Dies muss im Reiter 'Download' unter Tools/Einstellungen eingetragen werden." #: ../src/enclosure.c:306 #, 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 prüfen, ob das konfigurierte Download-Programm installiert ist und korrekt funktioniert! Im Reiter 'Download' im Menü Tools/Einstellungen kann dies kontrolliert werden." #: ../src/export.c:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Fehler beim Umbenennen von %s nach %s\n" #: ../src/export.c:406 #: ../src/export.c:408 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "XML-Fehler beim Lesen der Cache-Datei \"%s\"! Cache-Datei nicht geladen!" #: ../src/export.c:414 #: ../src/export.c:416 #, 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:437 #: ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Importierte Abonnements" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Abonnements importieren" #: ../src/export.c:470 msgid "Import" msgstr "Import" #: ../src/export.c:470 #: ../src/export.c:487 #: ../src/fl_sources/opml_source.c:387 msgid "OPML Files" msgstr "OPML-Dateien" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Fehler beim Exportieren der Abonnements!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Abonnements exportiert!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Abonnements exportieren" #: ../src/export.c:487 msgid "Export" msgstr "Export" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" aktualisiert..." #: ../src/feed.c:294 #, 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:404 msgid "There are no unread items" msgstr "Es gibt keine ungelesenen Schlagzeilen" #: ../src/main.c:164 msgid "Start Liferea with its main window in STATE. STATE may be `shown', `iconified', or `hidden'" msgstr "Starte Liferea mit dem Hauptfensterstatus STATE. STATE kann `shown', `iconified', oder `hidden' sein" #: ../src/main.c:164 msgid "STATE" msgstr "STATE" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Programmversion anzeigen und beenden" #: ../src/main.c:166 msgid "Add a new subscription" msgstr "Neues Abonnement hinzufügen" #: ../src/main.c:166 msgid "uri" msgstr "uri" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Gibt alle Debug-Meldungen aus" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "Gibt Debug-Meldungen für die Cacheverwaltung aus" #: ../src/main.c:173 msgid "Print debugging messages for the configuration handling" msgstr "Gibt Debug-Meldungen für die Konfigurationsverwaltung aus" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Gibt Debug-Meldungen für die Datenbanknutzung aus" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "Gibt Debug-Meldungen aller GUI-Funktionen aus." #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Gibt Debug-Meldungen der Netzwerkfunktionen aus" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "Gibt Debug-Meldungen aller Parserfunktionen aus" #: ../src/main.c:179 msgid "Print debugging messages when a function takes too long to process" msgstr "Ausgabe von Meldungen über langlaufende Funktionen" #: ../src/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "Gibt Debug-Meldungen aus, wenn Funktionen gestartet und beendet werden" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "Gibt Debug-Meldungen für die Feedaktualisierung aus" #: ../src/main.c:182 msgid "Print debugging messages of the search folder matching" msgstr "Gibt Debug-Meldungen für die Suchordner-Handling aus" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "Gibt ausführliche Debug-Meldungen aus" #: ../src/main.c:194 #: ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "Gibt Debug-Meldungen für die jeweiligen Topic aus" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, der Linux Feed Reader" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "Weitere Informationen auf http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "Aktualisierung wurde abgebrochen" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Ziel-Hostname kann nicht aufgelöst werden " #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Proxy-Name kann nicht aufgelöst werden" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Fehler beim Kontaktieren des Servers" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Proxy ist nicht erreichbar" #: ../src/net.c:325 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:328 msgid "The resource moved permanently to a new location" msgstr "Das Dokument wurde permanent verschoben" #. http 4xx client error #: ../src/net.c:331 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:333 msgid "Payment required" msgstr "Bezahlung erforderlich" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Sie haben keinen Zugriff auf diese Resource" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Ressource nicht gefunden." #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Methode nicht erlaubt" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Ungültig" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Proxy-Authentifizierung nötig" #: ../src/net.c:339 msgid "Request timed out" msgstr "Antwortzeit überschritten" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Dieser Feed existiert nicht (mehr). Bitte entfernen Sie das Abonnement!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Interner Fehler beim Updaten" #: ../src/net.c:347 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:349 msgid "Client Error" msgstr "Client-Fehler" #: ../src/net.c:351 msgid "Server Error" msgstr "Server-Fehler" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Das Abonnement \"%s\" wird bereits aktualisiert!" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Aktualisiere Symbol für Abonnement \"%s\"" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" hat sich seit dem letzten Update nicht verändert" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Aktualisiere \"%s\"" #: ../src/update.c:259 #, 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:282 #, c-format msgid "%s exited with status %d" msgstr "%s endete mit Status %d" #: ../src/update.c:288 #: ../src/update.c:289 #: ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Konnte Datei \"%s\" nicht öffnen." #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Es gibt keine Datei \"%s\"." #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Neuer Suchordner" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Es gab weitere Fehler. Fehlerausgabe abgeschnitten!]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d Anhang" msgstr[1] "%d Anhänge" #: ../src/ui/enclosure_list_view.c:377 #: ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Datei wählen" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d neu)" msgstr[1] " (%d neu)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Hilfe-Themen" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Kurzreferenz" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "FAQ" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea ist jetzt online" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Offline arbeiten" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea ist jetzt offline." #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Online arbeiten" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Abonnements" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "_Alle aktualisieren" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Aktualisieren aller Abonnements." #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Alle als gelesen markieren" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Markiert alle Schlagzeilen des Abonnements als gelesen." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "Abonnements _importieren..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Importiert Abonnements aus einer OPML Datei." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "Abonnements _exportieren..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Exportiert alle Abonnements als OPML Datei." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Beenden" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Abonnement" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Lösche _alle Schlagzeilen" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Löscht alle Schlagzeilen des ausgewählten Abonnements." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "_Schlagzeile" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "Vorherige Schlagzeile" #: ../src/ui/liferea_shell.c:924 msgid "Next Item" msgstr "Nächste Schlagzeile" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "Nächste _Ungelesene" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Ansicht" #: ../src/ui/liferea_shell.c:933 #: ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "Schriftgrad ver_größern" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Vergrößern des Schriftgrades der Schlagzeilenansicht." #: ../src/ui/liferea_shell.c:935 #: ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "Schriftgrad ver_kleinern" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Verkleinern des Schriftgrades der Schlagzeilenansicht." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "_Tools" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "_Aktualisierungsstatus" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "Eine Liste aller zur Zeit laufenden Aktualisierungen anzeigen." #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Einstellungen" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Einstellungen ändern." #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "_Suche" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Alle Feeds durchsuchen..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Öffnen des Suchdialogs." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Hilfe" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Inhalt" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Die Hilfe für diese Anwendung anzeigen." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Kurzreferenz" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Eine Liste aller Tastenkürzel zeigen." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_FAQ" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Häufig gestellte Fragen für diese Anwendung anzeigen." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_Info" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Anzeigen \"Über\"-Dialogs." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "_Normale Ansicht" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Ansicht wie eine Email-Anwendung verwenden." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "_Breite Ansicht" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Ansicht mit drei vertikalen Spalten verwenden." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "_Kombinierte Ansicht" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Ansicht mit zwei Spalten und einer kombinierten Schlagzeilenansicht verwenden." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "_Reduzierte Abonnements" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Verberge Abonnements ohne ungelesene Schlagzeilen." #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "_Neues Abonnement..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Neues Abonnement hinzufügen." #: ../src/ui/liferea_shell.c:972 #: ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Neuer _Ordner..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Einen Ordner der Liste der Abonnements hinzufügen." #: ../src/ui/liferea_shell.c:973 #: ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Neuer S_uchordner..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Einen neuen Suchordner zu den Abonnements hinzufügen." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Neue _Quelle..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Eine neue Quelle zu den Abonnements hinzufügen." #: ../src/ui/liferea_shell.c:975 #: ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "Neuer Sa_mmelordner..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Einen neuen Sammelordner zu den Abonnements hinzufügen." #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "Als gelesen _markieren" #: ../src/ui/liferea_shell.c:979 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." #: ../src/ui/liferea_shell.c:981 #: ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Aktualisieren" #: ../src/ui/liferea_shell.c:981 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." #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "_Eigenschaften" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Öffnet den Eigenschaften-Dialog für das ausgewählte Abonnement." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "_Löschen" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Entfernt das ausgewählte Abonnement." #: ../src/ui/liferea_shell.c:991 #: ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Lesestatus ändern" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Ändert den Lesestatus der gewählten Schlagzeile." #: ../src/ui/liferea_shell.c:993 #: ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "_Flagge setzen" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Ändert den Markierungsstatus der gewählten Schlagzeile." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "_Löschen" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Entfernt die ausgewählte Schlagzeile." #: ../src/ui/liferea_shell.c:997 #: ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "In _Tab öffnen" #: ../src/ui/liferea_shell.c:997 msgid "Launches the item's link in a new Liferea browser tab." msgstr "Öffnet die ausgewählten Schlagzeile in einem neuen Tab in Liferea." #: ../src/ui/liferea_shell.c:999 #: ../src/ui/popup_menu.c:129 msgid "_Open In Browser" msgstr "Im _Browser öffnen" #: ../src/ui/liferea_shell.c:999 msgid "Launches the item's link in the Liferea item pane." msgstr "Öffnet die ausgewählte Schlagzeile in Liferea." #: ../src/ui/liferea_shell.c:1001 #: ../src/ui/popup_menu.c:130 msgid "Open In _External Browser" msgstr "Im _externen Browser öffnen" #: ../src/ui/liferea_shell.c:1001 msgid "Launches the item's link in the configured external browser." msgstr "Öffnet die ausgewählten Schlagzeile im konfigurierten externen Browser." #: ../src/ui/liferea_shell.c:1006 #: ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "_Offline arbeiten" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Diese Option deaktiviert das Aktualisieren von Abonnements." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "Vollbild" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "Im Vollbildmodus lesen" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Linux Feed Reader" #: ../src/ui/liferea_shell.c:1341 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.

" #: ../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:205 msgid "All Files" msgstr "Alle Dateien" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Lösche Abonnement" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, 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_view.c:354 msgid "Deletion Confirmation" msgstr "Lösch-Bestätigung" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea ist offline. Keine Aktualisierungen möglich." #: ../src/ui/liferea_htmlview.c:627 msgid "Open Link In _Tab" msgstr "Link in _Tab öffnen" #: ../src/ui/liferea_htmlview.c:628 msgid "_Open Link In Browser" msgstr "Im _Browser öffnen" #: ../src/ui/liferea_htmlview.c:629 msgid "_Open Link In External Browser" msgstr "Im _externen Browser öffnen" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "_Lesezeichen mit %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_Link kopieren" #: ../src/ui/liferea_htmlview.c:639 msgid "_Copy Image Location" msgstr "Bild _Link kopieren" #: ../src/ui/liferea_htmlview.c:641 msgid "S_ave Link As" msgstr "Link Speichern _unter..." #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "B_ild Speichern Als" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "_Abonnieren..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Kein Titel ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Datum" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Schlagzeile" #: ../src/ui/item_list_view.c:714 #: ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 #: ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 #: ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Es wurde keine Schlagzeile ausgewählt." #: ../src/ui/item_list_view.c:731 #: ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Diese Schlagzeile hat keinen Link!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Zum Löschen von Schlagzeilen muss ein Abonnement ausgewählt werden!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "In Sammelordner kopieren" #: ../src/ui/popup_menu.c:156 #, c-format msgid "_Bookmark at %s" msgstr "_Lesezeichen mit %s" #: ../src/ui/popup_menu.c:160 msgid "Copy Item _Location" msgstr "_Link der Schlagzeile kopieren" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "_Lösche Schlagzeile" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Öffne Anhang..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Speichern unter..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "Link kopieren" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "_Alle aktualisieren" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "Liferea anzeigen" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "_Ordner _aktualisieren" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "Alle als gelesen _markieren" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "_Neu" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "_Neues Abonnement..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "Neue _Quelle..." #: ../src/ui/popup_menu.c:329 msgid "Sort Feeds" msgstr "Abonnements sortieren" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "_Neu Erzeugen" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "GNOME-Standard" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Text unter Elementen" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Text neben Elementen" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Nur Symbole" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Nur Text" #: ../src/ui/preferences_dialog.c:100 #: ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "Minuten" #: ../src/ui/preferences_dialog.c:101 #: ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "Stunden" #: ../src/ui/preferences_dialog.c:102 #: ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "Tage" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Leertaste" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Leertaste" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Leertaste" #: ../src/ui/preferences_dialog.c:114 msgid "Normal View" msgstr "Normale Ansicht" #: ../src/ui/preferences_dialog.c:115 msgid "Wide View" msgstr "Breite Ansicht" #: ../src/ui/preferences_dialog.c:116 msgid "Combined View" msgstr "Kombinierte Ansicht" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Manuell" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Browser-Vorgabe" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Existierendes Fenster" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Neues Fenster" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Neuer Tab" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "In Messaging Menü (Indicator) integrieren" #: ../src/ui/preferences_dialog.c:685 msgid "Terminate instead of minimizing to the messaging menu" msgstr "Beenden anstatt ins Messaging Menü zu minimieren." #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "Minimiert im Messaging Menü starten" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Typ" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Programm" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Leer)" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Erneuern" #: ../src/ui/subscription_dialog.c:430 #, 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 Minuten vor." msgstr[1] "Der Anbieter dieses Abonnements schlägt ein Aktualisierungsintervall von %d Minuten vor." #: ../src/ui/subscription_dialog.c:434 msgid "This feed specifies no default update interval." msgstr "Dieses Abonnement schlägt kein Aktualisierungsintervall vor." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "Ohne Titel" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d neue Schlagzeile!" msgstr[1] "%d neue Schlagzeilen!" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Keine neuen Schlagzeilen" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Keine ungelesenen Schlagzeilen" #: ../src/parsers/atom10.c:241 #: ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Webseite" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Ungültiges Atom-Feed: Unbekannter Autor" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 #: ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Neues Abonnement" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "Google-Reader-Login fehlgeschlagen!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 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." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:326 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." #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Keine speziellen Quellen für Abonnements verfügbar!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Art der Quelle" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:363 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." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "Could not parse JSON returned by tt-rss API!" #: ../src/notification/libnotify.c:61 #: ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Das gewählte Abonnement existiert nicht mehr!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Diese Schlagzeile hat keinen Inhalt." #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Öffnen" #: ../src/notification/libnotify.c:171 #: ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Öffnen" #: ../src/notification/libnotify.c:174 #: ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Alle als gelesen markieren" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "%s mit %d Aktualisierungen" msgstr[1] "%s mit %d Aktualisierungen" #: ../src/notification/libnotify.c:257 #: ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Abonnement aktualisieren" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Details anzeigen" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Authentifizierung" #: ../glade/auth.ui.h:4 #: ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Passwort:" #: ../glade/auth.ui.h:5 #: ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_Benutzername:" #: ../glade/auth.ui.h:6 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." #: ../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 "Hier sind die Google-Reader-Kontodaten anzugeben." #: ../glade/google_source.ui.h:3 #: ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Passwort" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "_Benutzername (Email)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "Normale Ansicht" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "Breite Ansicht" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Schlagzeilen anzeigen" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "Kombinierte Ansicht" #: ../glade/liferea.ui.h:6 #: ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Schlagzeilen" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Online/Offline Button" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Eigenschaften des Abonnements" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Abonnement-Name" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "Abonnement-_Name:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "Aktualisierungsintervall" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Standardeinstellungen verwenden." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_Benutzerdefinierte Aktualisierung alle" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Keine automatische Aktualisierung." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Allgemein" #: ../glade/liferea.ui.h:19 #: ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Abonnement-Quelle" #: ../glade/liferea.ui.h:20 #: ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Art der Quelle:" #: ../glade/liferea.ui.h:21 #: ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Quelle:" #: ../glade/liferea.ui.h:22 #: ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_Adresse" #: ../glade/liferea.ui.h:23 #: ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Befehl" #: ../glade/liferea.ui.h:24 #: ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "Lokale _Datei" #: ../glade/liferea.ui.h:25 #: ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Datei auswählen..." #: ../glade/liferea.ui.h:26 #: ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "_Benutze einen Filter zum Konvertieren" #: ../glade/liferea.ui.h:27 #: ../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/liferea.ui.h:28 #: ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Konvertiere _mit:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "_Standardeinstellungen verwenden" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "Cache d_eaktivieren" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "Schlagzeilen _unbegrenzt speichern" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "Default-_Anzahl zu speichernder Schlagzeilen:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Archiv" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "HTTP-_Authentifikation benutzen" #: ../glade/liferea.ui.h:39 #: ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "_Proxy beim Herunterladen nicht nutzen" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Download" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "_Alle Anhänge dieses Abonnements automatisch herunterladen." #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "_Link beim Auswählen der Schlagzeile automatisch öffnen." #: ../glade/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Ignoriere _Kommentarfeeds dieses Abonnements." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "_Erzwinge Popups für dieses Abonnement." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "_Keine Popups für dieses Abonnement" #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Markiere heruntergeladene Schlagzeilen als gelesen." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Erweitert" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Neuer Ordner" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "_Ordnername:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Umbenennen" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Neuer Name:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Suchordner-Eigenschaften" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "_Name der Suche:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "Suche Abonnements die den folgenden Kriterien entsprechen" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "Ei_ne Regel trifft zu" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "_Alle Regeln treffen zu" #: ../glade/liferea.ui.h:57 msgid "Open Enclosure" msgstr "Öffne Anhang" #: ../glade/liferea.ui.h:58 msgid "Open an enclosure of type:" msgstr "Herunterladen eines Anhangs vom Typ:" #: ../glade/liferea.ui.h:59 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 sollte Liferea mit diesem Anhang tun? An dieser Stelle kann ein Befehl zur Ausführung angegeben werden. Der Name der heruntergeladenen Datei wird als Argument mitgegeben:" #: ../glade/liferea.ui.h:60 msgid "_Browse" msgstr "_Durchsuchen" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Tue dies von nun an automatisch für Dateien dieses Typs." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Alle Abonnements durchsuchen" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Suche nach:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Erweitert..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Aktualisierungsstatus" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "Warteschlange" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "In Bearbeitung" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "_Alle abbrechen" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Neuer Sammelordner" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Name des Sammelordners" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Info" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Copyright (c) 2003-2012\n" "Das Liferea Team\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea ist ein News-Aggregator für GTK+" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Liferea-Webseite" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Erweiterte Suche" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "_Suchordner..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Suchmaschinen-Abonnement..." #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "beliebigen Suchbegriff eingeben" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "Maximale _Anzahl von Ergebnissen:" #: ../glade/liferea.ui.h:84 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. " #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Download / Nachbearbeitung" #: ../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 "Hier ist eine lokale Datei oder URL anzugeben 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/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 tt-rss account settings." msgstr "Hier sind die TinyTinyRSS-Kontodaten anzugeben." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "Server-URL" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Benutzername" #: ../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/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:4 msgid "Feed Update Settings" msgstr "Aktualisieren von Abonnements" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "Aktualisieren aller Abonnements beim Start." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Vorgegebenes Aktualisierungsintervall:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Abonnements" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "Anzeigen von Ordnern" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "_Gelesene Schlagzeilen verbergen" #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Abonnementsymbole (Favicons)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "Alle Symbole _aktualisieren" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Ordner" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Lesen von Schlagzeilen" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "Durch Artikel _blättern mit:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "_Standard Ansicht" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Web Integration" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Lesezeichen mit:" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Einstellungen für internen Browser" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Öffne Links im Liferea-_Fenster." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "Javascript _deaktivieren." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "_Browser Plugins aktivieren" #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "Einstellungen für externen Browser" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Öffne Link in:" #: ../glade/prefs.ui.h:28 msgid "_Manual:" msgstr "_Manuell:" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "(%s für URL)" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Browser:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Browser" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Benachrichtungen" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "_Popup-Fenster mit neuen Schlagzeilen anzeigen." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Ein _Statussymbol im Benachrichtigungsfeld anzeigen." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "A_nzahl neuer Schlagzeilen im Statussymbol anzeigen." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "B_eenden anstatt ins Benachrichtigungsfeld minimieren." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_In Benachrichtungsfeld minimiert starten." #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Aussehen der Werkzeugleiste" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Werkzeugleiste verbergen." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "_Knopfbeschriftungen in Werkzeugleiste:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Oberfläche" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "HTTP Proxy Server" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_Automatisch (GNOME oder Umgebung)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "Kei_n Proxy" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Manuelle Einstellung" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "Proxy-_Port:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "Proxy-_Host:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Proxy-Au_thentifikation benutzen" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Proxy-_Passwort:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Proxy-_Benutzer:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "Herunterladen von Anhängen" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Herunterladen mit" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "Öffnen von Anhängen" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Anhänge" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "Plugins" liferea-1.10.17/po/el.po000066400000000000000000002677271261475620100146770ustar00rootroot00000000000000# 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: 2013-01-25 23:54+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.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Ανάγνωση ροών" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Ανάγνωση ροών Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 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 "No comments yet." msgstr "Δεν υπάρχουν σχόλια." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Σχόλια" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Ενημέρωση..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" 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:32 #, fuzzy msgid "Default Browser" msgstr "Προεπιλεγμένος περιηγητής GNOME" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Απέτυχε η εντολή περιηγητή: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Εκκίνηση: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Σφάλμα εξουσιοδότησης" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Αδύνατη η δημιουργία του καταλόγου μνήμης \"%s\"!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Σήμερα %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "" "Το \"%s\" δεν είναι έγκυρο αρχείο ρυθμίσεων κάποιου τύπου συνδεδεμένων " "πολυμέσων!" #: ../src/enclosure.c:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Σφάλμα κατά τη μετονομασία του %s σε %s\n" #: ../src/export.c:406 ../src/export.c:408 #, fuzzy, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "Σφάλμα XML κατά την ανάγνωση του αρχείου της μνήμης! Αδύνατη η εισαγωγή του " "\"%s\"!" #: ../src/export.c:414 ../src/export.c:416 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Κενό έγγραφο! Το αρχείο OPML \"%s\" δεν θα έπρεπε να είναι κενό για να γίνει " "η εισαγωγή." #: ../src/export.c:437 ../src/export.c:439 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "Το \"%s\" δεν είναι έγκυρο αρχείο OPML! Το Liferea δεν μπορεί να εισάγει " "αυτό το αρχείο!" #: ../src/export.c:458 msgid "Imported feed list" msgstr "Λίστα εισαχθέντων ροών" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Εισαγωγή λίστας ροών" #: ../src/export.c:470 msgid "Import" msgstr "Εισαγωγή" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 #, fuzzy msgid "OPML Files" msgstr "Επιλογή αρχείου OPML" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Σφάλμα κατά την εξαγωγή της λίστας ροών!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Εξήχθη η λίστα ροών!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Εξαγωγή λίστας ροών" #: ../src/export.c:487 msgid "Export" msgstr "Εξαγωγή" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "Ενημερώθηκε η ροή \"%s\"..." #: ../src/feed.c:294 #, 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:404 #, fuzzy msgid "There are no unread items" msgstr "Δεν υπάρχουν μη αναγνωσμένα άρθρα" #: ../src/main.c:164 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" " Η ΚΑΤΑΣΤΑΣΗ μπορεί να είναι `shown' (εμφάνιση), " "`iconified' (εικονίδιο) ή `hidden' (απόκρυψη)" #: ../src/main.c:164 msgid "STATE" msgstr "" #: ../src/main.c:165 #, fuzzy msgid "Show version information and exit" msgstr " --version Εμφάνιση πληροφοριών έκδοσης και έξοδος." #: ../src/main.c:166 #, fuzzy msgid "Add a new subscription" msgstr "Νέα συνδρομή" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 #, fuzzy msgid "Print debugging messages of all types" msgstr "" " --debug- Εμφάνιση των μηνυμάτων της αποσφαλμάτωσης για συγκεκριμένο " "θέμα" #: ../src/main.c:172 #, fuzzy msgid "Print debugging messages for the cache handling" msgstr "" " --debug- Εμφάνιση των μηνυμάτων της αποσφαλμάτωσης για συγκεκριμένο " "θέμα" #: ../src/main.c:173 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "" " --debug- Εμφάνιση των μηνυμάτων της αποσφαλμάτωσης για συγκεκριμένο " "θέμα" #: ../src/main.c:174 #, fuzzy msgid "Print debugging messages of the database handling" msgstr "" " --debug- Εμφάνιση των μηνυμάτων της αποσφαλμάτωσης για συγκεκριμένο " "θέμα" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "" #: ../src/main.c:179 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "" #: ../src/main.c:181 #, fuzzy msgid "Print debugging messages of the feed update processing" msgstr "" " --debug- Εμφάνιση των μηνυμάτων της αποσφαλμάτωσης για συγκεκριμένο " "θέμα" #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "" " --debug- Εμφάνιση των μηνυμάτων της αποσφαλμάτωσης για συγκεκριμένο " "θέμα" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "" #: ../src/main.c:194 ../src/main.c:195 #, fuzzy msgid "Print debugging messages for the given topic" msgstr "" " --debug- Εμφάνιση των μηνυμάτων της αποσφαλμάτωσης για συγκεκριμένο " "θέμα" #: ../src/main.c:202 #, fuzzy msgid "Liferea, the Linux Feed Reader" msgstr "Liferea - Ανάγνωση ροών για Linux" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "" #: ../src/net.c:323 #, fuzzy msgid "Unable to connect to remote host" msgstr "Σφάλμα κατά τη σύνδεση στον απομακρυσμένο υπολογιστή" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "" #: ../src/net.c:325 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:328 msgid "The resource moved permanently to a new location" msgstr "" #. http 4xx client error #: ../src/net.c:331 #, 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:333 #, fuzzy msgid "Payment required" msgstr "Απαιτείται πληρωμή" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Δε βρέθηκαν οι πόροι" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Μη επιτρεπτή μέθοδος" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Μη αποδεκτό" #: ../src/net.c:338 #, fuzzy msgid "Proxy authentication required" msgstr "Απαιτείται πιστοποίηση διαμεσολαβητή" #: ../src/net.c:339 #, fuzzy msgid "Request timed out" msgstr "Λήξη χρονικού ορίου αίτησης" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Δεν υπάρχει πλέον. Παρακαλώ, διακόψτε τη συνδρομή σας!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Μη διαθέσιμη συνδρομή: Ο εξυπηρετητής ζήτησε μη υποστηριζόμενη ανακατεύθυνση!" #: ../src/net.c:349 msgid "Client Error" msgstr "Σφάλμα πελάτη" #: ../src/net.c:351 msgid "Server Error" msgstr "Σφάλμα εξυπηρετητή" #: ../src/net.c:353 #, 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Ήδη ενημερώνεται η συνδρομή \"%s\"!" #: ../src/subscription.c:110 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "Η συνδρομή \"%s\" δε λειτουργεί πλέον. Το Liferea θα πάψει να την ενημερώνει!" #: ../src/subscription.c:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Ενημέρωση του εικονιδίου της ροής \"%s\"" #: ../src/subscription.c:193 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Εμφανίστηκε πρόβλημα κατά την ανάγνωση της συνδρομής. Παρακαλώ ελέγξτε την " "τοποθεσία και τις λεπτομέρειες στην κονσόλα." #: ../src/subscription.c:211 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "" "Η τοποθεσία της ροής \"%s\" άλλαξε οριστικά. Η συνδρομή σας ενημερώθηκε " "καταλλήλως. " #: ../src/subscription.c:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "" "Η συνδρομή \"%s\" δε λειτουργεί πλέον. Το Liferea θα πάψει να την ενημερώνει!" #: ../src/subscription.c:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "Η ροή \"%s\" δεν έχει αλλάξει από την προηγούμενη ενημέρωση" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Ενημέρωση της ροής \"%s\"" #: ../src/update.c:259 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "" "Σφάλμα κατά το άνοιγμα του προσωρινού αρχείου %s που προοριζόταν για το " "φιλτράρισμα!" #: ../src/update.c:282 #, c-format msgid "%s exited with status %d" msgstr "%s: τερματίστηκε με κατάσταση %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Σφάλμα: Αδύνατο το άνοιγμα του pipe \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Σφάλμα: Αδύνατο το άνοιγμα του αρχείου \"%s\"" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Σφάλμα: Δεν υπάρχει το αρχείο \"%s\"" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Νέος φάκελος αναζήτησης" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Εμφανίστηκαν και άλλα σφάλματα, τα οποία παραλείπονται!]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "" msgstr[1] "" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Επιλογή αρχείου" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d νέο)" msgstr[1] " (%d νέα)" #: ../src/ui/liferea_shell.c:330 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d μη αναγνωσμένο%s" msgstr[1] "%d μη αναγνωσμένα%s" #: ../src/ui/liferea_shell.c:716 msgid "Help Topics" msgstr "Θέματα Βοήθειας" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Σύντομος οδηγός" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "Συχνές ερωτήσεις" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Το Liferea συνδέθηκε στο δίκτυο" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Εργασία χωρίς σύνδεση" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Το Liferea αποσυνδέθηκε από το δίκτυο" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Εργασία με σύνδεση" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Συνδρομές" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "_Ενημέρωση όλων" #: ../src/ui/liferea_shell.c:909 #, fuzzy msgid "Updates all subscriptions." msgstr "Νέα συνδρομή" #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Ση_μείωση όλων ως αναγνωσμένων" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Σημείωση ως αναγνωσμένων όλων των άρθρων σε όλες τις συνδρομές." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "Ε_ισαγωγή λίστας ροών..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Εισαγωγή λίστας ροών σε μορφή OPML." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "Εξα_γωγή λίστας ροών..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Εξαγωγή της λίστας ροών σε μορφή OPML." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "Έ_ξοδος" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Ροή" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Αφαίρεση ό_λων των άρθρων" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Αφαίρεση όλων των άρθρων της επιλεγμένης ροής." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "Άρ_θρο" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "_Επόμενο μη αναγνωσμένο" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "_Επόμενο μη αναγνωσμένο" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Προβολή" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "_Αύξηση μεγέθους γραμματοσειράς" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Αυξάνει το μέγεθος της γραμματοσειράς των άρθρων." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "_Μείωση μεγέθους γραμματοσειράς" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Μειώνει το μέγεθος της γραμματοσειράς των άρθρων." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "_Εργαλεία" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "Παρακολούθηση _ενημερώσεων" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "Εμφανίζει λίστα με τις ροές των οποίων εκκρεμεί η ενημέρωση" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Προτιμήσεις" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Επεξεργασία προτιμήσεων." #: ../src/ui/liferea_shell.c:944 #, fuzzy msgid "S_earch" msgstr "_Αναζήτηση" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Αναζήτηση στις ροές" #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Εμφάνιση του διαλόγου αναζήτησης." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Βοήθεια" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Περιεχόμενα" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Προβολή της βοήθειας της εφαρμογής." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Σύντομος οδηγός" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Προβολή λίστας με όλες τις συντομεύσεις του Liferea." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "Συ_χνές ερωτήσεις" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Προβολή των συχνών ερωτήσεων της εφαρμογής." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "Πε_ρί" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Προβολή του διαλόγου πληροφοριών της εφαρμογής." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "_Κανονική προβολή" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "" "Προβολή στη μορφή που χρησιμοποιούν συνήθως οι εφαρμογές αλληλογραφίας." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "_Διευρυμένη προβολή" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Προβολή σε τρία κάθετα πλαίσια." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "_Συνδυασμένη προβολή" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Προβολή σε δύο πλαίσια." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "" #: ../src/ui/liferea_shell.c:965 #, fuzzy msgid "Hide feeds with no unread items." msgstr "Δεν υπάρχουν μη αναγνωσμένα άρθρα" #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "_Νέα συνδρομή" #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Προσθήκη συνδρομής στη λίστα ροών." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Νέος _φάκελος..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Προσθήκη φακέλου στη λίστα ροών." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Νέος φάκελος ανα_ζήτησης..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Προσθήκη νέου φακέλου αναζήτησης στη λίστα ροών." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Νέα _πηγή..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Προσθήκη νέας πηγής λίστας ροής." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "Νέος φάκελος _αποκομμάτων..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Προσθήκη νέου φακέλου αποκομμάτων." #: ../src/ui/liferea_shell.c:979 #, fuzzy msgid "_Mark Items Read" msgstr "_Σημείωση ως αναγνωσμένου" #: ../src/ui/liferea_shell.c:979 #, fuzzy msgid "" "Marks all items of the selected feed list node / in the item list as read." msgstr "" "Σημειώνονται ως αναγνωσμένα όλα τα άρθρα είτε της επιλεγμένης συνδρομής είτε " "του συνόλου των συνδρομών στον επιλεγμένο φάκελο." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Ενημέρωση" #: ../src/ui/liferea_shell.c:981 msgid "" "Updates the selected subscription or all subscriptions of the selected " "folder." msgstr "" "Ενημέρωση είτε της επιλεγμένης συνδρομής είτε όλων των συνδρομών στον " "επιλεγμένο φάκελο." #: ../src/ui/liferea_shell.c:986 #, fuzzy msgid "_Properties" msgstr "_Ιδιότητες..." #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Εμφάνιση του διαλόγου ιδιοτήτων της επιλεγμένης συνδρομής." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "Α_φαίρεση" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Αφαίρεση της επιλεγμένης συνδρομής." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Ε_ναλλαγή μεταξύ αναγνωσμένου και μη" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Αν το επιλεγμένο άρθρο θεωρείται αναγνωσμένο ή όχι." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Εναλλαγή _σημαίας άρθρου" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Αν υπάρχει ή όχι σημαία στο επιλεγμένο άρθρο." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "Α_φαίρεση" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Αφαιρεί το επιλεγμένο άρθρο." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "Ανοίγει το σύνδεσμο στον επιλεγμένο περιηγητή." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "Άνοιγμα στον _περιηγητή" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Ανοίγει το σύνδεσμο στον επιλεγμένο περιηγητή." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Ρυθμίσεις εξωτερικού περιηγητή" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Ανοίγει το σύνδεσμο στον επιλεγμένο περιηγητή." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "Ε_ργασία χωρίς σύνδεση" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Αυτή η επιλογή απενεργοποιεί την ενημέρωση των συνδρομών." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Ανάγνωση ροών για Linux" #: ../src/ui/liferea_shell.c:1341 #, 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, ένα εργαλείο συγκέντρωσης ειδήσεων από " "ηλεκτρονικές ροές.

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

" #: ../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:205 #, fuzzy msgid "All Files" msgstr "_Τοπικό αρχείο" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Διαγραφή..." #: ../src/ui/feed_list_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Σίγουρα θέλετε να διαγράψετε το \"%s\" και τα περιεχόμενά του;" #: ../src/ui/feed_list_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Σίγουρα θέλετε να διαγράψετε το %s?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Επιβεβαίωση της διαγραφής" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Το Liferea λειτουργεί χωρίς σύνδεση. Δεν είναι δυνατή η ενημέρωση." #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "/Άνοιγμα συνδεσμού σε νέα _καρτέλα" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "/Ανοιγμα συνδέσμου στον _περιηγητή" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "/Ανοιγμα συνδέσμου στον _περιηγητή" #: ../src/ui/liferea_htmlview.c:632 #, fuzzy, c-format msgid "_Bookmark Link at %s" msgstr "/_Δημιουργία σελιδοδείκτη στο %s" #: ../src/ui/liferea_htmlview.c:636 #, fuzzy msgid "_Copy Link Location" msgstr "/_Αντιγραφή τοποθεσίας συνδέσμου" #: ../src/ui/liferea_htmlview.c:639 #, fuzzy msgid "_Copy Image Location" msgstr "/_Αντιγραφή τοποθεσίας συνδέσμου" #: ../src/ui/liferea_htmlview.c:641 #, fuzzy msgid "S_ave Link As" msgstr "/_Αποθήκευση ως..." #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "" #: ../src/ui/liferea_htmlview.c:646 #, fuzzy msgid "_Subscribe..." msgstr "/_Συνδρομή..." #: ../src/ui/item_list_view.c:347 #, fuzzy msgid "*** No title ***" msgstr "*** Χωρίς τίτλο ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Ημερομηνία" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Τίτλος" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Δεν επιλέχθηκε άρθρο" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Αυτό το άρθρο δεν παραπέμπει σε σύνδεσμο!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Πρέπει πρώτα να επιλέξετε ροή για να διαγράψετε τα άρθρα της!" #: ../src/ui/popup_menu.c:142 #, fuzzy msgid "Copy to News Bin" msgstr "/Αντιγραφή στο φάκελο αποκομμάτων/%s" #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "/_Δημιουργία σελιδοδείκτη στο %s" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "/_Αντιγραφή τοποθεσίας συνδέσμου" #: ../src/ui/popup_menu.c:166 #, fuzzy msgid "R_emove Item" msgstr "/Α_φαίρεση άρθρου" #: ../src/ui/popup_menu.c:179 #, fuzzy msgid "Open Enclosure..." msgstr "/Άνοιγμα συνδεδεμένου πολυμέσου..." #: ../src/ui/popup_menu.c:180 #, fuzzy msgid "Save As..." msgstr "/_Αποθήκευση ως..." #: ../src/ui/popup_menu.c:181 #, fuzzy msgid "Copy Link Location" msgstr "/_Αντιγραφή τοποθεσίας συνδέσμου" #: ../src/ui/popup_menu.c:195 #, fuzzy msgid "_Update All" msgstr "/_Ενημέρωση όλων" #: ../src/ui/popup_menu.c:200 #, fuzzy msgid "_Show Liferea" msgstr "Liferea" #: ../src/ui/popup_menu.c:298 #, fuzzy msgid "_Update Folder" msgstr "/_Ενημέρωση φακέλου" #: ../src/ui/popup_menu.c:300 #, fuzzy msgid "_Mark All As Read" msgstr "/Ση_μείωση όλων ως αναγνωσμένων" #: ../src/ui/popup_menu.c:310 #, fuzzy msgid "_New" msgstr "/_Νέο" #: ../src/ui/popup_menu.c:313 #, fuzzy msgid "New _Subscription..." msgstr "_Νέα συνδρομή" #: ../src/ui/popup_menu.c:320 #, fuzzy msgid "New S_ource..." msgstr "Νέα _πηγή..." #: ../src/ui/popup_menu.c:329 #, fuzzy msgid "Sort Feeds" msgstr "Εισαγωγή λίστας ροών" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "Προεπιλογή GNOME" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Κείμενο κάτω από τα εικονίδια" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Κείμενο δίπλα στα εικονίδια" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Μόνο εικονίδια" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Μόνο κείμενο" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "λεπτά" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "ώρες" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "ημέρες" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Διάστημα" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " + διάστημα" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " + διάστημα" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "_Κανονική προβολή" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "_Διευρυμένη προβολή" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "_Συνδυασμένη προβολή" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Προσαρμοσμένος" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Προεπιλογή περιηγητή" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Υπάρχον παράθυρο" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Νέο παράθυρο" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Νέα καρτέλα" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "" #: ../src/ui/preferences_dialog.c:685 #, fuzzy msgid "Terminate instead of minimizing to the messaging menu" msgstr "Έ_ξοδος αντί για ελαχιστοποίηση στην περιοχή ειδοποιήσεων." #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Τύπος" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Πρόγραμμα" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Αυτή η ροή δεν προτείνει συγκεκριμένη συχνότητα ενημέρωσης." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d νέο άρθρο" msgstr[1] "%d νέα άρθρα" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Κανένα νέο άρθρο" #: ../src/ui/ui_tray.c:228 #, c-format msgid "" "%s\n" "%d unread item" msgid_plural "" "%s\n" "%d unread items" msgstr[0] "" "%s\n" "%d μη αναγνωσμένο άρθρο" msgstr[1] "" "%s\n" "%d μη αναγνωσμένα άρθρα" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Κανένα μη αναγνωσμένο άρθρο" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Μη έγκυρη ροή Atom: άγνωστος δημιουργός" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Νέα συνδρομή" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "Απέτυχε η είσοδος στο Google Reader!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 #, 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 " "(μόνο για ανάγνωση)." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:326 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 της " "πηγής." #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Δε βρέθηκαν πηγές με λίστες ροών!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Τύπος πηγής" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source.c:363 #, 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 " "(μόνο για ανάγνωση)." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Η ροή δεν υπάρχει πλέον!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Το άρθρο δεν έχει τίτλο" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Επίσκεψη" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Άνοιγμα ροής" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Σημείωση όλων ως αναγνωσμένων" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "" msgstr[1] "" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Ενημέρωση ροής" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Εμφάνιση λεπτομερειών" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Πιστοποίηση" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Συνθηματικό:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "Όνομα _χρήστη:" #: ../glade/auth.ui.h:6 msgid "" "Note: The username and password will be saved to your Liferea feedlist " "file without using encryption." msgstr "" "Σημείωση: Το όνομα χρήστη και το συνθηματικό θα αποθηκευτούν στο αρχείο " "με τη λίστα ροών του Liferea χωρίς κρυπτογράφηση." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Συνθηματικό" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "Όνομα _χρήστη (email)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "κανονική προβολή" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "διευρυμένη προβολή" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Προβολή τίτλων" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "συνδυασμένη προβολή" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Τίτλοι" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Κουμπί εργασίας με σύνδεση/χωρίς σύνδεση" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Ιδιότητες συνδρομής" #: ../glade/liferea.ui.h:9 #, fuzzy msgid "Feed Name" msgstr "Όν_ομα ροής:" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "Όν_ομα ροής:" #: ../glade/liferea.ui.h:11 #, fuzzy msgid "Update Interval" msgstr "Παρακολούθηση ενημερώσεων" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "Χρήση _γενικής προεπιλεγμένης συχνότητας ενημέρωσης." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_Συχνότητα ενημέρωσης μόνο για αυτή τη ροή:" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Μη αυτόματη ενημέρωση της ροής." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Ο πάροχος της ροής προτείνει συχνότητα ενημέρωσης %d λεπτών." #: ../glade/liferea.ui.h:18 msgid "General" msgstr "Γενικά" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Πηγή ροής" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Τύπος πηγής" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Πηγή:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_Ιστοσελίδα" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "Ε_ντολή" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Τοπικό αρχείο" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Επιλογή αρχείου..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Χρήση _φίλτρου μετατροπής" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Μετατροπή με _χρήση:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "Προεπιλεγμένες ρυθμίσεις _μνήμης" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "Α_πενεργοποίηση μνήμης" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "Απε_ριόριστη μνήμη" #: ../glade/liferea.ui.h:34 #, fuzzy msgid "_Number of items to save:" msgstr "Προεπιλεγμένος αρι_θμός άρθρων προς αποθήκευση ανά ροή:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Αρχείο" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Χρήση _πιστοποίησης HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "Να _μη χρησιμοποιείται διαμεσολαβητής για τη λήψη" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Λήψη" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "Αυτόματη _λήψη όλων των συνδεδεμένων πολυμέσων για αυτή τη ροή." #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Αυτόματη _φόρτωση του συνδέσμου στον επιλεγμένο περιηγητή, όποτε επιλέγεται " "ένα άρθρο." #: ../glade/liferea.ui.h:43 #, fuzzy msgid "Ignore _comment feeds for this subscription." msgstr "Εμφάνιση του διαλόγου ιδιοτήτων της επιλεγμένης συνδρομής." #: ../glade/liferea.ui.h:44 #, fuzzy msgid "_Enforce popup notification for this subscription." msgstr "Εμφάνιση του διαλόγου ιδιοτήτων της επιλεγμένης συνδρομής." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "" #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "" #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Για προχωρημένους" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Νέος φάκελος" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "Όνομα _φακέλου:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Μετονομασία" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Νέο όνομα:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Αναζήτηση στις ιδιότητες του φακέλου" #: ../glade/liferea.ui.h:53 #, fuzzy msgid "Search _Name:" msgstr "Όν_ομα ροής:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "/Άνοιγμα συνδεδεμένου πολυμέσου..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "Λήψη συνδεδεμένου πολυμέσου τύπου:" #: ../glade/liferea.ui.h:59 #, 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Περιήγηση" #: ../glade/liferea.ui.h:61 #, fuzzy msgid "_Do this automatically for enclosures like this from now on." msgstr "" "Από εδώ και στο εξής να εφαρμόζεται αυτομάτως για αρχεία του ίδιου τύπου." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Αναζήτηση στις ροές" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Αναζήτηση για:" #: ../glade/liferea.ui.h:64 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Εισάγετε φράση προς αναζήτηση. Το Liferea θα την αναζητήσει τόσο στους " "τίτλους όσο και στο σώμα των άρθρων." #: ../glade/liferea.ui.h:65 #, fuzzy msgid "_Advanced..." msgstr "Για προχωρημένους..." #: ../glade/liferea.ui.h:66 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Αναζήτηση της ζητούμενης φράσης σε όλες τις ροές. Τα αποτελέσματα της " "αναζήτησης εμφανίζονται στο πλαίσιο της λίστας τίτλων." #: ../glade/liferea.ui.h:67 msgid "Update Monitor" msgstr "Παρακολούθηση ενημερώσεων" #: ../glade/liferea.ui.h:68 #, fuzzy msgid "Pending Requests" msgstr "Εκκρεμούν" #: ../glade/liferea.ui.h:69 #, fuzzy msgid "Downloading Now" msgstr "Λαμβάνονται τώρα" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Ακύρωση ό_λων" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Δημιουργία φακέλου αποκομμάτων" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "Όνομα _φακέλου αποκομμάτων:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Περί" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Το Liferea είναι μία εφαρμογή συγκέντρωσης ροών για GTK+" #: ../glade/liferea.ui.h:78 #, fuzzy msgid "Liferea Homepage" msgstr "Ανάγνωση ροών Liferea" #: ../glade/liferea.ui.h:79 #, fuzzy msgid "Advanced Search" msgstr "Για προχωρημένους" #: ../glade/liferea.ui.h:80 #, fuzzy msgid "_Search Folder..." msgstr "Αναζήτηση στο φάκελο" #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Δημιουργία ροής από μηχανή αναζήτησης" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "εισάγετε μία οποιαδήποτε φράση προς αναζήτηση" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "Μέγιστος αρι_θμός αποτελεσμάτων:" #: ../glade/liferea.ui.h:84 #, 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 θα δημιουργήσει μια συνδρομή που θα συγκεντρώνει " "αποτελέσματα για τις ζητούμενες λέξεις από την επιλεγμένη μηχανή αναζήτησης. " "Η ροή αυτή μπορεί να παραμείνει μόνιμα και να ενημερώνεται όπως και κάθε " "άλλη συνδρομή." #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" 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/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 tt-rss 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/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/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:4 #, fuzzy msgid "Feed Update Settings" msgstr "Ενημέρωση ροής" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Νέα συνδρομή" #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Προεπιλεγμένη _συχνότητα ενημέρωσης ροών" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Ροές" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "Ρυθμίσεις εμφάνισης φακέλων" #: ../glade/prefs.ui.h:11 msgid "_Show the items of all child feeds when a folder is selected." msgstr "" "Εμ_φάνιση των άρθρων όλων των ροών ενός φακέλου, όποτε επιλέγεται ο φάκελος." #: ../glade/prefs.ui.h:12 msgid "_Hide read items." msgstr "Από_κρυψη αναγνωσμένων." #: ../glade/prefs.ui.h:13 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Εικονίδια ροών (Favicons)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Ενημέρωση όλων των εικονιδίων τώρα" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Φάκελοι" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "Reading Headlines" msgstr "μη αναγνωσμένοι τίτλοι" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "Μετά_βαση από άρθρο σε άρθρο πατώντας:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "Web Integration" msgstr "Προσανατολισμός" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Δημοσίευση σελιδοδεικτών στο" #: ../glade/prefs.ui.h:22 #, fuzzy msgid "Internal Browser Settings" msgstr "Ρυθμίσεις εσωτερικού περιηγητή" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Ά_νοιγμα συνδέσμων στο παράθυρο του Liferea." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Απενεργοποίηση Javascript." #: ../glade/prefs.ui.h:25 #, fuzzy msgid "_Enable browser plugins." msgstr "Ρυθμίσεις εξωτερικού περιηγητή" #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "Ρυθμίσεις εξωτερικού περιηγητή" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "Άνοι_γμα συνδέσμου στο:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "Προσαρμοσμένος" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Περιηγητής:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Περιηγητής" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Notification Settings" msgstr "Ρυθμίσεις ειδοποιήσεων" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Εμφάνιση α_ναδυόμενου παραθύρου με τους νέους τίτλους." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Εμφάνιση ε_ικονιδίου στην περιοχή ειδοποιήσεων." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "" "Εμφάνιση του _αριθμού των νέων άρθρων πάνω στο εικονίδιο της περιοχής " "ειδοποιήσεων" #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "Έ_ξοδος αντί για ελαχιστοποίηση στην περιοχή ειδοποιήσεων." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "" #: ../glade/prefs.ui.h:39 #, fuzzy msgid "Toolbar Settings" msgstr "Ε_τικέτες κουμπιών εργαλειοθήκης: " #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "" #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Ε_τικέτες κουμπιών εργαλειοθήκης: " #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Γραφικό περιβάλλον" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "Αυτόματος _εντοπισμός (GNOME ή περιβάλλον)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_Χωρίς διαμεσολαβητή" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Χειροκίνητη ρύθμιση:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "_Θύρα διαμεσολαβητή:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "_Διεύθυνση διαμεσολαβητή:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Χρήση πιστοποίησης _διαμεσολαβητή" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "_Συνθηματικό διαμεσολαβητή:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Όνομα _χρήστη:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Διαμεσολαβητής" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "Λήψη συνδεδεμένων πολυμέσων..." #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Λήψη μέσω" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "/Άνοιγμα συνδεδεμένου πολυμέσου..." #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Συνδεδεμένα πολυμέσα" #: ../glade/prefs.ui.h:57 msgid "Plugins" 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 "Synchronized with Nearby Hosts" #~ 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 "_Delete" #~ 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://liferea.sf.net" #~ msgstr "http://liferea.sf.net" #~ 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.10.17/po/es.po000066400000000000000000002723271261475620100146760ustar00rootroot00000000000000# 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 # José María Mateos 2005 # Jorge Acosta 2006 # Rodrigo Gallardo 2007 # # 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 guia de estilo para usarla el que varios periodicos 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 periodico). # # Tratamos al usuario de Usted. # Las ordenes 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: 2013-01-25 23:54+0100\n" "PO-Revision-Date: 2010-01-21 14:40-0800\n" "Last-Translator: Rodrigo Gallardo \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" #: ../liferea.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Lector de noticias" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea, lector de noticias" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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 "" "Este canal fue abandonado y ya no está disponible. Liferea no la actualizará " "pero puede seguir accediendo a los artículos 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 "" #: ../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 "Origen:" #: ../xslt/feed.xml.in.h:11 msgid "Publisher" msgstr "Editorial" #: ../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 "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/liferea.ui.h:29 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 "No comments yet." msgstr "Aún no hay comentarios." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Comentarios" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Actualizando..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Actualizar" #: ../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 de búsqueda:" #: ../src/browser.c:32 #, fuzzy msgid "Default Browser" msgstr "Navegador de GNOME" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Fallo al iniciar el navegador: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Iniciando: «%s»" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Autenticación erronea" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "No se ha podido crear el directorio de almacenamiento \"%s\"!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Hoy %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:197 #, 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:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Error al renombrar %s a %s\n" #: ../src/export.c:406 ../src/export.c:408 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "XML erroneo en el documento OPML «%s». No fue posible importarlo." #: ../src/export.c:414 ../src/export.c:416 #, 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:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Lista de canales importados" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Importar lista de canales" #: ../src/export.c:470 msgid "Import" msgstr "Importar" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 #, fuzzy msgid "OPML Files" msgstr "Elija el archivo OPML" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Ocurrió un error mientras se exportaba la lista de canales." #: ../src/export.c:480 msgid "Feed List exported!" msgstr "La lista de canales se ha exportado con éxito." #: ../src/export.c:487 msgid "Export Feed List" msgstr "Exportar lista de canales" #: ../src/export.c:487 msgid "Export" msgstr "Exportar" #: ../src/feed.c:255 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. Por favor, compruebe que la URL " "apunta a un documento con alguno de los formatos soportados.

Salida del " "procesador de XML:
" #: ../src/feed.c:284 #, c-format msgid "\"%s\" updated..." msgstr "«%s» actualizada..." #: ../src/feed.c:294 #, 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 "" "La URL que dió a Liferea apunta a una página web, y el mecanismo de " "autodescubrimiento no encontó ningun canal de noticias en ella. Tal vez este " "sitio no soporta el detectarlos automáticamente." #: ../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 invá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:404 #, fuzzy msgid "There are no unread items" msgstr "No hay artículos sin leer " #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" "Iniciar Liferea con la ventana principal en el ESTADO, que puede ser «shown» " "para mostrarla, «iconified» para dejarla en el área de notificación, o " "«hidden» para ocultarla" #: ../src/main.c:164 msgid "STATE" msgstr "ESTADO" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Muestra la versión de Liferea y finaliza" #: ../src/main.c:166 #, fuzzy msgid "Add a new subscription" msgstr "Nuevo canal" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Mostrar todos los mensajes de depuración" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "" "Mostrar mensajes de depuración acerca del manejo del área de almacenamiento" #: ../src/main.c:173 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "Mostrar mensajes de depuración acerca de la configuración" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Mostrar mensajes de depuración acerca de la base de datos" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "" "Mostrar mensajes de depuración acerca de todas las funciones de la interfaz " "gráfica" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Mostrar mensajes de depuración acerca de los accesos a la red" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "" "Mostrar mensajes de depuración acerca de todas las funciones de procesamiento" #: ../src/main.c:179 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/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "Mostrar mensajes de depuración al entrar y salir de funciones" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "" "Mostrar mensajes de depuración acerca del proceso de actualización de canales" #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "" "Mostrar mensajes de depuración acerca del manejo del área de almacenamiento" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "Mostrar información extra en los mensajes de depuración" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "Mostrar mensajes de depuración acerca del tema especificado" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, lector de noticias para Linux" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "Para más información, visite http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "La actualización fue cancelada" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "No fue posible resolver el nombre del servidor remoto" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "No fue posible resolver el nombre del servidor proxy" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "No fue posible conectar con el servidor" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "No fue posible conectar con el proxy" #: ../src/net.c:325 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:328 msgid "The resource moved permanently to a new location" msgstr "El elemento solicitado cambió permanentemente de ubicación" #. http 4xx client error #: ../src/net.c:331 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. Por favor, especifique el nombre " "de usuario y la contraseña en el cuadro de propiedades del canal." #: ../src/net.c:333 msgid "Payment required" msgstr "Es necesario pagar" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "No tiene permiso para acceder a este elemento" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Recurso no encontrado" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Método no permitido" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "No aceptable" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Necesita identificarse ante el proxy" #: ../src/net.c:339 msgid "Request timed out" msgstr "Expiró el tiempo de respuesta" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Esta fuente ya no existe. Elimínela, por favor." #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Ocurrió un error interno durante la actualización" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Canal no disponible: El servidor solicitó una forma de redirección " "desconocida." #: ../src/net.c:349 msgid "Client Error" msgstr "Error en el cliente" #: ../src/net.c:351 msgid "Server Error" msgstr "Error del servidor" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "El canal «%s» ya se está actualizando" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Actualizando el icono de «%s»" #: ../src/subscription.c:193 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "Se encontró un problema al leer el canal. Por favor, compruebe la URL y la " "salida en la consola." #: ../src/subscription.c:211 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "La URL de «%s» ha cambiado permanentemente y ha sido actualizada" #: ../src/subscription.c:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "«%s» fue abandonado. Liferea ya no la actualizará." #: ../src/subscription.c:222 #, 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:272 #, c-format msgid "Updating \"%s\"" msgstr "Actualizando: «%s»" #: ../src/update.c:259 #, 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:282 #, c-format msgid "%s exited with status %d" msgstr "%s terminó con estado %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Error: No se pudo abrir el archivo «%s»" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Error: No existe el archivo «%s»" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Nueva carpeta virtual" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Hay más errores. La salida se ha truncado]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d %s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d adjunto" msgstr[1] "%d adjuntos" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Elija un archivo" #: ../src/ui/enclosure_list_view.c:438 #, fuzzy, c-format msgid "File Extension .%s" msgstr "Archivo con 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d nuevo)" msgstr[1] " (%d nuevos)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Temas de ayuda" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Manual de referencia" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "Preguntas frecuentes" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea está conectado" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Trabajar sin conexión" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea está sin conexión" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Trabajar con conexión" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Suscripciones" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "_Actualizar todas" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Actualiza todas las suscripciones" #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Marcar _todo como leído" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Marca como leídos todos los artículos de todas las suscripciones." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Importar lista de canales..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Importa una lista de canales en formato OPML." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "E_xportar lista de canales..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Exporta la lista de canales en formato OPML." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Salir" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Canal" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "E_liminar los artículos" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Elimina todos los artículos del canal seleccionado." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "_Artículo" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "Siguiente artículo _nuevo" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "Siguiente artículo _nuevo" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Ver" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "_Aumentar el tamaño del texto" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Aumenta el tamaño del texto en la vista del artículo." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "_Reducir el tamaño del texto" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Reduce el tamaño del texto en la vista del artículo." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "_Herramientas" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "_Monitor de actualizaciones" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "Muestra la lista de todos los canales con actualizaciones pendientes" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Preferencias" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Cambiar preferencias." #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "_Buscar" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Buscar en todos los canales..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Muestra la ventana de búsqueda." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "A_yuda" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Contenidos" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Muestra la ayuda del programa." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Referencia rápida" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Muestra todas las combinaciones de teclas de Liferea." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Preguntas frecuentes sobre el programa." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_Acerca de..." #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Muestra información acerca del programa." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "Vista _normal" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Visualiza en modo «cliente de correo»." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "Vista a_mplia" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Visualiza usando tres paneles verticales." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "Vista _combinada" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Visualiza usando dos paneles." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "Lista de canales _reducida" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Oculta los canales sin articulos nuevos" #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "_Nueva suscripción..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Añade una suscripción a la lista de canales." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Nueva _carpeta..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Añade una carpeta a la lista de canales." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Nueva carpeta de _búsqueda..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Añade una carpeta de búsqueda a la lista de canales." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Nueva _fuente..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Agrega una nueva fuente de listas de canales." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "Nueva ban_deja..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Agrega una nueva bandeja de noticias." #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "_Marcar como leído" #: ../src/ui/liferea_shell.c:979 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." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Actualizar" #: ../src/ui/liferea_shell.c:981 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." #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "_Propiedades" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Abre el cuadro de propiedades del canal seleccionado." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "_Eliminar" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Elimina el canal seleccionado." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "_Cambiar entre leído y no leído" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Pasa el artículo actual de leído a no leído o viceversa." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Colocar o quitar _marca" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Crea o elimina una marca en el artículo seleccionado." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "_Eliminar" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Elimina el artículo seleccionado." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "Abre el enlace del artículo en el navegador." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "_Abrir en el navegador" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Abre el enlace del artículo en el navegador." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Opciones del navegador externo" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Abre el enlace del artículo en el navegador." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "Trabajar sin conexión" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Esta opción permite deshabilitar la actualización de suscripciones." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea, lector de noticias" #: ../src/ui/liferea_shell.c:1341 #, 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 "" "

Bienvenido a Liferea, un lector de noticias en línea para el " "escritorio.

El panel izquierdo contiene la lista de canales a los que " "está suscrito. Para añadir un canal elija Suscripciones -> Nueva " "suscripción. Para ver los titulares de un canal, elíjalo en la lista. Los " "titulares se mostrarán en el panel derecho.

" #: ../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:205 #, fuzzy msgid "All Files" msgstr "Archivo _local" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Borrando entrada" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "¿Realmente desea eliminar «%s»?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Confirmar eliminación" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "" "Liferea está trabajando sin conexión. No se pueden actualizar las fuentes" #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "Abrir el enlace en una pes_taña nueva" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "Abrir el en_lace en el navegador" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "Abrir el en_lace en el navegador" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "Crear un marcador del enlace en %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_Copiar la dirección del enlace" #: ../src/ui/liferea_htmlview.c:639 #, fuzzy msgid "_Copy Image Location" msgstr "_Copiar la dirección del enlace" #: ../src/ui/liferea_htmlview.c:641 #, fuzzy msgid "S_ave Link As" msgstr "Guardar como..." #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "_Suscribirse..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Sin título ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Fecha" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Titular" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "No se ha seleccionado ningún artículo" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Este artículo no tiene un enlace asignado" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Debe elegir un canal para eliminar sus artículos" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "Copiar a una bandeja" #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "Crear un marcador del enlace en %s" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "_Copiar la dirección del enlace" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "_Eliminar artículo" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Abrir adjunto..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Guardar como..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "_Copiar la dirección del enlace" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "_Actualizar todo" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "_Mostrar Liferea" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "_Actualizar carpeta" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "_Marcar todos como leídos" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "_Nueva" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "_Nueva suscripción..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "Nueva _fuente..." #: ../src/ui/popup_menu.c:329 #, fuzzy msgid "Sort Feeds" msgstr "Importar lista de canales" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "Navegador de GNOME" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Texto bajo los íconos" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Texto junto a los íconos" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Solo los íconos" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Sólo el texto" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minutos" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "horas" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "días" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Espacio" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Espacio" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Espacio" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "Vista _normal" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "Vista a_mplia" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "Vista _combinada" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Navegador predeterminado" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Ventana existente" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Nueva ventana" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Nueva pestaña" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "" #: ../src/ui/preferences_dialog.c:685 #, fuzzy msgid "Terminate instead of minimizing to the messaging menu" msgstr "T_erminar, en lugar de minimizar al área de notificación." #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Tipo" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Programa" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Este canal no especifica un intervalo de actualización recomendado." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "Sin título" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d artículo nuevo" msgstr[1] "%d artículos nuevos" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "No hay artículos nuevos" #: ../src/ui/ui_tray.c:228 #, c-format msgid "" "%s\n" "%d unread item" msgid_plural "" "%s\n" "%d unread items" msgstr[0] "" "%s\n" "%d artículo sin leer" msgstr[1] "" "%s\n" "%d artículos sin leer" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "No hay artículos sin leer" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Canal Atom inválido: autor desconocido" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nuevo canal" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "Falló el acceso a Google Reader" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 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 lista de canales de su cuenta de Google Reader. Liferea " "presentará su suscripción a Google Reader como un subárbol en la lista de " "canales y la mantendrá sincronizada." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planeta, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:326 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 "" "Incluya «blogrolls» o «Planetas» en su lista de canales. Liferea añadirá o " "eliminará canales, de acuerdo a los cambios en el documento OPML" #: ../src/fl_sources/opml_source.c:387 msgid "Choose OPML File" msgstr "Elija el archivo OPML" #: ../src/fl_sources/opml_source.h:28 msgid "New OPML Subscription" msgstr "Nueva suscripción OPML" #: ../src/fl_sources/node_source.c:238 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:269 msgid "Source Type" msgstr "Tipo de fuente" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source.c:363 #, 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 lista de canales de su cuenta de Google Reader. Liferea " "presentará su suscripción a Google Reader como un subárbol en la lista de " "canales y la mantendrá sincronizada." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "¡Este canal ya no existe!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Este artículo no tiene titular" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Visitar" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Ver el canal" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Marcar todo como leído" #: ../src/notification/libnotify.c:254 #, fuzzy, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "%d hijos, con %d artículo(s) \n" msgstr[1] "%d hijos, con %d artículo(s) \n" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Actualización" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Detalles" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autenticación" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "Contraseña:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_Nombre de usuario:" #: ../glade/auth.ui.h:6 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." #: ../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 "Por favor escriba los datos de su cuenta de Google Reader." #: ../glade/google_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "Contraseña" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "Nombre de _usuario (email)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "vista normal" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "vista amplia" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Ver titulares" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "vista combinada" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Titulares" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Botón de conectar/desconectar" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Propiedades de la fuente" #: ../glade/liferea.ui.h:9 #, fuzzy msgid "Feed Name" msgstr "_Nombre del canal:" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "_Nombre del canal:" #: ../glade/liferea.ui.h:11 #, fuzzy msgid "Update Interval" msgstr "Monitor de actualizaciones" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Usar el intervalo establecido globalmente." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "Establecer un intervalo especí_fico de" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "No actualizar automáticamente este canal" #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "General" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Fuente" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Modo de acceso:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "Origen:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Programa" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "Archivo _local" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Explorar..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Usar _filtro de conversión" #: ../glade/liferea.ui.h:27 ../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 directorios en " "formatos que no estén soportados. Por favor, lea la documentación para mayor " "información." #: ../glade/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Convertir _usando:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "Usar la configuración _general" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Desactivar almacenamiento" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "Almacenamiento _ilimitado" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "_Número de artículos a almacenar:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Almacenar" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Usar _autenticación HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "No usar «proxy» para _descargas" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Descargar" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "Descargar _automáticamente todos los adjuntos de este canal." #: ../glade/liferea.ui.h:42 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/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorar los canales de comentarios de esta suscripción." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "Siempre generar notificaciones para esta suscripción." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "Nunca generar notificaciones para esta suscripción." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Marcar artículos descargados como leídos" #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Avanzado" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Nueva carpeta" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "Nombre de la carpeta:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Renombrar" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Nuevo nombre:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Propiedades de la carpeta de búsqueda" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "Título de la búsqueda:" #: ../glade/liferea.ui.h:54 #, fuzzy msgid "Find Items that meet the following criteria" msgstr "Encontrar artículos con los criterios siguientes" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "Se cumple cualquier regla" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "Se cumplen todas las reglas" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "Abrir adjunto..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "Descargando un adjunto de tipo:" #: ../glade/liferea.ui.h:59 #, 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é debe hacer Liferea con este adjunto? Escriba debajo la orden que desea " "ejecutar. El nombre del archivo descargado se usará como parámetro para la " "orden:" #: ../glade/liferea.ui.h:60 msgid "_Browse" msgstr "Navegar" #: ../glade/liferea.ui.h:61 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/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Buscar en todos los canales" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "Bu_scar:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "Avanzado..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Monitor de actualizaciones" #: ../glade/liferea.ui.h:68 #, fuzzy msgid "Pending Requests" msgstr "Transacciones pendientes" #: ../glade/liferea.ui.h:69 #, fuzzy msgid "Downloading Now" msgstr "Descargando" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "C_ancelar todo" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Crear una bandeja de noticias" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Nombre de la bandeja" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Acerca de..." #: ../glade/liferea.ui.h:74 #, fuzzy msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Copyright (c) 2003-2009\n" "El equipo de Liferea\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea es un lector de noticias para GTK+" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Sitio web de Liferea" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Búsqueda avanzada" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "Búsqueda..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Crear un canal de resultados de búsqueda" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "escriba una cadena de búsqueda" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "Cantidad máxima de resultados:" #: ../glade/liferea.ui.h:84 #, 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 generará un canal que se podrá usar para consultar los " "resultados de buscar la cadena especificada. Puede mantener este canal de " "forma permanente y actualizarlo como cualquier otro." #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Descarga / Postprocesamiento" #: ../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 "Elija la fuente que quiere añadir..." #: ../glade/opml_source.ui.h:1 msgid "Add OPML/Planet" msgstr "Añadir 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, indique un archivo local o una 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/ttrss_source.ui.h:1 #, fuzzy msgid "Add Tiny Tiny RSS Account" msgstr "Añadir cuenta de Bloglines" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your tt-rss account settings." msgstr "Por favor escriba los datos de su cuenta de Bloglines." #: ../glade/ttrss_source.ui.h:3 #, fuzzy msgid "_Server URL" msgstr "Error del servidor" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "Nombre de _usuario" #: ../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/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Preferencias" #: ../glade/prefs.ui.h:2 #, fuzzy msgid "Feed Cache Handling" msgstr "Caché" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "_Número de artículos a almacenar, por canal:" #: ../glade/prefs.ui.h:4 #, fuzzy msgid "Feed Update Settings" msgstr "Actualización" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Actualiza todas las suscripciones" #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "_Intervalo de actualización predeterminado" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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, use 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:9 msgid "Feeds" msgstr "Canales" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "Opciones de presentación de carpetas" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "Ocultar artículos leídos." #: ../glade/prefs.ui.h:13 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Íconos de los canales (Favicons)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "Act_ualizar todos los iconos ahora" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Carpetas" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "Reading Headlines" msgstr "titulares no leídos" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "Avanzar por los artículos con:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "Web Integration" msgstr "Orientación" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Enviar los marcadores a" #: ../glade/prefs.ui.h:22 #, fuzzy msgid "Internal Browser Settings" msgstr "Opciones del navegador interno" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Abrir los enlaces en la ventana de Liferea." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Desactivar JavaScript." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "Habilitar «plugins» del navegador." #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "Opciones del navegador externo" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "Abrir enlace en:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "Manual" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "Navegador:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Navegador" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Notification Settings" msgstr "Opciones de notificación" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Mostrar una ventana emergente al recibir nuevos elementos." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Mostrar un icono en el área de notificación (system tray)." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Mostrar la cantidad de artículos nuevos en el área de notificación." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "T_erminar, en lugar de minimizar al área de notificación." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "" #: ../glade/prefs.ui.h:39 #, fuzzy msgid "Toolbar Settings" msgstr "Etiquetas de la _barra de herramientas" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "Ocultar la barra de herramientas." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Etiquetas de la _barra de herramientas" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Interfaz gráfica" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "Detectar automáticamente (de GNOME o las variables de entorno)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "Sin «proxy»" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "Configuración manual" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "_Puerto del «proxy»:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "Servidor «proxy»:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "_Identificarse ante el «proxy»" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Contraseña del «proxy»:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Nombre de _usuario en el «proxy»:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "Descargando adjuntos" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Descargar mediante" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "Abrir adjunto..." #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Adjuntos" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #~ msgid "Download and view feeds" #~ msgstr "Descarga y muestra noticias" #~ msgid "You may want to validate the feed using" #~ msgstr "Puede verificar la validez del canal usando" #~ msgid "Launch Item In _Tab" #~ msgstr "Abrir el artículo en una pes_taña nueva" #~ msgid "_Launch Item In Browser" #~ msgstr "Abrir el artículo en el navegador" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Copiar la _URL del artículo al portapapeles" #~ msgid "flag" #~ msgstr "marcar" #~ msgid "bookmark" #~ msgstr "marcador" #~ msgid "comments" #~ msgstr "comentarios" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Falló la descarga del adjunto: «%s»" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Se completó la descarga del adjunto: «%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 utiliza un nuevo formato de almacenamiento y ha " #~ "trasladado a éste lo almacenado anteriormente. El contenido del almacén " #~ "anterior (en %s) no se ha eliminado automáticamente. Por favor, elimine " #~ "dicho directorio de forma manual tras asegurarse que la actualización fue " #~ "exitosa." #, fuzzy #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Falló la descarga del adjunto: «%s»" #, fuzzy #~ msgid "Download finished." #~ msgstr "_Descargar mediante" #~ msgid "Choose download directory" #~ msgstr "Elija el directorio de descarga" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Manual:\n" #~ "(%s para URL)" #~ msgid "_Save downloads in" #~ msgstr "Guardar descarga_s en" #, fuzzy #~ msgid "Synchronized with Nearby Hosts" #~ msgstr "Sincronización con equipos cercanos" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "Habilitar sincronización con la red local" #~ msgid "Downloading Enclosure" #~ msgstr "Descargando adjuntos" #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Salta al siguiente artículo nuevo. Si fuera necesario, salta al siguiente " #~ "canal que tenga artículos nuevos." #~ msgid "link cosmos" #~ msgstr "universo de vínculos" #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "Mostrar mensajes de depuración acerca de la carga de «plugins»" #~ msgid "Liferea seems to be running already!" #~ msgstr "¡Parece que Liferea ya estaba ejecutándose!" #~ msgid "Update status" #~ msgstr "Actualización" #~ msgid "was updated" #~ msgstr "fue actualizado" #~ msgid "was not updated" #~ msgstr "no fue actualizado" #~ msgid "The orientation of the tray." #~ msgstr "La orientación de la bandeja." #~ msgid "_Script Manager" #~ msgstr "_Administrador de «scripts»" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Permite configurar y editar «scripts» LUA" #~ msgid "Search With ..." #~ msgstr "Buscar con ..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d resultado de buscar «%s»" #~ msgstr[1] "%d resultados de buscar «%s»" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d resultado" #~ msgstr[1] "%d resultados" #~ 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 lista de elementos muestra todos aquellos que coinciden con el patrón " #~ "buscado. Si desea guardar este resultado puede usar el botón «Carpeta de " #~ "búsqueda» en la ventada de búsqueda. Liferea añadirá una carpeta virtual " #~ "a su lista de canales." #~ msgid "Count" #~ msgstr "Cantidad" #~ msgid "You have to select a feed entry" #~ msgstr "Debe elegir un canal" #~ msgid "(empty)" #~ msgstr "(vacío)" #~ msgid "_Delete" #~ msgstr "_Eliminar" #~ msgid "_Properties..." #~ msgstr "/_Propiedades..." #~ msgid "Update out-dated feeds" #~ msgstr "Obtener actualizaciones retrasadas" #~ msgid "Force update of all feeds" #~ msgstr "Actualizar todos los canales" #~ msgid "No feed update at all" #~ msgstr "No actualizar nada" #~ msgid "startup" #~ msgstr "iniciar" #~ msgid "feed updated" #~ msgstr "canal actualizado" #~ msgid "feed added" #~ msgstr "canal añadido" #~ msgid "item selected" #~ msgstr "artículo seleccionado" #~ msgid "feed selected" #~ msgstr "canal seleccionado" #~ msgid "item unselected" #~ msgstr "artículo de-seleccionado" #~ msgid "feed unselected" #~ msgstr "canal de-seleccionado" #~ msgid "shutdown" #~ msgstr "terminar" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Lo siento, no hay soporte para «scripts»." #~ msgid "Script Name" #~ msgstr "Nombre del «script»" #~ msgid "No script selected!" #~ msgstr "No hay un «script» seleccionado." #~ msgid "Create a new search feed." #~ msgstr "Crear un nuevo canal de búsqueda." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea no puede mostrar el contenido de este artículo." #~ msgid "

View this item's content.

" #~ msgstr "

Ver el contenido de este artículo.

" #~ 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 la lista de canales de su cuenta en Bloglines. Liferea presentará " #~ "su suscripción a Bloglines como un subárbol de solo lectura en la lista " #~ "de canales." #~ msgid "feedlist.opml" #~ msgstr "feedlist_es.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s tiene %d titular nuevo o actualizado\n" #~ msgstr[1] "%s tiene %d titulares nuevos o actualizados\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Feed Source" #~ msgstr "Origen del canal" #~ msgid "Hook" #~ msgstr "Enlace" #~ msgid "Registered Scripts" #~ msgstr "«Scripts» registrados" #~ msgid "Script Code" #~ msgstr "Código del «script»" #~ msgid "text/plain" #~ msgstr "texto/simple" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Esta opción puede ocasionar retrasos notables al cargar carpetas que " #~ "contengan muchos canales." #~ msgid "Downloading Enclosures" #~ msgstr "Descarga de adjuntos" #~ msgid "Feed Cache Handling" #~ msgstr "Opciones de almacenaje" #~ msgid "Feed Name" #~ msgstr "Nombre del canal" #~ msgid "Feed Update Settings" #~ msgstr "Opciones de actualización del canal" #~ msgid "HTTP Proxy Server" #~ msgstr "Servidor «proxy» HTTP" #~ msgid "Opening Enclosures" #~ msgstr "Apertura de adjuntos" #~ msgid "Reading Headlines" #~ msgstr "Lectura de titulares" #~ msgid "Toolbar Settings" #~ msgstr "Opciones de la barra de herramientas" #~ msgid "Update Interval" #~ msgstr "Intervalo de actualización" #~ msgid "Web Integration" #~ msgstr "Integración web" #~ msgid "Add Script" #~ msgstr "Añadir un «script»" #~ msgid "At _startup:" #~ msgstr "Al iniciar:" #~ msgid "Create new script" #~ msgstr "Crear un «script» nuevo" #~ msgid "Exec Command" #~ msgstr "Ejecutar una orden" #~ msgid "Reuse existing script" #~ msgstr "Reutilizar un «script» existente" #~ msgid "Script Manager" #~ msgstr "Administrador de scripts" #~ msgid "Search _Link Cosmos with" #~ msgstr "Buscar en el universo de vínculos con" #~ msgid "%s" #~ msgstr "%s" #, fuzzy #~ msgid "FAILED to download enclosure: \"%s\"" #~ msgstr "Se completó la descarga del adjunto: «%s»" #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2009\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgstr "" #~ "Copyright (c) 2003-2007\n" #~ "Lars Lindner y \n" #~ "Nathan J. Conrad \n" #~ msgid "/_Bookmark Link at %s" #~ msgstr "/Crear un marcador para el vínculo en %s" #~ msgid "/Toggle _Read Status" #~ msgstr "/Marcar o desma_rcar como nuevo" #~ msgid "/Toggle Item _Flag" #~ msgstr "/Marcar o desmarcar" #~ msgid "/_Preferences" #~ msgstr "/_Preferencias" #~ msgid "/_Quit" #~ msgstr "/Salir" #, fuzzy #~ msgid "/Copy Link Location" #~ msgstr "/_Copiar la dirección del enlace" #~ msgid "/_Update" #~ msgstr "/_Actualizar" #~ msgid "/_New/New _Subscription..." #~ msgstr "/_Nueva/Nueva _suscripción..." #~ msgid "/_New/New _Folder..." #~ msgstr "/_Nueva/Nueva _carpeta..." #~ msgid "/_New/New S_earch Folder..." #~ msgstr "/_Nueva/Nueva carpeta de _búsqueda..." #~ msgid "/_New/New S_ource..." #~ msgstr "/_Nueva/Nueva _fuente..." #~ msgid "/_New/New _News Bin..." #~ msgstr "/_Nueva/Nueva ban_deja..." #~ msgid "Access Forbidden" #~ msgstr "Acceso prohibido" #~ msgid " --help Print this help and exit" #~ msgstr " --help Muestra esta ayuda y finaliza" #~ msgid " --mainwindow-state=STATE" #~ msgstr " --mainwindow-state=ESTADO" #~ msgid " Start Liferea with its main window in STATE." #~ msgstr "" #~ " Arrancar Liferea con la ventana principal en ESTADO." #~ msgid " Possible topics are: all,cache,conf,db,gui,html" #~ msgstr "" #~ " Los temas disponibles son: 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 "Se necesita un parámetro para el argumento --mainwindow-state.\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "Se necesita un parámetro para el argumento --session.\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "Liferea encontró un argumento desconocido: %s\n" #~ msgid "Cookie for %s has expired!" #~ msgstr "La «cookie» para %s ha caducado" #, fuzzy #~ msgid "Network error" #~ msgstr "Avisar de errores a" #~ msgid "_Limit cache to" #~ msgstr "_Limitar el almacenaje a" #~ msgid "items." #~ msgstr "artículos." #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "" #~ "Fallo al autodescubrir la dirección del canal, no se encontraron canales" #~ msgid "Could not download \"%s\". Will retry in %d seconds." #~ msgstr "No se pudo descargar «%s». Se reintentará en %d segundos." #~ msgid "http://liferea.sf.net" #~ msgstr "http://liferea.sf.net/es" #~ msgid "Show Menu _And Toolbar" #~ msgstr "Mostr_ar menú y barra de iconos" #~ msgid "Show _Menu Only" #~ msgstr "Mostrar sólo el _menú" #~ msgid "Show _Toolbar Only" #~ msgstr "Mos_trar sólo la barra de iconos" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "" #~ "Una secuencia de caracteres termina inesperadamente o la codificación " #~ "UTF-8 es errónea. Algunos caracteres se han perdido." #~ msgid "" #~ "Sorry, I was not able to load any installed browser plugin! Try the --" #~ "debug-plugins option to get debug information!" #~ msgstr "" #~ "Lo siento, no se pudo cargar una extensión de visualización HTML. Por " #~ "favor, intente usar la opción «--debug-plugins» para conseguir " #~ "información de depuración." #~ msgid "This item does not have a link assigned!" #~ msgstr "Este artículo no tiene un enlace asignado" #~ msgid "No link selected!" #~ msgstr "No se ha seleccionado ningún enlace" #~ msgid "/_Increase Text Size" #~ msgstr "/Aumentar el tamaño del texto" #~ msgid "/_Decrease Text Size" #~ msgstr "/Re_ducir el tamaño del texto" #~ msgid "/Toggle _Online|Offline" #~ msgstr "/Cambiar entre conectado|desc_onectado" #~ msgid "/_Show|Hide Window" #~ msgstr "/Mo_strar|Ocultar ventana" #~ msgid "" #~ "Saves this search as a search folder, which will appear in the feed list." #~ msgstr "" #~ "Guarda esta búsqueda como una carpeta de búsqueda que aparecerá en la " #~ "lista de canales." #~ msgid "search" #~ msgstr "buscar" #~ msgid "does match" #~ msgstr "coincide con" #~ msgid "does not match" #~ msgstr "no coincide con" #~ msgid "Updates all subscriptions. This does not update OCS directories." #~ msgstr "Actualiza todos los canales, excepto directorios OCS." #~ msgid "Rule" #~ msgstr "Regla" #~ msgid "Liferea Homepage" #~ msgstr "" #~ "Página web de 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, parches, depuración\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" #~ "y muchos más...\n" #~ "\n" #~ "Código de otros proyectos\n" #~ "\n" #~ "Anders Carlsson (bandeja del sistema)\n" #~ "Philippe Martin, Brion Vibber (íconos de las fuentes)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Software incluido\n" #~ "\n" #~ "Liferea usa el reproductor de música en web XSPF\n" #~ "para permitir la reproducción directa de\n" #~ "«podcasts». Este reproductor fue escrito por\n" #~ "Fabricio Zuardi y está disponible en\n" #~ "http://musicplayer.sourceforge.net" #~ msgid "Contributors" #~ msgstr "Agradecimientos" #~ msgid "" #~ "GNOME default\n" #~ "Text below icons\n" #~ "Text beside icons\n" #~ "Icons only\n" #~ "Text only" #~ msgstr "" #~ "Configuración de GNOME\n" #~ "Texto bajo los íconos\n" #~ "Texto junto a los íconos\n" #~ "Sólo los íconos\n" #~ "Sólo el texto" #~ 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: Un artículo se añade a la carpeta de búsqueda si coincide con al " #~ "menos\n" #~ "una regla aditiva. Se elimina si coincide con al menos una regla " #~ "sustractiva." #~ msgid "" #~ "Space\n" #~ " Space\n" #~ " Space" #~ msgstr "" #~ "Espacio\n" #~ " Espacio\n" #~ " Espacio" #~ msgid "Translation" #~ msgstr "Traducción" #~ msgid "" #~ "Update out-dated feeds\n" #~ "Force update of all feeds\n" #~ "No feed update at all" #~ msgstr "" #~ "Actualizar los canales retrasados\n" #~ "Actualizar todos los canales\n" #~ "No actualizar ningún canal" #~ msgid "_Name:" #~ msgstr "_Nombre:" #~ msgid "" #~ "minutes\n" #~ "hours\n" #~ "days" #~ msgstr "" #~ "minutos\n" #~ "horas\n" #~ "días" #~ msgid "URL is invalid" #~ msgstr "La URL no es válida" #~ msgid "Unsupported network protocol" #~ msgstr "Protocolo de red no soportado" #~ msgid "Hostname could not be found" #~ msgstr "No se pudo encontrar el nombre del servidor" #~ msgid "Network connection was refused by the remote host" #~ msgstr "La conexión fue rechazada por el servidor" #~ msgid "Remote host did not finish sending data" #~ msgstr "El servidor no terminó de enviar los datos" #~ msgid "Too many HTTP redirects were encountered" #~ msgstr "Se encontraron demasiadas redirecciones HTTP." #~ msgid "Remote host sent an invalid response" #~ msgstr "El servidor envió una respuesta incorrecta" #~ msgid "Webserver's authentication method incompatible with Liferea" #~ msgstr "" #~ "El método de autenticación del servidor web no es compatible con Liferea" #~ msgid "" #~ "Error while reading cache file \"%s\" ! Cache file could not be loaded!" #~ msgstr "Error al leer el archivo de almacenamiento «%s». No se pudo cargar." #~ msgid "" #~ "

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

" #~ msgstr "" #~ "

Error XML al procesar el archivo de almacenamiento «%s». No se pudo " #~ "cargar.

" #~ msgid "

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

" #~ msgstr "" #~ "

«%s» no es un archivo de almacenamiento válido. No se pudo leer.

" #~ msgid "There were errors while parsing cache file \"%s\"" #~ msgstr "" #~ "Se encontraron errores al procesar el archivo de almacenamiento «%s»" #~ msgid "Feed Loading Settings" #~ msgstr "Opciones de carga del canal" #~ msgid "Optimize for reduced _memory usage." #~ msgstr "Optimizado para menor uso de _memoria." #~ msgid "Optimize for _speed." #~ msgstr "Optimizado para mayor velocidad" #~ msgid "_View Headlines With" #~ msgstr "_Ver titulares con" #~ msgid "Please restart Liferea for changes to take effect." #~ msgstr "Por favor, reinicie Liferea para aplicar los cambios." #~ msgid "" #~ "Liferea reuses the GNOME proxy settings. If you use GNOME you can " #~ "change these settings in the GNOME Control Center." #~ msgstr "" #~ "Liferea aprovecha la configuración del proxy de GNOME. Si usa GNOME " #~ "puede cambiar estas opciones en el centro de control." #~ msgid "_Enable Proxy" #~ msgstr "Activar proxy" #~ msgid "" #~ " --debug-html Enable HTML debugging (saving to ~/.liferea_1.2/output." #~ "xhtml)" #~ msgstr "" #~ " --debug-html Activa depuración del HTML (guardado en ~/.liferea_1.2/" #~ "output)." #~ msgid " --debug-plugins Print debugging messages when loading plugins" #~ msgstr "" #~ " --debug-plugins Mostrar mensajes de depuración cuando se carguen " #~ "extensiones" #~ msgid "_Program" #~ msgstr "_Programa" #~ msgid "Update _Selected" #~ msgstr "Actualizar _seleccionados" #~ msgid "_Delete Selected" #~ msgstr "_Eliminar seleccionado" #~ msgid "Update only feeds scheduled for updates" #~ msgstr "Actualizar los canales con actualizaciones planificadas" #~ msgid "Reset feed update timers (Update no feeds)" #~ msgstr "" #~ "Reiniciar los temporizadores de actualización (Sin actualizar ningun " #~ "canal)" #~ msgid "Searching for \"%s\"" #~ msgstr "Buscando «%s»" #~ msgid "There were errors while parsing the feed %s!" #~ msgstr "¡Hubo errores al procesar el canal %s!" #~ msgid "Liferea notification" #~ msgstr "Aviso de Liferea" #~ msgid "" #~ "%s\n" #~ "%d unread item%s\n" #~ "%d unread items" #~ msgstr "" #~ "%s\n" #~ "%d artículo sin leer%s\n" #~ "%d artículos sin leer" #~ msgid "Lower Right" #~ msgstr "Abajo a la derecha" #~ msgid "Upper Right" #~ msgstr "Arriba a la derecha" #~ msgid "Upper Left" #~ msgstr "Arriba a la izquierda" #~ msgid "Lower Left" #~ msgstr "Abajo a la izquierda" #~ msgid "Popup Placement" #~ msgstr "Colocación de las ventanas emergentes" #~ msgid "single item view" #~ msgstr "vista de un sólo artículo" #~ msgid "label133" #~ msgstr "etiqueta133" #~ msgid "_Dont use proxy for download" #~ msgstr "No usar proxy para _descargas" #~ msgid "Date Column Settings" #~ msgstr "Opciones de fecha" #, fuzzy #~ msgid "Display only _time" #~ msgstr "Mos_trar sólo la hora" #, fuzzy #~ msgid "Display _date and time" #~ msgstr "Mostrar fecha y hora" #, fuzzy #~ msgid "_User defined format:" #~ msgstr "Formato definido por _usuario:" #~ msgid "" #~ "for expert users: specify a time format string, consult the strftime() " #~ "manpage for the format codes" #~ msgstr "" #~ "Para usuarios expertos: Especifica un formato de fecha, consulta la " #~ "página strftime() del manual para ver los códigos de formato" #~ msgid "[No title]" #~ msgstr "[Sin título]" #~ 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 "" #~ "
Esta es una versión de prueba de Liferea 1.1 No " #~ "debería ser utilizada en trabajo aún. Si quieres usar Liferea " #~ "regularmente porfavor descarga la última versión estable de SourceForge" #~ msgid "" #~ "
An up-to-date summary of the current v1.1 progress can be found here.
" #~ msgstr "" #~ "
Un resumen actualizado del avance de la versón actual 1.1 puede ser " #~ "encontrado en aquí.
" #~ msgid "Toggles the item list mode between condensed and normal mode." #~ msgstr "Activa o desactiva el modo de vista condensada." #~ msgid "/_Next Unread Item" #~ msgstr "/Siguie_nte artículo nuevo" #~ msgid "/_Bookmark this Item" #~ msgstr "Marcar como favorito" #~ 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 "" #~ "Otra copia de Liferea está ya ejecutándose; por favor, utilízala. Si no " #~ "hubiera ninguna copia en memoria, por favor borra el archivo \"~/.liferea/" #~ "lock\"" #~ msgid "Note: Using the subscriptions filter disables drag & drop" #~ msgstr "Nota: Al usar filtros de fuentes se desactiva el arrastrar-y-soltar" #~ msgid "Feedster Search" #~ msgstr "Búsqueda en Feedster" #~ msgid "VFolder" #~ msgstr "Carpeta Virtual" #~ msgid "/_Rename Folder..." #~ msgstr "/_Renombrar carpeta" #~ msgid "/_Delete Folder" #~ msgstr "/_Eliminar carpeta" #, fuzzy #~ msgid "" #~ "
You may want to validate the feed using Para validar el canal, dirígete a FeedValidator." #~ msgstr "\">FeedValidator." #~ msgid "user defined command" #~ msgstr "Comando personalizado" #~ msgid "Item:" #~ msgstr "Artículo:" #~ msgid "date" #~ msgstr "fecha" #, fuzzy #~ msgid "categories" #~ msgstr "categorías" #~ msgid "feed generator" #~ msgstr "Generador del canal" #~ msgid "contributors" #~ msgstr "Agradecimientos" #~ msgid "language" #~ msgstr "idioma" #~ msgid "feed published on" #~ msgstr "publicado en" #~ msgid "content last updated" #~ msgstr "última actualización" #~ msgid "managing editor" #~ msgstr "editor" #~ msgid "webmaster" #~ msgstr "webmaster" #~ msgid "original source" #~ msgstr "fuente original" #~ msgid "original time" #~ msgstr "fecha original" #~ msgid "license" #~ msgstr "Licencia" #~ msgid "type" #~ msgstr "tipo" #~ msgid "format" #~ msgstr "formato" #~ msgid "identifier" #~ msgstr "identificador" #~ msgid "source" #~ msgstr "Fuente" #~ msgid "coverage" #~ msgstr "cobertura" #, fuzzy #~ msgid "vfolder" #~ msgstr "Carpeta Virtual" #, fuzzy #~ msgid "VFolder:" #~ msgstr "Carpeta Virtual" #, fuzzy #~ msgid "%d items \n" #~ msgstr "%d artículos \n" #~ msgid "New _VFolder..." #~ msgstr "Nueva carpeta _virtual..." #~ msgid "/_New/New F_older..." #~ msgstr "/_Nuevo/Nueva _carpeta..." #~ msgid "New VFolder" #~ msgstr "Nueva carpeta virtual" #, fuzzy #~ msgid "

Could not find Atom 1.0 header!

" #~ msgstr "

No se pudo obtener la cabecera RDF.

" #~ msgid "internal OCS namespace parsing error!" #~ msgstr "Error interno analizando el espacio OCS." #~ msgid "no namespace handler for <%s:%s>!\n" #~ msgstr "No hay manejador de espacios para <%s:%s>\n" #~ msgid "

Could not find RDF header!

" #~ msgstr "

No se pudo obtener la cabecera RDF.

" #~ msgid "

Could not find OPML header!

" #~ msgstr "

No se pudo obtener la cabecera OPML.

" #~ msgid "

Could not find Atom/Echo/PIE header!

" #~ msgstr "

No se pudo obtener la cabecera Atom/Echo/PIE.

" #~ msgid "

Could not find RDF/RSS header!

" #~ msgstr "

No se pudo obtener la cabecera RDF/RSS.

" #~ msgid "" #~ "The included HTML tag is not supported with GtkHTML2.\n" #~ "Included Plugins might not be displayed." #~ msgstr "" #~ "GtkHTML2 no soporta la etiqueta HTML .\n" #~ "Puede que los plug-ins incluídos no se muestren." #~ 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" #~ "Intentando cargar el módulo del navegador Mozilla... Esto\n" #~ "puede no funcionar con alguna versión de Mozilla. Si encuentra\n" #~ "problemas y Liferea no arranca, intente cambiar la variable\n" #~ "MOZILLA_FIVE_HOME a otro directorio o borre la clave de gconf:\n" #~ "/apps/liferea/browser-module\n" #~ "\n" #~ msgid "" #~ "Failed to open HTML widget module (%s) specified in configuration!\n" #~ "%s\n" #~ msgstr "" #~ "Fallo al abrir el módulo de control HTML (%s) especificado en la " #~ "configuración\n" #~ "%s\n" #~ msgid "Htmlview API mismatch!" #~ msgstr "No coincide el API de Htmlview" #~ msgid "Detected module is not a valid htmlview module!" #~ msgstr "El módulo detectado no es válido según htmlview" #~ msgid "Available browser modules (%s):\n" #~ msgstr "Módulos de navegador disponibles (%s)\n" #~ msgid "Loading configured browser module (%s)!\n" #~ msgstr "Cargando el módulo de navegador (%s)\n" #~ msgid "No browser module configured!\n" #~ msgstr "No se especificó ningún módulo de navegador\n" #~ msgid "trying to load browser module %s (%s)\n" #~ msgstr "Intentando cargar el módulo de navegador %s (%s)\n" #~ msgid "internal error! time conversion error! mktime failed!\n" #~ msgstr "Error interno: Fallo en la conversión de la fecha con 'mktime'.\n" #~ msgid "Invalid ISO8601 date format! Ignoring information!\n" #~ msgstr "" #~ "Formato de fecha inválido según ISO8601. Ignorando la información de \n" #, fuzzy #~ msgid "" #~ "

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

" #~ msgstr "" #~ "

No se pudo determinar el tipo de canal. Por favor, comprueba que sea " #~ "válida y que su formato esté soportado.

" #~ msgid "Please do a search first!" #~ msgstr "Se requiere una búsqueda previa" #~ msgid "" #~ "Marks all items of the current selected subscription or all of " #~ "subscriptions of the selected folder as read." #~ msgstr "" #~ "Marca como leídos todos los artículos de la fuente seleccionada o, en " #~ "caso de una carpeta, todas sus fuentes" #~ msgid "Toggles the item flag." #~ msgstr "Activa o desactiva la bandera" #~ msgid "Browse" #~ msgstr "_Examinar..." #~ msgid "Rules" #~ msgstr "Reglas" #~ msgid "You must select a feed entry" #~ msgstr "Por favor, elija un canal de noticias" #~ msgid "You must select a feed entry." #~ msgstr "Por favor, elija un canal de noticias." #~ msgid "" #~ "internal error! unknown entry type! cannot display appropriate icon!\n" #~ msgstr "" #~ "Error interno: Tipo de entrada desconocido. No se ha podido mostrar un " #~ "ícono apropiado.\n" #~ msgid "Cannot load HTML widget module (%s)!" #~ msgstr "No se pudo cargar el módulo de controles HTML (%s)" #~ msgid "New Feed" #~ msgstr "Nuevo canal" #~ msgid "Next Unread" #~ msgstr "Siguiente nuevo" #~ msgid "Update All" #~ msgstr "Actualizar todas" #~ msgid "Search all feeds." #~ msgstr "Buscar en los canales." #~ 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 "" #~ "

Bienvenido a Liferea

El panel de la izquierda muestra la " #~ "lista de canales. Desde allí puede suscribirse a nuevos canales o " #~ "seleccionar uno de ellos para leer sus titulares. La parte derecha de la " #~ "pantalla muestra la lista de los titulares para el canal seleccionado. " #~ "Puede activar la «Vista condensada» para mostrar todas las cabeceras y " #~ "canales simultáneamente

Acciones básicas

    " #~ "
  • Añadir canal - Crea un nuevo elemento en la carpeta " #~ "seleccionada. Para ello, introduzca la URL del canal de noticias o, si es " #~ "desconocida, la dirección de la página web que la contiene

  • " #~ "
  • Actualizar canal - Actualiza los contenidos del canal " #~ "seleccionado. Normalmente, las actualizaciones automáticas son " #~ "suficientes, pero en caso de desearse una actualización manual, use esta " #~ "opción

  • Actualizar todas - Actualiza todos sus " #~ "canales a la vez.

  • Propiedades del canal - Desde aquí " #~ "se pueden cambiar el intervalo de actualización, el título y otras " #~ "propiedades de cada elemento

Para obtener más ayuda " #~ "puede acceder a la documentación del canal de ayuda o leer las preguntas frecuentes de " #~ "la página web de Liferea.

" #~ msgid "URL" #~ msgstr "URL" liferea-1.10.17/po/eu.po000066400000000000000000002346611261475620100146770ustar00rootroot00000000000000# 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: 2013-06-11 22:55+0200\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.desktop.in.h:1 ../src/main.c:234 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Iturri irakurlea" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea iturri irakurlea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Irakurri berri jarioak eta blogak" #: ../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/liferea.ui.h:29 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 "No comments yet." msgstr "Ez du iruzkinik oraingoz." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Iruzkinak" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Eguneratzen..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Freskatu" #: ../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:32 msgid "Default Browser" msgstr "Lehenetsitako arakatzailea" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Arakatzailearen komandoak huts egin du: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Exekuzioa: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Autentifikazio errorea" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Ezin izan da \"%s\" cache direktorioa sortu." #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Gaur %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%Y %b %d" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" ez da baliozko konfigurazio-fitxategien eranskina" #: ../src/enclosure.c:288 msgid "You have not configured a download tool yet! Please do so in the 'Download' tab in Tools/Preferences." msgstr "Oraindik ez du deskarga herramienta bat konfiguratu! Egizu hobespenetan, 'Eranskinak' fitxan." #: ../src/enclosure.c:306 #, 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:185 #, c-format msgid "Error renaming %s to %s\n" msgstr "Errorea %s %s gisa izenez aldatzean\n" #: ../src/export.c:414 ../src/export.c:416 #, 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:422 ../src/export.c:424 #, 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:445 ../src/export.c:447 #, 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:466 msgid "Imported feed list" msgstr "Inportatutako iturrien zerrenda" #: ../src/export.c:478 msgid "Import Feed List" msgstr "Inportatu iturrien zerrenda" #: ../src/export.c:478 msgid "Import" msgstr "Inportatu" #: ../src/export.c:478 ../src/export.c:495 ../src/fl_sources/opml_source.c:394 msgid "OPML Files" msgstr "OPML fitxategiak" #: ../src/export.c:486 msgid "Error while exporting feed list!" msgstr "Errorea iturrien zerrenda esportatzean." #: ../src/export.c:488 msgid "Feed List exported!" msgstr "Iturrien zerrenda esportatuta." #: ../src/export.c:495 msgid "Export Feed List" msgstr "Esportatu iturrien zerrenda" #: ../src/export.c:495 msgid "Export" msgstr "Esportatu" #: ../src/feed.c:254 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:283 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" eguneratua..." #: ../src/feed.c:293 #, 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:404 msgid "There are no unread items" msgstr "Ez dago irakurri gabeko elementurik" #: ../src/main.c:163 msgid "Start Liferea with its main window in STATE. STATE may be `shown', `iconified', or `hidden'" msgstr "Abiarazi Liferea bere leiho nagusia EGOERA egoeran dagoela. EGOERA `shown', `iconified', edo `hidden' izan daiteke" #: ../src/main.c:163 msgid "STATE" msgstr "EGOERA" #: ../src/main.c:164 msgid "Show version information and exit" msgstr "Bistaratu bertsioaren informazioa eta irten" #: ../src/main.c:165 msgid "Add a new subscription" msgstr "Gehitu harpidetza berria" #: ../src/main.c:165 msgid "uri" msgstr "uri" #: ../src/main.c:170 msgid "Print debugging messages of all types" msgstr "Bistaratu mota guztitako arazketa mezuak" #: ../src/main.c:171 msgid "Print debugging messages for the cache handling" msgstr "Bistaratu cache kudeatzailearen arazketa mezuak" #: ../src/main.c:172 msgid "Print debugging messages for the configuration handling" msgstr "Bistaratu konfigurazio-kudeaketaren arazketa mezuak" #: ../src/main.c:173 msgid "Print debugging messages of the database handling" msgstr "Bistaratu datubase kudeatzailearen arazketa mezuak" #: ../src/main.c:174 msgid "Print debugging messages of all GUI functions" msgstr "Bistaratu GUI funtzio guztien arazketa mezuak" #: ../src/main.c:175 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/main.c:176 msgid "Print debugging messages of all network activity" msgstr "Bistaratu sareko sarbide guztien arazketa mezuak" #: ../src/main.c:177 msgid "Print debugging messages of all parsing functions" msgstr "Bistaratu funtzio analizatzaile guztien arazketa mezuak" #: ../src/main.c:178 msgid "Print debugging messages when a function takes too long to process" msgstr "Bistaratu arazketa mezuak funtzio batek denbora gehiegi behar duenean" #: ../src/main.c:179 msgid "Print debugging messages when entering/leaving functions" msgstr "Bistaratu arazketa mezuak funtzioak sartzean/kentzean" #: ../src/main.c:180 msgid "Print debugging messages of the feed update processing" msgstr "Bistaratu iturriaren eguneraketa prozesuaren arazketa mezuak" #: ../src/main.c:181 msgid "Print debugging messages of the search folder matching" msgstr "Bistaratu bilaketa direktorioaren bilatze arazketa mezuak" #: ../src/main.c:182 msgid "Print verbose debugging messages" msgstr "Bistaratu arazketa mezuak hitzez hitz" #: ../src/main.c:193 ../src/main.c:194 msgid "Print debugging messages for the given topic" msgstr "Bistaratu esandako gaiaren arazketa mezuak" #: ../src/main.c:201 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, Linux iturri irakurgailua" #: ../src/main.c:202 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "Informazio gehiagorako, bisitatu http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "Eguneraketa eskaera ezeztatu da" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Ezin izan da helmugako ostalari izena ebatzi" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Ezin izan da proxy-aren ostalari izena ebatzi" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Ezin izan da urruneko ostalariarekin konektatu" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Ezin izan da proxy-ra konektatu" #: ../src/net.c:325 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:328 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:331 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:333 msgid "Payment required" msgstr "Ordainketa beharrezkoa da" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Ez duzu baimenik baliabide hau ikusteko" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Baliabidea ez da aurkitu" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Metodoa ez dago baimendua" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Ezin da onartu" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Proxy autentifikazioa beharrezkoa da" #: ../src/net.c:339 msgid "Request timed out" msgstr "Eskaeraren denbora-muga iraungituta" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Joan egin da. Baliabidea ez da existitzen. Kendu harpidetza." #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Barne errore bat egon da eguneratze prozesuan" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Iturria ez dago erabilgarri. Zerbitzariak onartu gabeko berbideraketa eskatu du." #: ../src/net.c:349 msgid "Client Error" msgstr "Bezeroaren errorea" #: ../src/net.c:351 msgid "Server Error" msgstr "Zerbitzariaren errorea" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "\"%s\" iturria jadanik eguneratzen ari da!" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "\"%s\" iturriaren ikonoa eguneratzen" #: ../src/subscription.c:193 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:211 #, 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:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" etenda dago. Lifereak ez du gehiago eguneratuko." #: ../src/subscription.c:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" ez da aldatu azken eguneraketatik" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "\"%s\" eguneratzen" #: ../src/update.c:258 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Errorea aldi baterako %s fitxategia irakurtzean iragazteko erabiltzeko." #: ../src/update.c:281 #, c-format msgid "%s exited with status %d" msgstr "%s %d egoerarekin irten da" #: ../src/update.c:287 ../src/update.c:288 ../src/update.c:400 #, 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:426 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Errorea: ezin izan da \"%s\" fitxategia ireki" #: ../src/update.c:432 #, 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "atxiki %d" msgstr[1] "%d atxiki" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Aukeratu fitxategia" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (berri %d)" msgstr[1] " (%d berri)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Laguntzaren gaiak" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Erreferentzia azkarra" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "MEG" #: ../src/ui/liferea_shell.c:795 msgid "Liferea is now online" msgstr "Liferea orain linean dago" #: ../src/ui/liferea_shell.c:797 msgid "Work Offline" msgstr "Lan egin lineaz kanpo" #: ../src/ui/liferea_shell.c:799 msgid "Liferea is now offline" msgstr "Liferea lineaz kanpo dago" #: ../src/ui/liferea_shell.c:801 msgid "Work Online" msgstr "Lan egin linean" #: ../src/ui/liferea_shell.c:897 msgid "_Subscriptions" msgstr "_Harpidetzak" #: ../src/ui/liferea_shell.c:898 msgid "Update _All" msgstr "Eguneratu _denak" #: ../src/ui/liferea_shell.c:898 msgid "Updates all subscriptions." msgstr "Eguneratu harpidetza guztiak." #: ../src/ui/liferea_shell.c:900 msgid "Mark All As _Read" msgstr "_Markatu denak irakurritako gisa" #: ../src/ui/liferea_shell.c:900 msgid "Marks read every item of every subscription." msgstr "Markatu irakurrita gisa harpidetza bakoitzeko elementu bakoitza" #: ../src/ui/liferea_shell.c:902 msgid "_Import Feed List..." msgstr "_Inportatu iturrien zerrenda..." #: ../src/ui/liferea_shell.c:902 msgid "Imports an OPML feed list." msgstr "Iturrien OPML zerrenda inportatzen du" #: ../src/ui/liferea_shell.c:903 msgid "_Export Feed List..." msgstr "_Esportatu iturrien zerrenda" #: ../src/ui/liferea_shell.c:903 msgid "Exports the feed list as OPML." msgstr "Esportatu iturrien zerrenda OPML gisa." #: ../src/ui/liferea_shell.c:904 msgid "_Quit" msgstr "I_rten" #: ../src/ui/liferea_shell.c:906 msgid "_Feed" msgstr "_Iturria" #: ../src/ui/liferea_shell.c:907 msgid "Remove _All Items" msgstr "Kendu elementu _denak" #: ../src/ui/liferea_shell.c:907 msgid "Removes all items of the currently selected feed." msgstr "Unean hautatutako iturritik elemen tu guztiak kentzen ditu." #: ../src/ui/liferea_shell.c:910 msgid "_Item" msgstr "_Elementua" #: ../src/ui/liferea_shell.c:911 msgid "Previous Item" msgstr "Aurreko elementua" #: ../src/ui/liferea_shell.c:913 msgid "Next Item" msgstr "Hurrengo elementua" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:918 msgid "_Next Unread Item" msgstr "_Hurrengo irakurri gabeko elementua" #: ../src/ui/liferea_shell.c:921 msgid "_View" msgstr "_Ikusi" #: ../src/ui/liferea_shell.c:922 ../src/ui/liferea_htmlview.c:653 msgid "_Increase Text Size" msgstr "_Handitu testuaren tamaina" #: ../src/ui/liferea_shell.c:922 msgid "Increases the text size of the item view." msgstr "Testuaren tamaina handitzen du elementuaren ikuspegian." #: ../src/ui/liferea_shell.c:924 ../src/ui/liferea_htmlview.c:654 msgid "_Decrease Text Size" msgstr "_Gutxiagotu testu-tamaina" #: ../src/ui/liferea_shell.c:924 msgid "Decreases the text size of the item view." msgstr "Testuaren tamaina gutxiagotzen du elementuaren ikuspegian." #: ../src/ui/liferea_shell.c:927 msgid "_Tools" msgstr "_Tresnak" #: ../src/ui/liferea_shell.c:928 msgid "_Update Monitor" msgstr "_Eguneraketaren monitorea" #: ../src/ui/liferea_shell.c:928 msgid "Show a list of all feeds currently in the update queue" msgstr "Erakutsi eguneratzeko ilaran unean dauden iturri guztien zerrenda" #: ../src/ui/liferea_shell.c:930 msgid "_Preferences" msgstr "_Hobespenak" #: ../src/ui/liferea_shell.c:930 msgid "Edit Preferences." msgstr "Editatu hobespenak." #: ../src/ui/liferea_shell.c:933 msgid "S_earch" msgstr "_Bilatu" #: ../src/ui/liferea_shell.c:934 msgid "Search All Feeds..." msgstr "Bilatu iturri guztiak..." #: ../src/ui/liferea_shell.c:934 msgid "Show the search dialog." msgstr "Erakutsi bilaketaren elkarrizketa-koadroa." #: ../src/ui/liferea_shell.c:936 msgid "_Help" msgstr "_Laguntza" #: ../src/ui/liferea_shell.c:937 msgid "_Contents" msgstr "_Edukia" #: ../src/ui/liferea_shell.c:937 msgid "View help for this application." msgstr "Ikusi aplikazio honen laguntza." #: ../src/ui/liferea_shell.c:938 msgid "_Quick Reference" msgstr "_Erreferentzia azkarra" #: ../src/ui/liferea_shell.c:938 msgid "View a list of all Liferea shortcuts." msgstr "Ikusi Liferearen laster-tekla guztien zerrenda." #: ../src/ui/liferea_shell.c:940 msgid "_FAQ" msgstr "_MEG" #: ../src/ui/liferea_shell.c:940 msgid "View the FAQ for this application." msgstr "Ikusi aplikazio honen Maiz Egindako Galderak (MEG)." #: ../src/ui/liferea_shell.c:941 msgid "_About" msgstr "Honi _buruz" #: ../src/ui/liferea_shell.c:941 msgid "Shows an about dialog." msgstr "Erakutsi 'honi buruz' elkarrizketa-koadroa." #: ../src/ui/liferea_shell.c:945 msgid "_Normal View" msgstr "_Ikuspegi normala" #: ../src/ui/liferea_shell.c:945 msgid "Set view mode to mail client mode." msgstr "Ezarri ikuspegi modua posta bezero moduan." #: ../src/ui/liferea_shell.c:947 msgid "_Wide View" msgstr "_Ikuspegi zabala" #: ../src/ui/liferea_shell.c:947 msgid "Set view mode to use three vertical panes." msgstr "Ezarri ikuspegi modua hiru panel bertikal erabiltzeko." #: ../src/ui/liferea_shell.c:949 msgid "_Combined View" msgstr "Ikuspegi _konbinatua" #: ../src/ui/liferea_shell.c:949 msgid "Set view mode to two pane mode." msgstr "Ezarri ikuspegi modua bi panelekin." #: ../src/ui/liferea_shell.c:954 msgid "_Reduced Feed List" msgstr "_Murriztu iturri zerrenda" #: ../src/ui/liferea_shell.c:954 msgid "Hide feeds with no unread items." msgstr "Ezkutatu irakurri gabeko elementurik ez duten jarioak." #: ../src/ui/liferea_shell.c:959 msgid "_New Subscription..." msgstr "_Harpidetza berria..." #: ../src/ui/liferea_shell.c:959 msgid "Adds a subscription to the feed list." msgstr "Harpidetza bat gehitzen du iturrien zerrendara." #: ../src/ui/liferea_shell.c:961 ../src/ui/popup_menu.c:320 msgid "New _Folder..." msgstr "_Karpeta berria..." #: ../src/ui/liferea_shell.c:961 msgid "Adds a folder to the feed list." msgstr "Karpeta bat gehitzen du iturrien zerrendara." #: ../src/ui/liferea_shell.c:962 ../src/ui/popup_menu.c:323 msgid "New S_earch Folder..." msgstr "_Bilaketa karpeta berria..." #: ../src/ui/liferea_shell.c:962 msgid "Adds a new search folder to the feed list." msgstr "Bilaketako karpeta berri bat gehitzen du iturrien zerrendan." #: ../src/ui/liferea_shell.c:963 msgid "New _Source..." msgstr "_Iturburu berria..." #: ../src/ui/liferea_shell.c:963 msgid "Adds a new feed list source." msgstr "Iturrien zerrenda berria gehitzen du." #: ../src/ui/liferea_shell.c:964 ../src/ui/popup_menu.c:325 msgid "New _News Bin..." msgstr "_Albisteen erretilu berria..." #: ../src/ui/liferea_shell.c:964 msgid "Adds a new news bin." msgstr "Albisteen erretilu berria gehitzen du." #: ../src/ui/liferea_shell.c:968 msgid "_Mark Items Read" msgstr "_Markatu denak irakurritako gisa" #: ../src/ui/liferea_shell.c:968 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." #: ../src/ui/liferea_shell.c:970 ../src/ui/popup_menu.c:300 msgid "_Update" msgstr "_Eguneratu" #: ../src/ui/liferea_shell.c:970 msgid "Updates the selected subscription or all subscriptions of the selected folder." msgstr "Hautatutako harpidetzak edo karpetan harpidetza guztiak eguneratzen ditu." #: ../src/ui/liferea_shell.c:975 msgid "_Properties" msgstr "_Propietateak" #: ../src/ui/liferea_shell.c:975 msgid "Opens the property dialog for the selected subscription." msgstr "Hautatutako harpidetzaren propietateen elkarrizketa-koadroa irekitzen du." #: ../src/ui/liferea_shell.c:976 msgid "_Remove" msgstr "_Kendu" #: ../src/ui/liferea_shell.c:976 msgid "Removes the selected subscription." msgstr "Hautatutako harpidetza ezabatzen du." #: ../src/ui/liferea_shell.c:980 ../src/ui/popup_menu.c:163 msgid "Toggle _Read Status" msgstr "Txandakatu irakurketaren egoera" #: ../src/ui/liferea_shell.c:980 msgid "Toggles the read status of the selected item." msgstr "Hautatutako elementuaren irakurketaren egoera aldatzen du." #: ../src/ui/liferea_shell.c:982 ../src/ui/popup_menu.c:164 msgid "Toggle Item _Flag" msgstr "Txandakatu elementuaren bandera" #: ../src/ui/liferea_shell.c:982 msgid "Toggles the flag status of the selected item." msgstr "Hautatutako elementuaren banderaren egoera aldatzen du." #: ../src/ui/liferea_shell.c:984 msgid "R_emove" msgstr "_Kendu" #: ../src/ui/liferea_shell.c:984 msgid "Removes the selected item." msgstr "Kandu hautatutako elementua." #: ../src/ui/liferea_shell.c:986 ../src/ui/popup_menu.c:127 msgid "Open In _Tab" msgstr "Ireki fitxan" #: ../src/ui/liferea_shell.c:986 msgid "Launches the item's link in a new Liferea browser tab." msgstr "Bistaratu elementuaren esteka Liferea-ren arakatzailearen fitxa berri batean." #: ../src/ui/liferea_shell.c:988 ../src/ui/popup_menu.c:128 msgid "_Open In Browser" msgstr "_Abiarazi arakatzailean" #: ../src/ui/liferea_shell.c:988 msgid "Launches the item's link in the Liferea item pane." msgstr "Bistaratu elementuaren esteka Liferea-ren arakatzailean." #: ../src/ui/liferea_shell.c:990 ../src/ui/popup_menu.c:129 msgid "Open In _External Browser" msgstr "Ireki _kanpoko arakatzailearen" #: ../src/ui/liferea_shell.c:990 msgid "Launches the item's link in the configured external browser." msgstr "Bistaratu elementuaren esteka konfiguratutako kanpoko arakatzailean." #: ../src/ui/liferea_shell.c:995 ../src/ui/popup_menu.c:193 msgid "_Work Offline" msgstr "_Lan egin lineaz kanpo" #: ../src/ui/liferea_shell.c:995 msgid "This option allows you to disable subscription updating." msgstr "Aukera honek harpidetzen eguneraketa desgaitzea baimentzen du." #: ../src/ui/liferea_shell.c:997 msgid "_Fullscreen" msgstr "_Pantaila osoa" #: ../src/ui/liferea_shell.c:997 msgid "Browse at full screen" msgstr "Arakatu pantaila osoan" #: ../src/ui/liferea_shell.c:1328 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Linux iturri irakurgailua" #: ../src/ui/liferea_shell.c:1330 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

" #: ../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:211 msgid "All Files" msgstr "Fitxategi guztiak" #: ../src/ui/feed_list_view.c:338 msgid "Deleting entry" msgstr "Sarrera ezabatzen" #: ../src/ui/feed_list_view.c:339 #, 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_view.c:339 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Ziur zaude \"%s\" ezabatzea nahi duzula?" #: ../src/ui/feed_list_view.c:351 msgid "Deletion Confirmation" msgstr "Berretsi ezabatzea" #: ../src/ui/feed_list_view.c:382 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea lineaz kanpoko moduan dago. Ezin da eguneraketarik burutua." #: ../src/ui/liferea_htmlview.c:624 msgid "Open Link In _Tab" msgstr "Ireki esteka _fitxa batean" #: ../src/ui/liferea_htmlview.c:625 msgid "_Open Link In Browser" msgstr "_Ireki esteka arakatzailean" #: ../src/ui/liferea_htmlview.c:626 msgid "_Open Link In External Browser" msgstr "_Ireki esteka kanpoko arakatzailean" #: ../src/ui/liferea_htmlview.c:629 #, c-format msgid "_Bookmark Link at %s" msgstr "Egin estekaren _laster-marka %s gisa" #: ../src/ui/liferea_htmlview.c:633 msgid "_Copy Link Location" msgstr "_Kopiatu estekaren helbidea" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Image Location" msgstr "_Kopiatu irudiaren helbidea" #: ../src/ui/liferea_htmlview.c:638 msgid "S_ave Link As" msgstr "_Gorde esteka honela" #: ../src/ui/liferea_htmlview.c:640 msgid "S_ave Image As" msgstr "Gorde irudia honela" #: ../src/ui/liferea_htmlview.c:643 msgid "_Subscribe..." msgstr "_Harpidetu..." #: ../src/ui/item_list_view.c:398 msgid "*** No title ***" msgstr "*** Titulurik ez ***" #: ../src/ui/item_list_view.c:661 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:675 msgid "Headline" msgstr "Goiburua" #: ../src/ui/item_list_view.c:777 ../src/ui/item_list_view.c:798 #: ../src/ui/item_list_view.c:819 ../src/ui/item_list_view.c:883 #: ../src/ui/item_list_view.c:968 ../src/ui/item_list_view.c:983 msgid "No item has been selected" msgstr "Ez da elementurik hautatu" #: ../src/ui/item_list_view.c:794 ../src/ui/item_list_view.c:815 msgid "This item has no link specified!" msgstr "Elementu honek ez du zehaztutako estekarik." #: ../src/ui/item_list_view.c:871 msgid "You must select a feed to delete its items!" msgstr "Iturri bat hautatu behar duzu bere edukia ezabatzeko." #: ../src/ui/popup_menu.c:141 msgid "Copy to News Bin" msgstr "Kopiatu albisteen erretiluan" #: ../src/ui/popup_menu.c:155 #, c-format msgid "_Bookmark at %s" msgstr "Egin estekaren _laster-marka %s-(e)n" #: ../src/ui/popup_menu.c:159 msgid "Copy Item _Location" msgstr "_Kopiatu elementuaren helbidea" #: ../src/ui/popup_menu.c:165 msgid "R_emove Item" msgstr "_Kendu elementua" #: ../src/ui/popup_menu.c:178 msgid "Open Enclosure..." msgstr "Ireki eranskina..." #: ../src/ui/popup_menu.c:179 msgid "Save As..." msgstr "Gorde honela..." #: ../src/ui/popup_menu.c:180 msgid "Copy Link Location" msgstr "Kopiatu estekaren helbidea" #: ../src/ui/popup_menu.c:194 msgid "_Update All" msgstr "_Eguneratu denak" #: ../src/ui/popup_menu.c:199 msgid "_Show Liferea" msgstr "_Erakutsi Liferea" #: ../src/ui/popup_menu.c:302 msgid "_Update Folder" msgstr "_Eguneratu karpeta" #: ../src/ui/popup_menu.c:304 msgid "_Mark All As Read" msgstr "_Markatu denak irakurritako gisa" #: ../src/ui/popup_menu.c:314 msgid "_New" msgstr "_Berria" #: ../src/ui/popup_menu.c:317 msgid "New _Subscription..." msgstr "_Harpidetza berria..." #: ../src/ui/popup_menu.c:324 msgid "New S_ource..." msgstr "_Iturburu berria..." #: ../src/ui/popup_menu.c:333 msgid "Sort Feeds" msgstr "Ordenatu jarioak" #: ../src/ui/popup_menu.c:339 msgid "_Rebuild" msgstr "_Berregin" #: ../src/ui/popup_menu.c:351 msgid "Convert To Local Subscriptions..." msgstr "Bihurtu harpidetza lokaletara..." #: ../src/ui/preferences_dialog.c:87 msgid "GNOME default" msgstr "GNOMEko lehenetsia" #: ../src/ui/preferences_dialog.c:88 msgid "Text below icons" msgstr "Testua ikonoen azpian" #: ../src/ui/preferences_dialog.c:89 msgid "Text beside icons" msgstr "Testua ikonoen alboan" #: ../src/ui/preferences_dialog.c:90 msgid "Icons only" msgstr "Ikonoak soilik" #: ../src/ui/preferences_dialog.c:91 msgid "Text only" msgstr "Testua soilik" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minutu" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "ordu" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "egun" #: ../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:108 msgid " Space" msgstr " Espazioa" #: ../src/ui/preferences_dialog.c:113 msgid "Normal View" msgstr "Ikuspegi normala" #: ../src/ui/preferences_dialog.c:114 msgid "Wide View" msgstr "Ikuspegi zabala" #: ../src/ui/preferences_dialog.c:115 msgid "Combined View" msgstr "Ikuspegi konbinatua" #: ../src/ui/preferences_dialog.c:500 msgid "Manual" msgstr "Eskuz" #: ../src/ui/preferences_dialog.c:515 msgid "Browser default" msgstr "Arakatzaile lehenetsia" #: ../src/ui/preferences_dialog.c:518 msgid "Existing window" msgstr "Lehendik dagoen leihoan" #: ../src/ui/preferences_dialog.c:521 msgid "New window" msgstr "Leiho berrian" #: ../src/ui/preferences_dialog.c:524 msgid "New tab" msgstr "Fitxa berrian" #: ../src/ui/preferences_dialog.c:683 msgid "Integrate with the messaging menu (indicator)" msgstr "Integratu mezu menuarekin (indicator)" #: ../src/ui/preferences_dialog.c:686 msgid "Terminate instead of minimizing to the messaging menu" msgstr "Amaitu erretiluko ikonora minimizatu ordez" #: ../src/ui/preferences_dialog.c:689 msgid "Start minimized to the messaging menu" msgstr "Abiarazi erretilu ikono gisa" #: ../src/ui/preferences_dialog.c:789 msgid "Type" msgstr "Mota" #: ../src/ui/preferences_dialog.c:792 msgid "Program" msgstr "Programa" #: ../src/ui/ui_node.c:123 msgid "(Empty)" msgstr "(Hutsik)" #: ../src/ui/ui_node.c:320 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Berreraikitzen" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Iturri honek ez du egunerstzeko bitarte lehenetsirik zehazten." #: ../src/ui/browser_tabs.c:153 msgid "Untitled" msgstr "Izengabea" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "Elementu berri %d" msgstr[1] "%d elementu berri" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Ez dago elementu berririk" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Ez dago irakurri gabeko elementurik" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Webgunea" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Atom iturri baliogabea: egile ezezaguna" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:273 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Harpidetza berria" #: ../src/fl_sources/google_source.c:115 msgid "Google Reader login failed!" msgstr "Google Reader-en saioa hasteak huts egin du!" #: ../src/fl_sources/google_source.c:394 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:395 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." #: ../src/fl_sources/opml_source.c:326 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:327 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." #: ../src/fl_sources/opml_source.c:394 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:238 msgid "No feed list source types found!" msgstr "Ez da iturrien zerrendaren iturburu motarik aurkitu." #: ../src/fl_sources/node_source.c:268 msgid "Source Type" msgstr "Iturburu mota" #. 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:412 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "'%s' harpidetza ongi bihurtu da jario lokalera!" #: ../src/fl_sources/ttrss_source.c:360 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:361 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." #: ../src/fl_sources/ttrss_source_feed.c:119 msgid "Could not parse JSON returned by tt-rss API!" msgstr "Ezin izan da tt-rss-ren APIak itzulitako JSON mezua ulertu" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Iturri hau ez da gehiago existitzen." #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Albiste sarrera honek ez du goibururik." #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Bisitatu" #: ../src/notification/libnotify.c:167 ../src/notification/libnotify.c:263 msgid "Open feed" msgstr "Ireki iturria" #: ../src/notification/libnotify.c:170 ../src/notification/libnotify.c:266 msgid "Mark all as read" msgstr "Markatu denak irakurritako gisa" #: ../src/notification/libnotify.c:247 #, c-format 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" #: ../src/notification/libnotify.c:249 msgid "Feed Update" msgstr "Eguneraketa" #: ../src/notification/libnotify.c:260 msgid "Show details" msgstr "Erakutsi xehetasunak" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autentifikazioa" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Pasahitza:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_Erabiltzaile-izena:" #: ../glade/auth.ui.h:6 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." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Pasahitza" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "_Erabiltzaile-izena (email)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "ikuspegi normala" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "ikuspegi zabala" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Ikusi goiburuak" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "ikuspegi konbinatua" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Goiburuak" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Linean/'Lineaz kanpo' botoia" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Harpidetzaren propietateak" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Iturriaren izena" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "Iturriaren _izena:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "Eguneraketen arteko tartea" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Erabili eguneratzeko bitarte orokor lehenetsia." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "Iturria eguneratzeko bitartea: " #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Ez eguneratu iturri hau automatikoki." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Iturri honen hornitzaileak %d minututako bitartea gomendatzen du." #: ../glade/liferea.ui.h:18 msgid "General" msgstr "Orokorra" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Iturriaren iturburua" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Iturburu mota:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Iturburua:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URLa" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Komandoa" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Fitxategi lokala" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Hautatu fitxategia..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Erabili bihurtzeko _iragazkia" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Bihurtu _honekin:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "Cachearen ezarpen _lehenetsia" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Desgaitu cachea" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "Cache _mugagabea" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "Iturrien elementu _kopurua gordetzeko:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Artxiboa" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Erabili HTTP _autentifikazioa" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "_Ez erabili proxy-rik deskargatzean" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Deskargatu" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "Deskargatu automatikoki iturriaren eranskin guztiak." #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "_Kargatu automatikoki esteka konfiguratutako web arakatzailean artikuluak hautatzean." #: ../glade/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Harpidentza honen _iruzkin jarioak ez jarraitu" #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "_Erakutsi notifikazio elkarrizketa-koadroa harpidetza honentzat." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "_Ez erakutsi inoiz notifikazio elkarrizketa-koadrorik harpidetza honentzat." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Markatu deskargatutako elementuak irakurritako gisa" #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Aurreratua" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Karpeta berria" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "_Karpeta-izena:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Izena aldatu" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "Izen berria:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Bilaketa karpetaren propietateak" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "Bilatu _izena:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "Filatu ondorengo irizpideak betetzen dituzten elementuak" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "Edozei_n arau betetzean" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "_Arau guztiak bete behar dira" #: ../glade/liferea.ui.h:57 msgid "Open Enclosure" msgstr "Ireki eranskina" #: ../glade/liferea.ui.h:58 msgid "Open an enclosure of type:" msgstr "Mota honetako eranskina ireki:" #: ../glade/liferea.ui.h:59 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Arakatu" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Egin hau honelako eranskin guztientzat hemendik aurrera." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Bilatu iturri denak" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Bilatu:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Aurreratua..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Eguneraketaren monitorea" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "Falta diren eskaerak" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "Deskargatzen" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "_Utzi dena" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Sortu 'Albisteen erretilua'" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Albisteen erretiluaren izena:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Honi buruz" #: ../glade/liferea.ui.h:74 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea albisteen biltzailea da 'GTK+'entzako" #: ../glade/liferea.ui.h:75 msgid "Liferea Homepage" msgstr "Liferea-ren orria" #: ../glade/liferea.ui.h:76 msgid "Advanced Search" msgstr "Bilaketa aurreratua" #: ../glade/liferea.ui.h:77 msgid "_Search Folder..." msgstr "_Bilatu karpeta..." #: ../glade/liferea.ui.h:78 msgid "Create Search Engine Feed" msgstr "Sortu bilaketaren iturri-motorra" #: ../glade/liferea.ui.h:79 msgid "enter any search string you want" msgstr "sartu edozein kate bilatzeko" #: ../glade/liferea.ui.h:80 msgid "Maximal _Number Of Result Items:" msgstr "Emaitzen kopuru _maximoa:" #: ../glade/liferea.ui.h:81 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." #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Deskarga / Ondorengo prozesatzea" #: ../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/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Gehitu Tiny Tiny RSS kontua" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your tt-rss 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/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/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:4 msgid "Feed Update Settings" msgstr "Jarioen eguneraketa ezarpenak" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "_Eguneratu harpidetza guztiak abiaraztean." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Iturria freskatzeko _bitarte lehenetsia:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Iturriak" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "Karpeten bistaratzearen ezarpenak" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "_Ezkutatu irakurritako elementuak." #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Iturrien ikonoak (Favicon)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Eguneratu ikono guztiak orain" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Karpetak" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Goiburuak irakurtzen" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "_Aurreratu artikuluetan honekin:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "Lehenetsitako ikuspegia: " #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Web integrazioa" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Bidali laster-markak honi" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Barneko arakatzailearen ezarpenak" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Ireki estekak Liferea-ren _leihoan." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Desgaitu Javascript." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "_Gaitu arakatzailearen plugin-ak." #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "Kanpoko arakatzailearen ezarpenak" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Ireki esteka:" #: ../glade/prefs.ui.h:28 msgid "_Manual:" msgstr "_Eskuz:" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "(%s helbiderako)" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Arakatzailea:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Arakatzailea" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Jakinarazpenen ezarpenak" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Erakutsi _laster-leihoa goiburu berriekin." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Erakutsi egoerako _ikonoa jakinarazpen arean (sistemako erretilua)." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Erakutsi elementu berrien kopurua erretiluko ikonoan." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "_Amaitu, erretiluko ikonora minimizatu ordez." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Abiarazi erretiluko ikono bezala" #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Tresna-barraren ezarpenak" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Ezkutatu tresna-barra." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Tresna-barraren botoien etiketak:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "HTTP Proxy Zerbitzaria" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_Automatikoki atzeman (GNOME edo ingurunea)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "P_roxy gabe" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Eskuzko ezarpena:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "Proxy-_ataka:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "Proxy-_ostalaria:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Erabili proxy au_tentifikazioa" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Proxy _pasahitza:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Proxy _erabiltzaile-izena:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy-a" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "Eranskina deskargatzeko" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Deskargatu honekin" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "Eranskinak irekitzeko" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Eranskinak" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "Pluginak" #~ 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 "Synchronized with Nearby Hosts" #~ msgstr "Inguruko makinekin sinkronizatuta" #~ 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 "_Delete" #~ msgstr "/_Ezabatu" #, 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://liferea.sf.net" #~ msgstr "http://liferea.sf.net" #~ 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.10.17/po/fi.po000066400000000000000000002534031261475620100146570ustar00rootroot00000000000000# 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 # # Pauli Virtanen , 2004-2005. # Jorma Karvonen , 2010, 2012-2013. # msgid "" msgstr "" "Project-Id-Version: liferea 1.10-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-01-25 23:54+0100\n" "PO-Revision-Date: 2013-06-10 17:44+0200\n" "Last-Translator: Jorma Karvonen \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" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" #: ../liferea.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Syötteenlukija" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea syötteenlukija" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Lue uutissyötteitä ja blogeja" #: ../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 "Copyright" #: ../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/liferea.ui.h:29 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 "No comments yet." msgstr "Ei vielä kommentteja." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Kommentit" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Päivitetään..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Verestä" #: ../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:32 msgid "Default Browser" msgstr "Oletusselain" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Selainkomento epäonnistui: %s" #: ../src/browser.c:230 #, 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:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Ei voida luoda välimuistihakemistoa ”%s”!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 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:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d. %b %Y" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "”%s” ei ole kelvollinen liitetyyppinen asetustiedosto!" #: ../src/enclosure.c:288 msgid "You have not configured a download tool yet! Please do so in the 'Download' tab in Tools/Preferences." msgstr "Et ole vielä asettanut lataustyökalua! Tee niin Työkalut/Asetukset-valikon ’Lataus’-välilehdessä." #: ../src/enclosure.c:306 #, c-format msgid "" "Command failed: \n" "\n" "%s\n" "\n" " Please check wether 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Tiedoston ”%s” nimen vaihtaminen tiedostoksi ”%s” ei onnistunut.\n" #: ../src/export.c:406 ../src/export.c:408 #, 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:414 ../src/export.c:416 #, 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:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Tuotu syöteluettelo" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Tuo syöteluettelo" #: ../src/export.c:470 msgid "Import" msgstr "Tuo" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 msgid "OPML Files" msgstr "OPML-tiedostot" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Virhe syöteluettelon viemisessä!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Syöteluettelo viety!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Vie syöteluettelo" #: ../src/export.c:487 msgid "Export" msgstr "Vie" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "”%s” päivitetty..." #: ../src/feed.c:294 #, 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:404 msgid "There are no unread items" msgstr "Lukemattomia otsikkoja ei ole" #: ../src/main.c:164 msgid "Start Liferea with its main window in STATE. STATE may be `shown', `iconified', or `hidden'" msgstr "Käynnistä Liferea pääikkunassaan TILAssa. TILA voi olla ”shown”, ”iconified”, tai ”hidden”" #: ../src/main.c:164 msgid "STATE" msgstr "TILA" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Näytä versiotiedot ja poistu" #: ../src/main.c:166 msgid "Add a new subscription" msgstr "Lisää uusi syöte" #: ../src/main.c:166 msgid "uri" msgstr "internet-resurssin tunnus" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Tulosta kaikentyyppisiä vianjäljitysviestejä" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "Tulosta vianjäljitusviestit välimuistikäsittelylle" #: ../src/main.c:173 msgid "Print debugging messages for the configuration handling" msgstr "Tulosta asetuskäsittelyn vianjäljitysviestit" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Tulosta tietokantakäsittelyn vianjäljitysviestit" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "Tulosta graafisten käyttöliittymäfunktioiden vianjäljitusviestit" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Tulosta kaikki verkkotoimintojen vianjäljitysviestit" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "Tulosta jäsennysfunktioiden vianjäljitysviestit" #: ../src/main.c:179 msgid "Print debugging messages when a function takes too long to process" msgstr "Tulosta vianjäljitysviestit, kun funktion prosessointi kestää liian pitkään" #: ../src/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "Tulosta vianjäljitysviestejä funktioiden alussa ja lopussa" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "Tulosta vianjäljitysviestejä syötepäivitysten käsittelystä" #: ../src/main.c:182 msgid "Print debugging messages of the search folder matching" msgstr "Tulosta hakukansiotäsmäyksen vianjäljitusviestit" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "Tulosta laajoja vianjäljitysviestejä" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "Tulosta vianjäljitysviestejä tietystä aiheesta" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, Linux-syötelukija" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "Vieraile lisätietoja varten osoitteessa http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "Päivityspyyntö on peruttu" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Ei kyetä ratkaisemaan kohdeverkkokoneen nimeä" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Ei kyetä ratkaisemaan välimuistikoneen nimeä" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Yhteyden muodostaminen etäkoneeseen ei onnistunut" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Yhteyden muodostaminen välityspalvelimeen epäonnistui" #: ../src/net.c:325 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:328 msgid "The resource moved permanently to a new location" msgstr "Resurssi on siirretty pysyvästi uuteen sijaintiin" #. http 4xx client error #: ../src/net.c:331 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:333 msgid "Payment required" msgstr "Maksullinen" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Sinulla ei ole pääsyä tähän resurssiin" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Resurssia ei löydy" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Metodi ei ole mahdollinen" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Ei kelvollinen" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Välityspalvelin vaatii todennuksen" #: ../src/net.c:339 msgid "Request timed out" msgstr "Kyselyn aikakatkaisu" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Resurssia ei ole olemassa. Poista syöte!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Päivitysprosessissa oli sisäinen virhe" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Syöte ei ole käytettävissä: palvelin vaati ei-tuettua uudelleenohjausta!" #: ../src/net.c:349 msgid "Client Error" msgstr "Asiakasohjelman virhe" #: ../src/net.c:351 msgid "Server Error" msgstr "Palvelimen virhe" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Syöte ”%s” on jo päivitetty." #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Päivitetään favicon-kuvake kohteelle ”%s”" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "”%s” ei ole muuttunut viime kerrasta" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "”%s” päivittyy" #: ../src/update.c:259 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Virhe avattaessa tilapäistä tiedostoa %s suodatusta varten!" #: ../src/update.c:282 #, c-format msgid "%s exited with status %d" msgstr "%s sulkeutui, lopetuskoodi oli %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Virhe: tiedoston ”%s” avaaminen ei onnistunut" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Virhe: Tiedosto ”%s” ei ole olemassa" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Uusi etsintäkansio" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Virheitä oli lisää. Tuloste typistettiin!]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d liite" msgstr[1] "%d liitettä" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Valitse tiedosto" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d uusi)" msgstr[1] " (%d uutta)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Opasteaiheet" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Pika-asetukset" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "UKK" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea on nyt yhteydessä verkkoon." #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Toimi yhteydettä" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea ei ole yhteydessä verkkoon." #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Toimi verkossa" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "Uu_det syötteet" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "_Päivitä kaikki" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Päivittää kaikki syötteet." #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "_Merkitse kaikki luetuiksi" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Merkitsee kaikkien syötteiden kaikki uutiset luetuiksi." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Tuo syöteluettelo..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Tuo OPML-muotoisen syöteluettelon." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Vie syöteluettelo..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Vie OPML-muotoisen syöteluettelon." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Lopeta" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Syöte" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Poist_a kaikki otsikot" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Poistaa kaikki otsikot valitusta syötteestä." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "_Otsikko" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "Edellinen otsikko" #: ../src/ui/liferea_shell.c:924 msgid "Next Item" msgstr "Seuraava otsikko" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "_Seuraava lukematon otsikko" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Näytä" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "_Kasvata tekstin kokoa" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Kasvattaa tekstin kokoa otsikkonäkymässä." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "_Pienennä tekstin kokoa" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Pienentää tekstin kokoa otsikkonäkymässä." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "_Työkalut" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "_Päivitä valvonta" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "Näytä nykyisen päivitysjonon kaikkien syötteiden luettelo" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "As_etukset" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Muokkaa asetuksia." #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "_Etsi" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Etsi kaikista syötteistä..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Näyttää tai piilottaa etsintälaatikon." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Ohje" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "Sisäl_tö" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Katso tämän sovelluksen opastetta." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Pikaviite" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Katso Liferea-pikanäppäinten luetteloa." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_UKK" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Katso tämän sovelluksen Usein Kysyttyjä Kysymyksiä." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "Lifereasta" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Näyttää tietoja Lifereasta." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "_Normaalinäkymä" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Aseta näkymätilaksi sähköpostiasiakastila." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "Le_veä näkymä" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Aseta näkymä käyttämään kolmea pystysuoraa paneelia." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "Näytä yh_distettynä" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Aseta näkymätilaksi kahden paneelin tila." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "P_iennenetty syöteluettelo" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Jos valittu, vain lukemattomia otsikoita sisältävät syötteet näkyvät." #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "_Uusi syöte..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Lisää uuden syötteen syöteluetteloon." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Uu_si kansio..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Lisää kansion syöteluetteloon." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Uusi _etsintäkansio..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Lisää uuden etsintäkansion syöteluetteloon." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Uusi _lähde..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Lisää uuden syöteluettelolähteen." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "Uusi uutis_kori..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Lisää uuden uutiskorin." #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "_Merkitse luetuksi" #: ../src/ui/liferea_shell.c:979 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." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Päivitä" #: ../src/ui/liferea_shell.c:981 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." #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "_Ominaisuudet" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Avaa valitun syötteen ominaisuusikkunan." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "Po_ista" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Poistaa valitut syötteet." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Merkitse _luetuksi tai lukemattomaksi" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Merkitse otsikko lukemattomaksi tai luetuksi." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "_Merkitse otsikko" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Merkitse otsikko lukemattomaksi tai luetuksi." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "Poist_a" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Poistaa valitun otsikon." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "Avaa välileh_dessä" #: ../src/ui/liferea_shell.c:997 msgid "Launches the item's link in a new Liferea browser tab." msgstr "Avaa otsikon linkin uudessa Liferea-selainvälilehdessä." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 msgid "_Open In Browser" msgstr "_Avaa selaimessa" #: ../src/ui/liferea_shell.c:999 msgid "Launches the item's link in the Liferea item pane." msgstr "Avaa otsikon linkin Liferea-otsikkopaneelissa." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 msgid "Open In _External Browser" msgstr "Avaa ulkoisessa selaimessa" #: ../src/ui/liferea_shell.c:1001 msgid "Launches the item's link in the configured external browser." msgstr "Avaa otsikon linkin asetusten mukaisessa ulkoisessa selaimessa." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "T_oimi yhteydettä" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Tämä valitsin sallii sinun ottaa syötteen päivityksen pois käytöstä." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "K_okoruutunäyttö" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "Selaa kokoruutunäytöllä" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Linux-uutislukija" #: ../src/ui/liferea_shell.c:1341 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ä

" #: ../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:205 msgid "All Files" msgstr "Kaikki tiedostot" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Otsikko poistetaan" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Haluatko poistaa syötteen ”%s”?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Poiston vahvistus" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea ei ole yhteydessä verkkoon, joten päivittäminen ei ole mahdollista." #: ../src/ui/liferea_htmlview.c:627 msgid "Open Link In _Tab" msgstr "Avaa linkki _välilehdessä" #: ../src/ui/liferea_htmlview.c:628 msgid "_Open Link In Browser" msgstr "_Avaa linkki selaimessa" #: ../src/ui/liferea_htmlview.c:629 msgid "_Open Link In External Browser" msgstr "_Avaa linkki selaimessa" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "Kirja_nmerkintälinkki osoitteessa %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_Kopioi linkkisijainti" #: ../src/ui/liferea_htmlview.c:639 msgid "_Copy Image Location" msgstr "_Kopioi kuvasijainti" #: ../src/ui/liferea_htmlview.c:641 msgid "S_ave Link As" msgstr "T_allenna linkki nimellä" #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "T_allenna kuva nimellä" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "_Uusi syöte..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Otsikoton ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Päivämäärä" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Otsikko" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Otsikkoja ei ole valittu." #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Tällä otsikolla ei ole linkkiä!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Syöte, jonka otsikot poistetaan, täytyy valita!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "Kopioi uutiskoriin" #: ../src/ui/popup_menu.c:156 #, c-format msgid "_Bookmark at %s" msgstr "Kirja_nmerkintä osoitteessa %s" #: ../src/ui/popup_menu.c:160 msgid "Copy Item _Location" msgstr "_Kopioi otsikkosijainti" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "P_oista otsikko" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Avaa liitetiedosto..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Tallenna nimellä..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "_Kopioi linkki" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "_Päivitä kaikki" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "Näy_tä Liferea" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "_Päivitä kansio" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "_Merkitse kaikki luetuiksi" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "_Uusi" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "_Uusi syöte..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "Uusi läh_de..." #: ../src/ui/popup_menu.c:329 msgid "Sort Feeds" msgstr "Lajittele syötteet" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "_Rakenna uudelleen" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "GNOME-oletus" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Teksti kuvakkeiden alla" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Teksti kuvakkeiden rinnalla" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Vain kuvakkeet" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Vain teksti" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minuuttia" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "tuntia" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "päivää" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Välilyönti" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " välilyönti" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " välilyönti" #: ../src/ui/preferences_dialog.c:114 msgid "Normal View" msgstr "Normaalinäkymä" #: ../src/ui/preferences_dialog.c:115 msgid "Wide View" msgstr "Leveä näkymä" #: ../src/ui/preferences_dialog.c:116 msgid "Combined View" msgstr "Näytä yhdistettynä" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Käyttöohje" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Selaimen oletus" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Olemassa oleva ikkuna" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Uusi ikkuna" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Uusi välilehti" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "Integroi viestintävalikon kanssa (inidikaattori)" #: ../src/ui/preferences_dialog.c:685 msgid "Terminate instead of minimizing to the messaging menu" msgstr "Sulje sovellus, älä minimoi viestivalikkoon" #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "Käynnistä minimoituna viestivalikkoon" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Tyyppi" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Ohjelma" #: ../src/ui/ui_node.c:124 msgid "(Empty)" msgstr "(Tyhjä)" #: ../src/ui/ui_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Rakennetaan uudelleen" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Tällä syötteellä ei ole suositeltua päivitystaajuutta." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "Nimetön" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d uusi otsikko" msgstr[1] "%d uutta otsikkoa" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Ei uusia otsikkoja" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Ei uusia otsikoita" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Webbisivusto" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Virheellinen Atom-syöte: tuntematon tekijä" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d. %b %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../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:116 msgid "Google Reader login failed!" msgstr "Google-lukija-kirjautuminen epäonnistui!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google-lukija" #: ../src/fl_sources/google_source.c:384 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." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:326 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." #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Ei löytynyt syöteluettelotyyppejä!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Lähteen tyyppi" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:363 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." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "Ei kyetty jäsentämään tt-rss API-rajapinnan palauttamaa JSON-rakennetta" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Tätä syötettä ei ole enää olemassa!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Uutisella ei ole otsikkoa" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Vieraile" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Avaa syöte" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Merkitse kaikki luetuiksi" #: ../src/notification/libnotify.c:254 #, c-format 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ä" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Syötepäivitys" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Näytä yksityiskohdat" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Todennus" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Salasana:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "Käyttäjä_tunnus:" #: ../glade/auth.ui.h:6 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." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Salasana" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "_Käyttäjätunnus (sähköposti)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "normaalinäkymä" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "leveä näkymä" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Katso otsikoita" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "yhdistelmänäkymä" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Otsikot" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Verkko/Erillissovellus -painike" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Syötteen ominaisuudet" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Syötteen nimi" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "Syötteen _nimi:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "Päivitä väliaika" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Käytä oletusarvoista päivitystaajuutta." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_Syötteelle ominainen päivitystaajuus:" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Älä päivitä syötettä automaattisesti." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Yleistä" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Syötteen lähde" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Lähteen tyyppi:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "Läh_de:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "Ve_rkko-osoite" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Komento" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Paikallinen tiedosto" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Valitse tiedosto..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Käytä _muunnossuodatinta" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "M_uunna käyttäen:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "_Välimuistiasetusten oletusarvot" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Poista välimuisti käytöstä" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Rajoittamaton välimuisti" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "_Tallennettavien otsikoiden määrä:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Arkisto" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Käytä _HTTP-todennusta" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "_Älä käytä välityspalvelinta lataamiseen" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Lataa" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "L_ataa tämän syötteen liitteet automaattisesti." #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "_Lataa uutislinkit automaattisesti asetetussa selaimessa kun valitaan artikkeleita." #: ../glade/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "_Ohita tämän syötteen kommentit." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "_Pakota ponnahdusikkunailmoitus tälle syötteelle." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "_Älä koskaan tee ponnahdusikkunailmoitusta tälle syötteelle." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Merkitse ladatut otsikot luetuiksi." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Edistyneet ominaisuudet" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Uusi kansio" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "Kan_sion nimi:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Nimeä uudelleen" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "Uusi _nimi:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Etsintäkansion ominaisuudet" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "Haku_nimi:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "Löydä kohteita, jotka täyttävät seuraavat kriteerit" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "Mikä taha_nsa sääntö täsmää" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "K_aikkien sääntöjen on täsmättävä" #: ../glade/liferea.ui.h:57 msgid "Open Enclosure" msgstr "Avaa liitetiedosto" #: ../glade/liferea.ui.h:58 msgid "Open an enclosure of type:" msgstr "Avaa liitetiedostotyyppi:" #: ../glade/liferea.ui.h:59 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Selaa" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Tee näin aina jatkossa tämäntyyppisille liitetiedostoille." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Etsi kaikista syötteistä" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Etsi:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Lisäsäännöt..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Päivitä valvonta" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "Odottavat pyynnöt" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "Ladataan nyt" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Peru _kaikki" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Luo uutiskori" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Uutiskorin nimi:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Lifereasta" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Copyright © 2003-2012\n" "Liferea-ryhmä\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea on GTK+-pohjainen uutissyötteiden lukuohjelma" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Liferea-kotisivu" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Monimutkaisempi haku" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "E_tsintäkansio..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Luo hakukonesyöte" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "Kirjoita sanat joita haluat etsiä" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "Tulosten e_nimmäismäärä:" #: ../glade/liferea.ui.h:84 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ä." #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Ladataan / jälkikäsitellään" #: ../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/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 tt-rss account settings." msgstr "Kirjoita tt-rss-tiliasetuksesi." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "_Palvelinverkko-osoite" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "Käyttäjä_tunnus" #: ../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/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:4 msgid "Feed Update Settings" msgstr "Syötepäivitysasetukset" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "_Päivitä kaikki syötteet käynnistettäessä." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Oletusarvoinen syötteen _päivitystaajuus:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Syötteet" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "Kansion näyttöasetukset" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "P_iilota luetut otsikot." #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Syötekuvakkeet (Favicon-kuvakkeet)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Päivitä kaikki favicon-kuvakkeet nyt" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Kansiot" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Luetaan otsikkorivit" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "_Selaa otsikoita läpi näppäilemällä:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "_Oletusnäkymätila:" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Webbi-integraatio" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "Läh_etä kirjanmerkit kohteeseen" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Sisäisen selaimen asetukset" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Avaa linkit Liferean _ikkunassa." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "Poista _Javascript käytöstä." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "Ota käyttöön s_elainliitännäiset." #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "Ulkoisen selaimen asetukset" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Linkkien avaus:" #: ../glade/prefs.ui.h:28 msgid "_Manual:" msgstr "_Käyttöohje" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "(%s verkko-osoitteelle)" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Selain:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Selain" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Ilmoitusasetukset" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Näytä uudet otsikot sisältävä _ponnahdusikkuna." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Näytä t_ilakuvake paneelin ilmoitusalueessa (järjestelmäpalkki)." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "_Näytä kuvakkeiden määrä järjestelmäpalkissa." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "Sulj_e sovellus, älä minimoi järjestelmäkuvakkeeseen." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "Käynni_stä järjestelmäkuvakkeessa." #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Työkalupalkkiasetukset" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "Piil_ota työkalupalkki." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Työk_alupalkkipainikkeen nimiöt:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Käyttöliittymä" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "HTTP-välityspalvelin" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "Tunnista _automaattisesti (GNOME tai ympäristö)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_Ei välityspalvelinta" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Manuaaliasetus:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "Välityspalvelimen _portti:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "Välityspalvelimen _konenimi:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Käytä välityspalvelin-_todennusta" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "_Välityspalvelimen salasana:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Välityspalvelimen k_äyttäjätunnus:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Välityspalvelin" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "Ladataan liitetiedostoja" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "La_taa käyttäen" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "Avaa liitetiedosto" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Liitetiedostot" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "Lisäosat" #~ 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 "Synchronized with Nearby Hosts" #~ msgstr "Synkroinoitu läheisiin verkkokoneisiin" #~ 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 "_Delete" #~ msgstr "Po_ista syöte" #~ 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://liferea.sf.net" #~ msgstr "http://liferea.sf.net" #~ 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 "Search all feeds." #~ msgstr "Etsi kaikista syötteistä." #~ 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://liferea.sf.net/help/help" #~ msgstr "http://liferea.sf.net/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 "/Open" #~ msgstr "/Avaa" #~ 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.10.17/po/fr.po000066400000000000000000002016621261475620100146700ustar00rootroot00000000000000# 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 # Copyright (C) 2014, 2015 Guillaume Bernard # # 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 , 2014, 2015. # msgid "" msgstr "" "Project-Id-Version: liferea 1.10\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-06-11 22:55+0200\n" "PO-Revision-Date: 2015-02-28 00:07+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: Gtranslator 2.91.6\n" #: ../liferea.desktop.in.h:1 ../src/main.c:234 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Lecteur de flux" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Lecteur de flux Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Lisez les actualités des flux et blogs" #: ../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 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/liferea.ui.h:29 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 "No comments yet." msgstr "Pas encore de commentaires." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Commentaires" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Mise à jour …" #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Rafraîchir" #: ../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:32 msgid "Default Browser" msgstr "Navigateur par défaut" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Le lancement du navigateur a échoué : %s" #: ../src/browser.c:230 #, 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:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Impossible de créer le répertoire cache « %s » !" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Aujourd'hui %H:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "" "« %s » n'est pas un fichier de configuration de types d'annexes valide !" #: ../src/enclosure.c:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" "Vous n'avez pas encore configuré d'outil de téléchargement ! Vous pouvez le " "faire dans l'onglet « Téléchargement » de Outils/Préférences." #: ../src/enclosure.c:306 #, 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 que l'outil de téléchargement configuré soit installé et qu'il " "fonctionne correctement. Vous pouvez le changer dans l'onglet " "« Téléchargement » de Outils/Préférences." #: ../src/export.c:185 #, c-format msgid "Error renaming %s to %s\n" msgstr "Erreur lors du renommage de %s en %s\n" #: ../src/export.c:414 ../src/export.c:416 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "Erreur pendant la lecture du fichier OPML ! Impossible d'importer « %s » !" #: ../src/export.c:422 ../src/export.c:424 #, 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:445 ../src/export.c:447 #, 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:466 msgid "Imported feed list" msgstr "Liste des flux importée" #: ../src/export.c:478 msgid "Import Feed List" msgstr "Importer une liste de flux" #: ../src/export.c:478 msgid "Import" msgstr "Importer" #: ../src/export.c:478 ../src/export.c:495 ../src/fl_sources/opml_source.c:394 msgid "OPML Files" msgstr "Fichiers OPML" #: ../src/export.c:486 msgid "Error while exporting feed list!" msgstr "Erreur lors de l'exportation de la liste des flux !" #: ../src/export.c:488 msgid "Feed List exported!" msgstr "Liste des flux exportée !" #: ../src/export.c:495 msgid "Export Feed List" msgstr "Exporter la liste des flux" #: ../src/export.c:495 msgid "Export" msgstr "Exporter" #: ../src/feed.c:254 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:283 #, c-format msgid "\"%s\" updated..." msgstr "« %s » mis à jour …" #: ../src/feed.c:293 #, 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. Peut-être que cette page web ne " "supporte 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 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 sur le 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:404 msgid "There are no unread items" msgstr "Il n'y a aucun élément non lu" #: ../src/main.c:163 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', 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/main.c:163 msgid "STATE" msgstr "ÉTAT" #: ../src/main.c:164 msgid "Show version information and exit" msgstr "Affiche des informations sur la version et quitte" #: ../src/main.c:165 msgid "Add a new subscription" msgstr "Ajoute un nouvel abonnement" #: ../src/main.c:165 msgid "uri" msgstr "uri" #: ../src/main.c:170 msgid "Print debugging messages of all types" msgstr "Affiche des messages de débogage de tout type" #: ../src/main.c:171 msgid "Print debugging messages for the cache handling" msgstr "Affiche des messages de débogage pour la gestion du cache" #: ../src/main.c:172 msgid "Print debugging messages for the configuration handling" msgstr "Affiche des messages de débogage pour la gestion de la configuration" #: ../src/main.c:173 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/main.c:174 msgid "Print debugging messages of all GUI functions" msgstr "Affiche des messages de débogage des fonctions de l'interface" #: ../src/main.c:175 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/main.c:176 msgid "Print debugging messages of all network activity" msgstr "Affiche des messages de débogage de toute l'activité réseau" #: ../src/main.c:177 msgid "Print debugging messages of all parsing functions" msgstr "Affiche des messages de débogage des fonctions d'analyse syntaxique" #: ../src/main.c:178 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/main.c:179 msgid "Print debugging messages when entering/leaving functions" msgstr "" "Affiche des messages de débogage à l'entrée et à la sortie de fonctions" #: ../src/main.c:180 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/main.c:181 msgid "Print debugging messages of the search folder matching" msgstr "Affiche des messages de dépannage pour le dossier de recherche" #: ../src/main.c:182 msgid "Print verbose debugging messages" msgstr "Affiche des messages de débogage verbeux" #: ../src/main.c:193 ../src/main.c:194 msgid "Print debugging messages for the given topic" msgstr "Affiche des messages de débogage pour le sujet donné" #: ../src/main.c:201 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, le lecteur de flux pour Linux" #: ../src/main.c:202 msgid "For more information, please visit http://liferea.sourceforge.net/" msgstr "" "Pour plus d'information, veuillez visiter http://liferea.sourceforge.net/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "La demande de mise à jour a été annulée" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Impossible de résoudre le nom de la machine de destination" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Impossible de résoudre le nom de la machine serveur mandataire" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Impossible de se connecter à la machine distante" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Impossible de se connecter au serveur mandataire" #: ../src/net.c:325 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:328 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:331 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 de ce flux" #: ../src/net.c:333 msgid "Payment required" msgstr "Paiement nécessaire" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Vous n'êtes pas autorisé à accéder à cette ressource" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Ressource introuvable" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Méthode interdite" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Non acceptable" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Authentification par serveur mandataire exigée" #: ../src/net.c:339 msgid "Request timed out" msgstr "Délai de la requête expiré" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Parti. La ressource n'existe pas. Veuillez vous désabonner !" #: ../src/net.c:345 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:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Flux non disponible : le serveur a demandé une redirection non supportée !" #: ../src/net.c:349 msgid "Client Error" msgstr "Erreur du client" #: ../src/net.c:351 msgid "Server Error" msgstr "Erreur du serveur" #: ../src/net.c:353 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 "est « non 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 "Titre de l'élément" #: ../src/subscription.c:105 #, 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:110 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "L'abonnement « %s » avait cessé d'exister. Liferea ne le mettra plus à jour !" #: ../src/subscription.c:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Mise à jour de l'icône du flux « %s »" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, 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:272 #, c-format msgid "Updating \"%s\"" msgstr "Mise à jour de « %s »" #: ../src/update.c:258 #, 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:281 #, c-format msgid "%s exited with status %d" msgstr "%s s'est terminé avec le code de retour %d" #: ../src/update.c:287 ../src/update.c:288 ../src/update.c:400 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Erreur : impossible d'ouvrir le tuyau « %s »" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:426 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Erreur : impossible d'ouvrir le fichier « %s »" #: ../src/update.c:432 #, 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 "Annexe" #. 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d annexe" msgstr[1] "%d annexes" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Choisir un fichier" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d nouveau)" msgstr[1] " (%d nouveaux)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Sommaire de l'aide" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Raccourcis utiles" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "FAQ" #: ../src/ui/liferea_shell.c:795 msgid "Liferea is now online" msgstr "Liferea est maintenant connecté" #: ../src/ui/liferea_shell.c:797 msgid "Work Offline" msgstr "Travailler déconnecté" #: ../src/ui/liferea_shell.c:799 msgid "Liferea is now offline" msgstr "Liferea est maintenant déconnecté" #: ../src/ui/liferea_shell.c:801 msgid "Work Online" msgstr "Travailler connecté" #: ../src/ui/liferea_shell.c:897 msgid "_Subscriptions" msgstr "A_bonnements" #: ../src/ui/liferea_shell.c:898 msgid "Update _All" msgstr "Tout mettre à _jour" #: ../src/ui/liferea_shell.c:898 msgid "Updates all subscriptions." msgstr "Met à jour tous les abonnements." #: ../src/ui/liferea_shell.c:900 msgid "Mark All As _Read" msgstr "Marquer le tout comme _lu" #: ../src/ui/liferea_shell.c:900 msgid "Marks read every item of every subscription." msgstr "Marque comme lu chaque élément de chaque abonnement." #: ../src/ui/liferea_shell.c:902 msgid "_Import Feed List..." msgstr "_Importer la liste des flux …" #: ../src/ui/liferea_shell.c:902 msgid "Imports an OPML feed list." msgstr "Importe une liste de flux OPML." #: ../src/ui/liferea_shell.c:903 msgid "_Export Feed List..." msgstr "_Exporter la liste des flux  …" #: ../src/ui/liferea_shell.c:903 msgid "Exports the feed list as OPML." msgstr "Exporte la liste des flux en OPML." #: ../src/ui/liferea_shell.c:904 msgid "_Quit" msgstr "_Quitter" #: ../src/ui/liferea_shell.c:906 msgid "_Feed" msgstr "_Flux" #: ../src/ui/liferea_shell.c:907 msgid "Remove _All Items" msgstr "Supprimer _tous les éléments" #: ../src/ui/liferea_shell.c:907 msgid "Removes all items of the currently selected feed." msgstr "Supprime tous les éléments du flux sélectionné." #: ../src/ui/liferea_shell.c:910 msgid "_Item" msgstr "_Élément" #: ../src/ui/liferea_shell.c:911 msgid "Previous Item" msgstr "Élément précédent" #: ../src/ui/liferea_shell.c:913 msgid "Next Item" msgstr "Élément suivant" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:918 msgid "_Next Unread Item" msgstr "Élément _non lu suivant" #: ../src/ui/liferea_shell.c:921 msgid "_View" msgstr "_Vue" #: ../src/ui/liferea_shell.c:922 ../src/ui/liferea_htmlview.c:653 msgid "_Increase Text Size" msgstr "_Augmenter la taille du texte" #: ../src/ui/liferea_shell.c:922 msgid "Increases the text size of the item view." msgstr "Augmente la taille du texte dans la vue de l'élément." #: ../src/ui/liferea_shell.c:924 ../src/ui/liferea_htmlview.c:654 msgid "_Decrease Text Size" msgstr "_Réduire la taille du texte" #: ../src/ui/liferea_shell.c:924 msgid "Decreases the text size of the item view." msgstr "Réduit la taille du texte dans la vue de l'élément." #: ../src/ui/liferea_shell.c:927 msgid "_Tools" msgstr "_Outils" #: ../src/ui/liferea_shell.c:928 msgid "_Update Monitor" msgstr "_Moniteur de mise à jour" #: ../src/ui/liferea_shell.c:928 msgid "Show a list of all feeds currently in the update queue" msgstr "" "Montrer une liste de tous les flux actuellement dans la queue de mise à jour" #: ../src/ui/liferea_shell.c:930 msgid "_Preferences" msgstr "_Préférences" #: ../src/ui/liferea_shell.c:930 msgid "Edit Preferences." msgstr "Éditer les préférences." #: ../src/ui/liferea_shell.c:933 msgid "S_earch" msgstr "_Recherche" #: ../src/ui/liferea_shell.c:934 msgid "Search All Feeds..." msgstr "Chercher dans tous les flux …" #: ../src/ui/liferea_shell.c:934 msgid "Show the search dialog." msgstr "Affiche la boîte de recherche." #: ../src/ui/liferea_shell.c:936 msgid "_Help" msgstr "_Aide" #: ../src/ui/liferea_shell.c:937 msgid "_Contents" msgstr "_Sommaire" #: ../src/ui/liferea_shell.c:937 msgid "View help for this application." msgstr "Voir l'aide concernant cette application." #: ../src/ui/liferea_shell.c:938 msgid "_Quick Reference" msgstr "_Raccourcis utiles" #: ../src/ui/liferea_shell.c:938 msgid "View a list of all Liferea shortcuts." msgstr "Voir une liste des raccourcis clavier de Liferea." #: ../src/ui/liferea_shell.c:940 msgid "_FAQ" msgstr "_FAQ" #: ../src/ui/liferea_shell.c:940 msgid "View the FAQ for this application." msgstr "Voir la FAQ de cette application." #: ../src/ui/liferea_shell.c:941 msgid "_About" msgstr "À _propos" #: ../src/ui/liferea_shell.c:941 msgid "Shows an about dialog." msgstr "Affiche une fenêtre « À propos »." #: ../src/ui/liferea_shell.c:945 msgid "_Normal View" msgstr "Vue normale" #: ../src/ui/liferea_shell.c:945 msgid "Set view mode to mail client mode." msgstr "Mettre la vue comme celle d'un client mail." #: ../src/ui/liferea_shell.c:947 msgid "_Wide View" msgstr "Vue large" #: ../src/ui/liferea_shell.c:947 msgid "Set view mode to use three vertical panes." msgstr "Mettre une vue utilisant trois cadres verticaux." #: ../src/ui/liferea_shell.c:949 msgid "_Combined View" msgstr "Vue combinée" #: ../src/ui/liferea_shell.c:949 msgid "Set view mode to two pane mode." msgstr "Mettre une vue utilisant deux cadres." #: ../src/ui/liferea_shell.c:954 msgid "_Reduced Feed List" msgstr "Liste de flux ré_duite" #: ../src/ui/liferea_shell.c:954 msgid "Hide feeds with no unread items." msgstr "Cacher les flux sans éléments non lus." #: ../src/ui/liferea_shell.c:959 msgid "_New Subscription..." msgstr "Nouvel _abonnement …" #: ../src/ui/liferea_shell.c:959 msgid "Adds a subscription to the feed list." msgstr "Ajoute un abonnement à la liste des flux." #: ../src/ui/liferea_shell.c:961 ../src/ui/popup_menu.c:320 msgid "New _Folder..." msgstr "Nouveau _dossier …" #: ../src/ui/liferea_shell.c:961 msgid "Adds a folder to the feed list." msgstr "Ajoute un dossier à la liste des flux." #: ../src/ui/liferea_shell.c:962 ../src/ui/popup_menu.c:323 msgid "New S_earch Folder..." msgstr "Nouveau dossier de _recherche …" #: ../src/ui/liferea_shell.c:962 msgid "Adds a new search folder to the feed list." msgstr "Ajoute un nouveau dossier de recherche à la liste des flux." #: ../src/ui/liferea_shell.c:963 msgid "New _Source..." msgstr "Nouvelle _source …" #: ../src/ui/liferea_shell.c:963 msgid "Adds a new feed list source." msgstr "Ajoute une nouvelle source de liste de flux." #: ../src/ui/liferea_shell.c:964 ../src/ui/popup_menu.c:325 msgid "New _News Bin..." msgstr "Nouvelle _boîte à nouvelles …" #: ../src/ui/liferea_shell.c:964 msgid "Adds a new news bin." msgstr "Ajoute une nouvelle boîte à nouvelles." #: ../src/ui/liferea_shell.c:968 msgid "_Mark Items Read" msgstr "Marquer les éléments comme _lus" #: ../src/ui/liferea_shell.c:968 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." #: ../src/ui/liferea_shell.c:970 ../src/ui/popup_menu.c:300 msgid "_Update" msgstr "Mettre à _jour" #: ../src/ui/liferea_shell.c:970 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é." #: ../src/ui/liferea_shell.c:975 msgid "_Properties" msgstr "_Propriétés" #: ../src/ui/liferea_shell.c:975 msgid "Opens the property dialog for the selected subscription." msgstr "Ouvre la fenêtre des propriétés pour l'abonnement sélectionné." #: ../src/ui/liferea_shell.c:976 msgid "_Remove" msgstr "_Supprimer" #: ../src/ui/liferea_shell.c:976 msgid "Removes the selected subscription." msgstr "Supprime l'abonnement sélectionné." #: ../src/ui/liferea_shell.c:980 ../src/ui/popup_menu.c:163 msgid "Toggle _Read Status" msgstr "Changer le statut _lu" #: ../src/ui/liferea_shell.c:980 msgid "Toggles the read status of the selected item." msgstr "Change le statut lu de l'élément sélectionné." #: ../src/ui/liferea_shell.c:982 ../src/ui/popup_menu.c:164 msgid "Toggle Item _Flag" msgstr "Changer le _marqueur de l'élément" #: ../src/ui/liferea_shell.c:982 msgid "Toggles the flag status of the selected item." msgstr "Change le statut du marqueur de l'élément sélectionné." #: ../src/ui/liferea_shell.c:984 msgid "R_emove" msgstr "_Supprimer" #: ../src/ui/liferea_shell.c:984 msgid "Removes the selected item." msgstr "Supprime l'élément sélectionné." #: ../src/ui/liferea_shell.c:986 ../src/ui/popup_menu.c:127 msgid "Open In _Tab" msgstr "Ouvrir dans un _onglet" #: ../src/ui/liferea_shell.c:986 msgid "Launches the item's link in a new Liferea browser tab." msgstr "Ouvre le lien de l'élément dans un nouvel onglet de Liferea." #: ../src/ui/liferea_shell.c:988 ../src/ui/popup_menu.c:128 msgid "_Open In Browser" msgstr "_Ouvrir dans le navigateur interne" #: ../src/ui/liferea_shell.c:988 msgid "Launches the item's link in the Liferea item pane." msgstr "Ouvre le lien de l'élément dans le navigateur configuré." #: ../src/ui/liferea_shell.c:990 ../src/ui/popup_menu.c:129 msgid "Open In _External Browser" msgstr "Ouvrir dans le navigateur _externe" #: ../src/ui/liferea_shell.c:990 msgid "Launches the item's link in the configured external browser." msgstr "Ouvre le lien de l'élément dans le navigateur configuré." # J'ai fait le choix de cette traduction car il est plus explicite que 'travailler déconnecté' #: ../src/ui/liferea_shell.c:995 ../src/ui/popup_menu.c:193 msgid "_Work Offline" msgstr "_Mode hors ligne" #: ../src/ui/liferea_shell.c:995 msgid "This option allows you to disable subscription updating." msgstr "Cette option vous permet de désactiver la mise à jour des abonnements." #: ../src/ui/liferea_shell.c:997 msgid "_Fullscreen" msgstr "_Plein écran" #: ../src/ui/liferea_shell.c:997 msgid "Browse at full screen" msgstr "Naviguer en plein écran" #: ../src/ui/liferea_shell.c:1328 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Lecteur de flux pour Linux" #: ../src/ui/liferea_shell.c:1330 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 "" "

Bienvenue dans Liferea, agrégateur graphique de nouvelles pour des " "flux en ligne.

Vous pouvez ajouter de nouveaux abonnements " "

  • depuis le menu principal « Abonnements » -> « Nouvel abonnement " "»
  • en déposant des liens de flux dans la liste d'abonnements
  • en cliquant sur des liens avec le bouton droit et en choisissant « " "S'abonner » dans Liferea

" #: ../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:211 msgid "All Files" msgstr "Tous les fichiers" #: ../src/ui/feed_list_view.c:338 msgid "Deleting entry" msgstr "Suppression de l'entrée" #: ../src/ui/feed_list_view.c:339 #, 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_view.c:339 #, 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_view.c:351 msgid "Deletion Confirmation" msgstr "Confirmation de la suppression" #: ../src/ui/feed_list_view.c:382 msgid "Liferea is in offline mode. No update possible." msgstr "" "Liferea est en mode hors-ligne. Il n'est pas possible de faire de mise à " "jour." #: ../src/ui/liferea_htmlview.c:624 msgid "Open Link In _Tab" msgstr "Ouvrir le lien dans un _onglet" #: ../src/ui/liferea_htmlview.c:625 msgid "_Open Link In Browser" msgstr "_Ouvrir le lien dans le navigateur" #: ../src/ui/liferea_htmlview.c:626 msgid "_Open Link In External Browser" msgstr "_Ouvrir le lien dans le navigateur externe" #: ../src/ui/liferea_htmlview.c:629 #, c-format msgid "_Bookmark Link at %s" msgstr "_Publier le lien sur %s" #: ../src/ui/liferea_htmlview.c:633 msgid "_Copy Link Location" msgstr "_Copier l'adresse du lien" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Image Location" msgstr "_Copier l'adresse de l'image" #: ../src/ui/liferea_htmlview.c:638 msgid "S_ave Link As" msgstr "Enregistrer le lien sous" #: ../src/ui/liferea_htmlview.c:640 msgid "S_ave Image As" msgstr "Enregistrer l'image sous" #: ../src/ui/liferea_htmlview.c:643 msgid "_Subscribe..." msgstr "S'_abonner …" #: ../src/ui/item_list_view.c:398 msgid "*** No title ***" msgstr "*** Pas de titre ***" #: ../src/ui/item_list_view.c:661 msgid "Date" msgstr "Date" #: ../src/ui/item_list_view.c:675 msgid "Headline" msgstr "Titre" #: ../src/ui/item_list_view.c:777 ../src/ui/item_list_view.c:798 #: ../src/ui/item_list_view.c:819 ../src/ui/item_list_view.c:883 #: ../src/ui/item_list_view.c:968 ../src/ui/item_list_view.c:983 msgid "No item has been selected" msgstr "Aucun élément n'a été sélectionné" #: ../src/ui/item_list_view.c:794 ../src/ui/item_list_view.c:815 msgid "This item has no link specified!" msgstr "Cet élément n'a pas de lien spécifié !" #: ../src/ui/item_list_view.c:871 msgid "You must select a feed to delete its items!" msgstr "Vous devez sélectionner un flux pour effacer ses éléments !" #: ../src/ui/popup_menu.c:141 msgid "Copy to News Bin" msgstr "Copier dans la boîte à nouvelles" #: ../src/ui/popup_menu.c:155 #, c-format msgid "_Bookmark at %s" msgstr "_Publier le lien sur %s" #: ../src/ui/popup_menu.c:159 msgid "Copy Item _Location" msgstr "_Copier l'adresse de l'image" #: ../src/ui/popup_menu.c:165 msgid "R_emove Item" msgstr "_Supprimer l'élément" #: ../src/ui/popup_menu.c:178 msgid "Open Enclosure..." msgstr "Ouvrir l'annexe …" #: ../src/ui/popup_menu.c:179 msgid "Save As..." msgstr "Enregistrer sous …" #: ../src/ui/popup_menu.c:180 msgid "Copy Link Location" msgstr "Copier l'adresse du lien" #: ../src/ui/popup_menu.c:194 msgid "_Update All" msgstr "Mettre à _jour le tout" #: ../src/ui/popup_menu.c:199 msgid "_Show Liferea" msgstr "_Montrer Liferea" #: ../src/ui/popup_menu.c:302 msgid "_Update Folder" msgstr "_Mettre à jour le dossier" #: ../src/ui/popup_menu.c:304 msgid "_Mark All As Read" msgstr "_Marquer le tout comme lu" #: ../src/ui/popup_menu.c:314 msgid "_New" msgstr "_Nouveau" #: ../src/ui/popup_menu.c:317 msgid "New _Subscription..." msgstr "Nouvel _abonnement …" #: ../src/ui/popup_menu.c:324 msgid "New S_ource..." msgstr "Nouvelle _source …" #: ../src/ui/popup_menu.c:333 msgid "Sort Feeds" msgstr "Trier les flux" #: ../src/ui/popup_menu.c:339 msgid "_Rebuild" msgstr "_Reconstruire" #: ../src/ui/popup_menu.c:351 msgid "Convert To Local Subscriptions..." msgstr "Nouvel _abonnement …" #: ../src/ui/preferences_dialog.c:87 msgid "GNOME default" msgstr "Boutons de GNOME" #: ../src/ui/preferences_dialog.c:88 msgid "Text below icons" msgstr "Texte sous les icônes" #: ../src/ui/preferences_dialog.c:89 msgid "Text beside icons" msgstr "Texte à côté des icônes" #: ../src/ui/preferences_dialog.c:90 msgid "Icons only" msgstr "Icônes uniquement" #: ../src/ui/preferences_dialog.c:91 msgid "Text only" msgstr "Texte uniquement" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minutes" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "heures" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "jours" #: ../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:108 msgid " Space" msgstr " Espace" #: ../src/ui/preferences_dialog.c:113 msgid "Normal View" msgstr "Vue normale" #: ../src/ui/preferences_dialog.c:114 msgid "Wide View" msgstr "Vue large" #: ../src/ui/preferences_dialog.c:115 msgid "Combined View" msgstr "Vue combinée" #: ../src/ui/preferences_dialog.c:500 msgid "Manual" msgstr "Manuel" #: ../src/ui/preferences_dialog.c:515 msgid "Browser default" msgstr "Choix par défaut du navigateur" #: ../src/ui/preferences_dialog.c:518 msgid "Existing window" msgstr "Fenêtre existante" #: ../src/ui/preferences_dialog.c:521 msgid "New window" msgstr "Nouvelle fenêtre" #: ../src/ui/preferences_dialog.c:524 msgid "New tab" msgstr "Nouvel onglet" #: ../src/ui/preferences_dialog.c:683 msgid "Integrate with the messaging menu (indicator)" msgstr "Intégrer avec le menu de messagerie (indicateur)" #: ../src/ui/preferences_dialog.c:686 msgid "Terminate instead of minimizing to the messaging menu" msgstr "Fermer au lieu de minimiser dans le menu de messagerie" #: ../src/ui/preferences_dialog.c:689 msgid "Start minimized to the messaging menu" msgstr "Lancer minimisé dans le menu de messagerie" #: ../src/ui/preferences_dialog.c:789 msgid "Type" msgstr "Type" #: ../src/ui/preferences_dialog.c:792 msgid "Program" msgstr "Programme" #: ../src/ui/ui_node.c:123 msgid "(Empty)" msgstr "(Vide)" #: ../src/ui/ui_node.c:320 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Reconstruction" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Ce flux ne spécifie aucun intervalle de mise à jour." #: ../src/ui/browser_tabs.c:153 msgid "Untitled" msgstr "Sans titre" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d nouvel élément" msgstr[1] "%d nouveaux éléments" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Pas de nouveaux éléments" #: ../src/ui/ui_tray.c:228 #, c-format msgid "" "%s\n" "%d unread item" msgid_plural "" "%s\n" "%d unread items" msgstr[0] "" "%s\n" "%d élément non lu" msgstr[1] "" "%s\n" "%d éléments non lus" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Pas d'éléments non lus" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Site web" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Flux Atom invalide : auteur inconnu" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:273 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nouvel abonnement" #: ../src/fl_sources/google_source.c:115 msgid "Google Reader login failed!" msgstr "La connexion à Google Reader a échouée !" #: ../src/fl_sources/google_source.c:394 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:395 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 "" "Intégrer la liste des flux de votre compte Google Reader. Liferea présentera " "vos abonnements Google Reader et synchronisera votre liste de flux et listes " "de lecture." #: ../src/fl_sources/opml_source.c:326 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:327 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 "" "Intégrer des blogrolls ou Planets dans votre liste de flux. Liferea ajoutera " "ou supprimera automatiquement des flux suivant les changements du document " "source OPML" #: ../src/fl_sources/opml_source.c:394 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:238 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:268 msgid "Source Type" msgstr "Type de source" #. 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:412 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "L'abonnement à « %s » a été ajouté aux flux locaux !" #: ../src/fl_sources/ttrss_source.c:360 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:361 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 "" "Intégrer la liste des flux de votre compte Tiny Tiny RSS 1.5+. Liferea " "présentera vos abonnements tt-rss et synchronisera votre liste de flux et " "listes de lecture." #: ../src/fl_sources/ttrss_source_feed.c:119 msgid "Could not parse JSON returned by tt-rss API!" msgstr "Impossible d'analyser le JSON retourné par l'API tt-rss !" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Ce flux n'existe plus !" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Cette nouvelle n'a pas de titre" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Visiter" #: ../src/notification/libnotify.c:167 ../src/notification/libnotify.c:263 msgid "Open feed" msgstr "Ouvrir le flux" #: ../src/notification/libnotify.c:170 ../src/notification/libnotify.c:266 msgid "Mark all as read" msgstr "Marquer le tout comme lu" #: ../src/notification/libnotify.c:247 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "%s a %d mise à jour" msgstr[1] "%s a %d mises à jour" #: ../src/notification/libnotify.c:249 msgid "Feed Update" msgstr "Mise à jour du flux" #: ../src/notification/libnotify.c:260 msgid "Show details" msgstr "Montrer les détails" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Authentification" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Mot de passe :" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "Nom d'_utilisateur :" #: ../glade/auth.ui.h:6 msgid "" "Note: The username and password will be saved to your Liferea feedlist " "file without using encryption." msgstr "" "Note : le nom d'utilisateur et le mot de passe seront sauvés non chiffrés " "dans votre liste de flux Liferea." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Mot de passe" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "Nom d'_utilisateur (e-mail)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "vue normale" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "vue large" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Voir les titres" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "vue combinée" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Titres" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Bouton connecté/déconnecté" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Propriétés des abonnements" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Nom du flux" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "Nom du _flux :" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "Intervalle de mise à jour" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "" "_Utiliser l'intervalle de mise à jour par défaut, défini de manière globale." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_Intervalle de mise à jour spécifique au flux de" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "Ne _pas mettre à jour ce flux automatiquement." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Général" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Source du flux" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Type de source :" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Source :" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Commande" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "Fichier _local" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Sélectionner un fichier …" #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Utiliser un _filtre de conversion" # Le mot "extension" est utilisé pour se conformer aux standards utilisés par la traduction de GNOME. #: ../glade/liferea.ui.h:27 ../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 " "d'extensions pour accéder aux flux et aux répertoires qui sont dans des " "formats non supportés. Lisez la documentation pour de plus amples " "informations." #: ../glade/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Convertir _en utilisant :" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "_Réglage du cache par défaut" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Désactiver le cache" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Cache illimité" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "Nombre d'éléments à _sauvegarder :" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Archivage" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Utiliser l'_authentification HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "Ne _pas utiliser de serveur mandataire pour le téléchargement" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Téléchargement" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "_Télécharger automatiquement toutes les contenus annexes de ce flux." #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "_Chargement auto du lien assigné dans le navigateur configuré lors de la " "sélection des articles." #: ../glade/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "_Ignorer les flux de commentaires pour cet abonnement." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "_Forcer la notification par popup pour cet abonnement." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "Ne _jamais faire de notification par popup pour cet abonnement." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Marquer les éléments téléchargés comme lus." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Avancé" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Nouveau dossier" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "Nom du _dossier :" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Renommer" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Nouveau nom :" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Propriétés du dossier de recherche" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "Nom de la _recherche :" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "Trouver les éléments satisfaisant les critères suivants" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "N'_importe quelle règle s'applique" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "_Toutes les règles doivent s'appliquer" #: ../glade/liferea.ui.h:57 msgid "Open Enclosure" msgstr "Ouvrir l'annexe …" #: ../glade/liferea.ui.h:58 msgid "Open an enclosure of type:" msgstr "Téléchargement d'une annexe de type :" #: ../glade/liferea.ui.h:59 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 annexe ? 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Parcourir" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "" "_Faire ceci automatiquement pour les annexes comme celle-ci à partir de " "maintenant." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Chercher dans tous les flux" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Chercher :" #: ../glade/liferea.ui.h:64 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Entrez une chaîne à rechercher que Liferea doit trouver soit dans le titre, " "soit dans le contenu d'un élément." #: ../glade/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Avancé …" #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Moniteur de mise à jour" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "Demandes en attente" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "En cours de téléchargement" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "_Annuler le tout" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Créer une boîte à nouvelles" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "Nom de _boîte à nouvelles :" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "À propos" #: ../glade/liferea.ui.h:74 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea est un agrégateur de nouvelles pour GTK+" #: ../glade/liferea.ui.h:75 msgid "Liferea Homepage" msgstr "Page d'accueil de Liferea" #: ../glade/liferea.ui.h:76 msgid "Advanced Search" msgstr "Recherche avancée" #: ../glade/liferea.ui.h:77 msgid "_Search Folder..." msgstr "_Dossier de recherche …" #: ../glade/liferea.ui.h:78 msgid "Create Search Engine Feed" msgstr "Créer un flux de moteur de recherche" #: ../glade/liferea.ui.h:79 msgid "enter any search string you want" msgstr "entrer n'importe quelle chaîne voulue" #: ../glade/liferea.ui.h:80 msgid "Maximal _Number Of Result Items:" msgstr "Nombre _maximal de résultats :" #: ../glade/liferea.ui.h:81 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 : Liferea va générer un abonnement à un flux, utilisé pour récupérer " "les résultats du moteur de recherche pour la chaîne de recherche spécifiée. " "Vous pouvez garder ce flux définitivement et le mettre à jour comme " "n'importe quel autre abonnement." #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Téléchargement / post-traitement" #: ../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/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 tt-rss account settings." msgstr "Veuillez entrer les paramètres de votre compte tt-rss." #: ../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/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/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 par défaut à sauvegarder :" #: ../glade/prefs.ui.h:4 msgid "Feed Update Settings" msgstr "Réglages de la mise à jour du flux" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "_Mettre à jour tous les abonnements au démarrage." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "_Intervalle de rafraîchissement des flux par défaut :" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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 : Veuillez vous souvenir de régler un délai de rafraîchissement " "raisonnable. \n" "Un délai inférieur à une heure n'est généralement qu'un gaspillage de bande " "passante." #: ../glade/prefs.ui.h:9 msgid "Feeds" msgstr "Flux" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "Réglages d'affichage des dossiers" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "_Cacher les éléments lus." #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Icônes des flux" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "Mettre à _jour toutes les icônes des flux maintenant" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Dossiers" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Lecture des titres" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "_Survoler les articles avec :" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "Vue par _défaut :" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Intégration web" # Toujours pour une hamonisation avec GNOME, 'marque page' est remplacé par 'signet'. #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Poster les signets sur" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Réglages du navigateur interne" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Ouvrir les liens dans la fenêtre de _Liferea." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "Désactiver _Javascript." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "Activer les _extensions du navigateur." #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "Réglages du navigateur externe" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Ouvrir le lien dans :" #: ../glade/prefs.ui.h:28 msgid "_Manual:" msgstr "_Manuel :" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "(%s pour URL)" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Navigateur :" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Navigateur" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Réglages des notifications" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Afficher une notification avec les nouveaux titres." # La présence de 'system tray' semble obsolète : abscence sur GNOME d'une barre des tâches. Pour les autres DE, le terme 'zone de notification' est suffisament clair. #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Afficher une _icône de statut dans la zone de notification." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "_Montrer le nombre de nouveaux éléments dans l'icône." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "_Quitter au lieu de minimiser dans l'icône." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Démarrer dans l'icône de la barre des tâches." #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Réglages de la barre d'outils" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Cacher la barre d'outils." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "_Boutons de la barre d'outils :" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Interface" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "Serveur mandataire HTTP" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_Détection automatique (GNOME ou environnement)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "Pa_s de serveur mandataire" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Réglage manuel :" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "_Port du serveur mandataire :" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "_Hôte du serveur mandataire :" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Utiliser l'_authentification pour le serveur mandataire" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "_Mot de passe pour le serveur mandataire :" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "_Nom d'utilisateur pour le serveur mandataire :" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "Téléchargement d'annexes" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Télécharger en utilisant" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "Ouverture des annexes" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Annexes" # Conformation aux termes utilisés pour GNOME #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "Greffons" #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Copyright (c) 2003-2011\n" #~ "L'équipe Liferea\n" #~ msgid "Download and view feeds" #~ msgstr "Télécharger et voir des flux" #~ msgid "You may want to validate the feed using" #~ msgstr "Vous pouvez valider le flux avec" #~ msgid "Launch Item In _Tab" #~ msgstr "Ouvrir l'élément dans un onglet (_tab)" #~ msgid "_Launch Item In Browser" #~ msgstr "_Ouvrir l'élément dans le navigateur" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Copier l'_URL de l'élément dans le presse-papiers" #~ msgid "flag" #~ msgstr "marqueur" #~ msgid "bookmark" #~ msgstr "marque-page" #~ msgid "comments" #~ msgstr "commentaires" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Le téléchargement de l'annexe a ÉCHOUÉ : \"%s\"" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Le téléchargement de l'annexe s'est terminé : \"%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 "" #~ "Cette version de Liferea utilise un nouveau format de cache et a converti " #~ "votre cache de flux. Le contenu du cache dans %s n'a pas été effacé " #~ "automatiquement. Veuillez supprimer ce répertoire à la main une fois que " #~ "vous êtes sûr que la conversion s'est correctement effectuée !" #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Le téléchargement a ÉCHOUÉ : \"%s\"" #~ msgid "Download finished." #~ msgstr "Le téléchargement s'est terminé." #~ msgid "Choose download directory" #~ msgstr "Choisissez un répertoire de téléchargement" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Manuel :\n" #~ "(%s pour l'URL)" #~ msgid "_Save downloads in" #~ msgstr "Sauver les téléchargements _dans" #~ msgid "Synchronized with Nearby Hosts" #~ msgstr "Synchronisé avec les machines voisines" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "_Activer la synchronisation avec le réseau local" #~ msgid "_Service Name" #~ msgstr "_Nom de service" #~ msgid "Sync" #~ msgstr "Synchro" #~ msgid "Downloading Enclosure" #~ msgstr "Téléchargement d'une annexe" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "_Passer l'URL et ne pas télécharger l'annexe." #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Va au prochain élément non lu. Si nécessaire, sélectionne le prochain " #~ "flux ayant des éléments non lus." #~ msgid "Liferea Sync %s@%s" #~ msgstr "Synchro Liferea %s@%s" liferea-1.10.17/po/gl.po000066400000000000000000002107661261475620100146700ustar00rootroot00000000000000# 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: 2013-01-25 23:54+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.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Lector de fontes" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Lector de fontes Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 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 "No comments yet." msgstr "Aínda sen comentarios." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Comentarios" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Actualizando..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Actualizar" #: ../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:32 #, fuzzy msgid "Default Browser" msgstr "Navegador predeterminado de GNOME" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Erro ao iniciar o navegador: %s" #: ../src/browser.c:230 #, 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:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Non foi posíbel crear o directorio da caché «%s»!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Hoxe %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%b %d %Y" #: ../src/enclosure.c:197 #, 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:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Erro ao renomear %s a %s\n" #: ../src/export.c:406 ../src/export.c:408 #, 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:414 ../src/export.c:416 #, 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:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Lista de fontes importadas" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Importar lista de fontes" #: ../src/export.c:470 msgid "Import" msgstr "Importar" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 #, fuzzy msgid "OPML Files" msgstr "Escolla o ficheiro OPML" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Erro ao exportar a lista de fontes!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Lista de fontes exportada!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Exportar lista de fontes" #: ../src/export.c:487 msgid "Export" msgstr "Exportar" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "«%s» actualizada..." #: ../src/feed.c:294 #, 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:404 #, fuzzy msgid "There are no unread items" msgstr "Non hai artigos non lidos" #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', 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/main.c:164 msgid "STATE" msgstr "ESTADO" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Amosa información da versión e finaliza" #: ../src/main.c:166 #, fuzzy msgid "Add a new subscription" msgstr "Nova subscrición" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Amosa todas as mensaxes de depuración" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "Amosa mensaxes de depuración para a xestión da caché" #: ../src/main.c:173 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "Amosa mensaxes de depuración da xestión de configuración" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Amosa mensaxes de depuración da xestión de bases de datos" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "Amosa mensaxes de depuración de todas as funcións da interface gráfica" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Amosa mensaxes de depuración de toda a actividade de rede" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "Amosa mensaxes de depuración de todas as funcións de procesamento" #: ../src/main.c:179 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/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "Amosa mensaxes de depuración na entrada e saída de funcións" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "Amosa mensaxes de depuración do proceso de actualización de fontes" #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "Amosa mensaxes de depuración para a xestión da caché" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "Amosa máis información nas mensaxes de depuración" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "Amosa mensaxes de depuración para asunto especificado" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, lector de fontes para Linux" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "" "Para máis información, por favor visite http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "A solicitude de actualización foi cancelada" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Non foi posíbel resolver o nome do host de destino" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Non foi posíbel resolver o nome do host proxy" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Non foi posíbel conectar co host remoto" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Non foi posíbel conectar co proxy" #: ../src/net.c:325 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:328 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:331 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:333 msgid "Payment required" msgstr "É necesario o pagamento" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Non ten permiso para acceder a este recurso" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Recurso non atopado" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Método non atopado" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Non é aceptábel" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "O proxy require autenticación" #: ../src/net.c:339 msgid "Request timed out" msgstr "Excedeuse o tempo de espera" #: ../src/net.c:340 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:345 msgid "There was an internal error in the update process" msgstr "Ocorreu un erro interno no proceso de actualización" #: ../src/net.c:347 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:349 msgid "Client Error" msgstr "Erro do cliente" #: ../src/net.c:351 msgid "Server Error" msgstr "Erro do servidor" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "A subscrición «%s» estase a actualizar!" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Actualizando a icona da páxina de «%s»" #: ../src/subscription.c:193 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:211 #, 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:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "«%s» foi suspendido. Liferea non a actualizará!" #: ../src/subscription.c:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "«%s» non cambiou dende a última actualización" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "A actualizar «%s»" #: ../src/update.c:259 #, 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:282 #, c-format msgid "%s exited with status %d" msgstr "%s saíu con estado %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Erro: Non puido abrir o ficheiro «%s»" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Erro: O ficheiro «%s» non existe" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Novo cartafol de busca" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Hai máis erros. A saída foi truncada!]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d anexo" msgstr[1] "%d anexos" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Escolla un ficheiro" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d novo)" msgstr[1] " (%d novos)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Temas de axuda" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Referencia rápida" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "Preguntas máis frecuentes" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea está conectado" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Traballar sen conexión" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea está desconectado" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Traballar con conexión" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Subscricións" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "Actualizar _todas" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Actualizar todas as subscricións." #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Marcar todo coma _lido" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Marcar coma lidos todos os artigos de cada subscrición." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Importar lista de fontes..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Importar unha lista de fontes co formato OPML." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Exportar lista de fontes..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Exportar a lista de fontes co formato OPML." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Saír" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Fonte" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Eliminar _todos os artigos" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Eliminar todos os artigos da fonte seleccionada." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "_Artigo" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "_Seguinte artigo non lido" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "_Seguinte artigo non lido" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Ver" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "_Aumentar o tamaño do texto" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Aumenta o tamaño do texto na vista do artigo." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "_Diminuír o tamaño do texto" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Diminúe o tamaño do texto na vista do artigo." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "_Ferramentas" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "_Monitor de actualizacións" #: ../src/ui/liferea_shell.c:939 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" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Preferencias" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Editar preferencias." #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "_Procurar" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Procurar en todas as fontes..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Amosa a caixa de diálogo de busca." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Axuda" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Contidos" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Ver a axuda para esta aplicación." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Referencia rápida" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Ver a lista de todos os atallos do Liferea." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_Preguntas máis frecuentes" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Ver as preguntas máis frecuentes para esta aplicación." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_Acerca de" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Amosa información do programa." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "Visualización _normal" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Define o modo de visualización en modo cliente de correo." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "Visualización _ampla" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Define o modo de visualización usando tres paneis verticais." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "Visualización _combinada" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Define o modo de visualización usando dous paneis." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "Lista de fontes _reducida" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Agocha as fontes sen artigos non lidos" #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "_Nova subscrición..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Engade unha subscrición á lista de fontes." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Novo _cartafol..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Engade un cartafol á lista de fontes." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Novo cartafol de _busca..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Engade un novo cartafol de busca á lista de fontes." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Nova _fonte..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Engadir unha nova orixe de listas de fontes." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "Nova bandexa de _novas..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Engade unha nova bandexa de novas." #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "_Marcar artigos coma lidos" #: ../src/ui/liferea_shell.c:979 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." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Actualizar" #: ../src/ui/liferea_shell.c:981 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." #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "_Propiedades" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Abre a caixa de diálogo para a subscrición seleccionada." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "_Eliminar" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Elimina a subscrición seleccionada." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Alternar estado de _lectura" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Alterna o estado de lectura do artigo seleccionado." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Alternar _marcador do artigo" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Alterna o estado do marcador do artigo seleccionado." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "_Eliminar" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Elimina o artigo seleccionado." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "Inicia a ligazón do artigo no navegador configurado." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "_Iniciar no navegador" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Inicia a ligazón do artigo no navegador configurado." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Preferencias do navegador externo" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Inicia a ligazón do artigo no navegador configurado." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "_Traballar sen conexión" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Esta opción permite desactivar a actualización de subscricións." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Lector de fontes para Linux" #: ../src/ui/liferea_shell.c:1341 #, 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.

" #: ../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:205 #, fuzzy msgid "All Files" msgstr "Ficheiro _local" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Eliminando entrada" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Está seguro de que quere eliminar «%s»?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Confirmar eliminación" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea está en modo sen conexión. Non é posíbel actualizar." #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "Iniciar a ligazón nun _separador" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "_Inicia a ligazón no navegador" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "_Inicia a ligazón no navegador" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "_Marcar ligazón en %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_Copiar localización da ligazón" #: ../src/ui/liferea_htmlview.c:639 #, fuzzy msgid "_Copy Image Location" msgstr "_Copiar localización da ligazón" #: ../src/ui/liferea_htmlview.c:641 #, fuzzy msgid "S_ave Link As" msgstr "Gardar como..." #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "_Subscribirse..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Sen título ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Encabezamento" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Non se escolleu ningún artigo" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Este artigo non ten ligazón especificada!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Seleccione unha fonte para eliminar os seus artigos!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "Copiar á bandexa de novas " #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "_Marcar ligazón en %s" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "_Copiar localización da ligazón" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "_Eliminar artigo" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Abrir contido asociado..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Gardar como..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "Copiar localización da ligazón" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "_Actualizar todo" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "_Amosar Liferea" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "_Actualizar cartafol" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "_Marcar todo coma lido" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "_Nova" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "_Nova subscrición..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "Nova _fonte..." #: ../src/ui/popup_menu.c:329 #, fuzzy msgid "Sort Feeds" msgstr "Importar lista de fontes" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "Predeterminado GNOME" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Texto abaixo das iconas" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Texto ao lado das iconas" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Só iconas" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Só texto" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minutos" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "horas" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "días" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Espazo" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Espazo" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Expazo" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "Visualización _normal" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "Visualización _ampla" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "Visualización _combinada" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Navegador predeterminado" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Xanela existente" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Nova xanela" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Novo separador" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "" #: ../src/ui/preferences_dialog.c:685 #, fuzzy msgid "Terminate instead of minimizing to the messaging menu" msgstr "_Finalizar en vez de minimizar á icona da bandexa." #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Tipo" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Programa" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "" "Esta fonte non especifica un intervalo de actualización predeterminado." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d artigo novo" msgstr[1] "%d artigos novos" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Non hai artigos novos" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Non hai artigos non lidos" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Fonte en formato Atom non válido: autor descoñecido" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../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:116 msgid "Google Reader login failed!" msgstr "Fallou ao iniciar a sesión do Google Reader!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 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." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planeta, Lista de blogues, OPML" #: ../src/fl_sources/opml_source.c:326 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" #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Non se atopou ningún tipo de lista de fontes!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Tipo de fonte" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source.c:363 #, 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." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Esta fonte xa non existe!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Esta nova non ten titular" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Visita" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Abrir fonte" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Marcar todo coma lido" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "" msgstr[1] "" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Actualizar fonte" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Amosar detalles" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autenticación" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Contrasinal:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_Nome do usuario:" #: ../glade/auth.ui.h:6 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 " #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Contrasinal" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "Nome de _usuario (enderezo de correo electrónico)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "vista normal" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "vista larga" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Visualizar titulares" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "vista combinada" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Titulares" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Botón de conexión/desconexión" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Propiedades da subscrición" #: ../glade/liferea.ui.h:9 #, fuzzy msgid "Feed Name" msgstr "_Nome da fonte:" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "_Nome da fonte:" #: ../glade/liferea.ui.h:11 #, fuzzy msgid "Update Interval" msgstr "Monitor de actualizacións" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Utilizar o intervalo de actualización establecido globalmente." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "Intervalo de actualización específico da _fonte de" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Non actualizar esta fonte automaticamente." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Xeral" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Orixe da fonte" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Tipo de fonte:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Orixe:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Comando" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "Ficheiro _local" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Seleccionar ficheiro..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Utilizar _filtro de conversión" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Converter _utilizando:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "Preferencias _predeterminadas da caché" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Deshabilitar caché" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "Caché _sen límite" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "_Número de artigos a gardar:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Arquivo" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Utilizar _autenticación HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "_Non empregar o proxy para descargas" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Descarga" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "Descargar _automaticamente todos os contidos asociados desta fonte." #: ../glade/liferea.ui.h:42 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/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorar fontes de _comentarios para esta subscrición." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "_Aplicar notificación emerxente para esta subscrición." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "_Non amosar notificacións emerxentes para esta subscrición." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Marcar artigos descargados coma lidos." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Avanzado" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Novo cartafol" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "Nome do _cartafol:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Renomear" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Novo nome:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Preferencias do cartafol de busca" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "_Nome da procura:" #: ../glade/liferea.ui.h:54 #, fuzzy msgid "Find Items that meet the following criteria" msgstr "Atopar artigos que reúnan os seguintes criterios" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "_Calquera regra coincide" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "_Todas as regras deben coincidir" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "Abrir contido asociado..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "Descargando un contido asociado de tipo:" #: ../glade/liferea.ui.h:59 #, 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Navegar" #: ../glade/liferea.ui.h:61 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/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Procurar en todas as fontes" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Procurar por:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Avanzado..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Monitor de actualizacións" #: ../glade/liferea.ui.h:68 #, fuzzy msgid "Pending Requests" msgstr "Solicitudes pendentes" #: ../glade/liferea.ui.h:69 #, fuzzy msgid "Downloading Now" msgstr "Descargando" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Cancelar _todo" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Crear unha bandexa de novas" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "Nome da bandexa de _novas:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Acerca de" #: ../glade/liferea.ui.h:74 #, fuzzy msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Dereitos de autor (c) 2003-2009\n" "Os desenvolvedores do Liferea\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea é un agregador de novas para GTK+" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Páxina principal do Liferea" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Procura avanzada" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "Cartafol de _busca..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Crear unha fonte de motor de busca" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "introduza unha cadea para procurar" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "_Cantidade máxima de artigos da busca:" #: ../glade/liferea.ui.h:84 #, 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." #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Descarga / Postprocesado" #: ../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/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 tt-rss 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/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/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:4 #, fuzzy msgid "Feed Update Settings" msgstr "Actualizar fonte" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Actualizar todas as subscricións." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "_Intervalo de actualización predeterminado:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Fontes" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "" "Preferencias de visualización dos cartafoles" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "_Ocultar artigos lidos." #: ../glade/prefs.ui.h:13 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Iconas das fontes (Iconas das páxinas)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Actualizar todas as iconas das páxinas agora" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Cartafoles" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "Reading Headlines" msgstr "titulares non lidos" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "_Avanzar polos artigos con:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "Web Integration" msgstr "Orientación" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Publicar os marcadores en" #: ../glade/prefs.ui.h:22 #, fuzzy msgid "Internal Browser Settings" msgstr "Preferencias do navegador interno" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Abrir as ligazóns na _xanela do Liferea." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Desactivar Javascript." #: ../glade/prefs.ui.h:25 #, fuzzy msgid "_Enable browser plugins." msgstr "Preferencias do navegador externo" #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "Preferencias do navegador externo" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Abrir ligazón en:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "Manual" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Navegador:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Navegador" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Notification Settings" msgstr "Preferencias de notificación" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Amosa unha xanela _emerxente ao recibir novos titulares." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Amosa unha _icona na área de notificación (bandexa do sistema)." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Amosa a _cantidade de novos artigos na icona da bandexa." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "_Finalizar en vez de minimizar á icona da bandexa." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Iniciar a icona na bandexa" #: ../glade/prefs.ui.h:39 #, fuzzy msgid "Toolbar Settings" msgstr "Etiquetas dos _botóns da barra de ferramentas:" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Ocultar a barra de ferramentas." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Etiquetas dos _botóns da barra de ferramentas:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Interface gráfica de usuario" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "Detectar _automaticamente (do GNOME ou do ambiente)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_Sen proxy" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "Configuración _manual:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "_Porto do proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "_Servidor proxy:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Utilizar _autenticación proxy" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "_Contrasinal do proxy:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Nome de _usuario do proxy:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "Descargando contido asociado" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Descargar empregando" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "Abrir contido asociado..." #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Contido asociado" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #~ 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" #, fuzzy #~ msgid "Synchronized with Nearby Hosts" #~ msgstr "Sincronización con servidores próximos" #~ 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 "_Delete" #~ msgstr "_Eliminar" #~ 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.10.17/po/he.po000066400000000000000000002136531261475620100146600ustar00rootroot00000000000000# Hebrew translation for liferea. # Copyright (c) 2003-2014 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: 2014-07-29 17:37+0300\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 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:2 msgid "Distinguishing features:" msgstr "תכונות מיוחדות:" #: ../liferea.appdata.xml.in.h:3 msgid "Read articles when offline" msgstr "קרא מאמרים כאשר לא־מקוון" #: ../liferea.appdata.xml.in.h:4 msgid "Synchronizes with TheOldReader" msgstr "סנכרן עם TheOldReader" #: ../liferea.appdata.xml.in.h:5 msgid "Synchronizes with TinyTinyRSS" msgstr "סנכרן עם TinyTinyRSS" #: ../liferea.appdata.xml.in.h:6 msgid "Synchronizes with InoReader" msgstr "סנכרן עם InoReader" #: ../liferea.appdata.xml.in.h:7 msgid "Synchronizes with Reedah" msgstr "סנכרן עם Reedah" #: ../liferea.appdata.xml.in.h:8 msgid "Permanently save headlines in news bins" msgstr "אחסן כותרות לצמיתה בתוך סלי איסוף" #: ../liferea.appdata.xml.in.h:9 msgid "Match items using search folders" msgstr "התאם פריטים באמצעות תיקיות חיפוש" #: ../liferea.appdata.xml.in.h:10 msgid "Play Podcasts" msgstr "נגן פודקסטים" #: ../liferea.desktop.in.h:1 ../src/main.c:234 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "‫Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "קורא ערוצים" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "קורא ערוצים Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "קרא ערוצי חדשות ובלוגים" #: ../liferea.desktop.in.h:5 msgid "news;feed;aggregator;blog;podcast;" 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/liferea.ui.h:29 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 "יוצר" # RLO workaround until RTL problem will be solved #

תגובות

#: ../xslt/item.xml.in.h:10 msgid "Comments" msgstr "תגובות‮" #: ../xslt/item.xml.in.h:11 msgid "Updating..." msgstr "מעדכן כעת…" #: ../xslt/item.xml.in.h:12 msgid "Section" msgstr "סעיף" #: ../xslt/item.xml.in.h:13 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:32 msgid "Default Browser" msgstr "דפדפן ברירת מחדל" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "פקודת דפדפן נכשלה: ‭%s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "מפעיל כעת את: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "שגיאת הרשאה" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "לא ניתן ליצור מדור מטמון עבור \"%s\"!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "היום %k:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d ב%b %Y" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "‏\"%s\" אינו קובץ תצורה תקין של טיפוס צירופים!" #: ../src/enclosure.c:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" "לא הגדרת כלי הורדה עדיין! אנא עשה זאת בכרטיסייה 'הורדה' בתוך כלים/העדפות." #: ../src/enclosure.c:306 #, 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:185 #, c-format msgid "Error renaming %s to %s\n" msgstr "שגיאה בשינוי השם %s אל %s\n" #: ../src/export.c:414 ../src/export.c:416 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "שגיאת XML במהלך קריאת קובץ OPML! לא ניתן לייבא את \"%s\"!" #: ../src/export.c:422 ../src/export.c:424 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "מסמך ריק! מסמך OPML ‏\"%s\" לא אמור להיות ריק במהלך ייבוא." #: ../src/export.c:445 ../src/export.c:447 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "‏\"%s\" אינו מסמך OPML תקין. Liferea לא מסוגל לייבא קובץ זה!" #: ../src/export.c:466 msgid "Imported feed list" msgstr "רשימת ערוצים מיובאים" #: ../src/export.c:478 msgid "Import Feed List" msgstr "ייבוא רשימת ערוצים" #: ../src/export.c:478 msgid "Import" msgstr "ייבוא" #: ../src/export.c:478 ../src/export.c:495 ../src/fl_sources/opml_source.c:383 msgid "OPML Files" msgstr "קבצי OPML" #: ../src/export.c:486 msgid "Error while exporting feed list!" msgstr "שגיאה במהלך ייצוא רשימת ערוצים!" #: ../src/export.c:488 msgid "Feed List exported!" msgstr "ייצוא רשימת ערוצים הסתיים!" #: ../src/export.c:495 msgid "Export Feed List" msgstr "ייצוא רשימת ערוצים" #: ../src/export.c:495 msgid "Export" msgstr "ייצוא" #: ../src/feed.c:236 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:262 #, c-format msgid "\"%s\" updated..." msgstr "‏\"%s\" עודכן..." #: ../src/feed.c:269 #, 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:404 msgid "There are no unread items" msgstr "אין פריטים שלא נקראו" #: ../src/main.c:163 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown' or `hidden'" msgstr "" # cli #: ../src/main.c:163 msgid "STATE" msgstr "" # cli #: ../src/main.c:164 msgid "Show version information and exit" msgstr "" # cli #: ../src/main.c:165 msgid "Add a new subscription" msgstr "" # cli #: ../src/main.c:165 msgid "uri" msgstr "" # cli #: ../src/main.c:170 msgid "Print debugging messages of all types" msgstr "" # cli #: ../src/main.c:171 msgid "Print debugging messages for the cache handling" msgstr "" # cli #: ../src/main.c:172 msgid "Print debugging messages for the configuration handling" msgstr "" # cli #: ../src/main.c:173 msgid "Print debugging messages of the database handling" msgstr "" # cli #: ../src/main.c:174 msgid "Print debugging messages of all GUI functions" msgstr "" # cli #: ../src/main.c:175 msgid "" "Enables HTML rendering debugging. Each time Liferea renders HTML output it " "will also dump the generated HTML into ~/.cache/liferea/output.xhtml" msgstr "" # cli #: ../src/main.c:176 msgid "Print debugging messages of all network activity" msgstr "" # cli #: ../src/main.c:177 msgid "Print debugging messages of all parsing functions" msgstr "" # cli #: ../src/main.c:178 msgid "Print debugging messages when a function takes too long to process" msgstr "" # cli #: ../src/main.c:179 msgid "Print debugging messages when entering/leaving functions" msgstr "" # cli #: ../src/main.c:180 msgid "Print debugging messages of the feed update processing" msgstr "" # cli #: ../src/main.c:181 msgid "Print debugging messages of the search folder matching" msgstr "" # cli #: ../src/main.c:182 msgid "Print verbose debugging messages" msgstr "" # cli #: ../src/main.c:193 ../src/main.c:194 msgid "Print debugging messages for the given topic" msgstr "" # cli #: ../src/main.c:201 msgid "Liferea, the Linux Feed Reader" msgstr "" # למידע נוסף, אנא בקר בכתובת http://lzone.de/liferea/‎ #: ../src/main.c:202 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "" #. Some libsoup transport errors #: ../src/net.c:342 msgid "The update request was cancelled" msgstr "בקשת העדכון בוטלה" #: ../src/net.c:343 msgid "Unable to resolve destination host name" msgstr "לא ניתן לפענח שם מחשב יעד" #: ../src/net.c:344 msgid "Unable to resolve proxy host name" msgstr "לא ניתן לפענח שם מחשב פרוקסי" #: ../src/net.c:345 msgid "Unable to connect to remote host" msgstr "לא ניתן להתחבר אל מארח מרוחק" #: ../src/net.c:346 msgid "Unable to connect to proxy" msgstr "לא ניתן להתחבר אל פרוקסי" #: ../src/net.c:347 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "אירעה שגיאת תקשורת, או שהקצה המרוחק ניתק את הקשר באופן בלתי צפוי" # באופן קבוע #. http 3xx redirection #: ../src/net.c:350 msgid "The resource moved permanently to a new location" msgstr "המשאב הועבר לצמיתות אל מיקום חדש" #. http 4xx client error #: ../src/net.c:353 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "אינך מורשה לטעון את ערוץ זה. אנא עדכן את שם המשתמש והסיסמה שלך בתוך תיבת דו " "שיח של מאפייני ערוץ" #: ../src/net.c:355 msgid "Payment required" msgstr "נדרש תשלום" # אין באפשרות לגשת אל משאב זה # לא מותר לך לגשת אל משאב זה #: ../src/net.c:356 msgid "You're not allowed to access this resource" msgstr "אינך מורשה לגשת אל משאב זה" #: ../src/net.c:357 msgid "Resource Not Found" msgstr "משאב לא נמצא" #: ../src/net.c:358 msgid "Method Not Allowed" msgstr "שיטה לא מורשית" #: ../src/net.c:359 msgid "Not Acceptable" msgstr "לא קביל" #: ../src/net.c:360 msgid "Proxy authentication required" msgstr "נדרשת הזדהות אל מול פרוקסי" #: ../src/net.c:361 msgid "Request timed out" msgstr "תם הזמן שהוקצב לבקשה" #: ../src/net.c:362 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "הערוץ לא קיים. אנא בטל את ההרשמה!" #: ../src/net.c:367 msgid "There was an internal error in the update process" msgstr "אירעה שגיאה פנימית בתהליך העדכון" #: ../src/net.c:369 msgid "Feed not available: Server requested unsupported redirection!" msgstr "ערוץ לא זמין: השרת ביקש הפנייה שאינה נתמכת!" #: ../src/net.c:371 msgid "Client Error" msgstr "שגיאת לקוח" #: ../src/net.c:373 msgid "Server Error" msgstr "שגיאת שרת" #: ../src/net.c:375 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "ההרשמה \"%s\" כבר מתעדכנת כעת!" #: ../src/subscription.c:110 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "ההרשמה \"%s\" הופסקה. Liferea לא יעדכן אותה יותר!" #: ../src/subscription.c:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "מעדכן כעת סמל עבור \"%s\"" # RTL HTML MARKUP IS NEEDED #: ../src/subscription.c:193 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "אירעה בעיה במהלך קריאת הרשמה זו. אנא בדוק כתובת URL ופלט מסוף." #: ../src/subscription.c:211 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "כתובת URL של \"%s\" הוחלפה לצמיתות ועודכנה" #: ../src/subscription.c:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "‏\"%s\" הופסק. Liferea לא יעדכן אותו יותר!" #: ../src/subscription.c:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "‏\"%s\" לא השתנה מאז עדכון אחרון" #: ../src/subscription.c:275 #, c-format msgid "Updating \"%s\"" msgstr "מעדכן כעת את \"%s\"" #: ../src/update.c:275 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "שגיאה בפתיחת הקובץ הזמני %s לשימוש בסינון!" #: ../src/update.c:298 #, c-format msgid "%s exited with status %d" msgstr "
‎%s סיים עם סטטוס %d
" #: ../src/update.c:304 ../src/update.c:305 ../src/update.c:422 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "שגיאה: לא ניתן לפתוח צינור \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:448 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "שגיאה: לא ניתן לפתוח את הקובץ \"%s\"" #: ../src/update.c:454 #, 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:277 msgid " Bytes" msgstr " בתים" #: ../src/ui/enclosure_list_view.c:280 msgid "kB" msgstr "ק״ב" #: ../src/ui/enclosure_list_view.c:284 msgid "MB" msgstr "מ״ב" #: ../src/ui/enclosure_list_view.c:288 msgid "GB" msgstr "ג״ב" #: ../src/ui/enclosure_list_view.c:293 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:326 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "‏%d קובץ מצורף" msgstr[1] "‏%d קבצים מצורפים" #: ../src/ui/enclosure_list_view.c:382 ../src/ui/subscription_dialog.c:351 msgid "Choose File" msgstr "בחר קובץ" #: ../src/ui/enclosure_list_view.c:443 #, 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:396 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] "(%d חדש) " msgstr[1] "(%d חדשים) " #: ../src/ui/liferea_shell.c:401 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d לא נקרא%s " msgstr[1] "%d לא נקראו%s " #: ../src/ui/liferea_shell.c:779 msgid "Help Topics" msgstr "נושאי עזרה" # הפנייה מהירה #: ../src/ui/liferea_shell.c:785 msgid "Quick Reference" msgstr "תיעוד מהיר" #: ../src/ui/liferea_shell.c:791 msgid "FAQ" msgstr "שו״ת" #: ../src/ui/liferea_shell.c:858 msgid "Liferea is now online" msgstr "‏Liferea מקוון כעת" #: ../src/ui/liferea_shell.c:860 msgid "Work Offline" msgstr "עבוד במצב לא־מקוון" #: ../src/ui/liferea_shell.c:862 msgid "Liferea is now offline" msgstr "‏Liferea לא־מקוון כעת" #: ../src/ui/liferea_shell.c:864 msgid "Work Online" msgstr "עבוד במצב מקוון" # _מינויים #: ../src/ui/liferea_shell.c:959 msgid "_Subscriptions" msgstr "_הרשמות" #: ../src/ui/liferea_shell.c:960 msgid "Update _All" msgstr "_עדכן הכל" #: ../src/ui/liferea_shell.c:960 msgid "Updates all subscriptions." msgstr "עדכון כל ההרשמות." #: ../src/ui/liferea_shell.c:962 msgid "Mark All As _Read" msgstr "סמן הכל בתור _נקראו" #: ../src/ui/liferea_shell.c:962 msgid "Marks read every item of every subscription." msgstr "סימון כל פריט בכל הרשמה ככזה שנקרא." #: ../src/ui/liferea_shell.c:964 msgid "_Import Feed List..." msgstr "יי_בוא רשימת ערוצים..." # מייבא רשימת הזנות מסוג OPML. # מייבא רשימת הזנות OPML. #: ../src/ui/liferea_shell.c:964 msgid "Imports an OPML feed list." msgstr "ייבוא רשימת ערוצים בתסדיר OPML." #: ../src/ui/liferea_shell.c:965 msgid "_Export Feed List..." msgstr "ייצו_א רשימת ערוצים..." #: ../src/ui/liferea_shell.c:965 msgid "Exports the feed list as OPML." msgstr "ייצוא רשימת הערוצים בפורמט OPML." #: ../src/ui/liferea_shell.c:966 ../src/ui/popup_menu.c:201 msgid "_Quit" msgstr "י_ציאה" #: ../src/ui/liferea_shell.c:968 msgid "_Feed" msgstr "ע_רוץ" #: ../src/ui/liferea_shell.c:969 msgid "Remove _All Items" msgstr "הסר את _כל הפריטים" #: ../src/ui/liferea_shell.c:969 msgid "Removes all items of the currently selected feed." msgstr "הסר את כל הפריטים בערוץ שנבחר כעת." #: ../src/ui/liferea_shell.c:972 msgid "_Item" msgstr "_פריט" #: ../src/ui/liferea_shell.c:973 msgid "Previous Item" msgstr "פריט קודם" #: ../src/ui/liferea_shell.c:975 msgid "Next Item" msgstr "הלאה" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:980 msgid "_Next Unread Item" msgstr "_הלאה לפריט הבא שלא נקרא" #: ../src/ui/liferea_shell.c:983 msgid "_View" msgstr "_תצוגה" #: ../src/ui/liferea_shell.c:984 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "ה_גדל גודל טקסט" #: ../src/ui/liferea_shell.c:984 msgid "Increases the text size of the item view." msgstr "הגדל את הטקסט בתצוגת הפריטים." #: ../src/ui/liferea_shell.c:986 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "ה_קטן גודל טקסט" #: ../src/ui/liferea_shell.c:986 msgid "Decreases the text size of the item view." msgstr "הקטן את הטקסט בתצוגת הפריטים." #: ../src/ui/liferea_shell.c:989 msgid "_Tools" msgstr "_כלים" #: ../src/ui/liferea_shell.c:990 msgid "_Update Monitor" msgstr "_עקוב אחר עדכונים" #: ../src/ui/liferea_shell.c:990 msgid "Show a list of all feeds currently in the update queue" msgstr "הצג רשימה של כל הערוצים שמצויים כעת בתוך תור העדכון" #: ../src/ui/liferea_shell.c:992 ../src/ui/popup_menu.c:196 #: ../src/ui/popup_menu.c:347 msgid "_Preferences" msgstr "_העדפות" #: ../src/ui/liferea_shell.c:992 msgid "Edit Preferences." msgstr "ערוך ההעדפות." #: ../src/ui/liferea_shell.c:995 msgid "S_earch" msgstr "_חפש" #: ../src/ui/liferea_shell.c:996 msgid "Search All Feeds..." msgstr "חיפוש בכל הערוצים..." #: ../src/ui/liferea_shell.c:996 msgid "Show the search dialog." msgstr "הצג דו שיח חיפוש." #: ../src/ui/liferea_shell.c:998 msgid "_Help" msgstr "_עזרה" #: ../src/ui/liferea_shell.c:999 msgid "_Contents" msgstr "_תכנים" #: ../src/ui/liferea_shell.c:999 msgid "View help for this application." msgstr "עיון במסכי עזרה עבור יישום זה." #: ../src/ui/liferea_shell.c:1000 msgid "_Quick Reference" msgstr "_עזרה מהירה" #: ../src/ui/liferea_shell.c:1000 msgid "View a list of all Liferea shortcuts." msgstr "צפייה בכל רשימת הקיצורים של Liferea." #: ../src/ui/liferea_shell.c:1002 msgid "_FAQ" msgstr "_שו״ת" #: ../src/ui/liferea_shell.c:1002 msgid "View the FAQ for this application." msgstr "צפייה בשאלות הנפוצות עבור יישום זה." #: ../src/ui/liferea_shell.c:1003 msgid "_About" msgstr "_אודות" #: ../src/ui/liferea_shell.c:1003 msgid "Shows an about dialog." msgstr "הצג דו שיח אודות." #: ../src/ui/liferea_shell.c:1007 msgid "_Normal View" msgstr "תצוגה _רגילה" #: ../src/ui/liferea_shell.c:1007 msgid "Set view mode to mail client mode." msgstr "הגדר צורת תצוגה בדומה ליישום דוא״ל." #: ../src/ui/liferea_shell.c:1009 msgid "_Wide View" msgstr "תצוגה ר_חבה" #: ../src/ui/liferea_shell.c:1009 msgid "Set view mode to use three vertical panes." msgstr "הגדר צורת תצוגה לשלושה לוחות אנכיים." #: ../src/ui/liferea_shell.c:1011 msgid "_Combined View" msgstr "תצוגה מ_שולבת" #: ../src/ui/liferea_shell.c:1011 msgid "Set view mode to two pane mode." msgstr "הגדר צורת תצוגה לשני לוחות." #: ../src/ui/liferea_shell.c:1016 msgid "_Reduced Feed List" msgstr "רשימת ערוצים מ_צומצמת" #: ../src/ui/liferea_shell.c:1016 msgid "Hide feeds with no unread items." msgstr "הסתר ערוצים שבהם אין פריטים שלא נקראו." #: ../src/ui/liferea_shell.c:1021 msgid "_New Subscription..." msgstr "_הרשמה חדשה..." #: ../src/ui/liferea_shell.c:1021 msgid "Adds a subscription to the feed list." msgstr "הוספת הרשמה לרשימת הערוצים." #: ../src/ui/liferea_shell.c:1023 ../src/ui/popup_menu.c:321 msgid "New _Folder..." msgstr "_תיקייה חדשה..." #: ../src/ui/liferea_shell.c:1023 msgid "Adds a folder to the feed list." msgstr "הוספת תיקייה לרשימת הערוצים." #: ../src/ui/liferea_shell.c:1024 ../src/ui/popup_menu.c:324 msgid "New S_earch Folder..." msgstr "ת_יקיית חיפוש חדשה..." #: ../src/ui/liferea_shell.c:1024 msgid "Adds a new search folder to the feed list." msgstr "הוספת תיקיית חיפוש חדשה לרשימת הערוצים." #: ../src/ui/liferea_shell.c:1025 msgid "New _Source..." msgstr "_מקור חדש..." # הוספת מקור רשימת הזנות חדש. #: ../src/ui/liferea_shell.c:1025 msgid "Adds a new feed list source." msgstr "הוספת מקור חדש לרשימת הערוצים." #: ../src/ui/liferea_shell.c:1026 ../src/ui/popup_menu.c:326 msgid "New _News Bin..." msgstr "_סל איסוף חדש..." # סל איסוף חדשות #: ../src/ui/liferea_shell.c:1026 msgid "Adds a new news bin." msgstr "הוספת סל איסוף חדש." #: ../src/ui/liferea_shell.c:1030 msgid "_Mark Items Read" msgstr "_סמן פריטים ככאלה שנקראו" #: ../src/ui/liferea_shell.c:1030 msgid "" "Marks all items of the selected feed list node / in the item list as read." msgstr "סימון כל הפריטים שנבחרו או את כל הערוצים בתיקייה שנבחרה ככאלה שנקראו." #: ../src/ui/liferea_shell.c:1032 ../src/ui/popup_menu.c:301 msgid "_Update" msgstr "_עדכן" #: ../src/ui/liferea_shell.c:1032 msgid "" "Updates the selected subscription or all subscriptions of the selected " "folder." msgstr "עדכון ההרשמה הנבחרת או את כל ההרשמות של התיקייה שנבחרה." #: ../src/ui/liferea_shell.c:1037 msgid "_Properties" msgstr "מ_אפיינים" # תכונות #: ../src/ui/liferea_shell.c:1037 msgid "Opens the property dialog for the selected subscription." msgstr "פתיחת דו שיח המאפיינים עבור ההרשמה הנבחרת." #: ../src/ui/liferea_shell.c:1038 msgid "_Remove" msgstr "הס_ר" #: ../src/ui/liferea_shell.c:1038 msgid "Removes the selected subscription." msgstr "הסרת ההרשמה הנבחרת." #: ../src/ui/liferea_shell.c:1042 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "החלף מצב _נקרא" #: ../src/ui/liferea_shell.c:1042 msgid "Toggles the read status of the selected item." msgstr "החלפת מצב הקריאה של הפריט שנבחר." #: ../src/ui/liferea_shell.c:1044 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "החלף מצב _סימון" #: ../src/ui/liferea_shell.c:1044 msgid "Toggles the flag status of the selected item." msgstr "החלפת מצב הסימון של הפריט שנבחר." #: ../src/ui/liferea_shell.c:1046 msgid "R_emove" msgstr "הס_ר" #: ../src/ui/liferea_shell.c:1046 msgid "Removes the selected item." msgstr "הסרת הפריט שנבחר." #: ../src/ui/liferea_shell.c:1048 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "פתח בתוך _כרטיסייה" #: ../src/ui/liferea_shell.c:1048 msgid "Launches the item's link in a new Liferea browser tab." msgstr "שיגור הקישור של הפריט בתוך כרטיסיית דפדפן Liferea חדשה." #: ../src/ui/liferea_shell.c:1050 ../src/ui/popup_menu.c:129 msgid "_Open In Browser" msgstr "_פתח בתוך דפדפן" #: ../src/ui/liferea_shell.c:1050 msgid "Launches the item's link in the Liferea item pane." msgstr "שיגור הקישור של הפריט בתוך שמשת הפריטים של Liferea." #: ../src/ui/liferea_shell.c:1052 ../src/ui/popup_menu.c:130 msgid "Open In _External Browser" msgstr "פתח בתוך דפדפן _חיצוני" #: ../src/ui/liferea_shell.c:1052 msgid "Launches the item's link in the configured external browser." msgstr "שיגור הקישור של הפריט בתוך הדפדפן החיצוני שהוגדר." #: ../src/ui/liferea_shell.c:1057 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "עבוד _לא־מקוון" #: ../src/ui/liferea_shell.c:1057 msgid "This option allows you to disable subscription updating." msgstr "אפשרות זו מאפשרת לך לנטרל עדכון הרשמה." #: ../src/ui/liferea_shell.c:1059 msgid "_Fullscreen" msgstr "_מסך מלא" #: ../src/ui/liferea_shell.c:1059 msgid "Browse at full screen" 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 msgid "_Cancel" msgstr "_ביטול" #: ../src/ui/ui_common.c:211 msgid "All Files" msgstr "כל הקבצים" #: ../src/ui/feed_list_view.c:358 msgid "Liferea is in offline mode. No update possible." msgstr "‏Liferea מצוי כעת במצב לא־מקוון. אין אפשרות לעדכן ערוצים." #: ../src/ui/liferea_htmlview.c:627 msgid "Open Link In _Tab" msgstr "פתח קישור בתוך _כרטיסייה" #: ../src/ui/liferea_htmlview.c:628 msgid "_Open Link In Browser" msgstr "_פתח קישור בתוך דפדפן" #: ../src/ui/liferea_htmlview.c:629 msgid "_Open Link In External Browser" msgstr "_פתח קישור בתוך דפדפן חיצוני" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "_סמן קישור באתר %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_העתק מיקום קישור" #: ../src/ui/liferea_htmlview.c:639 msgid "_Copy Image Location" msgstr "_העתק מיקום תמונה" #: ../src/ui/liferea_htmlview.c:641 msgid "S_ave Link As" msgstr "_שמור קישור בשם" #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "שמור _תמונה בשם" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "ה_רשמה..." #: ../src/ui/liferea_htmlview.c:651 msgid "_Copy" msgstr "ה_עתק" #: ../src/ui/item_list_view.c:114 msgid "This item has no link specified!" msgstr "לפריט זה לא צוין קישור!" #: ../src/ui/item_list_view.c:118 ../src/ui/item_list_view.c:883 #: ../src/ui/item_list_view.c:968 ../src/ui/item_list_view.c:983 msgid "No item has been selected" msgstr "לא נבחר אף פריט" #: ../src/ui/item_list_view.c:441 msgid "*** No title ***" msgstr "*** בלי כותרת ***" #: ../src/ui/item_list_view.c:703 msgid "Date" msgstr "תאריך" #: ../src/ui/item_list_view.c:717 msgid "Headline" msgstr "כותרת" #: ../src/ui/item_list_view.c:871 msgid "You must select a feed to delete its items!" msgstr "עליך לבחור ערוץ כדי למחוק את הפריטים שלו!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "העתק אל סל איסוף" #: ../src/ui/popup_menu.c:156 #, c-format msgid "_Bookmark at %s" msgstr "_סמן באתר %s" #: ../src/ui/popup_menu.c:160 msgid "Copy Item _Location" msgstr "העתק _מיקום פריט" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "_הסר פריט" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "פתח צירוף..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "שמירה בשם..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "העתק כתובת קישור" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "עדכן ה_כל" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "_הצג את Liferea" #: ../src/ui/popup_menu.c:303 msgid "_Update Folder" msgstr "_עדכן תיקייה" #: ../src/ui/popup_menu.c:305 msgid "_Mark All As Read" msgstr "_סמן הכל ככאלה שנקראו" #: ../src/ui/popup_menu.c:315 msgid "_New" msgstr "_חדש" #: ../src/ui/popup_menu.c:318 msgid "New _Subscription..." msgstr "_הרשמה חדשה..." #: ../src/ui/popup_menu.c:325 msgid "New S_ource..." msgstr "מ_קור חדש..." #: ../src/ui/popup_menu.c:334 msgid "Sort Feeds" msgstr "מיין ערוצים" #: ../src/ui/popup_menu.c:340 msgid "_Rebuild" msgstr "_הרכב מחדש" #: ../src/ui/popup_menu.c:346 msgid "_Delete" msgstr "_מחק" #: ../src/ui/popup_menu.c:352 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:462 msgid "Manual" msgstr "ידני" #: ../src/ui/preferences_dialog.c:477 msgid "Browser default" msgstr "דפדפן ברירת מחדל" #: ../src/ui/preferences_dialog.c:480 msgid "Existing window" msgstr "חלון קיים" #: ../src/ui/preferences_dialog.c:483 msgid "New window" msgstr "חלון חדש" #: ../src/ui/preferences_dialog.c:486 msgid "New tab" msgstr "כרטיסייה חדשה" #: ../src/ui/preferences_dialog.c:708 msgid "Type" msgstr "טיפוס" #: ../src/ui/preferences_dialog.c:711 msgid "Program" msgstr "תוכנית" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(ריק)" #: ../src/ui/feed_list_node.c:341 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "כעת מרכיב מחדש" # הרשומה נמחקת כעת #: ../src/ui/feed_list_node.c:411 msgid "Deleting entry" msgstr "מוחק הרשמה" #: ../src/ui/feed_list_node.c:412 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "האם אתה בטוח כי ברצונך למחוק את \"%s\" ואת כל תכולתו?" #: ../src/ui/feed_list_node.c:412 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "האם אתה בטוח כי ברצונך למחוק את \"%s\"?" #: ../src/ui/feed_list_node.c:424 msgid "Deletion Confirmation" msgstr "אימות מחיקה" #: ../src/ui/subscription_dialog.c:351 ../src/fl_sources/opml_source.c:383 msgid "_Open" msgstr "_פתח" #: ../src/ui/subscription_dialog.c:425 #, 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:429 msgid "This feed specifies no default update interval." msgstr "לערוץ זה לא הוגדרה תדירות עדכון." #: ../src/ui/browser_tabs.c:153 msgid "Untitled" msgstr "ללא כותרת" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "אתר אינטרנט" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "ערוץ Atom לא תקין: מחבר לא ידוע" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/aol_source.c:102 ../src/fl_sources/inoreader_source.c:101 #: ../src/fl_sources/reedah_source.c:102 #: ../src/fl_sources/theoldreader_source.c:101 msgid "Login failed!" msgstr "התחברות נכשלה!" #: ../src/fl_sources/aol_source.c:127 msgid "AOL Reader Login" msgstr "כניסה אל AOL Reader" #: ../src/fl_sources/aol_source.c:193 ../src/fl_sources/default_source.c:145 #: ../glade/new_subscription.ui.h:1 ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "הרשמה חדשה" #: ../src/fl_sources/aol_source.c:279 msgid "AOL Reader" msgstr "" #: ../src/fl_sources/inoreader_source.c:308 msgid "InoReader" 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:383 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:325 msgid "No feed list source types found!" msgstr "לא נמצאו טיפוסים של מקור רשימת ערוץ!" #: ../src/fl_sources/node_source.c:354 msgid "Source Type" 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:547 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "ההרשמה '%s' הומרה בהצלחה אל ערוצים מקומיים!" #: ../src/fl_sources/reedah_source.c:309 msgid "Reedah" msgstr "" #: ../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:222 ../src/fl_sources/ttrss_source.c:274 msgid "TinyTinyRSS HTTP API not reachable!" msgstr "‏TinyTinyRSS: ‏HTTP API של לא נגיש!" #: ../src/fl_sources/ttrss_source.c:229 msgid "" "TinyTinyRSS subscribing to feed failed! Check if you really passed a feed " "URL!" msgstr "‏TinyTinyRSS הרשמה אל ערוץ נכשלה! בדוק אם באמת העברת URL של ערוץ!" #: ../src/fl_sources/ttrss_source.c:281 msgid "TinyTinyRSS unsubscribing feed failed!" msgstr "‏TinyTinyRSS: ביטול הרשמת ערוץ נכשל!" #: ../src/fl_sources/ttrss_source.c:298 #, 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:418 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:312 msgid "TheOldReader" msgstr "" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "אימות" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_סיסמה:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_שם משתמש:" #: ../glade/auth.ui.h:6 msgid "" "Note: The username and password will be saved to your Liferea feedlist " "file without using encryption." msgstr "" "הערה: שם המשתמש והסיסמה יישמרו בקובץ רשימת ערוצים של Liferea ללא שימוש " "בהצפנה." #: ../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/inoreader_source.ui.h:3 #: ../glade/reedah_source.ui.h:3 ../glade/ttrss_source.ui.h:4 #: ../glade/theoldreader_source.ui.h:3 msgid "_Password" msgstr "_סיסמה" #: ../glade/google_source.ui.h:4 ../glade/inoreader_source.ui.h:4 #: ../glade/reedah_source.ui.h:4 ../glade/theoldreader_source.ui.h:4 msgid "_Username (Email)" msgstr "_שם משתמש (דוא״ל)" #: ../glade/inoreader_source.ui.h:1 msgid "Add InoReader Account" msgstr "הוסף חשבון InoReader" #: ../glade/inoreader_source.ui.h:2 msgid "Please enter your InoReader account settings" msgstr "אנא הזן הגדרות חשבון InoReader" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "תצוגה רגילה" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "תצוגה רחבה" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "הצג כותרות" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "תצוגה משולבת" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "כותרות" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "מתג מקוון\\לא־מקוון" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "מאפייני הרשמה" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "שם ערוץ" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "_שם ערוץ:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "תדירות עדכון" # השתמש בתדירות עדכון _גלובלית. #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_השתמש בברירת מחדל גלובלית של זמן עדכון." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_תדירות עדכון ייחודית לערוץ של" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_אל תעדכן את ערוץ זה אוטומטית." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "ספק ערוץ זה ממליץ על תדירות עדכון של %d דקות." #: ../glade/liferea.ui.h:18 msgid "General" msgstr "כללי" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "מקור ערוץ" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "טיפוס מקור:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_מקור:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_כתובת URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_פקודה" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_קובץ מקומי" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "בחירת קובץ..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "השתמש ב_מסנן המרה" #: ../glade/liferea.ui.h:27 msgid "" "Liferea can use external filter scripts in order to access feeds and " "directories in non-supported formats." msgstr "" "‏Liferea מסוגל לעבוד עם תסריטי סינון חיצוניים על מנת לגשת לערוצים ולתיקיות " "בפורמטים שלא נתמכים." #: ../glade/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "המר ב_אמצעות:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "הגדרות ברירת מחדל של _מטמון" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_נטרל מטמון" # מטמון _בלתי מוגבל #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "מטמון ללא הג_בלת גודל" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "מ_ספר פריטים לשמור:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "ארכיון" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "השתמש ב_זיהוי HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "_אל תעשה שימוש בפרוקסי" # טעינת פריטים #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "טעינה" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "_הורד אוטומטית את כל הצירופים של ערוץ זה." #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "_טען אוטומטית קישור פריט לתוך דפדפן מוגדר בעת בחירת מאמרים." #: ../glade/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "התעלם מ_תגובות ערוצים עבור הרשמה זו." #: ../glade/liferea.ui.h:44 msgid "_Mark downloaded items as read." msgstr "_סמן פריטים שנטענו ככאלה שנקראו." #: ../glade/liferea.ui.h:45 msgid "Advanced" msgstr "מתקדם" #: ../glade/liferea.ui.h:46 msgid "New Folder" msgstr "תיקייה חדשה" #: ../glade/liferea.ui.h:47 msgid "_Folder name:" msgstr "שם _תיקייה:" #: ../glade/liferea.ui.h:48 msgid "Rename" msgstr "שינוי שם" #: ../glade/liferea.ui.h:49 msgid "_New Name:" msgstr "_שם חדש:" #: ../glade/liferea.ui.h:50 msgid "Open Enclosure" msgstr "פתח צירוף" #: ../glade/liferea.ui.h:51 msgid "Open an enclosure of type:" msgstr "הורדת צירוף מן טיפוס:" # ינופקו # שם הקובץ שלתוכו מורד הצירוף יועבר כפרמטר אל פקודה זו #: ../glade/liferea.ui.h:52 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/liferea.ui.h:53 msgid "_Browse" msgstr "_עיון" #: ../glade/liferea.ui.h:54 msgid "_Do this automatically for enclosures like this from now on." msgstr "_ביצוע פעולה זו אוטומטית עבור כל הצירופים שכמו צירוף זה מעתה והלאה." #: ../glade/liferea.ui.h:55 msgid "Search All Feeds" msgstr "חיפוש בכל הערוצים" #: ../glade/liferea.ui.h:56 msgid "_Search for:" msgstr "_חפש:" #: ../glade/liferea.ui.h:57 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "הזן מחרוזת תווים שאותה יחפש Liferea בכותרות הפריטים או בתוכנם." #: ../glade/liferea.ui.h:58 msgid "_Advanced..." msgstr "_מורחב..." #: ../glade/liferea.ui.h:59 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "חיפוש הטקסט שצוין בכל הערוצים. תוצאות החיפוש יופיעו ברשימת הפריטים." # מנטר העדכונים #: ../glade/liferea.ui.h:60 msgid "Update Monitor" msgstr "ניטור אחר עדכונים" #: ../glade/liferea.ui.h:61 msgid "Pending Requests" msgstr "בקשות ממתינות" #: ../glade/liferea.ui.h:62 msgid "Downloading Now" msgstr "ערוצים שנטענים כעת" # _עצור #: ../glade/liferea.ui.h:63 msgid "Cancel _All" msgstr "_בטל הכל" #: ../glade/liferea.ui.h:64 msgid "Create News Bin" msgstr "צור סל איסוף" #: ../glade/liferea.ui.h:65 msgid "_News Bin Name:" msgstr "שם _סל איסוף:" #: ../glade/liferea.ui.h:66 msgid "About" msgstr "אודות" #: ../glade/liferea.ui.h:67 msgid "Liferea is a news aggregator for GTK+" msgstr "‏Liferea הינו מאגד חדשות עבור ‎GTK+‎" #: ../glade/liferea.ui.h:68 msgid "Liferea Homepage" msgstr "דף הבית של Liferea" # מתקדם #: ../glade/liferea.ui.h:69 msgid "Advanced Search" msgstr "חיפוש מורחב" #: ../glade/liferea.ui.h:70 msgid "Find Items that meet the following criteria" msgstr "מציאת פריטים אשר עומדים בקריטריונים המנויים להלן" #: ../glade/liferea.ui.h:71 msgid "A_ny Rule Matches" msgstr "_כל כלל מתאים" #: ../glade/liferea.ui.h:72 msgid "_All Rules Must Match" msgstr "_על כל הכללים להתאים" #: ../glade/liferea.ui.h:73 msgid "_Search Folder..." msgstr "_תיקיית חיפוש..." #: ../glade/liferea.ui.h:74 msgid "Create Search Engine Feed" msgstr "צור ערוץ של מנוע חיפוש" #: ../glade/liferea.ui.h:75 msgid "enter any search string you want" msgstr "הזן מחרוזת חיפוש כלשהי" #: ../glade/liferea.ui.h:76 msgid "Maximal _Number Of Result Items:" msgstr "מספר מ_קסימלי של פריטי תוצאה:" # שפורטו #: ../glade/liferea.ui.h:77 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 יפיק הרשמת ערוץ, המשמש לתשאל את תוצאות מנוע החיפוש עבור מחרוזת " "החיפוש שצוינו. באפשרותך לשמור את ערוץ זה באופן קבוע ולעדכן אותו כמו כל הרשמה " "אחרת." #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" 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/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:4 msgid "Feed Update Settings" msgstr "הגדרות עדכון ערוץ" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "_עדכן את כל ההרשמות בעת הפעלה." # תדירות _רענון ערוץ שגרתית: #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "ב_רירת מחדל לזמן רענון ערוץ:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "ערוצים" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "הגדרות תצוגת תיקיות" # תת־הערוצים > ערוצי־המשנה # האם עומדת לרשותך מילה מוצלחת יותר מ־צאצא? # הזנת צאצא child feeds # תהליך צאצא child process # תהליך הורה parent process # _הצג את כל הפריטים של כל ההזנות המשניות כאשר תיקייה נבחרת. #: ../glade/prefs.ui.h:11 msgid "_Show the items of all child feeds when a folder is selected." msgstr "_הצג את כל הפריטים של כל ערוצי המשנה כאשר תיקייה נבחרת." #: ../glade/prefs.ui.h:12 msgid "_Hide read items." msgstr "הס_תר פריטים שנקראו." #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "סמלי ערוץ (Favicons)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_עדכן את כל הסמלים כעת" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "תיקיות" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "קריאת כותרות" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "_קרא מאמרים ברפרוף בעזרת:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "_מצב תצוגה שגרתי:" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "מיזוג רשת" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_פרסם סימניות באתר" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "הגדרות דפדפן פנימי" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "פתח קישורים ב_חלון של Liferea." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_נטרל Javascript." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "_אפשר תוספות דפדפן." #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "הגדרות דפדפן חיצוני" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_פתח קישור בתוך:" #: ../glade/prefs.ui.h:28 msgid "_Manual:" msgstr "_ידני:" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "(s% עבור URL)" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_דפדפן:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "דפדפן" #: ../glade/prefs.ui.h:33 msgid "Toolbar Settings" msgstr "הגדרות סרגל כלים" #: ../glade/prefs.ui.h:34 msgid "_Hide toolbar." msgstr "הס_תר סרגל כלים." # סיווג #: ../glade/prefs.ui.h:35 msgid "Toolbar _button labels:" msgstr "_תוויות כפתורים בסרגל כלים:" # מ.מ.ג. #: ../glade/prefs.ui.h:36 msgid "GUI" msgstr "ממשק משתמש גרפי" #: ../glade/prefs.ui.h:37 msgid "HTTP Proxy Server" msgstr "שרת פרוקסי HTTP" #: ../glade/prefs.ui.h:38 msgid "_Auto Detect (GNOME or environment)" msgstr "_אתר אוטומטית (GNOME או סביבת עבודה)" #: ../glade/prefs.ui.h:39 msgid "_No Proxy" msgstr "_בלי פרוקסי" #: ../glade/prefs.ui.h:40 msgid "_Manual Setting:" msgstr "_הגדרה ידנית:" #: ../glade/prefs.ui.h:41 msgid "Proxy _Port:" msgstr "_יציאת פרוקסי:" #: ../glade/prefs.ui.h:42 msgid "Proxy _Host:" msgstr "_מארח פרוקסי:" #: ../glade/prefs.ui.h:43 msgid "Use Proxy Au_thentication" msgstr "השתמש ב_זיהוי פרוקסי" #: ../glade/prefs.ui.h:44 msgid "Proxy Pass_word:" msgstr "_סיסמת פרוקסי:" #: ../glade/prefs.ui.h:45 msgid "Proxy _Username:" msgstr "_שם משתמש פרוקסי:" #: ../glade/prefs.ui.h:46 msgid "Proxy" msgstr "פרוקסי" #: ../glade/prefs.ui.h:47 msgid "Downloading Enclosures" msgstr "הורדת צירופים" #: ../glade/prefs.ui.h:48 msgid "_Download using" msgstr "_הורד באמצעות" #: ../glade/prefs.ui.h:49 msgid "Opening Enclosures" msgstr "פתיחת צירופים" #: ../glade/prefs.ui.h:50 msgid "Enclosures" msgstr "צירופים" #: ../glade/prefs.ui.h:51 msgid "Plugins" 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/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/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 tt-rss account settings." msgstr "אנא הזן את הגדרות חשבון tt-rss." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "כתובת _שרת" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" 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." # 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 "Mark all as read" #~ 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 "Search Folder Properties" #~ msgstr "מאפייני תיקיית חיפוש" #~ msgid "Search _Name:" #~ 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.10.17/po/hu.po000066400000000000000000002114061261475620100146720ustar00rootroot00000000000000# 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. msgid "" msgstr "" "Project-Id-Version: liferea 1.10-rc1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-01-25 23:54+0100\n" "PO-Revision-Date: 2013-04-23 12:14+0200\n" "Last-Translator: Gabor Kelemen \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" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.4\n" #: ../liferea.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Hírforrásolvasó" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea hírforrásolvasó" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Hírforrások és blogok olvasása" #: ../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/liferea.ui.h:29 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 "No comments yet." msgstr "Még nincs hozzászólás." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Hozzászólások" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Frissítés…" #: ../xslt/item.xml.in.h:13 msgid "Refresh" 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:32 msgid "Default Browser" msgstr "Alapértelmezett böngésző" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Hibás böngészőparancs: %s" #: ../src/browser.c:230 #, 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:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Nem hozható létre a %s ideiglenes könyvtár." #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Ma %l.%M %P" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%Y. %b. %e." #: ../src/enclosure.c:197 #, 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:288 msgid "You have not configured a download tool yet! Please do so in the 'Download' 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:306 #, 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 futtatása 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Hiba %s átnevezésekor %s névre\n" #: ../src/export.c:406 ../src/export.c:408 #, 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:414 ../src/export.c:416 #, 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:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Importált hírforrások" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Hírforráslista importálása" #: ../src/export.c:470 msgid "Import" msgstr "Importálás" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 msgid "OPML Files" msgstr "OPML-fájlok" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Hiba történt a hírforráslista exportálása közben." #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Hírforráslista exportálva!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Hírforráslista exportálása" #: ../src/export.c:487 msgid "Export" msgstr "Exportálás" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "„%s” frissítve…" #: ../src/feed.c:294 #, 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:404 msgid "There are no unread items" msgstr "Nincsenek olvasatlan elemek" #: ../src/main.c:164 msgid "Start Liferea with its main window in STATE. STATE may be `shown', `iconified', 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/main.c:164 msgid "STATE" msgstr "ÁLLAPOT" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Verzióinformáció megjelenítése, majd kilépés" #: ../src/main.c:166 msgid "Add a new subscription" msgstr "Új feliratkozás hozzáadása" #: ../src/main.c:166 msgid "uri" msgstr "URI" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Minden típusú hibakeresési üzenet kiírása" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "A gyorsítótár-kezelési hibakeresési üzenetek kiírása" #: ../src/main.c:173 msgid "Print debugging messages for the configuration handling" msgstr "A beállításkezelés hibakeresési üzeneteinek kiírása" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Az adatbázis-kezelés hibakeresési üzeneteinek kiírása" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "Minden GUI függvény hibakeresési üzeneteinek kiírása" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Minden hálózati tevékenység hibakeresési üzeneteinek kiírása" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "Minden feldolgozási függvény hibakeresési üzeneteinek kiírása" #: ../src/main.c:179 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/main.c:180 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/main.c:181 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/main.c:182 msgid "Print debugging messages of the search folder matching" msgstr "A keresőmappa-illesztés hibakeresési üzeneteinek kiírása" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "Részletes hibakeresési üzenetek kiírása" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "A megadott témában a hibakeresési üzenetek kiírása" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea – A linuxos hírforrásolvasó" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "További információkért lásd: http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "A frissítési kérés megszakítva" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "A cél gépneve nem oldható fel" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "A proxy gépneve nem oldható fel" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "A távoli kiszolgálóhoz nem lehet csatlakozni" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Nem lehet csatlakozni a proxyhoz" #: ../src/net.c:325 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:328 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:331 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:333 msgid "Payment required" msgstr "Fizetés szükséges" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Nem jogosult az erőforrás elérésére" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Erőforrás nem található" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Az eljárás nem megengedett" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Nem fogadható el" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Proxyhitelesítés szükséges" #: ../src/net.c:339 msgid "Request timed out" msgstr "A kérés túllépte az időkorlátot" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "A forrás nem létezik. Kérem iratkozzon le!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Belső hiba történt a frissítési folyamatban" #: ../src/net.c:347 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:349 msgid "Client Error" msgstr "Klienshiba" #: ../src/net.c:351 msgid "Server Error" msgstr "Kiszolgálóhiba" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "„%s” feliratkozás már frissítve lett!" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "„%s” hírforrásikonjának frissítése" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "Az utolsó frissítés óta %s nem változott." #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "%s frissítése" #: ../src/update.c:259 #, 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:282 #, c-format msgid "%s exited with status %d" msgstr "%s kilépett %d állapotkóddal" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Hiba: nem nyitható meg „%s” nevű fájl" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Hiba: nem létezik „%s” nevű fájl" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Új keresőmappa" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Több hiba is történt. A kimenet csonkítva lett!]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, 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:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Fájl választása" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d új)" msgstr[1] " (%d új)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Súgótémák" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Rövid leírás" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "GYIK" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "A Liferea kapcsolódik az internethez" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Kapcsolat nélküli munka" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "A Liferea már nincs kapcsolódva az internethez" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Munka kapcsolódva" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Feliratkozások" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "Öss_zes frissítése" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Minden feliratkozás frissítése." #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Összes _olvasottnak jelölése" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Minden feliratkozás minden elemét olvasottnak jelöli" #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "Hírforráslista i_mportálása…" #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Egy OPML hírforráslistát importál." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "Hírforráslista _exportálása…" #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "A hírcsoportlistát exportálja OPML formátumban." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Kilépés" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "F_orrás" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Minden elem _törlése" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Eltávolít minden elemet a jelenlegi hírforrásból." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "Ele_m" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "Előző elem" #: ../src/ui/liferea_shell.c:924 msgid "Next Item" msgstr "Következő elem" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "_Következő olvasatlan elem" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Nézet" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "Szövegméret _növelése" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Növeli az elemnézetben használt betűk méretét." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "Szövegméret _csökkentése" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Csökkenti az elemnézetben használt betűk méretét." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "_Eszközök" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "_Frissítésfigyelő" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "A jelenleg frissítés alatt álló források felsorolása" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Beállítások" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Beállítások szerkesztése." #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "_Keresés" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Keresés az összes forrásban…" #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Megjeleníti a keresés párbeszédpanelt." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Súgó" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Tartalom" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Súgó megjelenítése az alkalmazáshoz." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "Rövid _leírás" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Egy felsorolás megtekintése a Liferea gyorsbillentyűiről." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_GYIK" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Az alkalmazással kapcsolatos gyakran ismételt kérdések megjelenítése." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_Névjegy" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Megjeleníti a névjegy ablakot." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "N_ormál nézet" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Levelezőkhöz hasonló megjelenési mód." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "_Széles nézet" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Három függőleges ablaktábla megjelenítése." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "_Kombinált nézet" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Két ablaktáblás nézet." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "Csökkentett _hírforráslista" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Az új elemeket nem tartalmazó hírforrások elrejtése." #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "Új _feliratkozás…" #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Új feliratkozást ad a forráslistához." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Új _mappa…" #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Mappát ad a forráslistához." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Új ke_resőmappa…" #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Új keresőmappát ad a forráslistához." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Új f_orrás…" #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Új forráslista-forrást ad hozzá." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "Új _hírgyűjtő…" #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Új hírgyűjtő felvétele." #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "_Olvasottnak jelölés" #: ../src/ui/liferea_shell.c:979 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." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Frissítés" #: ../src/ui/liferea_shell.c:981 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." #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "T_ulajdonságok" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Megnyitja a tulajdonságok ablakot a kiválasztott feliratkozáshoz." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "_Eltávolítás" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Eltávolítja a kiválasztott feliratkozást." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Olvasottság átka_pcsolása" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Átkapcsolja az olvasottsági állapotát a kiválasztott elemnek." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Megjelöl_tség átkapcsolása" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Az elem megjelöltségét ki/bekapcsolja." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "_Eltávolítás" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Eltávolítja a kiválasztott elemet." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "Megnyitás l_apon" #: ../src/ui/liferea_shell.c:997 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." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 msgid "_Open In Browser" msgstr "_Megnyitás böngészőben" #: ../src/ui/liferea_shell.c:999 msgid "Launches the item's link in the Liferea item pane." msgstr "Megnyitja az elem hivatkozását a Liferea elemsávján." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 msgid "Open In _External Browser" msgstr "Megnyitás _külső böngészőben" #: ../src/ui/liferea_shell.c:1001 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." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "K_apcsolat nélküli munka" #: ../src/ui/liferea_shell.c:1006 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." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "_Teljes képernyő" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "Teljes képernyős üzemmód" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea – Linuxos hírforrásolvasó" #: ../src/ui/liferea_shell.c:1341 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.

" #: ../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:205 msgid "All Files" msgstr "Minden fájl" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Bejegyzés törlése" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, 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_view.c:354 msgid "Deletion Confirmation" msgstr "Törlés megerősítés bejegyzést?e" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "A Liferea nem kapcsolódik az internetre, nem lehet frissíteni." #: ../src/ui/liferea_htmlview.c:627 msgid "Open Link In _Tab" msgstr "Hivatkozás megnyitása l_apon" #: ../src/ui/liferea_htmlview.c:628 msgid "_Open Link In Browser" msgstr "Hivatkozás _megnyitása böngészőben" #: ../src/ui/liferea_htmlview.c:629 msgid "_Open Link In External Browser" msgstr "Hivatkozás megnyitása _külső böngészőben" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "Hivatkozást _könyvjelzőbe: %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "Hivatkozás _címének másolása" #: ../src/ui/liferea_htmlview.c:639 msgid "_Copy Image Location" msgstr "Ké_p helyének másolása" #: ../src/ui/liferea_htmlview.c:641 msgid "S_ave Link As" msgstr "_Hivatkozás mentése másként" #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "_Kép mentése másként" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "_Feliratkozás…" #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Nincs cím ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Dátum" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Cím" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Nincs kiválasztott elem" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Nincs hivatkozás megadva ehhez az elemhez." #: ../src/ui/item_list_view.c:818 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/popup_menu.c:142 msgid "Copy to News Bin" msgstr "Másolás hírgyűjtőbe" #: ../src/ui/popup_menu.c:156 #, c-format msgid "_Bookmark at %s" msgstr "Hivatkozás i_de: %s" #: ../src/ui/popup_menu.c:160 msgid "Copy Item _Location" msgstr "_Elem helyének másolása" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "Elem el_távolítása" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Melléklet megnyitása…" #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Mentés másként…" #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "Hivatkozás megnyitása" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "Összes _frissítése" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "Liferea _megjelenítése" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "Mappa f_rissítése" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "Összes megjelölése _olvasottnak" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "Ú_j" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "Új _feliratkozás…" #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "Új _forrás…" #: ../src/ui/popup_menu.c:329 msgid "Sort Feeds" msgstr "Hírforrások rendezése" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "Újjáé_pítés" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "GNOME alapértelmezett" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Szöveg az ikonok alatt" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Szöveg az ikonok mellett" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Csak ikonok" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Csak szöveg" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "perc" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "óra" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "nap" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Szóköz" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr "Ctrl + szóköz" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr "Alt + szóköz" #: ../src/ui/preferences_dialog.c:114 msgid "Normal View" msgstr "Normál nézet" #: ../src/ui/preferences_dialog.c:115 msgid "Wide View" msgstr "Széles elrendezés" #: ../src/ui/preferences_dialog.c:116 msgid "Combined View" msgstr "Kombinált elrendezés" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Egyéb…" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Alapértelmezett böngésző" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Létező ablak" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Új ablak" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Új lap" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "Integráció az üzenetkezelési menüvel (indikátorral)" #: ../src/ui/preferences_dialog.c:685 msgid "Terminate instead of minimizing to the messaging menu" msgstr "Kilépés az üzenetkezelési menüre való minimalizálás helyett" #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "Indítás az üzenetkezelési menüre minimalizálva" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Típus" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Üres)" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Újraépítés" #: ../src/ui/subscription_dialog.c:430 #, 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:434 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:155 msgid "Untitled" msgstr "Névtelen" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d új elem" msgstr[1] "%d új elem" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Nincs új elem" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Nincs olvasatlan elem" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Weboldal" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Érvénytelen Atom hírforrás: ismeretlen szerző" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b. %e. %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../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:116 msgid "Google Reader login failed!" msgstr "Google Reader bejelentkezés hibával zárult." #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 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." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:326 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." #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Nem találhatóak hírforráslista-típusok." #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Forrás típusa" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:363 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." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "A tt-rss API által visszaadott JSON nem dolgozható fel!" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Már nem létezik a hírforrás." #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Ennek a hírnek nincs címe" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Megtekintés" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Hírforrás megnyitása" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Összes megjelölése olvasottnak" #: ../src/notification/libnotify.c:254 #, c-format 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" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Hírforrásfrissítés" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Részletek" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Hitelesítés" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "Jel_szó:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_Felhasználónév:" #: ../glade/auth.ui.h:6 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." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "Jel_szó" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "Felhasználó_név (e-mail)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "normál elrendezés" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "széles elrendezés" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Címek megjelenítése" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "kombinált elrendezés" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Címek" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Online/Offline gomb" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Feliratkozás tulajdonságai" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Hírforrás neve" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "Hírforrás _neve:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "Frissítési időköz" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "Alapé_rtelmezett frissítési időköz használata" #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "Hírforrás-specifikus _frissítési időköz:" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Ne frissítse ezt a hírforrást automatikusan." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Általános" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Hírforrás címe" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Forrás típusa:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Forrás:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "Paran_cs" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Helyi fájl" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Fájl kiválasztása…" #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Átalakítási _szűrő használata" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "_Konvertáló:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "A_lapértelmezett gyorsítótár-beállítások" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Gyorsítótár tiltása" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Korlátlan méretű gyorsítótár" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "El_mentendő elemek száma:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Archiválás" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "HTTP _hitelesítés használata" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "_Ne használjon proxyt a letöltéshez" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Letöltés" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "A hírforrás összes mellékletének _automatikus letöltése." #: ../glade/liferea.ui.h:42 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/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "H_ozzászólás-forrás mellőzése ehhez a feliratkozáshoz." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "Fel_ugró értesítések engedélyezése ehhez a feliratkozáshoz." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "_Ne használjon felugró értesítéseket ehhez a feliratkozáshoz." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Letöltött elemek megjelölése olvasottként." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Haladó" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Új mappa" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "_Mappa neve:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Átnevezés" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Új név:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Keresőmappa tulajdonságai" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "_Keresés neve:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "A következő feltételeknek megfelelő elemek keresése" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "Bá_rmely szabály illeszkedik" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "Min_den szabály illeszkedik" #: ../glade/liferea.ui.h:57 msgid "Open Enclosure" msgstr "Melléklet megnyitása" #: ../glade/liferea.ui.h:58 msgid "Open an enclosure of type:" msgstr "A következő típusú melléklet megnyitása:" #: ../glade/liferea.ui.h:59 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Tallózás" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Tegye ezt mostantól minden ehhez hasonló melléklettel." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Keresés az összes hírforrásban" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Keresés:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Speciális…" #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Frissítésfigyelő" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "Függőben lévő kérések" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "Letöltés most" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Összes _megszakítása" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Hírgyűjtő készítése" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Hírgyűjtő neve:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Névjegy" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "A Liferea egy hírolvasó program GTK+ grafikus felülettel." #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "A Liferea honlapja" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Speciális keresés" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "Keresés ma_ppában…" #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Keresőmotor-hírforrás készítése" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "írja be a keresendő szöveget" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "Találatok ma_ximális száma:" #: ../glade/liferea.ui.h:84 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." #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Letöltés / Utófeldolgozás" #: ../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/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 msgid "Please enter your tt-rss 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/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/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:4 msgid "Feed Update Settings" msgstr "Hírforrás frissítésének beállításai" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "Min_den feliratkozás frissítése induláskor." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Alapértelmezett _frissítési időköz:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Hírforrás" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "Mappamegjelenítési beállítások" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "Olvasott hírek _elrejtése." #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Hírforrásikonok" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "Hírforrásikonok frissítése _most" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Mappák" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Fejlécek olvasása" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "Cikkek át_futása:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "Alapértelmezett _nézetmód:" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Webes integráció" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Könyvjelzők küldése:" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Belső böngésző beállításai" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Hivatkozások megnyitása a Liferea _ablakában." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_JavaScript tiltása." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "Bö_ngészőbővítmények engedélyezése." #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "Külsőböngésző-beállítások" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "Hivatk_ozás megnyitása:" #: ../glade/prefs.ui.h:28 msgid "_Manual:" msgstr "_Kézi:" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "(%s az URL-hez)" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "Böngés_ző:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Böngésző" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Értesítések beállításai" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "_Felugró ablak megjelenítése az új hírekről." #: ../glade/prefs.ui.h:35 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)" #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Új elemek s_zámának mutatása az állapotikonon." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "_Kilépés az értesítési területre minimalizálás helyett" #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Indítás tálcaikonként." #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Eszköztár beállításai" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Eszköztár elrejtése." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Esz_köztárgombok címkéi:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Kezelőfelület" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "HTTP proxy kiszolgáló" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_Automatikus felismerés (GNOME vagy környezet)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_Proxy nélkül" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Kézi beállítás" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "Proxy _port:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "Proxy _gépnév:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Proxy hi_telesítés használata" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Proxy jel_szó:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Proxy _felhasználónév:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "Mellékletek letöltése" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Letöltés módja:" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "Mellékletek megnyitása" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Mellékletek" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "Bővítmények" #~ 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 "Synchronized with Nearby Hosts" #~ msgstr "Szinkronizálva közeli gépekkel" #~ 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 "_Delete" #~ msgstr "_Törlés" #~ 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.10.17/po/it.po000066400000000000000000001702321261475620100146730ustar00rootroot00000000000000# 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. # msgid "" msgstr "" "Project-Id-Version: liferea 1.7.x\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-01-25 23:54+0100\n" "PO-Revision-Date: 2013-09-27 10:56+0200\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.6\n" #: ../liferea.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Lettore notiziari" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Lettore notiziari Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Leggi notizie e blog" #: ../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 "Sono occorsi 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/liferea.ui.h:29 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 "No comments yet." msgstr "Ancora nessun commento." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Commenti" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Aggiornamento..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Ricarica" #: ../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:32 msgid "Default Browser" msgstr "Browser predefinito" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Comando browser non riuscito: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Avvio: «%s»" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Errore di autorizzazione" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Impossibile creare la directory di cache «%s»." #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Oggi %k.%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "Il file «%s» non è una configurazione di tipo allegato valida." #: ../src/enclosure.c:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" "Non è stato ancora configurato uno strumento di scaricamento. Configurarlo " "nella scheda «Scaricamento» in Strumenti/Preferenze." #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Errore nel rinominare %s in %s\n" #: ../src/export.c:406 ../src/export.c:408 #, 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:414 ../src/export.c:416 #, 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:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Elenco notiziari importati" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Importa elenco notiziari" #: ../src/export.c:470 msgid "Import" msgstr "Importa" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 msgid "OPML Files" msgstr "File OPML" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Errore durante l'esportazione dell'elenco notiziari." #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Elenco notiziari esportato." #: ../src/export.c:487 msgid "Export Feed List" msgstr "Esporta elenco notiziari" #: ../src/export.c:487 msgid "Export" msgstr "Esporta" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "«%s» aggiornato..." #: ../src/feed.c:294 #, 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:404 msgid "There are no unread items" msgstr "Non ci sono articoli non letti" #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" "Avvia la finestra principale di Liferea con lo STATO. STATO può essere " "«shown»(mostra), «iconified»(ridotta a icona) o «hidden»(nascosta)" #: ../src/main.c:164 msgid "STATE" msgstr "STATO" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Mostra informazioni di versione ed esce" #: ../src/main.c:166 msgid "Add a new subscription" msgstr "Aggiunge un nuovo abbonamento" #: ../src/main.c:166 msgid "uri" msgstr "uri" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Stampa messaggi di debug di tutti i tipi" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "Stampa messaggi di debug del gestore di cache" #: ../src/main.c:173 msgid "Print debugging messages for the configuration handling" msgstr "Stampa messaggi di debug del gestore di configurazione" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Stampa messaggi di debug del gestore del database" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "Stampa messaggi di debug di tutte le funzioni dell'interfaccia grafica" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Stampa messaggi di debug di tutte le attività di rete" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "Stampa messaggi di debug di tutte le funzioni di analisi" #: ../src/main.c:179 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/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "Stampa messaggi di debug quando entra/lascia le funzioni" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "" "Stampa messaggi di debug dell'elaborazione di aggiornamento del notiziario" #: ../src/main.c:182 msgid "Print debugging messages of the search folder matching" msgstr "Stampa messaggi di debug della cartella dei risultati corrispondenti" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "Stampa messaggi di debug dettagliati" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "Stampa messaggi di debug dell'argomento scelto" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, il lettore notiziari in Linux" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "Per maggiori informazioni, visitare http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "La richiesta di aggiornamento è stata annullata" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Impossibile risolvere il nome host di destinazione" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Impossibile risolvere il nome host del proxy" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Impossibile connettersi all'host remoto" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Impossibile connettersi al proxy" #: ../src/net.c:325 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:328 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:331 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:333 msgid "Payment required" msgstr "Pagamento richiesto" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Non è consentito accedere a questa risorsa" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Risorsa non trovata" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Metodo non consentito" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Non accettabile" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Autenticazione del proxy richiesta" #: ../src/net.c:339 msgid "Request timed out" msgstr "Richiesta scaduta" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Risorsa non esistente. Rimuovere l'abbonamento." #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Si è verificato un errore interno nel processo di aggiornamento" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Notiziario non disponibile: il server ha richiesto una ridirezione non " "supportata." #: ../src/net.c:349 msgid "Client Error" msgstr "Errore del client" #: ../src/net.c:351 msgid "Server Error" msgstr "Errore del server" #: ../src/net.c:353 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 come letto" #: ../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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "L'abbonamento di «%s» è già in aggiornamento." #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Aggiornamento favicon per «%s»" #: ../src/subscription.c:193 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:211 #, 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:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "«%s» è abbandonato. Non verrà più aggiornato." #: ../src/subscription.c:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "«%s» non è cambiato dall'ultimo aggiornamento" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Aggiornamento di «%s»" #: ../src/update.c:259 #, 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:282 #, c-format msgid "%s exited with status %d" msgstr "%s è uscito con lo stato %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Errore: impossibile aprire il file «%s»" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Errore: non c'è il file «%s»" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Nuova cartella di ricerca" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Si sono verificati più errori. L'output è stato troncato.]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d allegato" msgstr[1] "%d allegati" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Scegliere file" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d nuovo)" msgstr[1] " (%d nuovi)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Guida argomenti" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Riferimenti veloci" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "Domande frequenti" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "In rete" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Lavora fuori rete" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Fuori rete" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Lavora in rete" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Abbonamenti" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "Aggiorna _tutto" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Aggiorna tutti gli abbonamenti." #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Segna tutto come _letto" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Segna come letto tutti gli articoli e tutti gli abbonamenti." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "Im_porta elenco notiziari..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Importa un elenco notiziari OPML." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "Espo_rta elenco notiziari..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Esporta l'elenco notiziari come OPML." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Esci" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Notiziario" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Rimuovi _tutti gli articoli" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Rimuove tutti gli articoli del notiziario attualmente selezionato." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "Arti_colo" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "Articolo precedente" #: ../src/ui/liferea_shell.c:924 msgid "Next Item" msgstr "Articolo successivo" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "Articolo s_uccessivo non letto" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Visualizza" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "Au_menta dimensione testo" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Aumenta la dimensione del testo nella visualizzazione dell'articolo" #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "_Diminuisci dimensione testo" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "" "Diminuisce la dimensione del testo nella visualizzazione dell'articolo." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "_Strumenti" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "Controllo _aggiornamenti" #: ../src/ui/liferea_shell.c:939 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" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "Preferen_ze" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Modifica le preferenze." #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "_Cerca" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Cerca in tutti i notiziari..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Mostra il dialogo di ricerca." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "A_iuto" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "Som_mario" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Visualizza la guida per questa applicazione." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "Riferimenti velo_ci" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Visualizza un elenco di tutte le scorciatoie da tastiera." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "Domande _frequenti" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Visualizza le domande frequenti per questa applicazione." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "I_nformazioni" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Mostra un dialogo di informazioni." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "Visualizzazione norma_le" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Imposta la modalità di visualizzazione come un client di posta." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "Visualizzazione ampi_a" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "" "Imposta la modalità di visualizzazione per usare tre riquadri verticali." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "Visualizzazione com_binata" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Imposta la modalità di visualizzazione in due riquadri." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "Elenco notiziari ri_dotto" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Nasconde i notiziari con nessun articolo non letto." #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "Nu_ovo abbonamento..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Aggiunge un abbonamento all'elenco dei notiziari." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Nuova _cartella..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Aggiunge una cartella all'elenco dei notiziari." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Nuova cartella ric_erca..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Aggiunge una nuova cartella di ricerca all'elenco dei notiziari." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Nuova fo_nte..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Aggiunge una nuova fonte dell'elenco dei notiziari." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "Nuovo archivio no_tizie..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Aggiunge un nuovo archivio delle notizie." #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "Se_gna articoli come letti" #: ../src/ui/liferea_shell.c:979 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." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Aggiorna" #: ../src/ui/liferea_shell.c:981 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." #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "Pr_oprietà" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Apre il dialogo della proprietà dell'abbonamento selezionato." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "Rimuo_vi" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Rimuove l'abbonamento selezionato." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Commuta stato l_etto" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Commuta lo stato di letto dell'articolo selezionato." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Commuta contrass_egno articolo" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Commuta lo stato del contrassegno dell'articolo selezionato." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "Rimuov_i" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Rimuove l'articolo selezionato." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "Apri nella _scheda" #: ../src/ui/liferea_shell.c:997 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." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 msgid "_Open In Browser" msgstr "_Apri nel browser" #: ../src/ui/liferea_shell.c:999 msgid "Launches the item's link in the Liferea item pane." msgstr "Lancia i collegamenti degli articoli nel riquadro degli articoli" #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 msgid "Open In _External Browser" msgstr "Apri nel browser _esterno" #: ../src/ui/liferea_shell.c:1001 msgid "Launches the item's link in the configured external browser." msgstr "Lancia i collegamenti degli articoli nel browser esterno configurato." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "_Lavora fuori rete" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "" "Questa opzione consente di disabilitare l'aggiornamento degli abbonamenti." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "_Schermo intero" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "Esplora a schermo intero" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Linux Feed Reader" #: ../src/ui/liferea_shell.c:1341 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 "" "

Benvenuti in Liferea, un aggregatore di notiziari in rete per il " "desktop.

È possibile aggiungere nuovi abbonamenti

  • Dal menù " "principale «Abbonamenti» -> «Nuovo abbonamento»
  • Rilasciando i " "collegamenti dei notiziari nell'elenco degli abbonamenti
  • Facendo " "clic con il tasto destro sui collegamenti e scegliendo «Abbonati» " "all'interno dell'applicazione

" #: ../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:205 msgid "All Files" msgstr "Tutti i file" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Eliminazione voce" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Eliminare veramente «%s»?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Conferma di eliminazione" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Modalità non in rete. Nessun aggiornamento è possibile." #: ../src/ui/liferea_htmlview.c:627 msgid "Open Link In _Tab" msgstr "Apri collegamento nella _scheda" #: ../src/ui/liferea_htmlview.c:628 msgid "_Open Link In Browser" msgstr "_Apri collegamento nel browser" #: ../src/ui/liferea_htmlview.c:629 msgid "_Open Link In External Browser" msgstr "_Apri collegamento nel browser esterno" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "Collegamento come _segnalibro su %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_Copia posizione collegamento" #: ../src/ui/liferea_htmlview.c:639 msgid "_Copy Image Location" msgstr "_Copia posizione immagine" #: ../src/ui/liferea_htmlview.c:641 msgid "S_ave Link As" msgstr "S_alva collegamento come" #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "S_alva immagine come" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "_Abbonati..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Nessun titolo ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Testata" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Nessun articolo è stato selezionato" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Questo articolo non ha un collegamento specificato." #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Si deve selezionare un notiziario per eliminare i suoi articoli." #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "Copia in archivio notizie" #: ../src/ui/popup_menu.c:156 #, c-format msgid "_Bookmark at %s" msgstr "_Segnalibro su %s" #: ../src/ui/popup_menu.c:160 msgid "Copy Item _Location" msgstr "Copia _posizione articolo" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "Rimuo_vi articolo" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Apri allegato..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Salva come..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "Copia posizione collegamento" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "Ag_giorna tutto" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "Mo_stra finestra" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "A_ggiorna cartella" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "Se_gna tutto come letto" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "_Nuovo" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "Nuovo _abbonamento..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "Nuova fo_nte..." #: ../src/ui/popup_menu.c:329 msgid "Sort Feeds" msgstr "Ordina notiziari" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "_Ricostruisci" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "Predefinito di GNOME" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Testo accanto alle icone" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Testo sotto le icone" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Solo icone" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Solo testo" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minuti" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "ore" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "giorni" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Spazio" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Spazio" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Spazio" #: ../src/ui/preferences_dialog.c:114 msgid "Normal View" msgstr "Visualizzazione normale" #: ../src/ui/preferences_dialog.c:115 msgid "Wide View" msgstr "Visualizzazione ampia" #: ../src/ui/preferences_dialog.c:116 msgid "Combined View" msgstr "Visualizzazione combinata" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Manuale" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Predefinito del browser" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Finestra esistente" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Nuova finestra" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Nuova scheda" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "Integrazione con il menù di messaggistica (indicatore)" #: ../src/ui/preferences_dialog.c:685 msgid "Terminate instead of minimizing to the messaging menu" msgstr "Terminare invece di minimizzare nel menù di messaggistica" #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "Avviare minimizzato nel menù di messaggistica" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Tipo" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Programma" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Vuoto)" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Ricostruzione" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "" "Questo notiziario non specifica un intervallo di aggiornamento predefinito." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "Senza titolo" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d nuovo articolo" msgstr[1] "%d nuovi articoli" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Nessun nuovo articolo" #: ../src/ui/ui_tray.c:228 #, c-format msgid "" "%s\n" "%d unread item" msgid_plural "" "%s\n" "%d unread items" msgstr[0] "" "%s\n" "%d articolo non letto" msgstr[1] "" "%s\n" "%d articoli non letti" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Nessun articolo non letto" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Sito web" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Notiziario Atom non valido: autore sconosciuto" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b %H.%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nuovo abbonamento" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "Accesso a Google Reader non riuscito." #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 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 "" "Integrare l'elenco notiziari dell'account di Google Reader. Verranno " "presentati gli abbonamenti di Google Reader e saranno sincronizzati l'elenco " "dei notiziari e le liste di lettura." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:326 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 i Blogroll oppure i Planet nell'elenco dei notiziari. Saranno " "automaticamente aggiunti o rimossi notiziari in base alle modifiche della " "fonte del documento OPML." #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Nessuno tipo di fonte di elenco dei notiziari trovato." #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Tipo di fonte" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:363 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 "" "Integrare l'elenco notiziari dell'account di Tiny Tiny RSS 1.5+. Verranno " "presentati gli abbonamenti di tt-rss e saranno sincronizzati l'elenco dei " "notiziari e le liste di lettura." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "Impossibile analizzare JSON restituito dalle API di tt-rss." #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Questo notiziario non esiste più." #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Questa notizia non ha alcuna testata" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Visita" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Apri notiziario" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Segna tutto come letto" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "%s ha %d aggiornamento" msgstr[1] "%s ha %d aggiornamenti" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Aggiornamento notiziario" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Mostra dettagli" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autenticazione" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "Pass_word:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_Nome utente:" #: ../glade/auth.ui.h:6 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." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "Pass_word" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "_Nome utente (email)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "visualizzazione normale" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "visualizzazione ampia" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Visualizza testate" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "visualizzazione combinata" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Testate" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Pulsante In rete/Non in rete" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Proprietà dell'abbonamento" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Nome notiziario" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "_Nome notiziario:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "Intervallo di aggiornamento" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "U_sare l'intervallo di aggiornamento globale predefinito." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "Intervallo specifico di aggiornamento del noti_ziario" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "N_on aggiornare automaticamente questo notiziario." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Generale" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Fonte notiziario" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Tipo di fonte:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Fonte:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "Coman_do" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "File loca_le" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Seleziona file..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Usare filtr_o di conversione" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Convertire usan_do:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "Impostazioni di cache prede_finite" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Disabilitare cache" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "Cache i_llimitata" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "Nu_mero di articoli da salvare:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Archivio" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Usare a_utenticazione HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "No_n usare il proxy per scaricare" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Scaricamento" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "Scaricare automaticamen_te tutti gli allegati di questo notiziario." #: ../glade/liferea.ui.h:42 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/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorare i com_menti del notiziario per questo abbonamento." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "_Imporre le notifiche per questo abbonamento." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "Nes_suna notifica per questo abbonamento." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Segnare articoli scaricati come letti." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Avanzato" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Nuova cartella" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "Nome cartel_la:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Rinomina" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "Nuo_vo nome:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Proprietà cartella di ricerca" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "_Nome della ricerca:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "Trova gli articoli che soddisfano i seguenti criteri" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "_Qualsiasi regola corrispondente" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "_Tutte le regole devono corrispondere" #: ../glade/liferea.ui.h:57 msgid "Open Enclosure" msgstr "Apri allegato" #: ../glade/liferea.ui.h:58 msgid "Open an enclosure of type:" msgstr "Aprire un allegato di tipo:" #: ../glade/liferea.ui.h:59 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Esplora" #: ../glade/liferea.ui.h:61 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/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Cerca in tutti i notiziari" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "Cer_ca per:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "Avan_zato..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Controllo aggiornamenti" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "Richieste in attesa" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "Scaricamento in corso" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Annulla tu_tto" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Crea archivio notizie" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "Nome archivio no_tizie:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Informazioni" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Copyright (c) 2003-2013\n" "Sviluppatori di Liferea\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Un aggregatore di notizie per GTK+" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Pagina web di Liferea" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Ricerca avanzata" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "Cartella ri_cerca..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Crea motore di ricerca notiziari" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "immettere qualsiasi stringa di ricerca si desidera" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "N_umero massimo di risultati per articoli:" #: ../glade/liferea.ui.h:84 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: l'applicazione genererà un abbonamento di notiziario che verrà " "utilizzato per interrogare il motore di ricerca dei risultati per la stringa " "di ricerca specificata. Si può mantenere permanentemente questo notiziario e " "aggiornarlo come un qualunque abbonamento." #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Scaricamento / Elaborazione" #: ../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/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 tt-rss account settings." msgstr "Inserire le impostazioni dell'account tt-rss." #: ../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/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/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:4 msgid "Feed Update Settings" msgstr "Impostazioni aggiornamento del notiziario" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "_Aggiornare tutti gli abbonamenti all'avvio." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "_Intervallo predefinito di aggiornamento del notiziario:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Notiziari" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "Impostazioni visualizzazione delle cartelle" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "Nas_condere gli articoli letti." #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Icone dei notiziari (favicon)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "Ag_giorna tutte le favicon ora" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Cartelle" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Lettura testate" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "Scor_rere gli articoli con:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "Modalità _predefinita di visualizzazione:" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Integrazione web" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Inserire segnalibri in" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Impostazioni del browser interno" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Aprire collegamenti nella _finestra." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "Disa_bilitare Javascript." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "_Abilitare plugin del browser." #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "Impostazioni del browser esterno" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "A_prire collegamenti in:" #: ../glade/prefs.ui.h:28 msgid "_Manual:" msgstr "_Manuale:" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "(%s per l'URL)" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Browser:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Browser" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Impostazioni notifiche" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Mostrare una finestra di _notifica con le nuove testate." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Mostrare un'i_cona di stato nell'area di notifica." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Mostrare il num_ero di nuovi articoli nell'area di notifica." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "Termina_re invece di minimizzare nell'area di notifica." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "A_vviare nell'area di notifica." #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Impostazioni barra degli strumenti" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "Nascon_dere la barra degli strumenti." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Etichette _pulsanti della barra degli strumenti:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Interfaccia grafica" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "Server proxy HTTP" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "Rile_vare automaticamente (GNOME o ambiente)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "Nessu_n proxy" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "Impostazione man_uale:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "Por_ta del proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "_Host del proxy:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Usare auten_ticazione proxy" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Pass_word del proxy:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Nome _utente del proxy:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "Scaricamento allegati" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "Scari_care usando" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "Apertura allegati" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Allegati" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "Plugin" liferea-1.10.17/po/ja.po000066400000000000000000002035351261475620100146540ustar00rootroot00000000000000# 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. # # 翻訳の用例 (since 2004-08-16) # subscription: 購読 # items: トピック # feed: 配信元 msgid "" msgstr "" "Project-Id-Version: liferea-1.8-rc1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-04-27 14:08+0300\n" "PO-Revision-Date: 2012-10-26 23:32+0900\n" "Last-Translator: Takeshi Hamasaki \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.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "フィード・リーダ" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea フィード・リーダ" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 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 "No comments yet." msgstr "コメントなし" #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "コメント" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "更新中..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" 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 "NewsBin:" #: ../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:32 msgid "Default Browser" msgstr "デフォルト・ブラウザ" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "ブラウザの起動に失敗しました: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "起動中: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "認証エラー" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "キャッシュ・フォルダ \"%s\" を生成できません!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "今日の%p%l:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%Y年%B%e日" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "" "\"%s\" は正しいエンクロージャの種類を定義する設定ファイルではありません!" #: ../src/enclosure.c:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "%s から %s へ名前を変更する際にエラー\n" #: ../src/export.c:406 ../src/export.c:408 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "OPML ファイルを解析する際に XML エラーが発生しました! (\"%s\" をインポートで" "きませんでした)" #: ../src/export.c:414 ../src/export.c:416 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "ドキュメントが空です! (インポートする際にOPML ドキュメント \"%s\" は空にしな" "いで下さい...)" #: ../src/export.c:437 ../src/export.c:439 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" は正しい OPML ドキュメントではありません! (このファイルをインポートで" "きません)" #: ../src/export.c:458 msgid "Imported feed list" msgstr "配信元一覧を取り込みました" #: ../src/export.c:470 msgid "Import Feed List" msgstr "配信元一覧のインポート" #: ../src/export.c:470 msgid "Import" msgstr "インポート" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 msgid "OPML Files" msgstr "OPML ファイル" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "配信元一覧のエキスポート時にエラーが発生しました!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "配信元一覧をエキスポートしました!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "配信元一覧のエキスポート" #: ../src/export.c:487 msgid "Export" msgstr "エキスポート" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" を更新しました..." #: ../src/feed.c:294 #, 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:404 msgid "There are no unread items" msgstr "未読のトピックはありません" #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" "指定した状態でメイン・ウィンドウを表示する (STATE: 'shown', " "'iconified','hidden')" #: ../src/main.c:164 msgid "STATE" msgstr "STATE" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "バージョン情報を表示して終了する" #: ../src/main.c:166 msgid "Add a new subscription" msgstr "新しい配信元を追加する" #: ../src/main.c:166 msgid "uri" msgstr "uri" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "全ての種類のデバッグ情報を出力する" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "キャッシュの操作に関するデバッグ情報を出力する" #: ../src/main.c:173 msgid "Print debugging messages for the configuration handling" msgstr "設定の処理に関するデバッグ情報を出力する" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "データベースの操作に関するデバッグ情報を出力する" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "GUI を扱う関数のデバッグ情報を出力する" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "ネットワーク機能に関するデバッグ情報を出力する" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "全ての解析機能に関するデバッグ情報を出力する" #: ../src/main.c:179 msgid "Print debugging messages when a function takes too long to process" msgstr "任意の機能に時間がかかった時のデバッグ情報を出力する" #: ../src/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "関数の出入りに関するデバッグ情報を出力する" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "配信元の更新処理に関するデバッグ情報を出力する" #: ../src/main.c:182 msgid "Print debugging messages of the search folder matching" msgstr "検索フォルダの処理に関するデバッグ情報を出力する" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "詳細なデバッグ情報を出力する" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "指定したトピックに関するデバッグ情報を出力する" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea - Linux 向けのフィード・リーダです" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "詳細は http://lzone.de/liferea/ を訪問してみて下さい" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "更新要求をキャンセルしました" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "ホスト名を解決できません" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "プロキシのホスト名を解決できません" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "リモートのホストに接続できません" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "プロキシに接続できません" #: ../src/net.c:325 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "ネットワークに関連するエラーが発生したか、あるいは相手側が接続を閉じたようで" "す" #. http 3xx redirection #: ../src/net.c:328 msgid "The resource moved permanently to a new location" msgstr "リソースの移動が完了しました" #. http 4xx client error #: ../src/net.c:331 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "この配信元をダウンロードするために必要な認証を実施していません。配信元のプロ" "パティ・ダイアログでユーザ名とパスワードを更新して下さい。" #: ../src/net.c:333 msgid "Payment required" msgstr "課金請求がありました" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "このリソースにアクセスする権限がありません" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "リソースが見つかりませんでした" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "メソッドを実行できません" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "アクセスできません" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "プロキシによる認証が必要です" #: ../src/net.c:339 msgid "Request timed out" msgstr "要求がタイムアウトしました" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "完了しました。リソースが存在しません。購読を解約して下さい!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "プロセスを更新する際に内部エラーが発生しました" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "配信元を利用できません: サーバがサポートしないリダイレクションを要求しました" #: ../src/net.c:349 msgid "Client Error" msgstr "クライアントのエラー" #: ../src/net.c:351 msgid "Server Error" msgstr "サーバのエラー" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "この配信元 \"%s\" は既に更新済みです!" #: ../src/subscription.c:110 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "その配信元 \"%s\" は更新を停止しています (今後 Liferea で更新されることはあり" "ません!)" #: ../src/subscription.c:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "\"%s\" の favicon の更新中" #: ../src/subscription.c:193 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "この購読を読み込む際に問題が発生しました。URL と端末に出力されているメッセー" "ジを確認して下さい。" #: ../src/subscription.c:211 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "\"%s\" の URL が更新されていました" #: ../src/subscription.c:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "" "\"%s\" の更新は停止しています (今後 Liferea が更新することはありません!)" #: ../src/subscription.c:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" は最後の更新から変更はありません" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "\"%s\" の更新中" #: ../src/update.c:259 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "フィルタに使用する作業ファイル \"%s\" を開く際にエラーが発生しました!" #: ../src/update.c:282 #, c-format msgid "%s exited with status %d" msgstr "ステータス %2$d のトピック %1$s" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "エラー: パイプ \"%s\" を開けませんでした" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "エラー: ファイル \"%s\" を開けませんでした" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "エラー: ファイル \"%s\" がありません" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "新しい検索フォルダ" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[大量のエラーが発生したのでパーサのエラー出力を短くしました]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "添付ファイル: %d個" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "ファイルの選択" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] "(新着%d個)" #: ../src/ui/liferea_shell.c:330 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "未読%d個%s" #: ../src/ui/liferea_shell.c:716 msgid "Help Topics" msgstr "ヘルプのトピックス" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "クィック・リファレンス" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "FAQ" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea はオンラインです" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "オフラインで動作" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea はオフラインです" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "オンラインで動作" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "購読(_S)" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "全て更新(_A)" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "全ての購読先を更新します" #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "全て既読にする(_R)" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "全ての購読の全てのトピックに既読マークを付与します" #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "配信元一覧のインポート(_I)..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "OPML 配信元一覧をインポートします" #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "配信元一覧のエキスポート(_E)..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "OPML の配信元一覧としてエキスポートします" #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "終了(_Q)" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "配信元(_F)" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "全て削除(_A)" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "現在選択している全てのトピックを削除します" #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "トピック(_I)" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "次の未読のトピック(_N)" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "次の未読のトピック(_N)" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "表示(_V)" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "文字を大きくする(_I)" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "エントリの表示サイズを大きくします" #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "文字を小さくする(_D)" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "エントリの表示サイズを小さくします" #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "ツール(_T)" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "更新モニタ(_U)" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "更新キューの中にある全ての配信元の一覧を表示します" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "設定(_P)" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "設定を編集します" #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "検索(_E)" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "全ての配信元から検索..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "検索ダイアログを表示します" #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "ヘルプ(_H)" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "目次(_C)" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "このアプリケーションのヘルプを表示します" #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "クイック・リファレンス(_Q)" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "ショートカット・キーの一覧を表示します" #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "FAQ(_F)" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "このアプリケーションの FAQ を表示します" #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "このアプリケーションについて(_A)" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "情報ダイアログを表示します" #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "通常の表示(_N)" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "メーラー・モードで表示します" #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "ワイド表示(_W)" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "ニュースやトピック、その内容を縦型に表示します" #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "サマリ表示(_C)" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "トピックを要約して表示します" #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "既読の配信一覧を隠す(_R)" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "トピックが全て既読の配信元を非表示にします" #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "新しい購読(_N)..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "新しい購読を配信元一覧に追加します" #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "新しいフォルダ(_F)..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "新しいフォルダを配信元一覧に追加します" #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "新しい検索フォルダ(_E)..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "新しい検索フォルダを配信元一覧に追加します" #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "新しい場所(_S)..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "新しい配信元一覧の場所を追加します" #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "新しい NewsBin(_N)..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "新しい NewsBin を追加します" #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "全て既読にする(_M)" #: ../src/ui/liferea_shell.c:979 msgid "" "Marks all items of the selected feed list node / in the item list as read." msgstr "" "現在選択している配信元一覧や購読の一覧にある全てのトピックを既読にします" #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "更新(_U)" #: ../src/ui/liferea_shell.c:981 msgid "" "Updates the selected subscription or all subscriptions of the selected " "folder." msgstr "選択した購読または選択したフォルダにある全ての購読を更新します" #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "プロパティ(_P)" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "選択した購読のプロパティ・ダイアログを開きます" #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "削除(_R)" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "選択した購読を削除します" #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "既読ステータスの切り替え(_R)" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "選択したトピックの既読ステータスを切り替えます" #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "トピック・フラグの切り替え(_F)" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "選択したトピックの既読ステータスを切り替えます" #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "トピックの削除(_E)" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "現在選択しているトピックを削除します" #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "設定したブラウザでトピックのリンクを開きます" #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "ブラウザで開く(_L)" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "設定したブラウザでトピックのリンクを開きます" #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "外部ブラウザの設定" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "設定したブラウザでトピックのリンクを開きます" #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "オフラインで動作(_W)" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "このオプションで購読の更新を無効にできます" #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Linux ニュース・アグリゲータ" #: ../src/ui/liferea_shell.c:1341 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 へようこそ。これはオンラインで配信されているニュースを収集" "するデスクトップ向けニュース・アグリゲータです。

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

  • メイン・メニューにある [購読]->[新しい購読] " "を開く
  • 左側のペインに配信元のリンクをドロップする
  • 左側のペイ" "ンで右クリックして表示されるコンテキストメニューの [新規] を開く
" #: ../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:205 msgid "All Files" msgstr "全てのファイル" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "エントリの削除" #: ../src/ui/feed_list_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "本当に \"%s\" とその内容を削除してもよろしいですか?" #: ../src/ui/feed_list_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "本当に \"%s\" を削除してもよろしいですか?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "削除の確認" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea はオフライン・モードです (更新はできません)" #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "タブの中に開く(_T)" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "ブラウザで開く(_L)" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "ブラウザで開く(_L)" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "%s のブックマークに追加(_B)" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "リンク先のコピー(_C)" #: ../src/ui/liferea_htmlview.c:639 msgid "_Copy Image Location" msgstr "画像のリンク先のコピー(_C)" #: ../src/ui/liferea_htmlview.c:641 msgid "S_ave Link As" msgstr "リンクを別名で保存(_A)" #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "画像を別名で保存(_A)" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "購読する(_S)..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** タイトルなし ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "日付" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "ヘッドライン" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "トピックが選択されていません" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "このトピックにはリンクが割り当てられていません!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "トピックを削除する配信元を選択して下さい!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "NewsBin にコピーする" #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "%s のブックマークに追加(_B)" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "画像のリンク先のコピー(_C)" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "トピックの削除(_E)" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "エンクロージャを開く..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "別名で保存..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "リンク先のアドレスのコピー" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "全て更新(_U)" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "表示する(_S)" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "フォルダの更新(_U)" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "全て既読にする(_M)" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "新規(_N)" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "新しい購読(_S)..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "新しい場所(_O)..." #: ../src/ui/popup_menu.c:329 msgid "Sort Feeds" msgstr "配信元の並べ替え" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "再構築(_R)" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "GNOME のデフォルト" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "アイコンの下にラベル" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "アイコンの横にラベル" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "アイコンのみ" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "ラベルのみ" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "分ごと" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "時間ごと" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "日ごと" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Space" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr "Ctrl+Space" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr "Alt+Space" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "通常の表示(_N)" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "ワイド表示(_W)" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "サマリ表示(_C)" #: ../src/ui/preferences_dialog.c:505 msgid "Manual" msgstr "手動" #: ../src/ui/preferences_dialog.c:520 msgid "Browser default" msgstr "デフォルト" #: ../src/ui/preferences_dialog.c:523 msgid "Existing window" msgstr "既存のウィンドウ" #: ../src/ui/preferences_dialog.c:526 msgid "New window" msgstr "新しいウィンドウ" #: ../src/ui/preferences_dialog.c:529 msgid "New tab" msgstr "新しいタブ" #: ../src/ui/preferences_dialog.c:688 msgid "Integrate with the messaging menu (indicator)" msgstr "メッセージ・メニューと統合する (インジケータ)" #: ../src/ui/preferences_dialog.c:691 msgid "Terminate instead of minimizing to the messaging menu" msgstr "メッセージメニューをクリックしたら最小化しないで終了する" #: ../src/ui/preferences_dialog.c:694 msgid "Start minimized to the messaging menu" msgstr "起動時にメッセージ・メニューにアイコン化する" #: ../src/ui/preferences_dialog.c:794 msgid "Type" msgstr "種類" #: ../src/ui/preferences_dialog.c:797 msgid "Program" msgstr "プログラム" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(空)" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "この配信元ではデフォルトの更新間隔を設定してません。" #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "タイトルなし" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "新しいトピックが%d個あります" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "新しいトピックはありません" #: ../src/ui/ui_tray.c:228 #, c-format msgid "" "%s\n" "%d unread item" msgid_plural "" "%s\n" "%d unread items" msgstr[0] "" "%s\n" "未読のトピックが%d個あります" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "未読のトピックはありません" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "ウェブサイト" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "おかしな Atom 配信元: 作者が不明です" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%B%e日 %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "新しい購読" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "Google リーダへのログインに失敗しました!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google リーダ" #: ../src/fl_sources/google_source.c:384 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 リーダの購読内容を表" "示して同期します。" #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planet/BlogRoll/OPML" #: ../src/fl_sources/opml_source.c:326 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 ドキュメントで発生した変更点に相当する配信元を自動的に追加したり" "削除します。" #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "配信元一覧のソースの種類が見つかりませんでした!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "ソースの種類" #: ../src/fl_sources/ttrss_source.c:367 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:368 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 の購読を提供し配信元の一覧を同期して一覧に表示します。" #: ../src/fl_sources/ttrss_source_feed.c:111 msgid "Could not parse JSON returned by tt-rss API!" msgstr "tt-rss API が返した JSON を解析できませんでした!" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "この配信元はもう存在していません!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "このエントリにはヘッドラインがありません" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "訪問する" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "配信元を開く" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "全て既読にする" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "%s には%d個の新着トピックスがあります" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "配信元の更新" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "詳細を表示する" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "認証" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "パスワード(_P):" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "ユーザ名(_N):" #: ../glade/auth.ui.h:6 msgid "" "Note: The username and password will be saved to your Liferea feedlist " "file without using encryption." msgstr "" "注記: ユーザ名とパスワードは暗号化せずに Liferea 配信元一覧のファイルへ保" "存されます。" #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "パスワード(_P)" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "ユーザ名 (Eメール)(_U)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "通常の表示" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "ワイドな表示" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "ヘッドライン表示" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "サマリ表示" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "ヘッドライン" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "オンライン/オフライン切り換えボタン" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "購読先のプロパティ" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "配信元の名前" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "配信元の名前(_N):" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "更新間隔" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "デフォルトの更新間隔を使用する(_U)" #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "配信元で指定した更新間隔にする(_F): " #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "この配信元を自動的に更新しない(_D)" #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "この配信元では更新間隔を %d分にすることを推奨しています。" #: ../glade/liferea.ui.h:18 msgid "General" msgstr "全般" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "配信元の場所" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "ソースの種類:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "ソース(_S):" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "URL(_U)" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "コマンド(_C)" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "ローカルのファイル(_L)" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "ファイルの選択..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "変換フィルタを利用する(_F)" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "フィルタ名(_U):" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "デフォルトの設定にする(_D)" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "キャッシュを無効にする(_S)" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "キャッシュを制限しない(_U)" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "保存するトピックの総数(_N):" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "アーカイブ" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "HTTP の認証機能を使う(_A)" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "ダウンロード時にプロキシを使用しない(_D)" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "ダウンロード" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "この配信元が提供する全てのエンクロージャを自動的にダウンロードする(_A)" #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "ニュースを選択している時にブラウザでトピックのリンクを自動的に読み込んでおく" "(_L)" #: ../glade/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "コメントの配信元を無視する(_C)" #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "更新内容をポップアップ通知で知らせる(_E)" #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "更新内容をポップアップ通知で知らせない(_N)" #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "ダウンロードしたトピックを既読にする(_M)" #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "拡張" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "新しいフォルダ" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "フォルダ名(_F):" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "フォルダ名の変更" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "新しい名前(_N):" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "検索フォルダのプロパティ" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "検索する内容(_N):" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "次の条件を満足するトピックを検索します:" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "幾つかを満足するもの(_N)" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "全てを満足するもの(_A)" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "エンクロージャを開く..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "ダウンロードするエンクロージャの種類:" #: ../glade/liferea.ui.h:59 #, 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/liferea.ui.h:60 msgid "_Browse" msgstr "参照(_B)" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "これ以降は類似したエンクロージャに対しても自動的に実行する(_D)" #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "全ての配信元から検索" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "検索する文字列(_S):" #: ../glade/liferea.ui.h:64 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "配信元のタイトルまたはその内容から検索する文字列を入力して下さい" #: ../glade/liferea.ui.h:65 msgid "_Advanced..." msgstr "拡張(_A)..." #: ../glade/liferea.ui.h:66 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "全ての配信元から指定した文字列を検索し、その結果を一覧表示します" #: ../glade/liferea.ui.h:67 msgid "Update Monitor" msgstr "更新モニタ" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "保留中のリクエスト" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "ダウンロード中のリクエスト" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "全てキャンセル(_A)" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "NewsBin の作成" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "NewsBin の名前(_N):" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "情報" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Copyright (c) 2003-2012\n" "Liferea 開発チーム\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea は GTK+ 版のニュース・アグリゲータです。" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Liferea のホームページ" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "拡張検索" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "フォルダの検索(_S)..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "検索エンジンの配信元の生成" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "検索する文字列を入力して下さい" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "検索結果の最大数(_N):" #: ../glade/liferea.ui.h:84 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 は指定した文字列をいろいろな検索エンジンで検索を行うために使用" "する配信元を生成します。この配信元を保存し、他の配信元を更新することができま" "す。" #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" 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 配信元の一覧を表すローカル・ファイルまたは URL を指定して下さい。" #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "場所(_L)" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "選択(_S)..." #: ../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 tt-rss account settings." msgstr "tt-rss のアカウント情報を入力して下さい:" #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "サーバの URL(_S)" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "ユーザ名(_U)" #: ../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/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:4 msgid "Feed Update Settings" msgstr "更新の設定" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "起動時に全ての配信先を更新する(_U)" #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "配信元を更新する間隔(_I):" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "配信元" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "表示の設定" #: ../glade/prefs.ui.h:11 msgid "_Show the items of all child feeds when a folder is selected." msgstr "フォルダが選択されたらその配下にある配信元も全て表示する(_S)" #: ../glade/prefs.ui.h:12 msgid "_Hide read items." msgstr "既読のトピックを隠す(_H)" #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "アイコン (Favicons)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "今すぐ全ての favicon を更新する(_U)" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "フォルダ" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "ヘッドラインの読み込み" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "エントリの斜め読みに使用するキー(_S):" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "ウェブ・サービスとの統合" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "ブックマークの保存先(_P):" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "内部ブラウザの設定" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "リンクを Liferea のウィンドウ内で開く(_W)" #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "JavaScript を無効にする(_D)" #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "ブラウザのプラグインを使う(_E)" #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "外部ブラウザの設定" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "リンクを開く場所(_O):" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "手動" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "ブラウザ(_B):" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "ブラウザ" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "通知の設定" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "新しいヘッドラインをポップアップ・ウィンドウで表示する(_P)" #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "パネル通知エリアの中にステータス・アイコンを表示する(_I)" #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "トレイ・アイコンの中に新しいトピックの総数を表示する(_N)" #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "トレイ・アイコンをクリックしたら最小化しないで終了する(_E)" #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "起動時にアイコン化する(_S)" #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "ツールバーの設定" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "ツールバーを隠す(_H)" #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "ツールバーのスタイル:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "HTTP プロキシのサーバ" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "自動検出する(_A)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "プロキシなし(_N)" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "マニュアルで設定を行う(_M):" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "プロキシのポート番号(_P):" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "プロキシのホスト(_H):" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "プロキシの認証機能を使う(_U)" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "パスワード(_W):" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "ユーザ名(_U):" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "プロキシ" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "エンクロージャのダウンロード" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "使用するコマンド(_D):" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "エンクロージャの開き方" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "エンクロージャ" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #~ 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 "Synchronized with Nearby Hosts" #~ 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.10.17/po/ko.po000066400000000000000000003455771261475620100147100ustar00rootroot00000000000000# 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: 2013-01-25 23:54+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.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "" #: ../liferea.desktop.in.h:2 #, fuzzy msgid "Feed Reader" msgstr "피드 캐시" #: ../liferea.desktop.in.h:3 #, fuzzy msgid "Liferea Feed Reader" msgstr "Liferea - 리눅스 피드 보기" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 #, 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 #, fuzzy msgid "No comments yet." msgstr "덧말" #: ../xslt/item.xml.in.h:11 #, fuzzy msgid "Comments" msgstr "덧말" #: ../xslt/item.xml.in.h:12 #, fuzzy msgid "Updating..." msgstr "%s을(를) 새로고치는 중" #: ../xslt/item.xml.in.h:13 msgid "Refresh" 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 #, 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:32 #, fuzzy msgid "Default Browser" msgstr "그놈 기본 브라우져를 사용합니다" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "브라우져 명령 실패: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "%s을(를) 시작함" #. unauthorized #: ../src/comments.c:120 #, fuzzy msgid "Authorization Error" msgstr "인증" #: ../src/common.c:62 #, fuzzy, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "캐시 디렉토리 %s을(를) 생설할 수 없습니다!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\"은(는) 적절한 첨부 종류 설정파일이 아닙니다!" #: ../src/enclosure.c:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "%s을(를) %s(으)로 변환하는 중 에러발생\n" #: ../src/export.c:406 ../src/export.c:408 #, fuzzy, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "" "캐시파일 \"%s\"을(를) 읽던중 XML 에러가 발생. 캐시파일을 가져올 수 없습니다!" #: ../src/export.c:414 ../src/export.c:416 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "빈 도큐먼트 입니다! OPML 도큐먼트 \"%s\"은(는) 가져오기 할 때 비어있으면 안됩" "니다." #: ../src/export.c:437 ../src/export.c:439 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\"은(는) 올바른 OPML 파일이 아닙니다. Liferea는 이 파일을 가져올 수 없습" "니다." #: ../src/export.c:458 msgid "Imported feed list" msgstr "가져온 피드 리스트" #: ../src/export.c:470 msgid "Import Feed List" msgstr "피드 목록 들여오기" #: ../src/export.c:470 msgid "Import" msgstr "가져오기" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 #, fuzzy msgid "OPML Files" msgstr "파일 고르기" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "피드 리스트를 내보내던 중 에러가 발생했습니다." #: ../src/export.c:480 msgid "Feed List exported!" msgstr "피드 목록이 내보내졌습니다" #: ../src/export.c:487 msgid "Export Feed List" msgstr "피드 목록 내보내기" #: ../src/export.c:487 msgid "Export" msgstr "내보내기" #: ../src/feed.c:255 #, 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:284 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\"이(가) 갱신되었습니다..." #: ../src/feed.c:294 #, 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:404 #, fuzzy msgid "There are no unread items" msgstr "읽지 않은 아이템이 없습니다 " #: ../src/main.c:164 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" " 상태는 'shown', 'iconified', 혹은 'hidden'이 될 수 있습니" "다." #: ../src/main.c:164 msgid "STATE" msgstr "" #: ../src/main.c:165 #, fuzzy msgid "Show version information and exit" msgstr " --version Liferea의 버전 정보를 보여주고 끝냅니다." #: ../src/main.c:166 #, fuzzy msgid "Add a new subscription" msgstr "새 서명" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 #, fuzzy msgid "Print debugging messages of all types" msgstr " --debug-all 모든 종류의 디버깅 메시지를 뿌립니다." #: ../src/main.c:172 #, fuzzy msgid "Print debugging messages for the cache handling" msgstr " --debug-cache 캐시 다루기에 대한 디버깅 메시지를 보여줍니다." #: ../src/main.c:173 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr " --debug-conf 설정 다루기에 대한 디버깅 메시지를 보여줍니다." #: ../src/main.c:174 #, fuzzy msgid "Print debugging messages of the database handling" msgstr " --debug-cache 캐시 다루기에 대한 디버깅 메시지를 보여줍니다." #: ../src/main.c:175 #, fuzzy msgid "Print debugging messages of all GUI functions" msgstr " --debug-gui GUI 함수에 대한 디버깅 메시지를 보여줍니다." #: ../src/main.c:176 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/main.c:177 #, fuzzy msgid "Print debugging messages of all network activity" msgstr " --debug-all 모든 종류의 디버깅 메시지를 뿌립니다." #: ../src/main.c:178 #, fuzzy msgid "Print debugging messages of all parsing functions" msgstr " --debug-parsing 모든 파싱 함수에 대한 디버깅 메시지를 보여줍니다." #: ../src/main.c:179 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/main.c:180 #, fuzzy msgid "Print debugging messages when entering/leaving functions" msgstr "" " --debug-trace 함수를 들어가고 나오는것에 대한 디버깅 메시지를 보여줍니" "다." #: ../src/main.c:181 #, fuzzy msgid "Print debugging messages of the feed update processing" msgstr "" " --debug-update 피드를 업데이트하는 것에 대한 디버깅 메시지를 보여줍니다." #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr " --debug-cache 캐시 다루기에 대한 디버깅 메시지를 보여줍니다." #: ../src/main.c:183 #, fuzzy msgid "Print verbose debugging messages" msgstr " --debug-verbose 자세한 디버깅 메시지를 보여줍니다." #: ../src/main.c:194 ../src/main.c:195 #, fuzzy msgid "Print debugging messages for the given topic" msgstr " --debug-cache 캐시 다루기에 대한 디버깅 메시지를 보여줍니다." #: ../src/main.c:202 #, fuzzy msgid "Liferea, the Linux Feed Reader" msgstr "Liferea - 리눅스 피드 보기" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "" #: ../src/net.c:323 #, fuzzy msgid "Unable to connect to remote host" msgstr "원격 호스트로 접속하던 중 에러" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "" #: ../src/net.c:325 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:328 msgid "The resource moved permanently to a new location" msgstr "" #. http 4xx client error #: ../src/net.c:331 #, 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:333 #, fuzzy msgid "Payment required" msgstr "(돈)지불이 필요합니다" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "자원을 찾을 수 없습니다" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "동작이 허용되지 않습니다" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "받아들일 수 없습니다" #: ../src/net.c:338 #, fuzzy msgid "Proxy authentication required" msgstr "프록시 인증이 필요합니다" #: ../src/net.c:339 #, fuzzy msgid "Request timed out" msgstr "요청 시간이 초과되었습니다" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "사라짐.자원이 더 이상 존재하지 않습니다. 해지 해 주세요." #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "피드 사용 불가: 서버가 지원되지 않는 리다이렉션을 요청받았습니다." #: ../src/net.c:349 msgid "Client Error" msgstr "클라이언트 에러" #: ../src/net.c:351 msgid "Server Error" msgstr "서버 에러" #: ../src/net.c:353 #, 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:105 #, fuzzy, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "피드 \"%s\"은(는) 이미 새로 고쳐졌습니다!" #: ../src/subscription.c:110 #, fuzzy, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "피드가 연속적이지 않습니다. Liferea는 더이상 그 피드를 새로 고칠 수 없습니다." #: ../src/subscription.c:144 #, fuzzy, c-format msgid "Updating favicon for \"%s\"" msgstr "\"%s\"의 피드 아이콘을 새로 고치는중" #: ../src/subscription.c:193 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "이 등록피드를 읽던 중 문제가 발생했습니다. URL과 콘솔 출력을 확인하세요." #: ../src/subscription.c:211 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "\"%s\"의 URL이 영원히 바뀌었고, 갱신되었습니다." #: ../src/subscription.c:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "" "\"%s\"이(가) 연속적이지 않습니다. Liferea는 그것을 더이상 새로 고칠 수 없습니" "다!" #: ../src/subscription.c:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\"은(는) 마지막으로 업데이트 된 후 바뀌지 않았습니다." #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "%s을(를) 새로고치는 중" #: ../src/update.c:259 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "필터링을 위해 임시파일 %s을(를) 열던중 에러가 생겼습니다!" #: ../src/update.c:282 #, c-format msgid "%s exited with status %d" msgstr "" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "에러: 파이프 %s을(를) 열 수 없습니다" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "에러: 파일 %s을(를) 열 수 없습니다" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "에러: \"%s\" 파일이 없습니다!" #: ../src/vfolder.c:55 #, fuzzy msgid "New Search Folder" msgstr "폴더 만들기" #: ../src/xml.c:424 #, fuzzy msgid "[There were more errors. Output was truncated!]" msgstr "[해석기 에러 출력이 생략되었습니다!]" #: ../src/xml.c:577 #, 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:288 #, c-format msgid "%d%s" msgstr "" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "파일 고르기" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, fuzzy, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] "%d개의 새로운 아이템" msgstr[1] "%d개의 새로운 아이템들" #: ../src/ui/liferea_shell.c:330 #, fuzzy, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "안 읽었음" #: ../src/ui/liferea_shell.c:716 msgid "Help Topics" msgstr "도움말 항목" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "간단 도움말" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "자주 묻는 질문" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea가 온라인으로 동작합니다" #: ../src/ui/liferea_shell.c:808 #, fuzzy msgid "Work Offline" msgstr "오프라인 작업" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea는 현재 오프라인입니다." #: ../src/ui/liferea_shell.c:812 #, fuzzy msgid "Work Online" msgstr "오프라인 작업" #: ../src/ui/liferea_shell.c:908 #, fuzzy msgid "_Subscriptions" msgstr "새 서명" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "전부 갱신(_A)" #: ../src/ui/liferea_shell.c:909 #, fuzzy msgid "Updates all subscriptions." msgstr "새 구독 더하기." #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "전부 읽은 것으로 표시(_R)" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "구독하는 모든 아이템을 읽은 것으로 표시합니다." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "피드 목록 들여오기(_I)..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "OPML피드 리스트 가져오기." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "피드 리스트 내보내기 (_E)..." #: ../src/ui/liferea_shell.c:914 #, fuzzy msgid "Exports the feed list as OPML." msgstr "OPML형식으로 피드 리스트 내보내기." #: ../src/ui/liferea_shell.c:915 #, fuzzy msgid "_Quit" msgstr "/끝내기(_Q)" #: ../src/ui/liferea_shell.c:917 #, fuzzy msgid "_Feed" msgstr "피드(_F)" #: ../src/ui/liferea_shell.c:918 #, fuzzy msgid "Remove _All Items" msgstr "모두 지우기(_A)" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "현재 선택된 피드의 모든 아이템을 지웁니다." #: ../src/ui/liferea_shell.c:921 #, fuzzy msgid "_Item" msgstr "아이템들(_I)" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "다음 안 읽은 아이템(_N)" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "다음 안 읽은 아이템(_N)" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "보기(_V)" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "글자 크기 크게하기(_I)" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "아이템 보기의 글자 크기를 늘입니다." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "글자 크기 작게하기(_D)" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "아이템 보기의 글자 크기를 작게 합니다." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "" #: ../src/ui/liferea_shell.c:939 #, fuzzy msgid "_Update Monitor" msgstr "/디렉토리 갱신(_U)" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "" #: ../src/ui/liferea_shell.c:941 #, fuzzy msgid "_Preferences" msgstr "기본 설정" #: ../src/ui/liferea_shell.c:941 #, fuzzy msgid "Edit Preferences." msgstr "설정 고치기." #: ../src/ui/liferea_shell.c:944 #, fuzzy msgid "S_earch" msgstr "찾기" #: ../src/ui/liferea_shell.c:945 #, fuzzy msgid "Search All Feeds..." msgstr "모든 피드에서 찾기." #: ../src/ui/liferea_shell.c:945 #, fuzzy msgid "Show the search dialog." msgstr "찾기 상자 보이거나 감추기." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "도움말(_H)" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "차례(_C)" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "이 프로그램에 대한 도움말을 봅니다." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "간단 도움말(_Q)" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Liferea의 모든 단축키 목록을 봅니다." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "자주 묻는 질문들(_F)" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "이 프로그램에 대한 자주 묻는 질문을 봅니다." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "정보(_A)" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "정보 대화창을 보여줍니다." #: ../src/ui/liferea_shell.c:956 #, fuzzy msgid "_Normal View" msgstr "로컬 파일(_L)" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "" #: ../src/ui/liferea_shell.c:958 #, fuzzy msgid "_Wide View" msgstr "보기(_V)" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "" #: ../src/ui/liferea_shell.c:960 #, fuzzy msgid "_Combined View" msgstr "간결하게 보기 토글(_C)" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "" #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "" #: ../src/ui/liferea_shell.c:965 #, fuzzy msgid "Hide feeds with no unread items." msgstr "이것이 켜져 있다면 읽지 않은 아이템이 없는 피드는 숨깁니다." #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "새 구독(_N)..." #: ../src/ui/liferea_shell.c:970 #, fuzzy msgid "Adds a subscription to the feed list." msgstr "피드 목록에 새 구독 더하기." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "새 폴더(_F)..." #: ../src/ui/liferea_shell.c:972 #, fuzzy msgid "Adds a folder to the feed list." msgstr "피드 목록에 폴더를 더합니다." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 #, fuzzy msgid "New S_earch Folder..." msgstr "새 폴더(_F)..." #: ../src/ui/liferea_shell.c:973 #, fuzzy msgid "Adds a new search folder to the feed list." msgstr "피드 목록에 가상폴더를 더합니다." #: ../src/ui/liferea_shell.c:974 #, fuzzy msgid "New _Source..." msgstr "/새로 만들기(_N)/새 폴더(_N)..." #: ../src/ui/liferea_shell.c:974 #, fuzzy msgid "Adds a new feed list source." msgstr "피드 목록에 가상폴더를 더합니다." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 #, fuzzy msgid "New _News Bin..." msgstr "/새로 만들기(_N)/새 폴더(_N)..." #: ../src/ui/liferea_shell.c:975 #, fuzzy msgid "Adds a new news bin." msgstr "새 구독 더하기." #: ../src/ui/liferea_shell.c:979 #, fuzzy msgid "_Mark Items Read" msgstr "읽은 것으로 표시(_M)" #: ../src/ui/liferea_shell.c:979 #, fuzzy msgid "" "Marks all items of the selected feed list node / in the item list as read." msgstr "" "모든 선택된 구독 혹은 선택된 폴더의 구독의 아이템들을 모두 읽은 것으로 표시합" "니다." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 #, fuzzy msgid "_Update" msgstr "/갱신(_U)" #: ../src/ui/liferea_shell.c:981 msgid "" "Updates the selected subscription or all subscriptions of the selected " "folder." msgstr "선택된 구독을 혹은 모든 선택된 폴더의 구독을 새로 고칩니다." #: ../src/ui/liferea_shell.c:986 #, fuzzy msgid "_Properties" msgstr "등록 정보(_P)..." #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "선택된 구독을 위한 속성 대화창을 엽니다." #: ../src/ui/liferea_shell.c:987 #, fuzzy msgid "_Remove" msgstr "모두 지우기(_A)" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "선택된 구독을 없애버립니다." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "읽은 상태를 토글(_R)" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "선택한 아이템의 읽은 상태를 토글합니다." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "아이템 플래그 토글(_F)" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "선택한 아이템의 읽은 상태를 켜거나 끕니다." #: ../src/ui/liferea_shell.c:995 #, fuzzy msgid "R_emove" msgstr "/아이템을 지우기(_E)" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "선택된 아이템을 없애버립니다." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "설정된 브라우져로 아이템의 링크를 엽니다." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "브라우져로 띄우기(_L)" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "설정된 브라우져로 아이템의 링크를 엽니다." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "외부 브라우져" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "설정된 브라우져로 아이템의 링크를 엽니다." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "오프라인 작업" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "이 옵션을 선택하면 구독 갱신을 비활성화 합니다." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 #, fuzzy msgid "Liferea - Linux Feed Reader" msgstr "Liferea - 리눅스 피드 보기" #: ../src/ui/liferea_shell.c:1341 #, 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를 선택하세요. 피드의 머릿글" "을 보려면 피드목록에서 피드를 고르세요. 머릿글이 오른쪽 판때기에 표시됩니다." "

" #: ../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:205 #, fuzzy msgid "All Files" msgstr "로컬 파일(_L)" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "엔트리 지우기" #: ../src/ui/feed_list_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "정말 %s을(를) 지우고 내용을 없애시겠습니까?" #: ../src/ui/feed_list_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "정말 %s을(를) 지우고 싶으세요?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "지우기 확인" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea가 오프라인 상태로 동작중입니다. 새로고침이 불가능합니다." #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "/링크를 탭으로 띄우기(_T)" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "/링크를 브라우져로 띄우기(_L)" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "/링크를 브라우져로 띄우기(_L)" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "" #: ../src/ui/liferea_htmlview.c:636 #, fuzzy msgid "_Copy Link Location" msgstr "/링크 위치 복사하기(_C)" #: ../src/ui/liferea_htmlview.c:639 #, fuzzy msgid "_Copy Image Location" msgstr "/링크 위치 복사하기(_C)" #: ../src/ui/liferea_htmlview.c:641 #, fuzzy msgid "S_ave Link As" msgstr "다른 이름으로 저장..." #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "" #: ../src/ui/liferea_htmlview.c:646 #, fuzzy msgid "_Subscribe..." msgstr "/구독(_S)..." #: ../src/ui/item_list_view.c:347 #, fuzzy msgid "*** No title ***" msgstr "[제목 없음]" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "날짜" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "머릿글" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "아이템이 선택되지 않았습니다" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "이 아이템은 어떠한 연결도 할당되지 않았습니다." #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "아이템을 지울 피드를 선택해야 합니다!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "" #: ../src/ui/popup_menu.c:156 #, c-format msgid "_Bookmark at %s" msgstr "" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "/링크 위치 복사하기(_C)" #: ../src/ui/popup_menu.c:166 #, fuzzy msgid "R_emove Item" msgstr "/아이템을 지우기(_E)" #: ../src/ui/popup_menu.c:179 #, fuzzy msgid "Open Enclosure..." msgstr "/첨부 열기..." #: ../src/ui/popup_menu.c:180 #, fuzzy msgid "Save As..." msgstr "다른 이름으로 저장..." #: ../src/ui/popup_menu.c:181 #, fuzzy msgid "Copy Link Location" msgstr "/링크 위치 복사하기(_C)" #: ../src/ui/popup_menu.c:195 #, fuzzy msgid "_Update All" msgstr "/전부 새로 고침(_U)" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "" #: ../src/ui/popup_menu.c:298 #, fuzzy msgid "_Update Folder" msgstr "/폴더 갱신(_U)" #: ../src/ui/popup_menu.c:300 #, fuzzy msgid "_Mark All As Read" msgstr "/전부 읽은 것으로 표시(_M)" #: ../src/ui/popup_menu.c:310 #, fuzzy msgid "_New" msgstr "/새로 만들기(_N)" #: ../src/ui/popup_menu.c:313 #, fuzzy msgid "New _Subscription..." msgstr "새 구독(_N)..." #: ../src/ui/popup_menu.c:320 #, fuzzy msgid "New S_ource..." msgstr "/새로 만들기(_N)/새 폴더(_N)..." #: ../src/ui/popup_menu.c:329 #, fuzzy msgid "Sort Feeds" msgstr "피드 목록 들여오기" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "" #: ../src/ui/preferences_dialog.c:88 #, fuzzy msgid "GNOME default" msgstr "그놈 기본 브라우져를 사용합니다" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 #, fuzzy msgid "minutes" msgstr "분." #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr "" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr "" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "로컬 파일(_L)" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "보기(_V)" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "간결하게 보기 토글(_C)" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "수동" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "기본 브라우져" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "존재하는 창" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "새 창" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "새 탭" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "" #: ../src/ui/preferences_dialog.c:685 msgid "Terminate instead of minimizing to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "종류" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "프로그램" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "이 피드는 기본 갱신 주기를 정하지 않습니다." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "제목없음" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d개의 새로운 아이템" msgstr[1] "%d개의 새로운 아이템들" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "새로운 아이템이 없습니다." #: ../src/ui/ui_tray.c:228 #, c-format msgid "" "%s\n" "%d unread item" msgid_plural "" "%s\n" "%d unread items" msgstr[0] "" "%s\n" "%d개의 안 읽은 아이템" msgstr[1] "" "%s\n" "%d개의 안 읽은 아이템들" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "모두 읽었습니다" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "새 서명" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "" #: ../src/fl_sources/google_source.c:383 #, fuzzy msgid "Google Reader" msgstr "피드 캐시" #: ../src/fl_sources/google_source.c:384 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 "" #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "" #: ../src/fl_sources/opml_source.c:326 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 "" #: ../src/fl_sources/opml_source.c:387 #, 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:238 msgid "No feed list source types found!" msgstr "" #: ../src/fl_sources/node_source.c:269 #, fuzzy msgid "Source Type" msgstr "소스 종류:" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source.c:363 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 "" #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 #, fuzzy msgid "This feed does not exist anymore!" msgstr "이 아이템은 어떠한 연결도 할당되지 않았습니다." #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 #, fuzzy msgid "Mark all as read" msgstr "전부 읽은 것으로 표시(_R)" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 #, fuzzy msgid "Feed Update" msgstr "피드 캐시" #: ../src/notification/libnotify.c:271 #, fuzzy msgid "Show details" msgstr "자세히 보기" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "인증" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "열쇠글(_P):" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "사용자 이름:" #: ../glade/auth.ui.h:6 msgid "" "Note: The username and password will be saved to your Liferea feedlist " "file without using encryption." msgstr "" "참고: 사용자 이름과 열쇠글은 Liferea 피드리스트에 암호화되지 않은채로저장" "됩니다." #: ../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/ttrss_source.ui.h:4 #, fuzzy msgid "_Password" msgstr "열쇠글(_P):" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "" #: ../glade/liferea.ui.h:4 #, fuzzy msgid "View Headlines" msgstr "머릿글을 보는 방법(_V)" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "머릿글" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "서명 항목" #: ../glade/liferea.ui.h:9 #, fuzzy msgid "Feed Name" msgstr "피드 이름(_N):" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "피드 이름(_N):" #: ../glade/liferea.ui.h:11 #, fuzzy msgid "Update Interval" msgstr "/디렉토리 갱신(_U)" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "기본 갱신 주기를 사용합니다(_U)." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "피드 지정 새로 고침 간격" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "이 피드를 자동으로 업데이트 하지 말것(_D)." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "이 피드의 제공자는 갱신 주기를 %d분으로 제안했습니다." #: ../glade/liferea.ui.h:18 msgid "General" msgstr "일반" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "피드 소스" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "소스 종류:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "소스(_S):" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "명령(_C)" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "로컬 파일(_L)" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "파일 고르기..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "변환 거르개를 사용(_F)" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "다음을 써서 변환(_U):" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "기본 캐시 설정(_D)" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "캐시 끄기(_S)" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "무제한 캐시(_U)" #: ../glade/liferea.ui.h:34 #, fuzzy msgid "_Number of items to save:" msgstr "각 피드당 저장될 기본 아이템 숫자(_N):" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "HTTP 인증을 사용합니다(_A)" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "" #: ../glade/liferea.ui.h:40 #, fuzzy msgid "Download" msgstr "다운로드 프로그램(_D)" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "이피드의 모든 첨부물을 자동으로 다운로드 받습니다(_A)." #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" #: ../glade/liferea.ui.h:43 #, fuzzy msgid "Ignore _comment feeds for this subscription." msgstr "선택된 구독을 위한 속성 대화창을 엽니다." #: ../glade/liferea.ui.h:44 #, fuzzy msgid "_Enforce popup notification for this subscription." msgstr "선택된 구독을 위한 속성 대화창을 엽니다." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "" #: ../glade/liferea.ui.h:46 #, fuzzy msgid "_Mark downloaded items as read." msgstr "선택한 것들을 읽은 것으로 표시(_M)" #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "폴더 만들기" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "폴더 이름(_F):" #: ../glade/liferea.ui.h:50 #, fuzzy msgid "Rename" msgstr "파일 이름" #: ../glade/liferea.ui.h:51 #, fuzzy msgid "_New Name:" msgstr "이름(_N):" #: ../glade/liferea.ui.h:52 #, fuzzy msgid "Search Folder Properties" msgstr "가상폴더 등록정보" #: ../glade/liferea.ui.h:53 #, fuzzy msgid "Search _Name:" msgstr "피드 이름(_N):" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "/첨부 열기..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "첨부를 받고 있습니다. 종류:" #: ../glade/liferea.ui.h:59 #, 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/liferea.ui.h:60 msgid "_Browse" msgstr "찾아보기(_B)" #: ../glade/liferea.ui.h:61 #, fuzzy msgid "_Do this automatically for enclosures like this from now on." msgstr "지금부터 이런 파일은 자동으로 이렇게 합니다." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "모든 피드에서 찾기." #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "찾기(_S):" #: ../glade/liferea.ui.h:64 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "Liferea가 아이템 제목이나 내용에서 찾을 단어를 입력해주세요." #: ../glade/liferea.ui.h:65 msgid "_Advanced..." msgstr "" #: ../glade/liferea.ui.h:66 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "모든 피드에서 지정한 내용을 찾습니다. 결과는 아이템 목록에 나타날 것 입니다." #: ../glade/liferea.ui.h:67 #, fuzzy msgid "Update Monitor" msgstr "/디렉토리 갱신(_U)" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "" #: ../glade/liferea.ui.h:69 #, fuzzy msgid "Downloading Now" msgstr "첨부파일 다운로드" #: ../glade/liferea.ui.h:70 #, fuzzy msgid "Cancel _All" msgstr "전부 갱신(_A)" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "정보" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea는 GTK+를 이용한 뉴스 수집기입니다" #: ../glade/liferea.ui.h:78 #, fuzzy msgid "Liferea Homepage" msgstr "Liferea - 리눅스 피드 보기" #: ../glade/liferea.ui.h:79 #, fuzzy msgid "Advanced Search" msgstr "피드스터에서 찾기" #: ../glade/liferea.ui.h:80 #, fuzzy msgid "_Search Folder..." msgstr "새 폴더(_F)..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "아무거나 원하는 찾을 말을 입력해보세요" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "최대 결과 갯수(_N):" #: ../glade/liferea.ui.h:84 #, 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 처럼 영구히 저장하고,갱신할 수 있습니다." #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "다운로드 프로그램(_D)" #: ../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/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your tt-rss 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/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/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:4 #, fuzzy msgid "Feed Update Settings" msgstr "피드 캐시" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "새 구독 더하기." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "기본 피드 새로고침 간격(_I):" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 #, 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:9 msgid "Feeds" msgstr "피드" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "폴더 표시 설정" #: ../glade/prefs.ui.h:11 msgid "_Show the items of all child feeds when a folder is selected." msgstr "선택된 폴더안에 들은 모든 자식 피드의 아이템들을 보여줍니다(_S)." #: ../glade/prefs.ui.h:12 msgid "_Hide read items." msgstr "읽은 아이템 숨기기(_H)" #: ../glade/prefs.ui.h:13 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "피드 아이콘(Favicons)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "모든 피드아이콘을 지금 갱신합니다(_U)." #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "폴더" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "Reading Headlines" msgstr "머릿글" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "다음 항목으로 넘어가기 위한 키(_S):" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "Web Integration" msgstr "방침" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "" #: ../glade/prefs.ui.h:22 #, fuzzy msgid "Internal Browser Settings" msgstr "외부 브라우져" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "링크를 Liferea 윈도우 안에서 엽니다(_W)." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "자바스크립트 비활성화(_D)." #: ../glade/prefs.ui.h:25 #, fuzzy msgid "_Enable browser plugins." msgstr "외부 브라우져" #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "외부 브라우져" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "링크 여는 방법(_O):" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "수동" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "브라우져(_B):" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "브라우져" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Notification Settings" msgstr "알림 영역 " #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "새로운 머릿글로 팝업 윈도우를 보여줍니다(_P)." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "알림 영역(시스템 트레이 라고도 불리는)에 상태 아이콘을 보입니다." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "" #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "" #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "" #: ../glade/prefs.ui.h:39 #, fuzzy msgid "Toolbar Settings" msgstr "프록시 설정" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "" #: ../glade/prefs.ui.h:41 #, fuzzy msgid "Toolbar _button labels:" msgstr "프록시 설정" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "HTTP 프록시 서버" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "" #: ../glade/prefs.ui.h:45 #, fuzzy msgid "_No Proxy" msgstr "프록시" #: ../glade/prefs.ui.h:46 #, fuzzy msgid "_Manual Setting:" msgstr "메뉴 설정" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "프록시 포트(_P):" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "프록시 호스트(_H):" #: ../glade/prefs.ui.h:49 #, fuzzy msgid "Use Proxy Au_thentication" msgstr "프록시 인증을 사용합니다(_A)" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "프록시 열쇠글(_W):" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "사용자 이름(_U):" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "프록시" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "첨부파일 다운로드" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "다운로드 프로그램(_D)" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "/첨부 열기..." #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "첨부" #: ../glade/prefs.ui.h:57 msgid "Plugins" 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)" #, fuzzy #~ msgid "Synchronized with Nearby Hosts" #~ msgstr "피드 이름" #~ 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 "(비었음)" #, fuzzy #~ msgid "_Delete" #~ msgstr "/지우기(_D)" #~ 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 "Search all feeds." #~ 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://liferea.sf.net/help/help" #~ msgstr "http://liferea.sf.net/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 "conversion wasn't successful. converted: %i octets.\n" #~ msgstr "변환이 성공적이지 않습니다. %i 옥텟이 변환되었습니다.\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.10.17/po/lt.po000066400000000000000000001747201261475620100147040ustar00rootroot00000000000000# 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: 2013-01-25 23:54+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.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Naujienų kanalų skaitytuvė" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea naujienų kanalų skaitytuvė" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 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 "No comments yet." msgstr "Dar niekas nekomentavo." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Komentarai" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Atnaujinama..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Atnaujinti" #: ../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:32 #, fuzzy msgid "Default Browser" msgstr "Numatytoji GNOME naršyklė" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Nepavyko įvykdyti naršyklės komandos: %s" #: ../src/browser.c:230 #, 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:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Nepavyksta sukurti podėlio katalogo „%s“!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Šiandien %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%Y %b %d" #: ../src/enclosure.c:197 #, 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:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Klaida %s pervadinant į %s\n" #: ../src/export.c:406 ../src/export.c:408 #, 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:414 ../src/export.c:416 #, 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:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Importuotas naujienų kanalų sąrašas" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Importuoti kanalų sąrašą" #: ../src/export.c:470 msgid "Import" msgstr "Importuoti" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 msgid "OPML Files" msgstr "" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Klaida eksportuojant naujienų kanalų sąrašą!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Naujienų kanalų sąrašas eksportuotas!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Eksportuoti naujienų kanalų sąrašą" #: ../src/export.c:487 msgid "Export" msgstr "Eksportuoti" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "„%s“ atnaujintas..." #: ../src/feed.c:294 #, 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:404 #, fuzzy msgid "There are no unread items" msgstr "Nėra nėra neskaitytų straipsnių " #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" #: ../src/main.c:164 msgid "STATE" msgstr "" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Rodyti informaciją apie versiją ir išeiti" #: ../src/main.c:166 #, fuzzy msgid "Add a new subscription" msgstr "Nauja prenumerata" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Rodyti visus derinimo pranešimus" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "Rodyti derinimo pranešimus, susijusius su podėlio apdorojimu" #: ../src/main.c:173 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "Rodyti derinimo pranešimus, susijusius su konfigūracijos apdorojimu" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Rodyti derinimo pranešimus, susijusius su duomenų bazės apdorojimu" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "Rodyti derinimo pranešimus, susijusius su grafine sąsaja" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Rodyti visus derinimo pranešimus, susijusius su tinklo veikla" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "Rodyti visus derinimo pranešimus, susijusius su analizavimu" #: ../src/main.c:179 msgid "Print debugging messages when a function takes too long to process" msgstr "Rodyti derinimo pranešimus, jei funkcija atliekama pernelyg ilgai" #: ../src/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "Rodyti derinimo pranešimus apie įėjimą/išėjimą iš funkcijų" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "Rodyti derinimo pranešimus, susijusius su naujienų kanalo atnaujinimu" #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "Rodyti derinimo pranešimus, susijusius su podėlio apdorojimu" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "Rodyti nurodytos temos derinimo pranešimus" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, Linux programa naujienų kanalų skaitymui" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "" "Daugiau informacijos rasite apsilankę http://lzone.de/liferea/ " "svetainėje." #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "Atšaukta atnaujinimo užklausa" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Nepavyksta nustatyti paskirties serverio vardo" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Nepavyksta nustatyti įgaliotojo serverio vardo" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Nepavyksta prisijungti prie nuotolinio serverio" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Nepavyksta prisijungti prie įgaliotojo serverio" #: ../src/net.c:325 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:328 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:331 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:333 msgid "Payment required" msgstr "Reikia sumokėti" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Jums neleidžiama prieiti prie šio šaltinio" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Išteklius nerastas" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Metodas neleidžiamas" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Nepriimtina" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Reikia nurodyti tapatybę jungiantis prie įgaliotojo serverio" #: ../src/net.c:339 msgid "Request timed out" msgstr "Baigėsi užklausos laikas" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Ištekliaus nebėra. Nutraukite prenumeratą!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Atnaujinimo proceso vidinė klaida" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" #: ../src/net.c:349 msgid "Client Error" msgstr "Kliento klaida" #: ../src/net.c:351 msgid "Server Error" msgstr "Serverio klaida" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "„%s“ prenumerata jau atnaujinta!" #: ../src/subscription.c:110 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "„%s“ prenumerata nebegalima. „Liferea“ jos nebeatnaujins!" #: ../src/subscription.c:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Atnaujinti „%s“ ženkliuką" #: ../src/subscription.c:193 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:211 #, 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:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "„%s“ nutraukė veiklą. „Liferea“ nebegalės atnaujinti!" #: ../src/subscription.c:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "„%s“ pasikeitė po paskutinio atnaujinimo" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Atnaujinama: „%s“" #: ../src/update.c:259 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "" #: ../src/update.c:282 #, c-format msgid "%s exited with status %d" msgstr "%s baigimo kodas %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Klaida: nepavyksta atverti rinkmenos „%s“" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Klaida: nėra „%s“ rinkmenos" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Naujas paieškos aplankas" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Buvo ir daugiau klaidų. Išvestis sutrumpinta!]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, 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:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Rinkmenos pasirinkimas" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, 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:330 #, 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:716 msgid "Help Topics" msgstr "Žinyno temos" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Trumpa informacija" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "D. U. K." #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "„Liferea“ programai šiuo metu leidžiama prisijungti prie interneto" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Atsijungti" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "„Liferea“ programai šiuo metu draudžiama prisijungti prie interneto" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Prisijungti" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Prenumeratos" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "Viską _atnaujinti" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Atnaujinti visas prenumeratas." #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Visus žymėti _skaitytais" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Pažymėti visų prenumeratų visus straipsnius." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Importuoti kanalų sąrašą..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Importuoti OPML naujienų kanalų sąrašą." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Eksportuoti kanalų sąrašą..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Eksportuoti naujienų kanalų sąrašą kaip OPML" #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Baigti" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Kanalas" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Pašalinti _visus" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Pašalinti visus pasirinkto naujienų kanalo straipsnius." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "_Straipsnis" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "_Tolesnis neskaitytas" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "_Tolesnis neskaitytas" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "Ro_dymas" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "Pa_didinti teksto dydį" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Padidinti rodinio teksto dydį." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "Su_mažinti teksto dydį" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Sumažinti rodinio teksto dydį." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "Į_rankiai" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "_Atnaujinimo stebėjimas" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "Rodo visus atnaujinimo eilėje esančius naujienų kanalų sąrašą" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Nuostatos" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Keisti nuostatas" #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "Pa_ieška" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Ieškoti visuose naujienų kanaluose..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Rodyti paieškos dialogo langą." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Pagalba" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Turinys" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Rodyti šios programos žinyną." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Trumpa informacija" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Rodyti visus „Liferea“ sparčiuosius klavišus." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_D. U. K." #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Rodyti dažniausiai užduodamus klausimus." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_Apie" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Rodyti dialogo langą apie programą." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "_Normalus rodinys" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "" #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "_Platus rodinys" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Rodyti trijuose vertikaliuose polangiuose" #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "_Bendras rodinys" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Rodyti dviejuose polangiuose" #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "_Sutrumpintas kanalų sąrašas" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Slėpti naujienų kanalus, kuriuose nėra neskaitytų straipsnių." #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "Nauja prenumerata..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Prenumeruoti naują naujienų kanalą" #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Naujas _aplankas..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Naujienų kanalų sąraše sukurti naują aplanką." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Naujas pa_ieškos aplankas..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Naujienų kanalų sąraše sukurti naują paieškos aplanką." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Naujas _šaltinis..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Pridėti naują kanalų sąrašo šaltinį." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "" #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "" #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "Žymėti _skaitytu" #: ../src/ui/liferea_shell.c:979 msgid "" "Marks all items of the selected feed list node / in the item list as read." msgstr "" #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Atnaujinti" #: ../src/ui/liferea_shell.c:981 msgid "" "Updates the selected subscription or all subscriptions of the selected " "folder." msgstr "" "Atnaujini pasirinktą prenumeratą arba visas pasirinkto aplanko prenumeratas." #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "_Savybės..." #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Atverti pasirinktos prenumeratos savybių dialogą." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "Pa_šalinti" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Nutraukti pasirinktą prenumeratą." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Keisti _skaitymo būseną" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Pakeisti pasirinkto straipsnio skaitymo būseną." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Keisti straipsnio s_varbumą" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Pakeisti pasirinkto straipsnio svarbumo būseną." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "Pa_šalinti" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Pašalinti pasirinktą straipsnį." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "Straipsnio nuorodą atveria sukonfigūruotoje naršyklėje." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "Atverti _naršyklėje" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Straipsnio nuorodą atveria sukonfigūruotoje naršyklėje." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Išorinės naršyklės nuostatos" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Straipsnio nuorodą atveria sukonfigūruotoje naršyklėje." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "Dirbti _neprisijungus" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Ši parinktis leidžia uždrausti prenumeratos atnaujinimą." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea – Linux naujienų kanalų skaitytuvė" #: ../src/ui/liferea_shell.c:1341 #, 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.

" #: ../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:205 #, fuzzy msgid "All Files" msgstr "_Vietinė rinkmena" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Įrašo šalinimas" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Tikrai pašalinti „%s“?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Šalinimo patvirtinimas" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "„Liferea“ veikia neprisijungusia veiksena. Atnaujinti negalima." #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "Nuorodą atverti _kortelėje" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "Nuorodą atverti _naršyklėje" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "Nuorodą atverti _naršyklėje" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "Įtraukti į %s _adresyną" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_Kopijuoti nuorodą" #: ../src/ui/liferea_htmlview.c:639 #, fuzzy msgid "_Copy Image Location" msgstr "_Kopijuoti nuorodą" #: ../src/ui/liferea_htmlview.c:641 #, fuzzy msgid "S_ave Link As" msgstr "Įrašyti kaip..." #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "_Prenumeruoti..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Be pavadinimo ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Antraštė" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Nepažymėtas nei vienas straipsnis" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Šis straipsnis be nuorodos!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Nurodykite naujienų kanalą, kurio straipsnius norite pašalinti!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "" #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "Įtraukti į %s _adresyną" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "_Kopijuoti nuorodą" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "_Pašalinti straipsnį" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Atverti intarpą..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Įrašyti kaip..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "Kopijuoti nuorodą" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "_Atnaujinti visus" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "_Rodyti „Liferea“" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "_Atnaujinti aplanką" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "_Visus žymėti skaitytais" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "_Naujas" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "Nauja p_renumerata..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "Naujas _šaltinis" #: ../src/ui/popup_menu.c:329 #, fuzzy msgid "Sort Feeds" msgstr "Importuoti kanalų sąrašą" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "GNOME numatytoji" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Tekstas po ženkliukais" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Tekstas šalia ženkliukų" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Tik ženkliukai" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Tik tekstas" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "min." #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "val." #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "d." #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Tarpas" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr "Vald + tarpas" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr "Alt + tarpas" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "_Normalus rodinys" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "_Platus rodinys" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "_Bendras rodinys" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "(Kita)" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "numatytojoje naršyklėje" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "esamame lange" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "naujame lange" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "naujoje kortelėje" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "" #: ../src/ui/preferences_dialog.c:685 #, fuzzy msgid "Terminate instead of minimizing to the messaging menu" msgstr "_Baigti, o ne nuleisti į sistemos dėklą." #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Tipas" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Programa" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Šis naujienų kanalas neturi numatytojo atnaujinimo intervalo." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d naujas straipsnis" msgstr[1] "%d nauji straipsniai" msgstr[2] "%d naujų straipsnių" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Naujų straipsnių nėra" #: ../src/ui/ui_tray.c:228 #, c-format 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ų" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Nėra neskaitytų straipsnių" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nauja prenumerata" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "" #: ../src/fl_sources/google_source.c:384 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 "" #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "" #: ../src/fl_sources/opml_source.c:326 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 "" #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Šaltinio tipas" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source.c:363 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 "" #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Tokio naujienų kanalo nebėra!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Šis naujienų įrašas neturi antraštės" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Aplankyti" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Atverti naujienų kanalą" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Visus pažymėti skaitytais" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Naujienų kanalų atnaujinimas" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Rodyti išsamiau" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Tapatybės nustatymas" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Slaptažodis:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "Naudotojo _vardas:" #: ../glade/auth.ui.h:6 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." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Slaptažodis" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "_Naudotojo vardas (el. p. adresas)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "normalus rodinys" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "platus rodinys" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Antraščių rodymas" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "bendras rodinys" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Antraštės" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Dardo prisijungus/atsijungus mygtukas" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Prenumeratos savybės" #: ../glade/liferea.ui.h:9 #, fuzzy msgid "Feed Name" msgstr "Naujienų kanalo pa_vadinimas:" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "Naujienų kanalo pa_vadinimas:" #: ../glade/liferea.ui.h:11 #, fuzzy msgid "Update Interval" msgstr "Atnaujinimo stebėjimas" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Naudoti visuotinį atnaujinimo intervalą." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "Šio naujienų kanalo atnaujinimo _intervalas" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Šio kanalo automatiškai neatnaujinti." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Bendra" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Naujienų kanalo šaltinis" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Šaltinio tipas:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Šaltinis:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Komanda" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Vietinė rinkmena" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Pasirinkti rinkmeną..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Naudoti konvertavimo _filtrą" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Konvertuoti _naudojant:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "_Numatytosios podėlio nuostatos" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Uždrausti podėlį" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Podėlio neriboti" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "Į_rašytinų straipsnių skaičius:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Archyvas" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Nurodyti tapatybę jungiantis prie _HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "Parsisiuntimams _nenaudoti įgaliotojo serverio" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Parsiuntimas" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "_Automatiškai parsiųsti visus šio naujienų kanalo intarpus." #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" #: ../glade/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "" #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "" #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "" #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Parsiųstus straipsnius žymėti skaitytais." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Sudėtingiau" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Naujas aplankas" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "_Aplanko pavadinimas" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Pervadinti" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Naujas pavadinimas:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Paieškos aplanko savybės" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "_Paieškos pavadinimas:" #: ../glade/liferea.ui.h:54 #, fuzzy msgid "Find Items that meet the following criteria" msgstr "Ieškoti straipsnių pagal nurodytus kriterijus" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "Atitinka _bent vieną taisyklę" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "Atitinka _visas taisykles" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "Atverti intarpą..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "Parsiuntimas intarpų, kurių tipas yra:" #: ../glade/liferea.ui.h:59 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Naršyti" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "Nuo šiol taip _elgtis su visais tokio tipo intarpais." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Paieška visuose naujienų kanaluose" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Ko ieškoti:" #: ../glade/liferea.ui.h:64 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" #: ../glade/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Sudėtingiau..." #: ../glade/liferea.ui.h:66 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" #: ../glade/liferea.ui.h:67 msgid "Update Monitor" msgstr "Atnaujinimo stebėjimas" #: ../glade/liferea.ui.h:68 #, fuzzy msgid "Pending Requests" msgstr "Laukiančios užklausos" #: ../glade/liferea.ui.h:69 #, fuzzy msgid "Downloading Now" msgstr "Šiuo metu parsiunčiama" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "_Atšaukti visus" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Apie" #: ../glade/liferea.ui.h:74 #, fuzzy msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Autorinės teisės (c) 2003-2009\n" "Liferea komanda\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "„Liferea“ yra sklaidos kanalų skaitytuvė" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Liferea puslapis" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Sudėtingesnė paieška" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "_Kurti paieškos aplanką..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Sukurti paieškos sistemos naujienų kanalą" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "įveskite bet kokį norimą paieškos tekstą" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "" #: ../glade/liferea.ui.h:84 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 "" #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Parsiuntimas / galutinis apdorojimas" #: ../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/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your tt-rss 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/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/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:4 #, fuzzy msgid "Feed Update Settings" msgstr "Naujienų kanalų atnaujinimas" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Atnaujinti visas prenumeratas." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Numatytasis kanalo atnaujinimo _intervalas:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Naujienų kanalai" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "Aplankų rodymo nuostatos" #: ../glade/prefs.ui.h:11 msgid "_Show the items of all child feeds when a folder is selected." msgstr "" #: ../glade/prefs.ui.h:12 msgid "_Hide read items." msgstr "_Slėpti perskaitytus straipsnius." #: ../glade/prefs.ui.h:13 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Naujienų kanalų ženkliukai" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Atnaujinti visus ženkliukus dabar" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Aplankai" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "Reading Headlines" msgstr "neskaitytos antraštės" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "Web Integration" msgstr "Orientacija" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "" #: ../glade/prefs.ui.h:22 #, fuzzy msgid "Internal Browser Settings" msgstr "Vidinės naršyklės nuostatos" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Nuorodas atverti „Liferea“ lange." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Uždrausti „JavaScript“." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "Įgalinti _naršyklių papildinius." #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "Išorinės naršyklės nuostatos" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "Nuorodą _atverti:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "(Kita)" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Naršyklė:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Naršyklė" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Notification Settings" msgstr "Informavimo nuostatos" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "" #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "" #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "" #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "_Baigti, o ne nuleisti į sistemos dėklą." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "Paleisti _sistemos dėkle" #: ../glade/prefs.ui.h:39 #, fuzzy msgid "Toolbar Settings" msgstr "_Mygtukų juostos etiketės:" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Slėpti mygtukų juostą" #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "_Mygtukų juostos etiketės:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Grafinė sąsaja" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_Aptikti automatiškai (GNOME arba aplinkos)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_Nenaudoti įgaliotojo serverio" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Savita nuostata" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "Prieva_das:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "Įgaliotasis ser_veris:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Nurodyti tapatybę jungiantis prie įgaliotojo _serverio" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "_Slaptažodis:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "_Naudotojo vardas:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Įgaliotasis serveris" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "Intarpų parsiuntimas" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Parsiųsti naudojant" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "Atverti intarpą..." #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Intarpai" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #~ 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 "_Delete" #~ msgstr "_Šalinti" #~ 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.10.17/po/lv.po000066400000000000000000002074241261475620100147040ustar00rootroot00000000000000# 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. # Arvis Lācis , 2012. # Rihards Priedītis , 2011. msgid "" msgstr "" "Project-Id-Version: liferea-1.8-rc1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-04-27 14:08+0300\n" "PO-Revision-Date: 2012-08-06 12:36+0300\n" "Last-Translator: Rihards Priedītis \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" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " "2);\n" "X-Generator: Lokalize 1.4\n" "X-Poedit-Language: Latvian\n" "X-Poedit-Country: LATVIA\n" #: ../liferea.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Plūsmu lasītājs" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea plūsmu lasītājs" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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 "" #: ../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/liferea.ui.h:29 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 "No comments yet." msgstr "Vēl nav komentāru." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Komentāri" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Atjaunina..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Atsvaidzināt" #: ../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:32 msgid "Default Browser" msgstr "Noklusētais pārlūks" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Pārlūka komanda cieta neveiksmi — %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Palaiž: “%s”" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Pilnvarošanas kļūda" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Nevar izveidot kešatmiņas mapi “%s”!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Šodien %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:197 #, 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:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Kļūda, pārsaucot %s uz %s\n" #: ../src/export.c:406 ../src/export.c:408 #, 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:414 ../src/export.c:416 #, 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:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Importēto plūsmu saraksts" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Importēt plūsmu sarakstu" #: ../src/export.c:470 msgid "Import" msgstr "Importēt" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 msgid "OPML Files" msgstr "OPML datnes" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Kļūda, eksportējot plūsmu sarakstu!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Plūsmu saraksts ir eksportēts!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Eksportēt plūsmu sarakstu" #: ../src/export.c:487 msgid "Export" msgstr "Eksportēt" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "“%s” ir atjaunināts..." #: ../src/feed.c:294 #, 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:404 msgid "There are no unread items" msgstr "Nav nelasītu vienumu " #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" "Palaist Liferea ar tā galveno logu stāvoklī STATE. STATE var būt “shown”, " "“iconified” vai “hidden”" #: ../src/main.c:164 msgid "STATE" msgstr "STATE" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Parādīt informāciju par versiju un iziet" #: ../src/main.c:166 msgid "Add a new subscription" msgstr "Pievienot jaunu abonementu" #: ../src/main.c:166 msgid "uri" msgstr "uri" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Izdrukāt atkļūdošanas ziņojumus visiem tipiem" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "Izdrukāt atkļūdošanas ziņojumus kešatmiņas apstrādāšanai" #: ../src/main.c:173 msgid "Print debugging messages for the configuration handling" msgstr "Izdrukāt atkļūdošanas ziņojumus konfigurācijas apstrādāšanai" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Izdrukāt atkļūdošanas ziņojumus datubāzes apstrādāšanai" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "Izdrukāt atkļūdošanas ziņojumus visām GUI funkcijām" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Izdrukāt atkļūdošanas ziņojumus visām tīkla aktivitātēm" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "Izdrukāt atkļūdošanas ziņojumus visām parsēšanas funkcijām" #: ../src/main.c:179 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/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "Izdrukāt atkļūdošanas ziņojumus, kad ieiet/pamet funkcijas" #: ../src/main.c:181 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/main.c:182 msgid "Print debugging messages of the search folder matching" msgstr "Izdrukāt atkļūdošanas ziņojumus atbilstošām meklēšanas mapēm" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "Izdrukāt detalizētus atkļūdošanas ziņojumus" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "Izdrukāt atkļūdošanas ziņojumus dotajam tematam" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, Linux plūsmu lasītājs" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "Lai uzzinātu vairāk, apmeklējiet http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "Atjaunināšanas pieprasījums tika atcelts" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Neizdevās sameklēt mērķa datora nosaukumu" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Neizdevās sameklēt starpniekservera nosaukumu" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Neizdevās savienoties ar attālināto datoru" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Neizdevās savienoties ar starpniekserveri" #: ../src/net.c:325 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:328 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:331 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:333 msgid "Payment required" msgstr "Nepieciešama apmaksa" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Jums nav atļaujas piekļūt šim resursam" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Resurss nav atrasts" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Metode nav atļauta" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Nav pieņemams" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Nepieciešama starpniekservera autentifikācija" #: ../src/net.c:339 msgid "Request timed out" msgstr "Laiks iztecējis" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Nav. Resurss neeksistē. Lūdzu, atrakstieties!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Atjauninot radās iekšēja kļūda" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Plūsma nav pieejama — serveris pieprasīja neatbalstītu pāradresēšanu!" #: ../src/net.c:349 msgid "Client Error" msgstr "Klienta kļūda" #: ../src/net.c:351 msgid "Server Error" msgstr "Servera kļūda" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Abonements “%s” jau tiek atjaunināts!" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Atjaunina “%s” favicon ikonu" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "“%s” nav mainīts kopš iepriekšējās atjaunināšanas" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Atjaunina “%s”" #: ../src/update.c:259 #, 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:282 #, c-format msgid "%s exited with status %d" msgstr "%s izgāja ar statusu %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Kļūda — nevarēja atvērt datni “%s”" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Kļūda — nav datnes “%s”" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Jauna meklēšanas mape" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Bija vairākas kļūdas. Izvade ir saīsināta!]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, 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:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Izvēlieties datni" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, 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:330 #, 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:716 msgid "Help Topics" msgstr "Palīdzības tēmas" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Ātrā rokasgrāmata" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "BUJ" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea ir tiešsaistē" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Strādāt bezsaitē" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea ir bezsaitē" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Strādāt tiešsaistē" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Abonementi" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "_Atjaunināt visus" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Atjaunina visus abonementus." #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Atzīmēt visus kā _lasītus" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Atzīmē kā lasītus visus vienumus katrā abonementā." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Importēt plūsmu sarakstu..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Importē OPML plūsmu sarakstu." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Eksportēt plūsmu sarakstu..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Eksportē plūsmu sarakstu kā OPML." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Iziet" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Plūsma" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Izņemt _visus vienumus" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Izņem visus vienumus no pašlaik izvēlētās plūsmas." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "V_ienums" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "_Nākamais nelasītais" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "_Nākamais nelasītais" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Skats" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "Pal_ielināt teksta izmēru" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Palielina teksta izmēru vienumu skatā." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "_Samazināt teksta izmēru" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Samazina teksta izmēru vienumu skatā." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "_Rīki" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "Atjaunināšanas _uzraugs" #: ../src/ui/liferea_shell.c:939 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ā" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Iestatījumi" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Rediģēt iestatījumus." #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "M_eklēt" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Meklēt visās plūsmās..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Rādīt meklēšanas dialogu." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Palīdzība" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Saturs" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Skatīt šīs lietotnes palīdzību." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Ātrā atsauce" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Skatīt sarakstu ar visiem Liferea īsceļiem." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_BUJ" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Skatīt šīs lietotnes BUJ." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "P_ar" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Parāda informāciju par programmu." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "_Normāls skats" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Iestatīt skata režīmu uz pasta klienta režīmu." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "_Plašs skats" #: ../src/ui/liferea_shell.c:958 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." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "_Kombinētais skats" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Iestatīt skatīšanas režīmu uz divu rūšu režīmu." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "_Reducētais plūsmu saraksts" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Slēpt plūsmas ar nelasītiem vienumiem." #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "Jau_ns abonements..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Pievieno abonementu plūsmu sarakstam." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Jauna _mape..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Pievieno mapi plūsmu sarakstam." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Jauna m_eklēšanas mape..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Pievieno jaunu meklēšanas mapi plūsmu sarakstam." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Jaun_s avots..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Pievieno jaunu plūsmas saraksta avotu." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "Jau_ns ziņu grozs..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Pievieno jaunu ziņu grozu." #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "Atzī_mēt kā lasītus" #: ../src/ui/liferea_shell.c:979 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." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "Atja_unināt" #: ../src/ui/liferea_shell.c:981 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ē." #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "Ī_pašības" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Atver īpašību dialogu izvēlētajiem abonementiem." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "_Izņemt" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Izņem izvēlēto abonementu." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Pā_rslēgt lasīšanas statusu" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Pārslēdz lasīšanas statusu izvēlētajiem vienumiem." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Pārslēgt vienuma _atzīmi" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Pārslēdz atzīmes statusu izvēlētajam vienumam." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "Izņ_emt" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Izņem izvēlēto vienumu." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "Atver vienuma saiti nokonfigurētajā pārlūkā." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "Atvērt pār_lūkā" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Atver vienuma saiti nokonfigurētajā pārlūkā." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Ārējā pārlūka iestatījumi" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Atver vienuma saiti nokonfigurētajā pārlūkā." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "_Strādāt bezsaitē" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Šī opcija atļauj deaktivēt abonementu atjaunināšanu." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea – Linux plūsmu lasītājs" #: ../src/ui/liferea_shell.c:1341 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”.

" #: ../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:205 msgid "All Files" msgstr "Visas datnes" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Dzēš ierakstu" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, 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_view.c:354 msgid "Deletion Confirmation" msgstr "Dzēšanas apstiprināšana" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea ir bezsaites režīmā. Nevar veikt atjaunināšanu." #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "Atvērt sai_ti cilnē" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "Atvērt saiti pār_lūkā" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "Atvērt saiti pār_lūkā" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "Ie_grāmatot saiti %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_Kopēt saites adresi" #: ../src/ui/liferea_htmlview.c:639 msgid "_Copy Image Location" msgstr "_Kopēt attēla adresi" #: ../src/ui/liferea_htmlview.c:641 msgid "S_ave Link As" msgstr "S_aglabāt saiti kā" #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "S_aglabāt attēlu kā" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "_Abonēt..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Nav virsraksta ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Datums" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Virsraksts" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Nav izvēlētu vienumu" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Šim vienumam nav norādīta saite!" #: ../src/ui/item_list_view.c:818 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/popup_menu.c:142 msgid "Copy to News Bin" msgstr "Kopēt uz ziņu grozu" #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "Ie_grāmatot saiti %s" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "_Kopēt attēla adresi" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "Izņ_emt vienumu" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Atvērt ietvaru..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Saglabāt kā..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "Kopēt saites vietu" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "_Atjaunināt visas" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "_Rādīt Liferea" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "Atja_unināt mapi" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "Atzī_mēt visas kā lasītas" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "Jau_ns" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "Jaun_s abonements..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "Jauns av_ots..." #: ../src/ui/popup_menu.c:329 msgid "Sort Feeds" msgstr "Sakārtot plūsmas" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "Pā_rbūvēt" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "GNOME noklusētais" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Teksts zem ikonām" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Teksts blakus ikonām" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Tikai ikonas" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Tikai teksts" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minūtes" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "stundas" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dienas" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Atstarpe" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Atstarpe" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Atstarpe" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "_Normāls skats" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "_Plašs skats" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "_Kombinētais skats" #: ../src/ui/preferences_dialog.c:505 msgid "Manual" msgstr "Manuāli" #: ../src/ui/preferences_dialog.c:520 msgid "Browser default" msgstr "Pārlūka noklusējums" #: ../src/ui/preferences_dialog.c:523 msgid "Existing window" msgstr "Esošs logs" #: ../src/ui/preferences_dialog.c:526 msgid "New window" msgstr "Jauns logs" #: ../src/ui/preferences_dialog.c:529 msgid "New tab" msgstr "Jauna cilne" #: ../src/ui/preferences_dialog.c:688 msgid "Integrate with the messaging menu (indicator)" msgstr "Integrēt ar ziņojumu izvēlni (indikatoru)" #: ../src/ui/preferences_dialog.c:691 msgid "Terminate instead of minimizing to the messaging menu" msgstr "Izslēgt, nevis minimizēt ziņojumu izvēlnē" #: ../src/ui/preferences_dialog.c:694 msgid "Start minimized to the messaging menu" msgstr "Palaist minimizētu ziņojumu izvēlnē" #: ../src/ui/preferences_dialog.c:794 msgid "Type" msgstr "Veids" #: ../src/ui/preferences_dialog.c:797 msgid "Program" msgstr "Programma" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Tukšs)" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Plūsma nenorāda noklusēto atjaunināšanas intervālu." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "Nenosaukts" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d jauns vienums" msgstr[1] "%d jauni vienumi" msgstr[2] "%d jaunu vienumu" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Nav jaunu vienumu" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Nav nelasītu vienumu" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Tīmekļa vietne" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Nederīga Atom plūsma — nezināms autors" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Jauns abonements" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "Google Reader pieteikšanās neizdevās!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 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. " #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:326 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" #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Nav atrasti plūsmas saraksta avota tipi!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Avota veids" #: ../src/fl_sources/ttrss_source.c:367 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:368 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. " #: ../src/fl_sources/ttrss_source_feed.c:111 msgid "Could not parse JSON returned by tt-rss API!" msgstr "Nevarēja parsēt JSON, atgriezta tt-rss API!" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Šī plūsma vairs neeksistē!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Šai ziņai nav virsraksta" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Apmeklēt" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Atvērt plūsmu" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Atzīmēt visas kā lasītas" #: ../src/notification/libnotify.c:254 #, c-format 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" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Plūsmu atjaunināšana" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Rādīt sīkāku informāciju" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autentifikācija" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Parole:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_Lietotājvārds:" #: ../glade/auth.ui.h:6 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." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Parole" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "_Lietotājvārds (e-pasts)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "normāls skats" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "plašs skats" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Skatīt virsrakstus" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "kombinētais skats" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Virsraksti" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Tiešsaistes/bezsaites poga" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Abonementa īpašības" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Plūsmas nosaukums" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "Plūsmas _nosaukums:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "Atjaunināšanas intervāls" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "Izmantot globālos nokl_usētos atjaunināšanas intervālus." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "Plūsmai speci_fiskais atjaunināšanas intervāls" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Neatjaunināt šo plūsmu automātiski." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Vispārīgi" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Plūsmas avots" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Avota veids:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "Avot_s:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Komanda" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Lokāla datne" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Izvēlēties datni..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Izmantot pārveidošanas _filtru" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Pār_veidot izmantojot:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "_Noklusētie kešatmiņas iestatījumi" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "De_aktivēt kešatmiņu" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Neierobežota kešatmiņa" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "Saglabājamo vie_numu skaits:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Arhīvs" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Izmantot HTTP _autentificēšanu" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "Neizmantot starpniekserveri lejupielā_dēšanai" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Lejupielādēt" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "_Automātiski lejupielādēt visus ietvarus šai plūsmai." #: ../glade/liferea.ui.h:42 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/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorēt _komentāru plūsmas šim abonementam." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "Uzspiest uzn_irstošos paziņojumus šai plūsmai." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "_Nekad nerādīt uznirstošo paziņojumu šim abonementam." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "Atzī_mēt lejupielādētos vienumus kā lasītus." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Paplašināti" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Jauna mape" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "_Mapes nosaukums:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Pārsaukt" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "Ja_uns nosaukums:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Meklēt mapes īpašībās" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "Meklēt _nosaukumu:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "Atrast vienumus, kas atbilst sekojošajiem kritērijiem" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "Sakrīt kāds _noteikums" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "Jās_akrīt visām kārtulām" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "Atvērt ietvaru..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "Lejupielādēt ietvaru ar tipu:" #: ../glade/liferea.ui.h:59 #, 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 "" "Ko Liferea vajadzētu darīt ar šo ietvaru? Lūdzu, zemāk ievadiet komandu, ko " "vēlaties izpildīt. Lejupielādētie ietvari tiks padoti kā parametri šai " "komandai:" #: ../glade/liferea.ui.h:60 msgid "_Browse" msgstr "_Pārlūkot" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "Šā_diem ietvariem to turpmāk darīt automātiski." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Meklēt visās plūsmās" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Meklēt:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "P_aplašināti..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Atjaunināšanas uzraugs" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "Gaidošie pieprasījumi" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "Lejupielādēt tagad" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "_Atcelt visu" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Izveidot ziņu grozu" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "Ziņu groza _nosaukums:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Par" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Autortiesības (c) 2003-2012\n" "Liferea komanda\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea ir ziņu sakopotājs GTK+ videi" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Liferea mājaslapa" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Paplašinātā meklēšana" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "_Meklēšanas mape..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Izveidot meklēšanas dziņa plūsmu" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "ievadiet jebkādu meklēšanas virkni" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "Maksimālais rezultāta vie_numu skaits:" #: ../glade/liferea.ui.h:84 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." #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Lejupielāde / pēcapstrāde" #: ../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/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Pievienot Tiny Tiny RSS kontu" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your tt-rss 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/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/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:4 msgid "Feed Update Settings" msgstr "Plūsmas atjaunināšanas iestatījumi" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "_Atjaunināt visus abonementus palaižoties." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Noklusētais plūsmas atsvaidzināšanas _intervāls:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Plūsmas" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "Mapju attēlošanas iestatījumi" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "Slēpt _lasītos vienumus." #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Plūsmu ikonas (Favicon)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "Atja_unināt visas ikonas (favicon) tagad" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Mapes" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Lasa virsrakstus" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "Pārlapot rak_stus ar:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Tīmekļa integrācija" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "Nosūtīt _grāmatzīmes uz" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Iekšējā pārlūka iestatījumi" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Atvērt saites jaunā Liferea _logā." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Deaktivēt Javascript." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "_Aktivēt pārlūka spraudņus." #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "Ārējā pārlūka iestatījumi" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "Kur _atvērt saiti:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "Manuāli" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Pārlūks:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Pārlūks" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Paziņojumu iestatījumi" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Rādīt _uznirstošo logu ar jauniem virsrakstiem." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Rādīt statusa _ikonu paziņojumu laukā (sistēmas paplātē)." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Rādīt vienumu skaitu paplātes ikonā." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "Izslēgt, n_evis minimizēt paplātes ikonā." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "Palai_st paplātes ikonā." #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Rīkjoslas iestatījumi" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Slēpt rīkjoslu." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Rīkjoslas _pogu etiķetes:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "HTTP starpniekserveris" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_Automātiski noteikt (GNOME vai vide)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_Nav starpniekservera" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Manuāli iestatījumi:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "Starpnieka _ports:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "Sta_rpniekserveris:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Izmantot starpniekservera _autentificēšanu" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Starpnieka pa_role:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Starpnieka _lietotājvārds:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Starpniekserveris" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "Lejupielādēt ietvarus" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "Lejupielā_dēt izmantojot" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "Atver ietvarus" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Ietvari" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #~ 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 "Downloading Enclosure" #~ msgstr "Lejupielādēt ietvaru" #~ msgid "Sync" #~ msgstr "Sinhronizēt" #~ msgid "Synchronized with Nearby Hosts" #~ msgstr "Sinhronizēts ar Nearby Hosts" #~ 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 "_Delete" #~ msgstr "_Dzēst" #~ 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.10.17/po/mk.po000066400000000000000000002760601261475620100146740ustar00rootroot00000000000000# 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: 2013-01-25 23:54+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.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 #, fuzzy msgid "Liferea" msgstr "Помош за Лајфри" #: ../liferea.desktop.in.h:2 #, fuzzy msgid "Feed Reader" msgstr "Кеш за вести" #: ../liferea.desktop.in.h:3 #, fuzzy msgid "Liferea Feed Reader" msgstr "Вести за Лајфри на Сорсфорџ" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 #, 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 #, fuzzy msgid "No comments yet." msgstr "коментари" #: ../xslt/item.xml.in.h:11 #, fuzzy msgid "Comments" msgstr "коментари" #: ../xslt/item.xml.in.h:12 #, fuzzy msgid "Updating..." msgstr "Ажурирам \"%s\"" #: ../xslt/item.xml.in.h:13 msgid "Refresh" 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 #, 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:32 #, fuzzy msgid "Default Browser" msgstr "Прелистувач" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "команда за прелистувач е науспешна: \"%s\"" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Отворам: \"%s\"" #. unauthorized #: ../src/comments.c:120 #, fuzzy msgid "Authorization Error" msgstr "Автентикација" #: ../src/common.c:62 #, fuzzy, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Не може да се креира папката за кеш %s!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "" #: ../src/enclosure.c:197 #, fuzzy, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "" "\"%s\" не е правилен ОПМЛ документ. Лајфри не може да ја увези оваа датотека!" #: ../src/enclosure.c:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Не можам да преименувам %s во %s\n" #: ../src/export.c:406 ../src/export.c:408 #, fuzzy, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "XML грешка при читање на датотеката за кеш! Не можам да увезам \"%s\"!" #: ../src/export.c:414 ../src/export.c:416 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Празен документ. ОПМЛ документот \"%s\" не смее да биде празен при " "увезување..." #: ../src/export.c:437 ../src/export.c:439 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "\"%s\" не е правилен ОПМЛ документ. Лајфри не може да ја увези оваа датотека!" #: ../src/export.c:458 msgid "Imported feed list" msgstr "Листата на вести е увезена" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Увези листа на вести" #: ../src/export.c:470 msgid "Import" msgstr "Увези" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 #, fuzzy msgid "OPML Files" msgstr "Одберете датотека" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Грешка при извезување на листата со вести!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Листата со вести е извезена!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Извези листа на вести" #: ../src/export.c:487 msgid "Export" msgstr "Извези" #: ../src/feed.c:255 #, 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:284 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" ажурирано..." #: ../src/feed.c:294 #, 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:404 #, fuzzy msgid "There are no unread items" msgstr "Сите вести се прочитани!" #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" #: ../src/main.c:164 msgid "STATE" msgstr "" #: ../src/main.c:165 #, fuzzy msgid "Show version information and exit" msgstr " --version Покажи ја верзијата на Лајфри" #: ../src/main.c:166 #, fuzzy msgid "Add a new subscription" msgstr "Нова претплата" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 #, fuzzy msgid "Print debugging messages of all types" msgstr " --debug-all Print debugging messages of all types" #: ../src/main.c:172 #, fuzzy msgid "Print debugging messages for the cache handling" msgstr " --debug-cache Print debugging messages for the cache handling" #: ../src/main.c:173 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "" " --debug-conf Print debugging messages of the configuration handling" #: ../src/main.c:174 #, fuzzy msgid "Print debugging messages of the database handling" msgstr " --debug-cache Print debugging messages for the cache handling" #: ../src/main.c:175 #, fuzzy msgid "Print debugging messages of all GUI functions" msgstr " --debug-gui Print debugging messages of all GUI functions" #: ../src/main.c:176 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/main.c:177 #, fuzzy msgid "Print debugging messages of all network activity" msgstr " --debug-all Print debugging messages of all types" #: ../src/main.c:178 #, fuzzy msgid "Print debugging messages of all parsing functions" msgstr " --debug-parsing Print debugging messages of all parsing functions" #: ../src/main.c:179 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/main.c:180 #, fuzzy msgid "Print debugging messages when entering/leaving functions" msgstr "" " --debug-trace Print debugging messages when entering/leaving functions" #: ../src/main.c:181 #, fuzzy msgid "Print debugging messages of the feed update processing" msgstr "" " --debug-update Print debugging messages of the feed update processing" #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr " --debug-cache Print debugging messages for the cache handling" #: ../src/main.c:183 #, fuzzy msgid "Print verbose debugging messages" msgstr " --debug-verbose Print verbose debugging messages" #: ../src/main.c:194 ../src/main.c:195 #, fuzzy msgid "Print debugging messages for the given topic" msgstr " --debug-cache Print debugging messages for the cache handling" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "" #: ../src/net.c:323 #, fuzzy msgid "Unable to connect to remote host" msgstr "Грешка во поврзувањето со адресата" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "" #: ../src/net.c:325 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:328 msgid "The resource moved permanently to a new location" msgstr "" #. http 4xx client error #: ../src/net.c:331 #, 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:333 #, fuzzy msgid "Payment required" msgstr "Потребна е уплата" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Нема ресурси" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Методот не е дозволен" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Не е прифатливо" #: ../src/net.c:338 #, fuzzy msgid "Proxy authentication required" msgstr "Потребна е Proxy автентикација" #: ../src/net.c:339 #, fuzzy msgid "Request timed out" msgstr "Барањето истече" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Напуштено. Вестите не постојат. Ве молам избришете ја ставката!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Вестите се недостапни: Серверот сигнализираше неподдржано пренасочување!" #: ../src/net.c:349 msgid "Client Error" msgstr "Клиентска грешка" #: ../src/net.c:351 msgid "Server Error" msgstr "Грешка на опслужувачот" #: ../src/net.c:353 #, 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:105 #, fuzzy, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Вестите \"%s\" веќе се ажурираат!" #: ../src/subscription.c:110 #, fuzzy, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "Овие вести нема повеќе да се ажуриаат!" #: ../src/subscription.c:144 #, fuzzy, c-format msgid "Updating favicon for \"%s\"" msgstr "Ажурирам \"%s\"" #: ../src/subscription.c:193 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:211 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "URL адресата на \"%s\" е перманетно променета и ажурирана." #: ../src/subscription.c:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" нема повеќе да се ажурира!" #: ../src/subscription.c:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" не е променет од последеното ажурирање." #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Ажурирам \"%s\"" #: ../src/update.c:259 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "" #: ../src/update.c:282 #, c-format msgid "%s exited with status %d" msgstr "" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Не можам да отворам пајп \"%s\"!" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Не може да се отвори датотеката \"%s\"!" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Грешка: Не постои датотеката \"%s\"!" #: ../src/vfolder.c:55 #, fuzzy msgid "New Search Folder" msgstr "Нова папка" #: ../src/xml.c:424 #, fuzzy msgid "[There were more errors. Output was truncated!]" msgstr "[Грешката од излезот на парсерот е скратена!]" #: ../src/xml.c:577 #, 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:288 #, c-format msgid "%d%s" msgstr "" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Одберете датотека" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, fuzzy, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] "%d нов предмет!" msgstr[1] "%d нови предмети!" msgstr[2] "%d нови предмети!" #: ../src/ui/liferea_shell.c:330 #, fuzzy, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "е непрочитано" msgstr[1] "е непрочитано" msgstr[2] "е непрочитано" #: ../src/ui/liferea_shell.c:716 msgid "Help Topics" msgstr "" #: ../src/ui/liferea_shell.c:722 #, fuzzy msgid "Quick Reference" msgstr "Уреди ги параметрите." #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Лајфри e поврзана." #: ../src/ui/liferea_shell.c:808 #, fuzzy msgid "Work Offline" msgstr "Работете офлајн" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Лајфри е исклучена" #: ../src/ui/liferea_shell.c:812 #, fuzzy msgid "Work Online" msgstr "Работете офлајн" #: ../src/ui/liferea_shell.c:908 #, fuzzy msgid "_Subscriptions" msgstr "Нова претплата" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "_Ажурирај ги сите" #: ../src/ui/liferea_shell.c:909 #, fuzzy msgid "Updates all subscriptions." msgstr "Додај нова претплата." #: ../src/ui/liferea_shell.c:911 #, fuzzy msgid "Mark All As _Read" msgstr "/_Обележи сè како прочитанo" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "" #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Увези листа на вести..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Увезува OPML листа на вести." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Извези листа на вести..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Ја извезува листата на вести како OPML." #: ../src/ui/liferea_shell.c:915 #, fuzzy msgid "_Quit" msgstr "/_Излез" #: ../src/ui/liferea_shell.c:917 #, fuzzy msgid "_Feed" msgstr "_Вести" #: ../src/ui/liferea_shell.c:918 #, fuzzy msgid "Remove _All Items" msgstr "Отстрани ги сите" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Ги отстранува сите предмети од тековните вести." #: ../src/ui/liferea_shell.c:921 #, fuzzy msgid "_Item" msgstr "_Предмети" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "_Следна непрочитана вест" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "_Следна непрочитана вест" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Поглед" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "_Зголеми го текстот" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Го зголемуива текстот во делот за читање на вестите." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "_Намали го текстот" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Го намалува текстот во делот за читање на вестите." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "" #: ../src/ui/liferea_shell.c:939 #, fuzzy msgid "_Update Monitor" msgstr "/_Ажурирај" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "" #: ../src/ui/liferea_shell.c:941 #, fuzzy msgid "_Preferences" msgstr "Параметри" #: ../src/ui/liferea_shell.c:941 #, fuzzy msgid "Edit Preferences." msgstr "Уреди ги параметрите." #: ../src/ui/liferea_shell.c:944 #, fuzzy msgid "S_earch" msgstr "Пребарувај" #: ../src/ui/liferea_shell.c:945 #, fuzzy msgid "Search All Feeds..." msgstr "Барај во сите вести." #: ../src/ui/liferea_shell.c:945 #, fuzzy msgid "Show the search dialog." msgstr "Ја покажува или сокрива лентата за барање." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Помош" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "" #: ../src/ui/liferea_shell.c:949 #, fuzzy msgid "_Quick Reference" msgstr "Уреди ги параметрите." #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "" #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "" #: ../src/ui/liferea_shell.c:952 #, fuzzy msgid "_About" msgstr "За" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Го покажува дијалогот за заслуги." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "" #: ../src/ui/liferea_shell.c:958 #, fuzzy msgid "_Wide View" msgstr "_Поглед" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "" #: ../src/ui/liferea_shell.c:960 #, fuzzy msgid "_Combined View" msgstr "Промени _компактност на преглед" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "" #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "" #: ../src/ui/liferea_shell.c:965 #, fuzzy msgid "Hide feeds with no unread items." msgstr "Ако е активно, сите вести со прочитани ставки се скриени." #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "_Нова претплата..." #: ../src/ui/liferea_shell.c:970 #, fuzzy msgid "Adds a subscription to the feed list." msgstr "Додај нова претплата." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "_Нова папка..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "" #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 #, fuzzy msgid "New S_earch Folder..." msgstr "_Нова папка..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "" #: ../src/ui/liferea_shell.c:974 #, fuzzy msgid "New _Source..." msgstr "_Нова папка..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "" #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 #, fuzzy msgid "New _News Bin..." msgstr "_Нова папка..." #: ../src/ui/liferea_shell.c:975 #, fuzzy msgid "Adds a new news bin." msgstr "Додај нова претплата." #: ../src/ui/liferea_shell.c:979 #, fuzzy msgid "_Mark Items Read" msgstr "_Обележи како прочитано" #: ../src/ui/liferea_shell.c:979 #, fuzzy msgid "" "Marks all items of the selected feed list node / in the item list as read." msgstr "" "Означи ги сите вести во означената ставка како прочитани или сите вести во " "означената папка." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 #, fuzzy msgid "_Update" msgstr "/_Ажурирај" #: ../src/ui/liferea_shell.c:981 msgid "" "Updates the selected subscription or all subscriptions of the selected " "folder." msgstr "Ги ажурира означените ставки или сите ставки во означената папка." #: ../src/ui/liferea_shell.c:986 #, fuzzy msgid "_Properties" msgstr "_Својства..." #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Го отвора дијалогот за параметри на означените вести." #: ../src/ui/liferea_shell.c:987 #, fuzzy msgid "_Remove" msgstr "Отстрани ги сите" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Отстранува вести, односно нивното ажурирање." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Промени статус во (не)прочитано" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Го менува статусот на прочитано на означениот предмет." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Промени го _знаменцето" #: ../src/ui/liferea_shell.c:993 #, fuzzy msgid "Toggles the flag status of the selected item." msgstr "Го менува статусот на прочитано на означениот предмет." #: ../src/ui/liferea_shell.c:995 #, fuzzy msgid "R_emove" msgstr "/Отстрани го предметот" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Ја отстранува избраната ставка" #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "Ја отвора врската на предметот во наместениот веб прелистувач." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "_Отвори во прелистувач" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Ја отвора врската на предметот во наместениот веб прелистувач." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Подесувања за надворешниот прелистувач" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Ја отвора врската на предметот во наместениот веб прелистувач." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 #, fuzzy msgid "_Work Offline" msgstr "Работете офлајн" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "" #: ../src/ui/liferea_shell.c:1341 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 "" #: ../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:205 #, fuzzy msgid "All Files" msgstr "_Датотека" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Бришење на вестите" #: ../src/ui/feed_list_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Дали сте сигурни дека сакате да избришете \"%s\" и целата содржина?" #: ../src/ui/feed_list_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Дали сте сигурни дека саката да избришете \"%s\"?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Потврда за бришење" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Лајфри е во офлајн режим. Нема можност за ажурирање." #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "/_Отвори во прелистувач" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "/_Отвори во прелистувач" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "/_Отвори во прелистувач" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "" #: ../src/ui/liferea_htmlview.c:636 #, fuzzy msgid "_Copy Link Location" msgstr "/_Копирај ја локацијата на врската" #: ../src/ui/liferea_htmlview.c:639 #, fuzzy msgid "_Copy Image Location" msgstr "/_Копирај ја локацијата на врската" #: ../src/ui/liferea_htmlview.c:641 msgid "S_ave Link As" msgstr "" #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "" #: ../src/ui/liferea_htmlview.c:646 #, fuzzy msgid "_Subscribe..." msgstr "/_Претплати се..." #: ../src/ui/item_list_view.c:347 #, fuzzy msgid "*** No title ***" msgstr "[Без наслов]" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Датум" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Наслов" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Нема означени ставки!" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 #, fuzzy msgid "This item has no link specified!" msgstr "Предметот нема означено врска!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Мора да одбереш вест за бришење на ставките!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "" #: ../src/ui/popup_menu.c:156 #, c-format msgid "_Bookmark at %s" msgstr "" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "/_Копирај ја локацијата на врската" #: ../src/ui/popup_menu.c:166 #, fuzzy msgid "R_emove Item" msgstr "/Отстрани го предметот" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "" #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "" #: ../src/ui/popup_menu.c:181 #, fuzzy msgid "Copy Link Location" msgstr "/_Копирај ја локацијата на врската" #: ../src/ui/popup_menu.c:195 #, fuzzy msgid "_Update All" msgstr "/_Ажурирај ги сите" #: ../src/ui/popup_menu.c:200 #, fuzzy msgid "_Show Liferea" msgstr "Помош за Лајфри" #: ../src/ui/popup_menu.c:298 #, fuzzy msgid "_Update Folder" msgstr "/_Ажурирај" #: ../src/ui/popup_menu.c:300 #, fuzzy msgid "_Mark All As Read" msgstr "/_Обележи сè како прочитанo" #: ../src/ui/popup_menu.c:310 #, fuzzy msgid "_New" msgstr "/_Нова" #: ../src/ui/popup_menu.c:313 #, fuzzy msgid "New _Subscription..." msgstr "_Нова претплата..." #: ../src/ui/popup_menu.c:320 #, fuzzy msgid "New S_ource..." msgstr "_Нова папка..." #: ../src/ui/popup_menu.c:329 #, fuzzy msgid "Sort Feeds" msgstr "Увези листа на вести" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 #, fuzzy msgid "minutes" msgstr "минути." #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Space" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Space" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Space" #: ../src/ui/preferences_dialog.c:114 msgid "Normal View" msgstr "" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "_Поглед" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "Промени _компактност на преглед" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Рачно" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Стандардни од прелистувачот" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Тековниот прозорец" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Нов прозорец" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Ново јазиче" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "" #: ../src/ui/preferences_dialog.c:685 msgid "Terminate instead of minimizing to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:788 #, fuzzy msgid "Type" msgstr "вид" #: ../src/ui/preferences_dialog.c:791 #, fuzzy msgid "Program" msgstr "_Апликација" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Овие вести немаат информација за време на ажурирање." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "Без наслов" #: ../src/ui/ui_tray.c:221 #, fuzzy, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d нов предмет!" msgstr[1] "%d нови предмети!" msgstr[2] "%d нови предмети!" #: ../src/ui/ui_tray.c:224 #, fuzzy msgid "No new items" msgstr "Нема нови предмети." #: ../src/ui/ui_tray.c:228 #, fuzzy, c-format msgid "" "%s\n" "%d unread item" msgid_plural "" "%s\n" "%d unread items" msgstr[0] "%d нов предмет!" msgstr[1] "%d нови предмети!" msgstr[2] "%d нови предмети!" #: ../src/ui/ui_tray.c:230 #, fuzzy, c-format msgid "" "%s\n" "No unread items" msgstr "%d нов предмет!" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Нова претплата" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "" #: ../src/fl_sources/google_source.c:384 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 "" #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "" #: ../src/fl_sources/opml_source.c:326 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 "" #: ../src/fl_sources/opml_source.c:387 #, 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:238 msgid "No feed list source types found!" msgstr "" #: ../src/fl_sources/node_source.c:269 #, fuzzy msgid "Source Type" msgstr "Тип на правило:" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source.c:363 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 "" #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 #, fuzzy msgid "This feed does not exist anymore!" msgstr "Предметот нема означено врска!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 #, fuzzy msgid "Mark all as read" msgstr "/_Обележи сè како прочитанo" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 #, fuzzy msgid "Feed Update" msgstr "Кеш за вести" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Автентикација" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Лозинка:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "Корисничко _име:" #: ../glade/auth.ui.h:6 msgid "" "Note: The username and password will be saved to your Liferea feedlist " "file without using encryption." 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/ttrss_source.ui.h:4 #, fuzzy msgid "_Password" msgstr "_Лозинка:" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "" #: ../glade/liferea.ui.h:4 #, fuzzy msgid "View Headlines" msgstr "Читај вести со" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 #, fuzzy msgid "Headlines" msgstr "Наслов" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Својства на претплати" #: ../glade/liferea.ui.h:9 #, fuzzy msgid "Feed Name" msgstr "Наслов на _вестите:" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "Наслов на _вестите:" #: ../glade/liferea.ui.h:11 #, fuzzy msgid "Update Interval" msgstr "/_Ажурирај" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Користи го стандардниот интервал за ажурирање." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_Интервалот за ажурирање на овие вести е" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Не ги ажурирај автоматски овие вести" #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, fuzzy, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Опслужувачот на овие вести сугерира време на ажурирање од %d секунди." #: ../glade/liferea.ui.h:18 msgid "General" msgstr "Општо" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Адреса" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Тип на правило:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 #, fuzzy msgid "_Source:" msgstr "Извор:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_Адреса" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Команда" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 #, fuzzy msgid "_Local File" msgstr "_Датотека" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Избери датотека..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 #, fuzzy msgid "Use conversion _filter" msgstr "Користи филтер за конверзија" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 #, fuzzy msgid "Convert _using:" msgstr "Конвертирај со:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "_Стандардни подесувања за кешот" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "О_невозможи кеширање" #: ../glade/liferea.ui.h:33 #, fuzzy msgid "_Unlimited cache" msgstr "_Неограничено кеширање" #: ../glade/liferea.ui.h:34 #, fuzzy msgid "_Number of items to save:" msgstr "Стандарден број на предмети од вестите за трајно паметење:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Користи HTTP _автентикација" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "" #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" #: ../glade/liferea.ui.h:43 #, fuzzy msgid "Ignore _comment feeds for this subscription." msgstr "Го отвора дијалогот за параметри на означените вести." #: ../glade/liferea.ui.h:44 #, fuzzy msgid "_Enforce popup notification for this subscription." msgstr "Го отвора дијалогот за параметри на означените вести." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "" #: ../glade/liferea.ui.h:46 #, fuzzy msgid "_Mark downloaded items as read." msgstr "/_Обележи сè како прочитанo" #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Нова папка" #: ../glade/liferea.ui.h:49 #, fuzzy msgid "_Folder name:" msgstr "Папка:" #: ../glade/liferea.ui.h:50 #, fuzzy msgid "Rename" msgstr "Преименувај папка" #: ../glade/liferea.ui.h:51 #, fuzzy msgid "_New Name:" msgstr "Наслов на _вестите:" #: ../glade/liferea.ui.h:52 #, fuzzy msgid "Search Folder Properties" msgstr "Својства на В-папката" #: ../glade/liferea.ui.h:53 #, fuzzy msgid "Search _Name:" msgstr "Наслов на _вестите:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "Преглед на наслови" #: ../glade/liferea.ui.h:58 msgid "Open an enclosure of type:" msgstr "" #: ../glade/liferea.ui.h:59 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/liferea.ui.h:60 #, fuzzy msgid "_Browse" msgstr "_Прелистувач:" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "" #: ../glade/liferea.ui.h:62 #, fuzzy msgid "Search All Feeds" msgstr "Барај во сите вести." #: ../glade/liferea.ui.h:63 #, fuzzy msgid "_Search for:" msgstr "Барај за" #: ../glade/liferea.ui.h:64 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" #: ../glade/liferea.ui.h:65 msgid "_Advanced..." msgstr "" #: ../glade/liferea.ui.h:66 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" #: ../glade/liferea.ui.h:67 #, fuzzy msgid "Update Monitor" msgstr "/_Ажурирај" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "" #: ../glade/liferea.ui.h:70 #, fuzzy msgid "Cancel _All" msgstr "_Ажурирај ги сите" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "За" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Лајфри е прелистувач на вести за ГТК+" #: ../glade/liferea.ui.h:78 #, fuzzy msgid "Liferea Homepage" msgstr "Помош за Лајфри" #: ../glade/liferea.ui.h:79 #, fuzzy msgid "Advanced Search" msgstr "Пребарување со Feedster" #: ../glade/liferea.ui.h:80 #, fuzzy msgid "_Search Folder..." msgstr "/_Преименувај папка..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "внеси некој текст за барање" #: ../glade/liferea.ui.h:83 #, fuzzy msgid "Maximal _Number Of Result Items:" msgstr "Максимален број на резултати" #: ../glade/liferea.ui.h:84 #, 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. " #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" 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/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your tt-rss 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/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/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:4 #, fuzzy msgid "Feed Update Settings" msgstr "Кеш за вести" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Додај нова претплата." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Стандарден _интервал за ажурирање на вестите:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 #, 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:9 #, fuzzy msgid "Feeds" msgstr "_Вести" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "Подесувања за ажурирање на вестите" #: ../glade/prefs.ui.h:11 msgid "_Show the items of all child feeds when a folder is selected." msgstr "" #: ../glade/prefs.ui.h:12 #, fuzzy msgid "_Hide read items." msgstr "_Следна непрочитана вест" #: ../glade/prefs.ui.h:13 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Подесувања за вчитување на вестите" #: ../glade/prefs.ui.h:14 #, fuzzy msgid "_Update all favicons now" msgstr "Ажурирај ги сите вести" #: ../glade/prefs.ui.h:15 #, fuzzy msgid "Folders" msgstr "В-папка" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "Reading Headlines" msgstr "Наслов" #: ../glade/prefs.ui.h:17 #, fuzzy msgid "_Skim through articles with:" msgstr "Шетај низ вестите со " #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "Web Integration" msgstr "Автентикација" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "" #: ../glade/prefs.ui.h:22 #, fuzzy msgid "Internal Browser Settings" msgstr "Подесувања за надворешниот прелистувач" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Ги отвора _прозорците во Лајфри." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "" #: ../glade/prefs.ui.h:25 #, fuzzy msgid "_Enable browser plugins." msgstr "Подесувања за надворешниот прелистувач" #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "Подесувања за надворешниот прелистувач" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Отвори ја врската во:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "Рачно" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Прелистувач:" #: ../glade/prefs.ui.h:32 #, fuzzy msgid "Browser" msgstr "_Прелистувач:" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Notification Settings" msgstr "Подесувања за известување" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Покажи мал _прозорец со новите наслови." #: ../glade/prefs.ui.h:35 #, fuzzy msgid "Show a status _icon in the notification area (system tray)." msgstr "" "Покажи икона за статус во местото за известување \n" "(познато како „фиока“)." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "" #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "" #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "" #: ../glade/prefs.ui.h:39 #, fuzzy msgid "Toolbar Settings" msgstr "Подесувања за ажурирање на вестите" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "" #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "" #: ../glade/prefs.ui.h:45 #, fuzzy msgid "_No Proxy" msgstr "Прокси порта" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "Порта на _прокси:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "_Адреса на прокси:" #: ../glade/prefs.ui.h:49 #, fuzzy msgid "Use Proxy Au_thentication" msgstr "Користи прокси _автентикација" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "_Лозинка на прокси:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Корисничко _име на прокси:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Прокси порта" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "Преглед на наслови" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "Преглед на наслови" #: ../glade/prefs.ui.h:56 #, fuzzy msgid "Enclosures" msgstr "Преглед на наслови" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #, 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 за адреса)" #, fuzzy #~ msgid "Synchronized with Nearby Hosts" #~ 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 "Вести за Лајфри на Сорсфорџ" #, 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 "(празно)" #, fuzzy #~ msgid "_Delete" #~ 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://liferea.sf.net" #~ msgstr "http://liferea.sf.net/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 "Ажурирај ги сите" #~ msgid "Search all feeds." #~ 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://liferea.sf.net/help/help" #~ msgstr "http://liferea.sf.net/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.10.17/po/nl.po000066400000000000000000002443761261475620100147030ustar00rootroot00000000000000# 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: 2013-06-11 22:55+0200\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.desktop.in.h:1 ../src/main.c:234 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Feedlezer" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea Feed Reader" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Nieuwsfeeds en blogs lezen" #: ../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/liferea.ui.h:29 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 "No comments yet." msgstr "Commentaar ontbreekt nog." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Commentaren" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Bijwerken..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" 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:32 msgid "Default Browser" msgstr "Standaardbrowser" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Browseropdracht is mislukt: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Openen: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Aanmeldfout" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Buffergeheugenmap \"%s\" kan niet worden aangemaakt!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Vandaag %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:197 #, 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:288 msgid "You have not configured a download tool yet! Please do so in the 'Download' 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:306 #, 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:185 #, c-format msgid "Error renaming %s to %s\n" msgstr "Hernoemen van %s naar %s is mislukt\n" #: ../src/export.c:414 ../src/export.c:416 #, 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:422 ../src/export.c:424 #, 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:445 ../src/export.c:447 #, 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:466 msgid "Imported feed list" msgstr "Lijst van geïmporteerde feeds" #: ../src/export.c:478 msgid "Import Feed List" msgstr "Feedlijst importeren" #: ../src/export.c:478 msgid "Import" msgstr "Importeren" #: ../src/export.c:478 ../src/export.c:495 ../src/fl_sources/opml_source.c:394 msgid "OPML Files" msgstr "OPML-bestanden" #: ../src/export.c:486 msgid "Error while exporting feed list!" msgstr "Exporteren feedlijst is mislukt!" #: ../src/export.c:488 msgid "Feed List exported!" msgstr "Feedlijst geëxporteerd!" #: ../src/export.c:495 msgid "Export Feed List" msgstr "Feedlijst exporteren" #: ../src/export.c:495 msgid "Export" msgstr "Exporteren" #: ../src/feed.c:254 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:283 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" is bijgewerkt..." #: ../src/feed.c:293 #, 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:404 msgid "There are no unread items" msgstr "Er zijn geen ongelezen items " #: ../src/main.c:163 msgid "Start Liferea with its main window in STATE. STATE may be `shown', `iconified', or `hidden'" msgstr "Liferea starten met het hoofdvenster in STATUS. STATUS kan `shown', `iconified' of `hidden' zijn" #: ../src/main.c:163 msgid "STATE" msgstr "STATUS" #: ../src/main.c:164 msgid "Show version information and exit" msgstr "Versieinformatie tonen en stoppen" #: ../src/main.c:165 msgid "Add a new subscription" msgstr "Nieuw abonnement toevoegen" #: ../src/main.c:165 msgid "uri" msgstr "uri" #: ../src/main.c:170 msgid "Print debugging messages of all types" msgstr "Alle soorten foutmeldingen tonen" #: ../src/main.c:171 msgid "Print debugging messages for the cache handling" msgstr "Foutmeldingen over het gebruik van buffergeheugen tonen" #: ../src/main.c:172 msgid "Print debugging messages for the configuration handling" msgstr "Foutmeldingen over de configuratieafhandeling tonen" #: ../src/main.c:173 msgid "Print debugging messages of the database handling" msgstr "Foutmeldingen over de databaseafhandeling tonen" #: ../src/main.c:174 msgid "Print debugging messages of all GUI functions" msgstr "Foutmeldingen over alle GUI-functies tonen" #: ../src/main.c:175 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/main.c:176 msgid "Print debugging messages of all network activity" msgstr "Foutmeldingen over alle netwerkactiviteiten tonen" #: ../src/main.c:177 msgid "Print debugging messages of all parsing functions" msgstr "Foutmeldingen over alle inleesfuncties tonen" #: ../src/main.c:178 msgid "Print debugging messages when a function takes too long to process" msgstr "Foutmeldingen tonen als een functie er te lang over doet" #: ../src/main.c:179 msgid "Print debugging messages when entering/leaving functions" msgstr "Foutmeldingen over het starten en stoppen van functies tonen" #: ../src/main.c:180 msgid "Print debugging messages of the feed update processing" msgstr "Foutmeldingen over het bijwerken van feeds tonen" #: ../src/main.c:181 msgid "Print debugging messages of the search folder matching" msgstr "Foutmeldingen over overeenkomsten van de zoekmap tonen" #: ../src/main.c:182 msgid "Print verbose debugging messages" msgstr "Uitgebreide foutmeldingen tonen" #: ../src/main.c:193 ../src/main.c:194 msgid "Print debugging messages for the given topic" msgstr "Foutmeldingen over het opgegeven onderwerp tonen" #: ../src/main.c:201 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, Linux Feed Reader" #: ../src/main.c:202 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "Meer informatie vindt u op http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "Het verzoek tot bijwerken is geannuleerd" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Kan hostnaam van bestemming niet bepalen" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Kan hostnaam van proxy niet bepalen" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Verbinding met remote host is mislukt" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Kan niet met proxy verbinden" #: ../src/net.c:325 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:328 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:331 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:333 msgid "Payment required" msgstr "Betaling vereist" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "U heeft geen toegang tot deze bron" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Bron niet gevonden" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Niet-toegestane methode" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Niet aanvaardbaar" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Aanmelding bij proxy vereist" #: ../src/net.c:339 msgid "Request timed out" msgstr "Wachttijd verzoek overschreden" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Verdwenen; bron bestaat niet meer. Meld u af!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Er is een interne fout opgetreden tijdens het bijwerken" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Feed niet bereikbaar: niet-ondersteunde omleiding aangevraagd door server!" #: ../src/net.c:349 msgid "Client Error" msgstr "Clientfout" #: ../src/net.c:351 msgid "Server Error" msgstr "Serverfout" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Abonnement \"%s\" wordt al bijgewerkt!" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Favicon van \"%s\" bijwerken" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" is niet veranderd sinds de laatste update" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Bijwerken \"%s\"" #: ../src/update.c:258 #, 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:281 #, c-format msgid "%s exited with status %d" msgstr "%s afgesloten met status %d" #: ../src/update.c:287 ../src/update.c:288 ../src/update.c:400 #, 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:426 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Fout: openen bestand \"%s\" is mislukt" #: ../src/update.c:432 #, 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d bijlage" msgstr[1] "%d bijlagen" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Bladeren" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d nieuw)" msgstr[1] " (%d nieuwe)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Hulponderwerpen" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Sneltoetsen" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "Vaak gestelde vragen" #: ../src/ui/liferea_shell.c:795 msgid "Liferea is now online" msgstr "Liferea is online" #: ../src/ui/liferea_shell.c:797 msgid "Work Offline" msgstr "Offline-modus" #: ../src/ui/liferea_shell.c:799 msgid "Liferea is now offline" msgstr "Liferea is offline" #: ../src/ui/liferea_shell.c:801 msgid "Work Online" msgstr "Online-modus" #: ../src/ui/liferea_shell.c:897 msgid "_Subscriptions" msgstr "_Abonnementen" #: ../src/ui/liferea_shell.c:898 msgid "Update _All" msgstr "_Alles bijwerken" #: ../src/ui/liferea_shell.c:898 msgid "Updates all subscriptions." msgstr "Alle abonnementen bijwerken." #: ../src/ui/liferea_shell.c:900 msgid "Mark All As _Read" msgstr "Alles als ge_lezen markeren" #: ../src/ui/liferea_shell.c:900 msgid "Marks read every item of every subscription." msgstr "Elk item van ieder feed als gelezen markeren." #: ../src/ui/liferea_shell.c:902 msgid "_Import Feed List..." msgstr "Feedlijst _importeren..." #: ../src/ui/liferea_shell.c:902 msgid "Imports an OPML feed list." msgstr "Een OPML-feedlijst importeren." #: ../src/ui/liferea_shell.c:903 msgid "_Export Feed List..." msgstr "Feedlijst e_xporteren..." #: ../src/ui/liferea_shell.c:903 msgid "Exports the feed list as OPML." msgstr "De feedlijst als OPML exporteren." #: ../src/ui/liferea_shell.c:904 msgid "_Quit" msgstr "_Afsluiten" #: ../src/ui/liferea_shell.c:906 msgid "_Feed" msgstr "_Feed" #: ../src/ui/liferea_shell.c:907 msgid "Remove _All Items" msgstr "_Alle items verwijderen" #: ../src/ui/liferea_shell.c:907 msgid "Removes all items of the currently selected feed." msgstr "Alle items van de geselecteerde feed verwijderen." #: ../src/ui/liferea_shell.c:910 msgid "_Item" msgstr "_Item" #: ../src/ui/liferea_shell.c:911 msgid "Previous Item" msgstr "Vorig item" #: ../src/ui/liferea_shell.c:913 msgid "Next Item" msgstr "Volgend item" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:918 msgid "_Next Unread Item" msgstr "_Volgend ongelezen item" #: ../src/ui/liferea_shell.c:921 msgid "_View" msgstr "_Beeld" #: ../src/ui/liferea_shell.c:922 ../src/ui/liferea_htmlview.c:653 msgid "_Increase Text Size" msgstr "Tekst ver_groten" #: ../src/ui/liferea_shell.c:922 msgid "Increases the text size of the item view." msgstr "De tekst van de items vergroten." #: ../src/ui/liferea_shell.c:924 ../src/ui/liferea_htmlview.c:654 msgid "_Decrease Text Size" msgstr "Tekst ver_kleinen" #: ../src/ui/liferea_shell.c:924 msgid "Decreases the text size of the item view." msgstr "De tekst van de items verkleinen." #: ../src/ui/liferea_shell.c:927 msgid "_Tools" msgstr "_Extra" #: ../src/ui/liferea_shell.c:928 msgid "_Update Monitor" msgstr "_Bijwerkoverzicht" #: ../src/ui/liferea_shell.c:928 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" #: ../src/ui/liferea_shell.c:930 msgid "_Preferences" msgstr "_Voorkeuren" #: ../src/ui/liferea_shell.c:930 msgid "Edit Preferences." msgstr "Voorkeuren bewerken." #: ../src/ui/liferea_shell.c:933 msgid "S_earch" msgstr "_Zoeken" #: ../src/ui/liferea_shell.c:934 msgid "Search All Feeds..." msgstr "Alle feeds doorzoeken..." #: ../src/ui/liferea_shell.c:934 msgid "Show the search dialog." msgstr "Zoekscherm tonen" #: ../src/ui/liferea_shell.c:936 msgid "_Help" msgstr "_Hulp" #: ../src/ui/liferea_shell.c:937 msgid "_Contents" msgstr "_Inhoud" #: ../src/ui/liferea_shell.c:937 msgid "View help for this application." msgstr "De hulptekst van dit programma bekijken." #: ../src/ui/liferea_shell.c:938 msgid "_Quick Reference" msgstr "_Snelgids" #: ../src/ui/liferea_shell.c:938 msgid "View a list of all Liferea shortcuts." msgstr "Een lijst met Lifereasneltoetsen bekijken." #: ../src/ui/liferea_shell.c:940 msgid "_FAQ" msgstr "_FAQ" #: ../src/ui/liferea_shell.c:940 msgid "View the FAQ for this application." msgstr "De FAQ (meest gestelde vragen) van dit programma bekijken." #: ../src/ui/liferea_shell.c:941 msgid "_About" msgstr "_Info" #: ../src/ui/liferea_shell.c:941 msgid "Shows an about dialog." msgstr "Info over het programma en de makers." #: ../src/ui/liferea_shell.c:945 msgid "_Normal View" msgstr "_Normaal venster" #: ../src/ui/liferea_shell.c:945 msgid "Set view mode to mail client mode." msgstr "Weergavemodus omstellen naar mail-client-modus." #: ../src/ui/liferea_shell.c:947 msgid "_Wide View" msgstr "_Breed venster" #: ../src/ui/liferea_shell.c:947 msgid "Set view mode to use three vertical panes." msgstr "Weergavemodus met drie vertikale vensters instellen." #: ../src/ui/liferea_shell.c:949 msgid "_Combined View" msgstr "_Samengesteld venster" #: ../src/ui/liferea_shell.c:949 msgid "Set view mode to two pane mode." msgstr "Weergavemodus met twee vensters instellen." #: ../src/ui/liferea_shell.c:954 msgid "_Reduced Feed List" msgstr "Feedlijst _reduceren" #: ../src/ui/liferea_shell.c:954 msgid "Hide feeds with no unread items." msgstr "Feeds zonder ongelezen berichten verbergen." #: ../src/ui/liferea_shell.c:959 msgid "_New Subscription..." msgstr "_Nieuw abonnement..." #: ../src/ui/liferea_shell.c:959 msgid "Adds a subscription to the feed list." msgstr "Een abonnement aan de feedlijst toevoegen." #: ../src/ui/liferea_shell.c:961 ../src/ui/popup_menu.c:320 msgid "New _Folder..." msgstr "Nieuwe _map..." #: ../src/ui/liferea_shell.c:961 msgid "Adds a folder to the feed list." msgstr "Een map aan de feedlijst toevoegen." #: ../src/ui/liferea_shell.c:962 ../src/ui/popup_menu.c:323 msgid "New S_earch Folder..." msgstr "Nieuwe _zoekmap..." #: ../src/ui/liferea_shell.c:962 msgid "Adds a new search folder to the feed list." msgstr "Een nieuwe zoekmap aan de feedlijst toevoegen." #: ../src/ui/liferea_shell.c:963 msgid "New _Source..." msgstr "Nieuwe _bron..." #: ../src/ui/liferea_shell.c:963 msgid "Adds a new feed list source." msgstr "Een feedlijstbron toevoegen." #: ../src/ui/liferea_shell.c:964 ../src/ui/popup_menu.c:325 msgid "New _News Bin..." msgstr "Nieuwe nieu_wsbak..." #: ../src/ui/liferea_shell.c:964 msgid "Adds a new news bin." msgstr "Voegt een nieuwe nieuwsbak toe." #: ../src/ui/liferea_shell.c:968 msgid "_Mark Items Read" msgstr "Als gelezen _markeren" #: ../src/ui/liferea_shell.c:968 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." #: ../src/ui/liferea_shell.c:970 ../src/ui/popup_menu.c:300 msgid "_Update" msgstr "_Bijwerken" #: ../src/ui/liferea_shell.c:970 msgid "Updates the selected subscription or all subscriptions of the selected folder." msgstr "De geselecteerde of alle feeds in de geselecteerde map bijwerken." #: ../src/ui/liferea_shell.c:975 msgid "_Properties" msgstr "_Eigenschappen" #: ../src/ui/liferea_shell.c:975 msgid "Opens the property dialog for the selected subscription." msgstr "Het eigenschappenvenster van de geselecteerde feed openen." #: ../src/ui/liferea_shell.c:976 msgid "_Remove" msgstr "_Verwijderen" #: ../src/ui/liferea_shell.c:976 msgid "Removes the selected subscription." msgstr "Het geselecteerde abonnement verwijderen." #: ../src/ui/liferea_shell.c:980 ../src/ui/popup_menu.c:163 msgid "Toggle _Read Status" msgstr "Item _gelezen aan/uit" #: ../src/ui/liferea_shell.c:980 msgid "Toggles the read status of the selected item." msgstr "Schakelt de leesstatus van het geselecteerde item tussen gelezen en ongelezen." #: ../src/ui/liferea_shell.c:982 ../src/ui/popup_menu.c:164 msgid "Toggle Item _Flag" msgstr "Item _markering aan/uit" #: ../src/ui/liferea_shell.c:982 msgid "Toggles the flag status of the selected item." msgstr "Schakelt de markering van het geselecteerde item om (wel of geen vlaggetje)." #: ../src/ui/liferea_shell.c:984 msgid "R_emove" msgstr "V_erwijderen" #: ../src/ui/liferea_shell.c:984 msgid "Removes the selected item." msgstr "Het geselecteerde item verwijderen." #: ../src/ui/liferea_shell.c:986 ../src/ui/popup_menu.c:127 msgid "Open In _Tab" msgstr "In _tabblad openen" #: ../src/ui/liferea_shell.c:986 msgid "Launches the item's link in a new Liferea browser tab." msgstr "De koppeling in een nieuw browsertabblad openen." #: ../src/ui/liferea_shell.c:988 ../src/ui/popup_menu.c:128 msgid "_Open In Browser" msgstr "In browser _openen" #: ../src/ui/liferea_shell.c:988 msgid "Launches the item's link in the Liferea item pane." msgstr "De koppeling in Liferea venster tonen." #: ../src/ui/liferea_shell.c:990 ../src/ui/popup_menu.c:129 msgid "Open In _External Browser" msgstr "In _externe browser openen" #: ../src/ui/liferea_shell.c:990 msgid "Launches the item's link in the configured external browser." msgstr "De koppeling in de externe browser openen." #: ../src/ui/liferea_shell.c:995 ../src/ui/popup_menu.c:193 msgid "_Work Offline" msgstr "_Offline-modus" #: ../src/ui/liferea_shell.c:995 msgid "This option allows you to disable subscription updating." msgstr "Deze optie schakelt het bijwerken van abonnementen uit." #: ../src/ui/liferea_shell.c:997 msgid "_Fullscreen" msgstr "_Volledige scherm" #: ../src/ui/liferea_shell.c:997 msgid "Browse at full screen" msgstr "Met volledig scherm bladeren" #: ../src/ui/liferea_shell.c:1328 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Linux Feed Reader" #: ../src/ui/liferea_shell.c:1330 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

" #: ../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:211 msgid "All Files" msgstr "Alle bestanden" #: ../src/ui/feed_list_view.c:338 msgid "Deleting entry" msgstr "Item verwijderen" #: ../src/ui/feed_list_view.c:339 #, 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_view.c:339 #, 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_view.c:351 msgid "Deletion Confirmation" msgstr "Verwijdering bevestigen" #: ../src/ui/feed_list_view.c:382 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea staat in offline-modus. Bijwerken is niet mogelijk." #: ../src/ui/liferea_htmlview.c:624 msgid "Open Link In _Tab" msgstr "Koppeling in _tabblad openen" #: ../src/ui/liferea_htmlview.c:625 msgid "_Open Link In Browser" msgstr "Koppeling in browser _openen" #: ../src/ui/liferea_htmlview.c:626 msgid "_Open Link In External Browser" msgstr "Koppeling in externe browser _openen" #: ../src/ui/liferea_htmlview.c:629 #, c-format msgid "_Bookmark Link at %s" msgstr "Blad_wijzer koppeling toevoegen als %s" #: ../src/ui/liferea_htmlview.c:633 msgid "_Copy Link Location" msgstr "Koppeling _kopiëren" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Image Location" msgstr "Afbeeldingslocatie _kopiëren" #: ../src/ui/liferea_htmlview.c:638 msgid "S_ave Link As" msgstr "Koppeling _opslaan als" #: ../src/ui/liferea_htmlview.c:640 msgid "S_ave Image As" msgstr "Afbeelding _opslaan als" #: ../src/ui/liferea_htmlview.c:643 msgid "_Subscribe..." msgstr "_Abonneren..." #: ../src/ui/item_list_view.c:398 msgid "*** No title ***" msgstr "*** Geen titel ***" #: ../src/ui/item_list_view.c:661 msgid "Date" msgstr "Datum" #: ../src/ui/item_list_view.c:675 msgid "Headline" msgstr "Kop" #: ../src/ui/item_list_view.c:777 ../src/ui/item_list_view.c:798 #: ../src/ui/item_list_view.c:819 ../src/ui/item_list_view.c:883 #: ../src/ui/item_list_view.c:968 ../src/ui/item_list_view.c:983 msgid "No item has been selected" msgstr "Er is geen item geselecteerd" #: ../src/ui/item_list_view.c:794 ../src/ui/item_list_view.c:815 msgid "This item has no link specified!" msgstr "Dit item heeft geen koppeling!" #: ../src/ui/item_list_view.c:871 msgid "You must select a feed to delete its items!" msgstr "Selecteer een feed om zijn items te verwijderen!" #: ../src/ui/popup_menu.c:141 msgid "Copy to News Bin" msgstr "Kopieer naar nieuwsbak" #: ../src/ui/popup_menu.c:155 #, c-format msgid "_Bookmark at %s" msgstr "Blad_wijzer toevoegen bij %s" #: ../src/ui/popup_menu.c:159 msgid "Copy Item _Location" msgstr "Itemlocatie _kopiëren" #: ../src/ui/popup_menu.c:165 msgid "R_emove Item" msgstr "Item v_erwijderen" #: ../src/ui/popup_menu.c:178 msgid "Open Enclosure..." msgstr "Bijlage openen..." #: ../src/ui/popup_menu.c:179 msgid "Save As..." msgstr "Opslaan als..." #: ../src/ui/popup_menu.c:180 msgid "Copy Link Location" msgstr "URL _kopiëren" #: ../src/ui/popup_menu.c:194 msgid "_Update All" msgstr "Alle feeds _bijwerken" #: ../src/ui/popup_menu.c:199 msgid "_Show Liferea" msgstr "Liferea _tonen" #: ../src/ui/popup_menu.c:302 msgid "_Update Folder" msgstr "Map _bijwerken" #: ../src/ui/popup_menu.c:304 msgid "_Mark All As Read" msgstr "Alle items als gelezen _markeren" #: ../src/ui/popup_menu.c:314 msgid "_New" msgstr "_Nieuw" #: ../src/ui/popup_menu.c:317 msgid "New _Subscription..." msgstr "Nieuw _abonnement..." #: ../src/ui/popup_menu.c:324 msgid "New S_ource..." msgstr "Nieuwe _bron..." #: ../src/ui/popup_menu.c:333 msgid "Sort Feeds" msgstr "Feeds sorteren" #: ../src/ui/popup_menu.c:339 msgid "_Rebuild" msgstr "_Herbouwen" #: ../src/ui/popup_menu.c:351 msgid "Convert To Local Subscriptions..." msgstr "Naar lokale abonnementen converteren..." #: ../src/ui/preferences_dialog.c:87 msgid "GNOME default" msgstr "GNOME-standaard" #: ../src/ui/preferences_dialog.c:88 msgid "Text below icons" msgstr "Tekst onder pictogrammen" #: ../src/ui/preferences_dialog.c:89 msgid "Text beside icons" msgstr "Tekst naast pictogrammen" #: ../src/ui/preferences_dialog.c:90 msgid "Icons only" msgstr "Alleen pictogrammen" #: ../src/ui/preferences_dialog.c:91 msgid "Text only" msgstr "Alleen tekst" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minuten" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "uren" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dagen" #: ../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:108 msgid " Space" msgstr " spatie" #: ../src/ui/preferences_dialog.c:113 msgid "Normal View" msgstr "Normaal venster" #: ../src/ui/preferences_dialog.c:114 msgid "Wide View" msgstr "Breed venster" #: ../src/ui/preferences_dialog.c:115 msgid "Combined View" msgstr "Samengesteld venster" #: ../src/ui/preferences_dialog.c:500 msgid "Manual" msgstr "Handmatig" #: ../src/ui/preferences_dialog.c:515 msgid "Browser default" msgstr "Browserstandaard" #: ../src/ui/preferences_dialog.c:518 msgid "Existing window" msgstr "Geopend venster" #: ../src/ui/preferences_dialog.c:521 msgid "New window" msgstr "Nieuw venster" #: ../src/ui/preferences_dialog.c:524 msgid "New tab" msgstr "Nieuwe tabblad" #: ../src/ui/preferences_dialog.c:683 msgid "Integrate with the messaging menu (indicator)" msgstr "In systeemvak opnemen (indicator)" #: ../src/ui/preferences_dialog.c:686 msgid "Terminate instead of minimizing to the messaging menu" msgstr "Afsluiten in plaats van minimaliseren naar systeemvak" #: ../src/ui/preferences_dialog.c:689 msgid "Start minimized to the messaging menu" msgstr "Geminimaliseerd in systeemvak starten" #: ../src/ui/preferences_dialog.c:789 msgid "Type" msgstr "Soort" #: ../src/ui/preferences_dialog.c:792 msgid "Program" msgstr "Programma" #: ../src/ui/ui_node.c:123 msgid "(Empty)" msgstr "(Leeg)" #: ../src/ui/ui_node.c:320 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Herbouwen" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Deze feed specificeert geen standaardbijwerkinterval." #: ../src/ui/browser_tabs.c:153 msgid "Untitled" msgstr "Geen titel" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d nieuw item" msgstr[1] "%d nieuwe items" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Geen nieuwe items" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Geen ongelezen items" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Website" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Ongeldige Atom-feed: auteur onbekend" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:273 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nieuw abonnement" #: ../src/fl_sources/google_source.c:115 msgid "Google Reader login failed!" msgstr "Inloggen Google Reader is mislukt!" #: ../src/fl_sources/google_source.c:394 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:395 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." #: ../src/fl_sources/opml_source.c:326 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:327 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" #: ../src/fl_sources/opml_source.c:394 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:238 msgid "No feed list source types found!" msgstr "Geen bronsoorten van feedlijst gevonden!" #: ../src/fl_sources/node_source.c:268 msgid "Source Type" msgstr "Bronsoort" #. 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:412 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "Het abonnement '%s' is geconverteerd naar lokale feeds." #: ../src/fl_sources/ttrss_source.c:360 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:361 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." #: ../src/fl_sources/ttrss_source_feed.c:119 msgid "Could not parse JSON returned by tt-rss API!" msgstr "JSON afkomstig van tt-rss API kan niet worden ontleed." #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Deze feed bestaat niet meer!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Dit nieuwsitem heeft geen kop" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Bezoek" #: ../src/notification/libnotify.c:167 ../src/notification/libnotify.c:263 msgid "Open feed" msgstr "Open feed" #: ../src/notification/libnotify.c:170 ../src/notification/libnotify.c:266 msgid "Mark all as read" msgstr "Alles als gelezen markeren" #: ../src/notification/libnotify.c:247 #, c-format 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" #: ../src/notification/libnotify.c:249 msgid "Feed Update" msgstr "Feed bijwerken" #: ../src/notification/libnotify.c:260 msgid "Show details" msgstr "Details tonen" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Aanmelding" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Wachtwoord:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_Gebruikersnaam:" #: ../glade/auth.ui.h:6 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." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Wachtwoord" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "_Gebruikersnaam (e-mail)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "normale weergave" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "brede weergave" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Koppen _bekijken" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "samengestelde weergave" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Koppen" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Knop online/offline" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Abonnementeigenschappen" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Feed-naam" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "Feed_naam:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "Bijwerkinterval" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "Standaardinterval _gebruiken." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_Voor deze feed een interval van" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Deze feed niet automatisch bijwerken." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Algemeen" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Feed-bron" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Brontype:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Bron:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_Url" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Opdracht" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Lokaal bestand" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Bladeren..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Gebruik conversie_filter" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Converteren _met:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "_Standaardinstellingen buffergeheugen" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "Buffergeheugen _uitschakelen" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Onbeperkt buffergeheugen" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "_Aantal items per feed die moet worden bewaard:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Archief" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "HTTP-_aanmelding gebruiken" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "Proxy niet voor _downloaden gebruiken" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Downloaden" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "_Automatisch alle bijlagen van deze feed downloaden." #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "Koppeling bij selecteren van artikelen automatisch _laden in opgegeven browser." #: ../glade/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Commentaarfeeds van dit abonnement negeren." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "Pop-upmeldingen voor dit abonnement tonen." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "Voor dit abonnement geen pop-upmeldingen tonen" #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "Gedownloade items als gelezen markeren." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Uitgebreid" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Nieuwe map" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "_Mapnaam:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Hernoemen" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Nieuwe naam:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Eigenschappen zoekmap" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "Zoek_naam:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "Zoek items die aan de volgende voorwaarden voldoen" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "_Elke regel voldoet" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "_Alle regels moeten voldoen" #: ../glade/liferea.ui.h:57 msgid "Open Enclosure" msgstr "Bijlage openen" #: ../glade/liferea.ui.h:58 msgid "Open an enclosure of type:" msgstr "Bijlage openen van type:" #: ../glade/liferea.ui.h:59 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Bladeren" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "Voortaan deze actie automatisch voor dit soort bijlagen uitvoeren." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Alle feeds doorzoeken" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Zoeken naar:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Uitgebreid..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Bijwerkoverzicht" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "Wachtrij verzoeken" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "Bijwerken" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "_Alles annuleren" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Nieuwsbak aanmaken" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Naam nieuwsbak:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Info" #: ../glade/liferea.ui.h:74 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea is een nieuwsverzamelaar voor GTK+" #: ../glade/liferea.ui.h:75 msgid "Liferea Homepage" msgstr "Liferea-startpagina" #: ../glade/liferea.ui.h:76 msgid "Advanced Search" msgstr "Uitgebreid zoeken" #: ../glade/liferea.ui.h:77 msgid "_Search Folder..." msgstr "Map doorzoeken..." #: ../glade/liferea.ui.h:78 msgid "Create Search Engine Feed" msgstr "Zoekmachinefeed aanmaken" #: ../glade/liferea.ui.h:79 msgid "enter any search string you want" msgstr "voer zoektermen in" #: ../glade/liferea.ui.h:80 msgid "Maximal _Number Of Result Items:" msgstr "Maximum aantal resultaten:" #: ../glade/liferea.ui.h:81 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." #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Download / Nabewerken" #: ../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/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Tiny Tiny RSS-account toevoegen" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your tt-rss 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/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/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:4 msgid "Feed Update Settings" msgstr "Feed-bijwerkinstellingen" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "Alle abonnementen _bijwerken bij het opstarten." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Standaard_interval bijwerken feed:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Feeds" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "Mappenweergaveinstellingen" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "Gelezen items _verbergen." #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Feedpictogrammen (Favicons)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "Alle _favicons nu bijwerken" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Mappen" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Koppen lezen" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "Door artikelen _bladeren met:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "Standaardmodus _weergave:" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Webintegratie" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Bladwijzers doorsturen naar" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Interne browserinstellingen" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Koppelingen in _venster openen." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "Javascript _uitschakelen." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "Browser_plug-in inschakelen" #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "Externe browserinstellingen" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "Koppeling _openen in:" #: ../glade/prefs.ui.h:28 msgid "_Manual:" msgstr "_Handmatig:" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "(%s voor URL)" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Browser:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Browser" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Meldingeninstellingen" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Een _pop-upvenster tonen met nieuwe koppen." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Een statuspictogram in het mededelingengebied (systeemvak) tonen." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Aantal _nieuwe items in het systeemvak tonen" #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "_Afsluiten in plaats van minimaliseren naar systeemvak." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "In systeemvak _starten" #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Werkbalkinstellingen" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "Werkbalk _verbergen" #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Labels werkbalkknoppen:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "HTTP-proxy-server" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_Automatisch detecteren (GNOME of omgeving)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_Geen proxy" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Handmatige instelling:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "Proxy _poort:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "Proxy _host:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Proxy-authenticatie gebruiken" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Proxy _wachtwoord:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Proxy _gebruikersnaam:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "Bijlagen downloaden" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Downloaden met" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "Bijlagen openen" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Bijlagen" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "Plugins" #~ 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 "Synchronized with Nearby Hosts" #~ msgstr "Met nabije hosts synchroniseren" #~ 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 "_Delete" #~ msgstr "_Verwijderen" #~ 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://liferea.sf.net" #~ msgstr "http://liferea.sf.net" #~ 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 "Search all feeds." #~ msgstr "Alle feeds doorzoeken" #~ 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.10.17/po/pl.po000066400000000000000000001711001261475620100146650ustar00rootroot00000000000000# 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: 2013-01-25 23:54+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.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Czytnik wiadomości" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Czytnik wiadomości RSS Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Odczytuje zawartość kanałów wiadomości i blogów" #: ../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/liferea.ui.h:29 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 "No comments yet." msgstr "Brak komentarzy." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Komentarze" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Uaktualnianie..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Wczytaj ponownie" #: ../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:32 msgid "Default Browser" msgstr "Domyślna przeglądarka" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Nie udało się wykonać polecenia przeglądarki: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Uruchamianie: „%s”" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Błąd uwierzytelniania" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Nie można utworzyć katalogu pamięci podręcznej „%s”!" # %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:80 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:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d %B %Y" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "Plik „%s” nie jest prawidłowym plikiem konfiguracyjnym!" #: ../src/enclosure.c:288 msgid "You have not configured a download tool yet! Please do so in the 'Download' 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:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Błąd zmieniania nazwy z %s na %s\n" #: ../src/export.c:406 ../src/export.c:408 #, 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:414 ../src/export.c:416 #, 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:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Lista zaimportowanych subskrypcji" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Importuj listę subskrypcji" #: ../src/export.c:470 msgid "Import" msgstr "Zaimportuj" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 msgid "OPML Files" msgstr "Pliki OPML" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Błąd eksportowania listy subskrypcji!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Wyeksportowano listę subskrypcji!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Eksportuj listę subskrypcji" #: ../src/export.c:487 msgid "Export" msgstr "Wyeksportuj" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "Uaktualniono „%s”..." #: ../src/feed.c:294 #, 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:404 msgid "There are no unread items" msgstr "Brak nieprzeczytanych nagłówków " #: ../src/main.c:164 msgid "Start Liferea with its main window in STATE. STATE may be `shown', `iconified', or `hidden'" msgstr "Uruchamia program ustalając STAN jego okna. Parametr STAN może przybierać wartość „shown”, „iconified” lub „hidden”." #: ../src/main.c:164 msgid "STATE" msgstr "STAN" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Wypisuje informacje o wersji i kończy działanie" #: ../src/main.c:166 msgid "Add a new subscription" msgstr "Dodaje nową subskrypcję" #: ../src/main.c:166 msgid "uri" msgstr "URI" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Wypisuje wszystkie komunikaty diagnozowania błędów" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "Wypisuje komunikaty diagnozowania błędów pamięci podręcznej" #: ../src/main.c:173 msgid "Print debugging messages for the configuration handling" msgstr "Wypisuje komunikaty diagnozowania błędów konfiguracji" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Wypisuje komunikaty diagnozowania błędów bazy danych" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "Wypisuje komunikaty diagnozowania błędów interfejsu graficznego" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Wypisuje komunikaty diagnozowania błędów połączeń sieciowych" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "Wypisuje komunikaty diagnozowania błędów funkcji przetwarzania" #: ../src/main.c:179 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/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "Wypisuje komunikaty diagnozowania błędów podczas uruchamiania/kończenia działania funkcji" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "Wypisuje komunikaty diagnozowania błędów uaktualniania kanałów" #: ../src/main.c:182 msgid "Print debugging messages of the search folder matching" msgstr "Wypisuje komunikaty diagnozowania błędów dopasowywania katalogów wyników" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "Wypisuje dodatkowe komunikaty diagnozowania błędów" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "Wypisuje informacje diagnozowania błędów na dany temat" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, czytnik wiadomości dla systemu Linux" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "Więcej informacji można znaleźć na stronie http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "Anulowano żądanie uaktualnienia" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Nie można określić nazwy komputera docelowego" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Nie można określić nazwy komputera pośrednika" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Nie można nawiązać połączenia ze zdalnym komputerem" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Nie można nawiązać połączenia z pośrednikiem" #: ../src/net.c:325 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:328 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:331 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:333 msgid "Payment required" msgstr "Wymagane uiszczenie opłaty" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Brak dostępu do tego zasobu" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Zasób nie odnaleziony" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Niedozwolona metoda" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Nieakceptowalne" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Wymagane uwierzytelnienie pośrednika sieciowego (proxy)" #: ../src/net.c:339 msgid "Request timed out" msgstr "Upłynął limit czasu żądania" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Zasób nie istnieje. Proszę usunąć subskrypcję!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Wystąpił wewnętrzny błąd podczas uaktalniania" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Subskrypcja niedostępna: serwer zażądał nieobsługiwanego przekierowania!" #: ../src/net.c:349 msgid "Client Error" msgstr "Błąd klienta" #: ../src/net.c:351 msgid "Server Error" msgstr "Błąd serwera" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Subskrypcja „%s” jest w trakcie uaktualniania!" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Uaktualnianie ikony dla „%s”" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, 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:272 #, c-format msgid "Updating \"%s\"" msgstr "Uaktualnianie „%s”" #: ../src/update.c:259 #, 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:282 #, c-format msgid "%s exited with status %d" msgstr "%s zakończył ze stanem %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Błąd: nie można otworzyć pliku „%s”" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Błąd: nie ma takiego pliku „%s”" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Nowy katalog wyników" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Wystąpiło więcej błędów. Komunikat został skrócony!]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, 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:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Wybór pliku" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, 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:330 #, 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:716 msgid "Help Topics" msgstr "Tematy pomocy" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Streszczenie" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "Najczęściej zadawane pytania" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Program działa w trybie połączonym" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Przełącza w tryb rozłączony" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Program działa w trybie rozłączonym" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Przełącza w tryb połączony" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Subskrypcje" # Skrócone (toolbar) #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "Uaktualnij _wszystkie" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Uaktualnia wszystkie subskrypcje" #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "_Oznacz wszystkie jako przeczytane" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Oznacza wszystkie nagłówki każdej subskrypcji jako przeczytane" #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Importuj listę subskrypcji..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Importuje listę kanałów z pliku w formacie OPML" #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Eksportuj listę subskrypcji..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Eksportuje listę kanałów do pliku w formacie OPML" #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "Za_kończ" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Kanał" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Usuń _wszystkie nagłówki" #: ../src/ui/liferea_shell.c:918 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 #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "_Nagłówek" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "Poprzedni" # Skrócone (toolbar) #: ../src/ui/liferea_shell.c:924 msgid "Next Item" msgstr "Następny" # Skrócone (toolbar) #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "_Następny nieprzeczytany" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Widok" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "Z_większ rozmiar tekstu" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Zwiększa rozmiar tekstu wyświetlanego artykułu" #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "Z_mniejsz rozmiar tekstu" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Zmniejsza rozmiar tekstu wyświetlanego artykułu" #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "_Narzędzia" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "_Monitor uaktualniania" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "Wyświetla listę kanałów oczekujących na uaktualnienie" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "P_referencje" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Konfiguruje ustawienia programu" #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "_Wyszukiwanie" # Skrocone (toolbar) #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Wyszukaj..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Wyświetla okno wyszukiwania" #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "Pomo_c" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Spis treści" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Wyświetla zawartość podręcznika użytkownika programu" #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Streszczenie" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Wyświetla listę skrótów klawiszowych programu" #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_Najczęściej zadawane pytania" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Wyświetla najczęściej zadawane pytania i odpowiedzi związane z programem" #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_O programie" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Wyświetla informacje o programie" #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "_Zwykły" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Przełącza typ widoku znany z programów pocztowych" #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "_Szeroki" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Przełącza typ widoku wyświetlający zawartość w trzech pionowych panelach" # Skrocone (toolbar) #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "_Połączony" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Przełącza typ widoku wyświetlający zawartość w dwóch panelach" #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "_Skrócona lista subskrypcji" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Ukrywa na liście kanały nie zawierające nieprzeczytanych nagłówków" #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "_Nowa subskrypcja..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Dodaje do listy kanałów nową subskrypcję" #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Nowy _katalog..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Tworzy nowy katalog na liście kanałów" #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Nowy katalog _wyników..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Tworzy nowy katalog wyszukiwania na liście subskrypcji" #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Nowy _zasób..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Dodaje nowy zasób do listy kanałów" #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "Nowy _kosz..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Tworzy nowy kosz wiadomości" #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "_Oznacz jako przeczytane" #: ../src/ui/liferea_shell.c:979 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." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Uaktualnij" #: ../src/ui/liferea_shell.c:981 msgid "Updates the selected subscription or all subscriptions of the selected folder." msgstr "Uaktualnia zaznaczoną subskrypcję lub wszystkie subskrypcje w zaznaczonym katalogu" #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "_Właściwości..." #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Otwiera okno właściwości zaznaczonej subskrypcji" #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "_Usuń" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Usuwa zaznaczone subskrypcje" #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Przełącz oznaczenie p_rzeczytania" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Przełącza oznaczenie przeczytania zaznaczonego nagłówka" #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Przełącz _wyróżnienie" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Przełącza wyróżnienie zaznaczonego nagłówka" #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "_Usuń" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Usuwa zaznaczony nagłówek" #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "Otwórz w nowej _karcie" #: ../src/ui/liferea_shell.c:997 msgid "Launches the item's link in a new Liferea browser tab." msgstr "Otwiera odnośnik nagłówka w nowej karcie programu" #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 msgid "_Open In Browser" msgstr "_Otwórz w panelu" #: ../src/ui/liferea_shell.c:999 msgid "Launches the item's link in the Liferea item pane." msgstr "Otwiera odnośnik nagłówka w panelu programu" #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 msgid "Open In _External Browser" msgstr "Otwórz w p_rzeglądarce internetowej" #: ../src/ui/liferea_shell.c:1001 msgid "Launches the item's link in the configured external browser." msgstr "Otwiera odnośnik nagłówka w zewnętrznej przeglądarce internetowej" #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "_Tryb rozłączony" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Blokuje uaktualnianie subskrypcji" #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "_Pełny ekran" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "Wyświetla zawartość na pełnym ekranie" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - czytnik wiadomości dla systemu Linux" #: ../src/ui/liferea_shell.c:1341 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.

" #: ../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:205 msgid "All Files" msgstr "Wszystkie pliki" # WTF? #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Usuwanie nagłówka" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Usunąć „%s”?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Potwierdzenie usuwania" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Program działa w trybie rozłączonym. Uaktualnienia nie są możliwe." #: ../src/ui/liferea_htmlview.c:627 msgid "Open Link In _Tab" msgstr "Otwórz odnośnik w _karcie" #: ../src/ui/liferea_htmlview.c:628 msgid "_Open Link In Browser" msgstr "_Otwórz odnośnik" #: ../src/ui/liferea_htmlview.c:629 msgid "_Open Link In External Browser" msgstr "_Otwórz odnośnik w przeglądarce" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "_Opublikuj odnośnik na %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_Skopiuj adres odnośnika" #: ../src/ui/liferea_htmlview.c:639 msgid "_Copy Image Location" msgstr "_Skopiuj adres obrazu" #: ../src/ui/liferea_htmlview.c:641 msgid "S_ave Link As" msgstr "_Zapisz odnośnik jako..." #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "Z_apisz obraz jako" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "_Subskrybuj..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Bez tytułu ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Nagłówek" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Nie zanzaczono żadnego nagłówka" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Ten nagłówek nie posiada przypisanego odnośnika!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Należy zaznaczyć kanał, aby usunąć jego nagłówki!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "Skopiuj do kosza" #: ../src/ui/popup_menu.c:156 #, c-format msgid "_Bookmark at %s" msgstr "_Opublikuj na %s" #: ../src/ui/popup_menu.c:160 msgid "Copy Item _Location" msgstr "Skopiuj adres _nagłówka" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "_Usuń nagłówek" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Otwórz załącznik..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Zapisz jako..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "Skopiuj adres odnośnika" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "_Uaktualnij wszystkie" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "_Wyświetlanie okna programu" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "_Uaktualnij katalog" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "_Oznacz wszystkie jako przeczytane" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "_Nowy" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "Nowa _subskrypcja..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "Nowy _zasób..." #: ../src/ui/popup_menu.c:329 msgid "Sort Feeds" msgstr "Posortuj kanały" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "_Wczytaj ponownie" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "Domyślne ustawienia GNOME" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Etykiety poniżej ikon" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Etykiety obok ikon" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Tylko ikony" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Tylko etykiety" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minut" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "godzin" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dni" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Spacja" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Spacja" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Spacja" #: ../src/ui/preferences_dialog.c:114 msgid "Normal View" msgstr "Zwykły" #: ../src/ui/preferences_dialog.c:115 msgid "Wide View" msgstr "Szeroki" # Skrocone (toolbar) #: ../src/ui/preferences_dialog.c:116 msgid "Combined View" msgstr "Połączony" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Własne polecenie" # Otworz odnosnik w: -> #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Domyślne zachowanie" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "W bieżącym oknie" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "W nowym oknie" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "W nowej karcie" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "Zintegrowanie z menu wiadomości" #: ../src/ui/preferences_dialog.c:685 msgid "Terminate instead of minimizing to the messaging menu" msgstr "Kończenie programu zamiast minimalizowania do menu wiadomości" #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "Uruchamia" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Typ" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Pusty)" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Ponowne wczytywanie zawartości" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Kanał nie posiada domyślnej częstości uaktualniania." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "Nieograniczony" #: ../src/ui/ui_tray.c:221 #, c-format 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" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Brak nowych nagłówków" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Brak nieprzeczytanych nagłówków" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Witryna internetowa" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Nieprawidłowy kanał Atom: nieznany autor" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%B %d %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nowa subskrypcja" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "Nie udało się zalogować do konta Google Reader!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 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." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planety, Blogrolle, OPML" # Blogrolle -> Blogrole? #: ../src/fl_sources/opml_source.c:326 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." #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Nie znaleziono typu źródła subskrypcji!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Rodzaj źródła:" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:363 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." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "Nie można przetworzyć danych JSON zwróconych przez API tt-rss!" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Ten kanał już nie istnieje!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Ta wiadomość nie posiada nagłówka" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Odwiedź" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Otwórz kanał" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Oznacz wszystkie jako przeczytane" #: ../src/notification/libnotify.c:254 #, c-format 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ń" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Uaktualnienie kanału" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Wyświetl szczegóły" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Uwierzytelnianie" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Hasło:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_Nazwa użytkownika:" #: ../glade/auth.ui.h:6 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." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Hasło:" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "_Nazwa użytkownika (adres e-mail)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "widok zwykły" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "widok szeroki" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Pokaż nagłówki" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "widok połączony" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Nagłówki" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Przycisk Online/Offline" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Właściwości subskrypcji" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Nazwa kanału" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "_Nazwa:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "Częstość uaktualniania" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Używanie domyślnych wartości globalnych" #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_Określenie indywidualnej częstości uaktualniania:" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Pomijanie automatycznego uaktualniania" #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Ogólne" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Zasób subskrypcji" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Rodzaj:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Adres źródłowy:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "Adres _URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Polecenie" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "P_lik lokalny" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Wskaż plik..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Używanie _filtra konwertującego" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "_Konwertowanie za pomocą:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "_Domyślne ustawienia pamięci podręcznej" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Wyłączenie pamięci podręcznej" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Nieograniczony rozmiar pamięci podręcznej" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "Domyślna _ilość przechowywanych nagłówków:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Archiwizowanie" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Używanie _uwierzytelniania HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "Pobieranie _bez użycia pośrednika" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Pobieranie" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "_Automatyczne pobieranie załączników" #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "Automatyczne _otwieranie zaznaczonych nagłówków w przeglądarce internetowej" #: ../glade/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorowanie kanałów _komentarzy" #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "_Wymuszenie wyświetlania podręcznych powiadomień" #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "_Pomijanie wyświetlania podręcznych powiadomień" #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "O_znaczanie pobranych nagłówków jako przeczytane" #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Zaawansowane" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Nowy katalog" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "Na_zwa katalogu:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Zmiana nazwy" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Nowa nazwa:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Właściwości katalogu wyników" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "_Nazwa wyszukiwania:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "Wyszukanie nagłówków spełniających następujące kryteria" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "Dopasowanie j_akiejkolwiek reguły" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "Dopasowanie _wszystkich reguł" #: ../glade/liferea.ui.h:57 msgid "Open Enclosure" msgstr "Otwieranie załącznika" #: ../glade/liferea.ui.h:58 msgid "Open an enclosure of type:" msgstr "Pobieranie załącznika typu:" #: ../glade/liferea.ui.h:59 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/liferea.ui.h:60 msgid "_Browse" msgstr "Prze_glądaj" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Wykonywanie tej czynności automatycznie dla tego typu plików" # Skrócone (toolbar) #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Wyszukiwanie" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Wyszukiwanie tekstu:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Zaawansowane..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Monitor uaktualniania" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "Oczekujące" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "Pobierane" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Anuluj _wszystkie" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Tworzenie nowego kosza" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Nazwa kosza:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "O Programie" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Copyright (c) 2003-2012\n" "Zespół Liferea\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Odczytuje zawartość kanałów wiadomości, wykorzystując interfejs GTK+" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Strona główna programu" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Zaawansowane" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "Utwórz _katalog wyników" #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Utwórz kanał modułu wyszukiwania" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "wpisz frazę do wyszukania" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "_Maksymalna ilość nagłówków w wynikach:" #: ../glade/liferea.ui.h:84 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. " #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Pobieranie / przetwarzanie" #: ../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/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "Dodawanie konta Tiny Tiny RSS" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your tt-rss 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/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/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:4 msgid "Feed Update Settings" msgstr "Uaktualnianie" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "_Uaktualnianie wszystkich subskrypcji podczas uruchamiania" #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Domyślna _częstość uaktualnień subskrypcji:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Kanały" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "Wyświetlanie" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "_Ukrywanie przeczytanych nagłówków" #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Ikony kanałów" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Uaktualnij wszystkie ikony" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Katalogi" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Czytanie" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "_Skrót klawiszowy służący do przełączania artykułów:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "_Domyślny widok:" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Integracja z usługami sieciowymi" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Publikowanie odnośników:" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Wbudowana przeglądarka" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Otwieranie odnośników w _oknie programu" #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "Wyłączenie Java_script" #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "_Włączenie wtyczek" #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "Zewnętrzna przeglądarka" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Otwieranie odnośników:" #: ../glade/prefs.ui.h:28 msgid "_Manual:" msgstr "_Własne polecenie:" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "(parametr %s zostanie zastąpiony adresem URL)" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Przeglądarka:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Przeglądarka" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Powiadamianie" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "_Okno podręczne z nowymi nagłówkami" #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "_Ikona stanu w obszarze powiadamiania" #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "I_lość nowych nagłówków wyświetlana w ikonie" #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "_Kończenie programu zamiast minimalizowania do ikony" #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Minimalizowanie do ikony podczas uruchamiania" #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Pasek narzędziowy" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Ukrywanie" #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Etykiety p_rzycisków:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Interfejs" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "Serwer pośrednika sieciowego" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_Automatyczne wykrywanie (GNOME)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_Brak" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Ręczne ustawienia:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "_Port:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "_Pośrednik:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "_Uwierzytelnianie pośrednika" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "_Hasło:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "_Nazwa użytkownika:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Pośrednik" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "Pobieranie" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "Po_bieranie za pomocą programu:" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "Otwieranie" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Załączniki" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "Wtyczki" liferea-1.10.17/po/pt.po000066400000000000000000002344111261475620100147020ustar00rootroot00000000000000# 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: 2013-01-25 23:54+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.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Leitor de Fontes" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Leitor de Fontes Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 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 "No comments yet." msgstr "Ainda sem comentários." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Comentários" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "A Actualizar..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "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:32 #, fuzzy msgid "Default Browser" msgstr "Navegador por Omissão do GNOME" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Falha ao iniciar o navegador: %s" #: ../src/browser.c:230 #, 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:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Não foi possível criar o directório de cache \"%s\"!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Hoje %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d de %b %Y" #: ../src/enclosure.c:197 #, 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:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Erro ao renomear %s para %s\n" #: ../src/export.c:406 ../src/export.c:408 #, 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:414 ../src/export.c:416 #, 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:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Lista de fontes importadas" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Importar Lista de Fontes" #: ../src/export.c:470 msgid "Import" msgstr "Importar" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 #, fuzzy msgid "OPML Files" msgstr "Escolher Ficheiro OPML" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Erro ao exportar a lista de fontes!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Lista de fontes exportada!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Exportar Lista de Fontes" #: ../src/export.c:487 msgid "Export" msgstr "Exportar" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" actualizado..." #: ../src/feed.c:294 #, 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:404 #, fuzzy msgid "There are no unread items" msgstr "Não há artigos não lidos " #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" "Iniciar o Liferea com a sua janela principal em ESTADO. ESTADO pode ser " "`apresentada', `iconificada', ou `oculta'" #: ../src/main.c:164 msgid "STATE" msgstr "ESTADO" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Apresentar informações de versão e sair" #: ../src/main.c:166 #, fuzzy msgid "Add a new subscription" msgstr "Nova Subscrição" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Imprimir mensagens de depuração de todos os tipos" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "Imprimir mensagens de depuração para a gestão de cache" #: ../src/main.c:173 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "Imprimir mensagens de depuração da gestão de configuração" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Imprimir mensagens de depuração da gestão de bases de dados" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "Imprimir mensagens de depuração de todas as funções de IGU" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Imprimir mensagens de depuração de toda a actividade de rede" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "Imprimir mensagens de depuração de todas as funções de parseamento" #: ../src/main.c:179 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/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "Imprimir mensagens de depuração ao carregar/sair de funções" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "Imprimir mensagens de depuração do processo de actualização da fonte" #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "Imprimir mensagens de depuração para a gestão de cache" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "Imprimir mensagens de depuração verbosas" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "Imprimir mensagens de depuração para o tópico dado" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, o Leitor de Fontes para Linux" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "" "Para mais informações, por favor visite http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "O pedido de actualização foi cancelado" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Incapaz de resolver o nome de máquina de destino" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Incapaz de resolver o nome de máquina proxy" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Incapaz de ligar à máquina remota" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Incapaz de ligar ao proxy" #: ../src/net.c:325 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:328 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:331 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:333 msgid "Payment required" msgstr "Pagamento necessário" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Não tem autorização para aceder a este recurso" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Recurso Não Encontrado" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Método Não Permitido" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Não Aceitável" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Autenticação proxy requerida" #: ../src/net.c:339 msgid "Request timed out" msgstr "Tempo Esgotado" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Esta fonte não existe. Por favor, remova a sua subscrição!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Ocorreu um erro interno no processo de actualização" #: ../src/net.c:347 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:349 msgid "Client Error" msgstr "Erro do Cliente" #: ../src/net.c:351 msgid "Server Error" msgstr "Erro do Servidor" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "A subscrição \"%s\" já está a ser actualizada!" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "A actualizar o ícone da fonte \"%s\"" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" não foi modificado desde a última actualização" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "A Actualizar \"%s\"" #: ../src/update.c:259 #, 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:282 #, c-format msgid "%s exited with status %d" msgstr "%s saiu com estado %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Erro: Não foi possível abrir o ficheiro \"%s\"" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Erro: O ficheiro \"%s\" não existe" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Nova Pasta de Procura" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Houveram mais erros. A saída foi truncada!]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d anexo" msgstr[1] "%d anexos" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Escolher Ficheiro" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] "(%d novo)" msgstr[1] "(%d novos)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Tópicos de Ajuda" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Referência Rápida" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "FAQ" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea está ligado" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Trabalhar Desligado" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea está desligado" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Trabalhar Ligado" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Subscrições" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "Ac_tualizar Todas" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Actualizar todas as subscrições." #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Ma_rcar Todos Como Lidos" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Marca todos itens de todas as subscrições como lidos." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Importar Lista de Fontes..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Importa uma lista OPML de fontes." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Exportar Lista de Fontes.." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Exporta a lista de fontes como OPML." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Sair" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Fonte" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Remover _Todos Itens" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Remove todos os item seleccionados da fonte actual." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "_Itens" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "_Avançar Para Item Não Lido" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "_Avançar Para Item Não Lido" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Ver" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "_Aumentar Tamanho do Texto" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Aumenta o tamanho do texto de exibição do item." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "_Diminuir Tamanho do Texto" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Diminui o tamanho do texto de exibição do item." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "Ferramentas" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "Monitor de Actualização" #: ../src/ui/liferea_shell.c:939 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" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Preferências" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Editar Preferências." #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "_Procurar" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Procurar em Todas as Fontes..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Exibe o diálogo de procura." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Ajuda" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Índice" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Veja a ajuda para esta aplicação." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "R_eferência Rápida" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Exibir uma lista de atalhos do Liferea." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_FAQ" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Exibir as FAQ desta aplicação." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_Sobre" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Mostra o diálogo 'sobre'." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "Visualização _Normal" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Define o modo de visualização para o modo de cliente de e-mail." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "Visualização Alargada" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Define o modo de visualização para usar três painéis verticais." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "Visualização _Combinada" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Define o modo de visualização para um modo com dois painéis." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "Lista de Fontes _Reduzida" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Ocultar fontes sem artigos não lidos " #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "_Nova Subscrição..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Adiciona uma nova subscrição à lista de fontes." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Nova _Pasta..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Adiciona uma pasta à lista de fontes." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Nova Pasta de Procura..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Adicionar uma nova pasta de procura à lista de fontes." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Nova Fo_nte..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Adicionar uma nova fonte de lista de fontes." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "_Novo Recipiente de Notícias..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Adiciona um novo recipiente de notícias." #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "_Marcar Itens Como Lidos" #: ../src/ui/liferea_shell.c:979 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." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Actualizar" #: ../src/ui/liferea_shell.c:981 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. " #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "_Propriedades" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Abre o diálogo de propriedades para a subscrição seleccionada." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "_Remover" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Remove as subscrições seleccionadas." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Alte_rnar para Lido ou Não Lido" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Alterna o estado de leitura do item seleccionado." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Alternar Sinalizador do Item" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Alterna o sinalizador de estado do item seleccionado." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "R_emover" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Remove os itens seleccionados." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "Abre o link do item no navegador configurado." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "_Abrir No Navegador" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Abre o link do item no navegador configurado." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Configurações do Navegador Externo" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Abre o link do item no navegador configurado." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "T_rabalhar Offline" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Esta opção permite desactivar a actualização de subscrições." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Leitor de Fontes do Linux" #: ../src/ui/liferea_shell.c:1341 #, 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.

" #: ../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:205 #, fuzzy msgid "All Files" msgstr "Ficheiro _Local" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "A apagar entrada" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Tem a certeza que deseja apagar \"%s\"?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Confirmar Exclusão" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "O Liferea está em modo desligado. Não é possível actualizar." #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "Abrir Link Em _Separador" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "_Abrir Link No Navegador" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "_Abrir Link No Navegador" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "_Marcar Link em %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_Copiar Localização do Link" #: ../src/ui/liferea_htmlview.c:639 #, fuzzy msgid "_Copy Image Location" msgstr "_Copiar Localização do Link" #: ../src/ui/liferea_htmlview.c:641 #, fuzzy msgid "S_ave Link As" msgstr "Guardar Como..." #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "_Subscrever..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Sem título ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Títulos" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Nenhum item foi selecionado" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Este item não possui um link especificado!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Seleccione um fonte para apagar os seus itens!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "Copiar para o Recipiente de Notícias" #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "_Marcar Link em %s" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "_Copiar Localização do Link" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "R_emover Item" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Abrir Componente..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Guardar Como..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "Copiar Localização do Link" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "Act_ualizar Tudo" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "_Apresentar o Liferea" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "Act_ualizar Pasta" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "_Marcar Todas Como Lidas" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "_Nova" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "_Nova Subscrição..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "Nova Fo_nte..." #: ../src/ui/popup_menu.c:329 #, fuzzy msgid "Sort Feeds" msgstr "Importar Lista de Fontes" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "Por Omissão do GNOME" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Texto abaixo dos ícones" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Texto ao lado dos ícones" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Apenas ícones" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Apenas texto" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minutos" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "horas" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dias" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Espaço" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Espaço" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Espaço" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "Visualização _Normal" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "Visualização Alargada" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "Visualização _Combinada" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Navegador por omissão" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Janela existente" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Nova Janela" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Novo separador" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "" #: ../src/ui/preferences_dialog.c:685 #, fuzzy msgid "Terminate instead of minimizing to the messaging menu" msgstr "Terminar em vez de minimizar para o ícone da band_eja" #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Tipo" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Programa" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 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:155 msgid "Untitled" msgstr "" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d novo item" msgstr[1] "%d novos itens" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Não há novos itens" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Nenhum item não lido" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Fonte em formato Atom inválido: autor desconhecido" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d de %b %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../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:116 msgid "Google Reader login failed!" msgstr "Falha ao efectuar aceder ao Google Reader!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 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." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planeta, BlogRoll (lista de blogs), OPML" #: ../src/fl_sources/opml_source.c:326 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" #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Nenhum tipo de lista de fontes encontrado!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Tipo de Fonte" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source.c:363 #, 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." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Esta fonte já não existe!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Esta entrada de notícias não possui título" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Visita" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Abrir fonte" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Ma_rcar todos como lidos" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "" msgstr[1] "" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Actualização de Fonte" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Mostrar detalhes" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autenticação" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Senha:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "Nome de utilizador:" #: ../glade/auth.ui.h:6 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." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Senha" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "Nome de _Utilizador (E-mail)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "visualização normal" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "visualização alargada" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Ver Títulos" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "visualização combinada" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Títulos" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Botão Online/Offline" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Propriedades da Subscrição" #: ../glade/liferea.ui.h:9 #, fuzzy msgid "Feed Name" msgstr "_Nome da Fonte:" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "_Nome da Fonte:" #: ../glade/liferea.ui.h:11 #, fuzzy msgid "Update Interval" msgstr "Monitor de Actualização" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Usar o intervalo padrão de actualização." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_Intervalo de actualização específico de fonte de" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Não actualizar esta fonte de automaticamente." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Geral" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Fonte" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Tipo de Fonte:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Fonte:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Comando" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "Ficheiro _Local" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Seleccionar Ficheiro..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Usar _filtro de conversão" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "_Converter _usando:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "Configuração pa_drão da cache" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "De_sabilitar Cache" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "Cache _Ilimitada" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "_Número de itens a guardar:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Arquivo" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Usar _autenticação HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "Não usar proxy para _transferir" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Transferência" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "Transferência _automática de todos componentes desta fonte." #: ../glade/liferea.ui.h:42 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/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorar fontes de _comentários para esta subscrição." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "_Forçar notificação popup para esta subscrição." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "_Nunca utilizar notificações popup para esta subscrição." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Marcar itens transferidos com lidos." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Avançado" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Nova Pasta" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "N_ome da pasta:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Renomear" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Novo Nome:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Propriedades da Pasta Virtual" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "Procurar _Nome:" #: ../glade/liferea.ui.h:54 #, fuzzy msgid "Find Items that meet the following criteria" msgstr "Procurar itens que correspondam ao seguinte critério" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "_Qualquer Regra Coincidente" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "_Todas as Regras Coincidem" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "Abrir Componente..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "A transferir um componente do tipo:" #: ../glade/liferea.ui.h:59 #, 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Navegar" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "" "_Fazer isso automaticamente para componentes como este de agora em diante." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Procurar em Todas as Fontes" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "Pesqui_sar por:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Avançado..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Monitor de Actualização" #: ../glade/liferea.ui.h:68 #, fuzzy msgid "Pending Requests" msgstr "Pedidos Pendentes" #: ../glade/liferea.ui.h:69 #, fuzzy msgid "Downloading Now" msgstr "A Transferir Agora" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "C_ancelar Todos" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Criar Recipiente de Notícias" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Nome do Recipiente de Notícias:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Sobre" #: ../glade/liferea.ui.h:74 #, fuzzy msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Copyright (c) 2003-2009\n" "A Equipa do Liferea\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "O Liferea é um agregador de notícias para GTK+" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Página Web do Liferea" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Procura Avançada" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "Pasta de _Procura..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Criar Subscrição de Motor de Busca" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "digite qualquer termo para procurar" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "_Número Máximo de Itens por Resultado:" #: ../glade/liferea.ui.h:84 #, 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. " #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Transferência / Pós-Processamento" #: ../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/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 tt-rss 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/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/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:4 #, fuzzy msgid "Feed Update Settings" msgstr "Actualização de Fonte" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Actualizar todas as subscrições." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "_Intervalo Por Omissão de Actualização de Fontes:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Fontes" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "Configurações de Exibição de Pastas" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "O_cultar itens já lidos." #: ../glade/prefs.ui.h:13 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Ícones das Fontes (Favicons)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "At_ualizar todos os favicons agora." #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Pastas" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "Reading Headlines" msgstr "títulos não lidos" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "Avançar pelos artigo_s rapidamente com:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "Web Integration" msgstr "Orientação" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Publicar Marcadores em" #: ../glade/prefs.ui.h:22 #, fuzzy msgid "Internal Browser Settings" msgstr "Configurações do Navegador Interno" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Abrir links na _janela do Liferea." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Desactivar Javascript." #: ../glade/prefs.ui.h:25 #, fuzzy msgid "_Enable browser plugins." msgstr "Configurações do Navegador Externo" #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "Configurações do Navegador Externo" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Abrir link em:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "Manual" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Navegador:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Navegador" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Notification Settings" msgstr "Configuração das Notificações" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Mostra uma janela de _popup com novos títulos." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Mostra um _ícone na área de notificação (bandeja do sistema)." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Mostrar _número de novos itens no ícone da bandeja." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "Terminar em vez de minimizar para o ícone da band_eja" #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Iniciar no ícone da área de notificação." #: ../glade/prefs.ui.h:39 #, fuzzy msgid "Toolbar Settings" msgstr "Etiquetas dos botões da barra de ferramentas:" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Ocultar barra de ferramentas." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Etiquetas dos botões da barra de ferramentas:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Interface Gráfica" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "Detectar _Automaticamente (GNOME ou ambiente)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "Sem Proxy" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "Configuração _Manual:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "_Porta do Proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "_Servidor Proxy:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Usar Au_tenticação de Proxy" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Se_nha do Proxy:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "_Utilizador Proxy:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "A Transferir Componente" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Transferir usando" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "Abrir Componente..." #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Componentes" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #~ 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" #, fuzzy #~ msgid "Synchronized with Nearby Hosts" #~ msgstr "Sincronizado com Máquinas Próximas" #~ 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 "_Delete" #~ msgstr "_Apagar" #~ 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://liferea.sf.net" #~ msgstr "http://liferea.sf.net" #~ 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.10.17/po/pt_BR.po000066400000000000000000002354321261475620100152710ustar00rootroot00000000000000# Brazilian Portuguese translation of liferea. # Copyright (C) 2005 Free Software Foundation, Inc. # Fernando Ike , 2005. # # Og Maciel , 2007, 2009. # # Leon Nardella , 2009. msgid "" msgstr "" "Project-Id-Version: liferea\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-01-25 23:54+0100\n" "PO-Revision-Date: 2009-07-18 18:05-0300\n" "Last-Translator: Leon Nardella \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" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../liferea.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Leitor de Fontes de Notícias" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Agregador de Notícias Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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 "" #: ../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/liferea.ui.h:29 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 "No comments yet." msgstr "Sem comentários." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "comentários" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Atualizando..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Atualizar" #: ../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:32 #, fuzzy msgid "Default Browser" msgstr "Navegador Padrão do GNOME" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Falha ao iniciar o navegador: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Iniciando: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Erro de Autorização" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Não foi possível criar o diretório de cache \"%s\"!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Hoje %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d de %b %Y" #: ../src/enclosure.c:197 #, 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:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Erro ao renomear %s para %s\n" #: ../src/export.c:406 ../src/export.c:408 #, 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:414 ../src/export.c:416 #, 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:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Lista de fontes de notícias importadas" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Importar Lista de Notícias" #: ../src/export.c:470 msgid "Import" msgstr "Importar" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 #, fuzzy msgid "OPML Files" msgstr "Escolher Arquivo OPML" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Erro ao exportar a lista de fontes de notícias!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Lista de fontes de notícias exportada!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Exportar lista de fontes de notícias" #: ../src/export.c:487 msgid "Export" msgstr "Exportar" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" atualizado..." #: ../src/feed.c:294 #, 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:404 #, fuzzy msgid "There are no unread items" msgstr "Não há artigo não lido " #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" "Iniciar o Liferea com a sua janela principal em ESTADO. ESTADO pode ser " "`exibido', `iconificado', ou `oculto'" #: ../src/main.c:164 msgid "STATE" msgstr "ESTADO" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Exibir informações de versão e sair" #: ../src/main.c:166 #, fuzzy msgid "Add a new subscription" msgstr "Nova Assinatura" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Imprimir mensagens de depuração de todos os tipos" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "Imprimir mensagens de depuração do manuseio de cache" #: ../src/main.c:173 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "Imprimir mensagens de depuração do manuseio de configurações" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Imprimir mensagens de depuração do manuseio do bando de dados" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "Imprimir mensagens de depuração para todas as funções de GUI" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Imprimir mensagens de depuração para toda a atividade de rede" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "Imprimir mensagens de depuração para todas as funções de análise" #: ../src/main.c:179 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Imprimir mensagens de depuração quando uma função demorar muito para ser " "processada" #: ../src/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "Imprimir mensagens de depuração ao entrar e sair de funções" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "" "Imprimir mensagens de depuração do processamento das atualizações de notícias" #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "Imprimir mensagens de depuração do manuseio de cache" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "Imprimir mensagens de depuração detalhadas" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "Imprimir mensagens de depuração para o tópico dado" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, o Leitor de Notícias para Linux" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "" "Para mais informações, por favor acesse http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "O pedido de atualização foi cancelado" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Não foi possível definir o host name de destino" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Não foi possível definir o host name proxy" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Não foi possível conectar ao servidor remoto" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Não foi possível conectar ao proxy" #: ../src/net.c:325 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:328 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:331 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, " "atualiz seu nome de usuário e senha na janela de propriedades dessa fonte de " "notícias." #: ../src/net.c:333 msgid "Payment required" msgstr "Pagamento necessário" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Você não ter permissão para acessar esse recurso" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Recurso Não Encontrado" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Método Não Permitido" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Não Aceito" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Autenticação de proxy necessária" #: ../src/net.c:339 msgid "Request timed out" msgstr "Tempo esgotado" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Esse fonte não existe. Por favor, remova a assinatura!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Ocorreu um erro interno no processo de atualização" #: ../src/net.c:347 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:349 msgid "Client Error" msgstr "Erro do Cliente" #: ../src/net.c:351 msgid "Server Error" msgstr "Erro do Servidor" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "A fonte de notícias \"%s\" já está sendo atualizada!" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Atualizando o ícone da fonte de notícias \"%s\"" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" não foi modificado desde a última atualização" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Atualizando \"%s\"" #: ../src/update.c:259 #, 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:282 #, c-format msgid "%s exited with status %d" msgstr "%s saiu com status %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Erro: Não foi possível abrir o arquivo \"%s\"" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Erro: Não há arquivo: \"%s\"" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Nova Pasta Virtual" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Houve. A saída foi truncada!]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d anexo" msgstr[1] "%d anexos" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Escolher Arquivo" #: ../src/ui/enclosure_list_view.c:438 #, fuzzy, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] "(%d novo)" msgstr[1] "(%d novos)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Tópicos de Ajuda" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Referência Rápida" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "FAQ" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea está online" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Trabalhar Offline" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea está offline" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Trabalhar Online" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "Assinaturas" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "A_tualizar Todos" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Atualizar todas as assinaturas" #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Ma_rcar Todos Como Lido" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Marca todos itens de todas assinaturas como lido." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Importar Lista de Fontes de Notícias..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Importa uma lista OPML de fonte de notícias." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Exportar Lista de Notícias..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Exporta a lista de fonte de notícias como OPML." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Sair" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Fonte de Notícias" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Remover _Todos Itens" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Remove todos os item selecionados da fonte de notícias atual." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "_Itens" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "_Avançar Para Item Não Lido" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "_Avançar Para Item Não Lido" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Ver" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "_Aumentar Tamanho do Texto" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Aumenta o tamanho do texto de exibição do item." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "_Diminuir Tamanho do Texto" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Diminui o tamanho do texto de exibição do item." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "Ferramentas" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "Monitor de Atualização" #: ../src/ui/liferea_shell.c:939 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" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Preferências" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Editar Preferências." #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "Pesqui_sar" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Procurar em Todas as Fontes..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Exibe o diálogo de pesquisa." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Ajuda" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Índice" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Veja ajuda para esta aplicação." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "R_eferência Rápida" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Exibir uma lista de atalhos do Liferea." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_FAQ" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Exibir o FAQ desta aplicação." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_Sobre" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Exibe o diálogo sobre esta aplicação." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "Visualização _Normal" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Define o modo de visualização para o modo de cliente de e-mail." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "Visualização Ampla" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Define o modo de visualização para usar três painéis verticais." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "Visualização _Combinada" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Define o modo de visualização para um modo com dois painéis." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "_Reduced Feed List" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Ocultar fontes de notícias sem itens não-lidos" #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "_Novas Assinaturas..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Adiciona uma nova assinatura à lista de fontes de notícias." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Nova _Pasta..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Adiciona uma pasta à lista de fontes de notícias." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Nova Pasta Virtual..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Adicionar uma nova pasta virtual à lista de fontes de notícias." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Nova Fo_nte..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Adicionar uma nova fonte de lista de fontes de notícias." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "_Novo Recipiente de Notícias..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Adiciona um novo recipiente de notícias." #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "_Marcar Itens Como Lidos" #: ../src/ui/liferea_shell.c:979 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" #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Atualizar" #: ../src/ui/liferea_shell.c:981 msgid "" "Updates the selected subscription or all subscriptions of the selected " "folder." msgstr "" "Atualiza a assinatura selecionada ou todas assinaturas da pasta selecionada. " #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "_Propriedades" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Abre o diálogo de propriedades para a assinatura selecionada." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "_Remover" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Remove as assinaturas selecionadas." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Alte_rar para Lido ou Não Lido" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Alterna o status de leitura do item selecionado." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Alternar Sinalizador do Item" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Alterna o sinalizador de status do item selecionado." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "R_emover" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Remove os itens selecionados." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "Abre o link do item no navegador configurado." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "_Abrir No Navegador" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Abre o link do item no navegador configurado." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Configurações do Navegador Externo" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Abre o link do item no navegador configurado." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "T_rabalhar Offline" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Esta opção permite desabilitar a atualização de assinaturas." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Leitor de Fontes de Notícias do Linux" #: ../src/ui/liferea_shell.c:1341 #, 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 "" "

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

O painel esquerdo contém uma lista " "com suas assinaturas. Para adicionar uma assinatura, selecione Fontes de " "Notícias -> Nova Assinatura. Para navegar pelas manchetes de uma fonte de " "notícias, selecione-a na lista de fontes de notícias e as manchetes serão " "carregadas no painel direito.

" #: ../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:205 #, fuzzy msgid "All Files" msgstr "Arquivo _Local" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Apagando entrada" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Você realmente deseja excluir \"%s\"?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Confirmar Exclusão" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea está em modo offline. Não é possível atualizar." #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "Abrir Link Em _Aba" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "_Abrir Link No Navegador" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "_Abrir Link No Navegador" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "_Salvar Link em %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_Copiar Localização do Link" #: ../src/ui/liferea_htmlview.c:639 #, fuzzy msgid "_Copy Image Location" msgstr "_Copiar Localização do Link" #: ../src/ui/liferea_htmlview.c:641 #, fuzzy msgid "S_ave Link As" msgstr "Salvar Como..." #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "_Assinar..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Sem título ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Manchetes" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Nenhum item foi selecionado" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Este item não possui um link específico" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Selecione uma fonte para excluir seus itens!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "Copiar para o Recipiente de Notícias" #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "_Salvar Link em %s" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "_Copiar Localização do Link" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "R_emover Item" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Abrir Componente..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Salvar Como..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "_Copiar Localização do Link" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "At_ualizar Todos" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "_Exibir Liferea" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "At_ualizar Pasta" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "_Marcar Todos Como Lidos" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "_Nova" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "Nova _Assinatura..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "Nova Fo_nte..." #: ../src/ui/popup_menu.c:329 #, fuzzy msgid "Sort Feeds" msgstr "Importar Lista de Notícias" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "GNOME padrão" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Texto abaixo dos ícones" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Texto ao lado dos ícones" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Somente ícones" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Somente texto" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minutos" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "horas" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dias" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Espaço" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Espaço" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Espaço" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "Visualização _Normal" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "Visualização Ampla" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "Visualização _Combinada" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Navegador padrão" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Janela existente" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Nova Janela" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Nova aba" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "" #: ../src/ui/preferences_dialog.c:685 #, fuzzy msgid "Terminate instead of minimizing to the messaging menu" msgstr "Finalizar invés de minimizar para o ícone da band_eja" #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Tipo" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Programa" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 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:155 msgid "Untitled" msgstr "" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d novo item" msgstr[1] "%d novos itens" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Não há novos itens" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Nenhum item não lido" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Fonte de notícias em formato Atom inválido: autor desconhecido" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d de %b %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Nova Assinatura" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "Falha ao efetuar login no Google Reader!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 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." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planeta, BlogRoll (lista de blogs), OPML" #: ../src/fl_sources/opml_source.c:326 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" #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Nenhum tipo de lista de fonte de notícias encontrado!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Tipo de Fonte" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source.c:363 #, 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 "" "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." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Esta fonte de notícias não existe mais!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Esta entrada de notícias não possui manchete" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Visita" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Abrir fonte de notícias" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Ma_rcar todos como lidos" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "" msgstr[1] "" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Atualização de Fonte de Notícias" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Mostrar detalhes" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autenticação" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Senha:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "Nome de usuário:" #: ../glade/auth.ui.h:6 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." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Senha" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "Nome de _Usuário (E-mail)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "visualização normal" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "visualização ampla" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Ver Manchetes" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "visualização combinada" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Manchetes" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Botão Online/Offline" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Propriedades da Assinatura" #: ../glade/liferea.ui.h:9 #, fuzzy msgid "Feed Name" msgstr "_Nome da Fonte de Notícias:" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "_Nome da Fonte de Notícias:" #: ../glade/liferea.ui.h:11 #, fuzzy msgid "Update Interval" msgstr "Atualizar Monitor" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Usar intervalo padrão de atualização." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_Intervalo de atualização específico de fonte de notícias de" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Não atualize esta fonte de notícias automaticamente." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Geral" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Fonte" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Tipo de Fonte:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Fonte:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Comando" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "Arquivo _Local" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Selecionar Arquivo..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Usar _filtro de conversão" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "_Converter _usando:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "Configuração pa_drão do cache" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "De_sabilitar Cache" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "Cache _Ilimitado" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "_Número de itens para salvar:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Pacote Comprimido" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Usar _autenticação HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "Não usar proxy para fazer _download" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Download" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "Download _automático de todos componentes desta fonte de notícias." #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Carregar automaticamente o _link do item no browser configurado quando " "selecionando artigos." #: ../glade/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorar fontes de _comentários para essa assinatura." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "_Forçar notificações pop-up para essa assinatura" #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "_Nunca fazer uma notificação pop-up para essa assinatura" #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Marcar itens baixados como lidos" #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Avançado" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Nova Pasta" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "N_ome da pasta:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Renomear" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Novo Nome:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Propriedades da Pasta Virtual" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "_Nome da Pesquisa:" #: ../glade/liferea.ui.h:54 #, fuzzy msgid "Find Items that meet the following criteria" msgstr "Encontre itens que atendam aos seguintes critérios" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "A_ny Rule Matches" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "_Todas as regras devem ser satisfeitas" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "Abrir Componente..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "Baixando um componente do tipo:" #: ../glade/liferea.ui.h:59 #, 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 o Liferea deve fazer com esse componente? Por favor, insira abaixo o " "comando que você deseja que seja executado. Os componentes baixados serão " "fornecidos como argumentos para esse comando:" #: ../glade/liferea.ui.h:60 msgid "_Browse" msgstr "_Navegar" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Faça isso automaticamente para arquivos assim de agora em diante." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Procurar em Todas as Fontes de Notícias" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "Pesqui_sar por:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Avançado..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Atualizar Monitor" #: ../glade/liferea.ui.h:68 #, fuzzy msgid "Pending Requests" msgstr "Requisições Pendentes" #: ../glade/liferea.ui.h:69 #, fuzzy msgid "Downloading Now" msgstr "Baixando Agora" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "C_ancelar Todos" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Criar Recipiente de Notícias" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Nome do Recipiente de Notícias:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Sobre" #: ../glade/liferea.ui.h:74 #, fuzzy msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Copyright (c) 2003-2009\n" "The Liferea Team\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea é um agregador de notícias para o GTK+" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Liferea Homepage" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Pesquisa Avançada" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "Pa_sta de Pesquisa..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Criar Fonte de Notícias de Motor de Pesquisas" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "digite qualquer frase para pesquisar" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "_Número Máximo de Itens por Resultado:" #: ../glade/liferea.ui.h:84 #, 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 assintatura 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. " #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Download / Processamento" #: ../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 feed 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/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 tt-rss account settings." msgstr "Por favor digite a configuração de sua conta no 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 _Usuário" #: ../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/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 padrão de itens por fonte de notícias para salvar:" #: ../glade/prefs.ui.h:4 #, fuzzy msgid "Feed Update Settings" msgstr "Atualização de Fonte de Notícias" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Atualizar todas as assinaturas" #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "_Intervalo Padrão de Atualização de Fontes de Notícias:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Fontes de Notícias" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "Configurações de Exibição de Pastas" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "O_cultar itens já lidos." #: ../glade/prefs.ui.h:13 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Ícones das Fontes de Notícias (Favicons)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "At_ualizar todos favicons agora." #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Pastas" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "Reading Headlines" msgstr "manchetes não lidas" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "Avançar pelos artigo_s rapidamente com:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "Web Integration" msgstr "Orientação" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Publicar Favoritos em" #: ../glade/prefs.ui.h:22 #, fuzzy msgid "Internal Browser Settings" msgstr "Configurações do Navegador Interno" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Abrir links na _janela do Liferea." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Desabilitar Javascript." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "_Habilitar plugins de browser" #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "Configurações do Navegador Externo" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Abrir link em:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "Manual" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Navegador:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Navegador" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Notification Settings" msgstr "Configuração de Notificações" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Exibe uma janela instantânea com novas manchetes." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Exibe um _icone na área de notificação (bandeja do sistema)." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Exibir _número de novos ítens no ícone da bandeja." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "Finalizar invés de minimizar para o ícone da band_eja" #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Ícone para iniciar na bandeja" #: ../glade/prefs.ui.h:39 #, fuzzy msgid "Toolbar Settings" msgstr "Rótulos dos botões da barra de ferramentas:" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Ocultar a barra de ferramentas" #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Rótulos dos botões da barra de ferramentas:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Interface Gráfica" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "Detectar _Automaticamente (GNOME ou ambiente)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "Sem Proxy" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "Configuração _Manual:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "_Porta do Proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "_Servidor Proxy:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Usar Au_tenticação de Proxy" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Se_nha do Proxy:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "_Usuário Proxy:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "Baixar Componente" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Download usando" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "Abrir Componente..." #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Componentes" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #~ 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 "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 "flag" #~ msgstr "sinalizar" #~ msgid "bookmark" #~ msgstr "favorito" #~ msgid "comments" #~ msgstr "comentários" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Download do componente FALHOU: \"%s\"" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Download do componente completo: \"%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 "" #~ "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!" #, fuzzy #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Download do componente FALHOU: \"%s\"" #, fuzzy #~ msgid "Download finished." #~ msgstr "_Download usando" #~ msgid "Choose download directory" #~ msgstr "Escolha o diretório de download" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Manual:\n" #~ "(%s para URL)" #~ msgid "_Save downloads in" #~ msgstr "_Salvar downloads em" #, fuzzy #~ msgid "Synchronized with Nearby Hosts" #~ msgstr "Sincronizado com Servidores Próximos" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "_Habilitar Sincronização de Rede Local" #~ msgid "_Service Name" #~ msgstr "Nome do _Serviço:" #~ msgid "Sync" #~ msgstr "Sincronizar" #~ msgid "Downloading Enclosure" #~ msgstr "Baixar Componente" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "_Passar a URL e não baixar o 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, seleciona a " #~ "próxima fonte de notícias com itens ainda não lidos." #~ msgid "Liferea Sync %s@%s" #~ msgstr "Liferea Sync %s@%s" #~ msgid "link cosmos" #~ msgstr "link cosmos" #~ 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 "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 "_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 "_Delete" #~ msgstr "_Excluir" #~ 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 "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 " " #~ 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 "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 "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 "%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://liferea.sf.net" #~ msgstr "http://liferea.sf.net" #~ 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.10.17/po/ro.po000066400000000000000000002446621261475620100147100ustar00rootroot00000000000000# 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: 2013-01-25 23:54+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.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Cititor fluxuri" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Cititor fluxuri Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 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 "No comments yet." msgstr "Nici un comentariu până acum." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Comentarii" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "În curs de actualizare..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Actualizează" #: ../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:32 #, fuzzy msgid "Default Browser" msgstr "Navigator implicit GNOME" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Comanda de navigare a eșuat: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Se pornește: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Eroare autorizare" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Nu s-a putut creat dosar cache „%s”!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 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:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%b %d %Y" #: ../src/enclosure.c:197 #, 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:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Eroare la redenumirea %s în %s\n" #: ../src/export.c:406 ../src/export.c:408 #, 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:414 ../src/export.c:416 #, 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:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Listă flux importat" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Importă listă flux" #: ../src/export.c:470 msgid "Import" msgstr "Importă" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 #, fuzzy msgid "OPML Files" msgstr "Alege fișier OPML" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Eroare la exportarea listei de fluxuri!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Lista de flux a fost exportată!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Exportă listă flux" #: ../src/export.c:487 msgid "Export" msgstr "Exportă" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "„%s” actualizat..." #: ../src/feed.c:294 #, 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:404 #, fuzzy msgid "There are no unread items" msgstr "Nu există elemente necitite " #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" "Pornește Liferea cu fereastră principală în STAREA. STAREA poate să fie " "„shown”, „iconified” sau „hidden”" #: ../src/main.c:164 msgid "STATE" msgstr "STARE" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Arată informația despre versiune și ieși" #: ../src/main.c:166 #, fuzzy msgid "Add a new subscription" msgstr "Înscriere nouă" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Afișează mesaje de notificare de toate tipurile" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "Afișează mesaje de depanare pentru gestionarea cacheului" #: ../src/main.c:173 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "Afișează mesaje de depanare pentru gestionarea configurației" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Afișează mesaje de depanare pentru gestionarea bazei de date" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "" "Afișează mesaje de depanare pentru toate funcțiile interfeței cu utilizator" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Afișează mesaje de depanare pentru toată activitatea de rețea" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "Afișează mesaje de depanare pentru toate funcțiile de analizare" #: ../src/main.c:179 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/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "Afișează mesaje de depanare la intrarea și ieșirea din funcții" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "" "Afișează mesaje de depanare pentru procesul de actualizare a fluxurilor" #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "Afișează mesaje de depanare pentru gestionarea cacheului" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "Afișează mesaje de depanare detaliate" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "Afișează mesaje de depanare pentru subiectul specificat" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, cititor de fluxuri" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "Pentru mai multe informații vizitați http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "Cererea de actualizare a fost anulată" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Nu s-a putut rezolva numele destinație" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Nu s-a putut rezolva numele proxyului" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Nu s-a putut conecta la calculatorul la distanță" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Nu s-a putut conecta la proxy" #: ../src/net.c:325 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:328 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:331 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:333 msgid "Payment required" msgstr "Necesită plată" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Nu aveți permisiunea de a accesa această resursă" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Nu au fost găsite resursele" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Metoda nu este acceptată" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Nu este acceptabil" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Autentificare proxy necesară" #: ../src/net.c:339 msgid "Request timed out" msgstr "Cererea a expirat" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Dus. Resursa nu există. Vă rugăm să vă dezabonați!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "S-a produs o eroare internă în procesul de actualizare" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Fluxul nu este disponibil: Redirecționare nesuportată cerută de server!" #: ../src/net.c:349 msgid "Client Error" msgstr "Eroare la client" #: ../src/net.c:351 msgid "Server Error" msgstr "Eroare la server" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Abonamentul „%s” deja se actualizează!" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Se actualizeaza favicon pentru „%s”" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "„%s” a fost modificat de la ultima actualizare." #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Se actualizează „%s”" #: ../src/update.c:259 #, 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:282 #, c-format msgid "%s exited with status %d" msgstr "%s a ieșit în starea %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Eroare: Nu s-a putut deschide fișierul „%s”!" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Eroare: Nu este nici un fișier „%s”" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Dosar nou de căutare" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Au existat mai multe erori. Ieșirea a fost trunchiată!]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, 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:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Alegere fișier" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, 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:330 #, 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:716 msgid "Help Topics" msgstr "Sumar pentru ajutor" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Referință rapidă" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "Întrebări frecvente" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea este conectat" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Lucru conectat" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea este conectat" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Lucru conectat" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Abonamente" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "_Actualizează toate" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Actualizează toate abonamentele." #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Ma_rchează toate ca citite" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Marchează ca citite toate elementele din toate abonamentele." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Import listă flux..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Importă o lista flux OPML." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Export listă flux..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Exportă lista de fluxuri ca OPML." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Ieșire" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Flux" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Elimină to_ate elementele" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Elimină toate elementele din fluxul selectat curent." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "_Element" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "_Următorul element necitit" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "_Următorul element necitit" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Vizualizare" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "Crește măr_imea textului" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Crește mărimea textului din elementul vizualizat." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "Sca_de mărimea textului" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Scade mărimea textului din elementul vizualizat." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "Ins_trumente" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "Monitor act_ualizare" #: ../src/ui/liferea_shell.c:939 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" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Preferințe" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Editare preferințe." #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "_Căutare" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Căută toate fluxurile..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Afișează dialogul de căutare." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Help" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Conținut" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Vizualizare ajutor pentru această aplicație." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "Referință ra_pidă" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Vizualizează o listă a tuturor scurtăturilor din Liferea." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "Întrebări _frecvente" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Vizualizează întrebările frecvente ale acestei aplicații" #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_Despre" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Afișează dialogul despre." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "Vizualizare _normală" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Definește modul de vizualizare la modul de vizualizare client email." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "Vizualizare _lată" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Definește modul de vizualizare pentru a folosi trei panouri verticale" #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "Vizualizare _combinată" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Definește mod vizualizare în modul cu 2 panouri." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "Listă _redusă fluxuri" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Ascunde fluxurile fără elemente necitite." #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "Abonament _nou..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Adaugă un abonament la lista de flux." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "_Dosar nou..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Adaugă un dosar la lista de flux." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Dosar de cău_tare nou..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Adaugă un nou dosar de căutare la lista de flux." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "_Sursă nouă..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Adaugă o nouă sursă de liste fluxuri." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "_Colecție știri nouă..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Adaugă o colecție de știri nouă." #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "_Marchează elementele ca citite" #: ../src/ui/liferea_shell.c:979 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." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "Act_ualizează" #: ../src/ui/liferea_shell.c:981 msgid "" "Updates the selected subscription or all subscriptions of the selected " "folder." msgstr "" "Actualizează abonamentele selectate sau toate abonamentele din dosarul " "selectat." #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "_Proprietăți" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Deschide dialogul de proprietăți pentru abonamentul selectat." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "Ște_rge" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Șterge abonamentul selectat." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Comută starea de _citire" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Comută starea de citire pentru elementele selectate." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Comută _fanion element" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Comută starea de citire pentru elementele selectate." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "_Elimină" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Elimină elementul selectat." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "Deschide legăturile din elemente în navigatorul configurat." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "_Lansează în navigator" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Deschide legăturile din elemente în navigatorul configurat." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Preferințe navigatorului extern" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Deschide legăturile din elemente în navigatorul configurat." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "_Mod deconectat" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Această opțiune vă permite să dezactivați actualizarea abonamentelor." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Cititor fluxuri Linux" #: ../src/ui/liferea_shell.c:1341 #, 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.

" #: ../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:205 #, fuzzy msgid "All Files" msgstr "Fișier _local" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Se șterge intrarea" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Doriți să ștergeți %s?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Confirmare ștergere" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea este în modul deconectat. Nu se pot face actualizări." #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "Deschide legătură în _tab" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "Deschide _legătură în navigator" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "Deschide _legătură în navigator" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "_Memorează legătura la %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_Copiază locația legăturii" #: ../src/ui/liferea_htmlview.c:639 #, fuzzy msgid "_Copy Image Location" msgstr "_Copiază locația legăturii" #: ../src/ui/liferea_htmlview.c:641 #, fuzzy msgid "S_ave Link As" msgstr "Salvează ca..." #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "_Abonare..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Fără titlu ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Data" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Titlul" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Nu a fost selectat nici un element" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Acest element nu are specificată o legătură!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Trebuie să alegeți un flux pentru ai șterge elementele!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "Copiază în colecție știri" #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "_Memorează legătura la %s" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "_Copiază locația legăturii" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "_Elimină element" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Deschide atașament..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Salvează ca..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "Copiază locația legăturii" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "Act_ualizează tot" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "_Afișează Liferea" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "Act_ualizare dosar" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "_Marchează tot ca citit" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "_Nou" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "A_bonament nou..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "Sursă n_ouă..." #: ../src/ui/popup_menu.c:329 #, fuzzy msgid "Sort Feeds" msgstr "Importă listă flux" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "Implicit GNOME" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Text sub iconițe" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Text lângă iconițe" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Doar iconițe" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Doar text" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minute" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "ore" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "zile" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Spațiu" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Spațiu" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Spațiu" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "Vizualizare _normală" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "Vizualizare _lată" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "Vizualizare _combinată" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Navigatorul implicit" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Fereastră existentă" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Fereastră nouă" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Tab nou" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "" #: ../src/ui/preferences_dialog.c:685 #, fuzzy msgid "Terminate instead of minimizing to the messaging menu" msgstr "Închid_e în loc de minimizare în zona de notificare" #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Tip" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Acest flux nu are nici un interval implicit de actualizare." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "Fără titlu" #: ../src/ui/ui_tray.c:221 #, c-format 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" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Nu sunt elemente noi" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Nici un element necitit" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Flux atom nevalid: autor necunoscut" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Abonament nou" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "Autentificare Google Reader eșuată!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 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." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:326 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ă." #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Nu s-a găsit tipul listei de fluxuri!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Tip sursă" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source.c:363 #, 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." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Acest flux nu mai există!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Această intrare de știre nu are subiect" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Vizitează" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Deschide flux" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Marchează toate ca citite" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Actualizare flux" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Arată detalii" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autentificare" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Parolă:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_Nume utilizator:" #: ../glade/auth.ui.h:6 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." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Parolă" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "N_ume utilizator (email)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "vizualizare normală" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "vizualizare lată" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Vizualizare titluri" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "vizualizare combinată" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Titluri" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Buton conectat/deconectat" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Proprietăți abonamente" #: ../glade/liferea.ui.h:9 #, fuzzy msgid "Feed Name" msgstr "_Nume flux:" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "_Nume flux:" #: ../glade/liferea.ui.h:11 #, fuzzy msgid "Update Interval" msgstr "Monitor actualizări" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "Folosește interval global de act_ualizare." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "Interval actualizare specific _flux de" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Nu actualiza automat acest flux." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Generale" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Sursa feedului" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Tip sursă:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Sursă:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Comandă" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "Fișier _local" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Alegere fișier..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Folosește _filtrul de conversie" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Con_vertește folosind:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "Configurări _implicite cache" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "De_zactivare cache" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "Cache _nelimitat" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "_Număr elemente salvate:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Arhivă" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Folosește _autenficare HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "Nu folosi proxy pentru _descărcări" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Descarcă" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "Descarcă _automat toate atașamentele acestui flux." #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "La selectarea elementelor, încarcă automat _legătura elementului în " "navigatorul configurat." #: ../glade/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Ignoră _comentariile fluxului pentru acest abonament." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "Forț_ează notificări pentru acest abonament." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "_Nu afișa niciodată notificări pentru acest abonament." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Marchează elementele descărcate ca citite." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Avansat" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Dosar nou" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "Nume _dosar:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Redenumește" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "Nume _nou:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Proprietăți dosar de căutare" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "_Nume căutare:" #: ../glade/liferea.ui.h:54 #, fuzzy msgid "Find Items that meet the following criteria" msgstr "Caută elemente ce îndeplinesc următoarele criterii" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "_Orice regulă se potrivește" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "To_ate regulile se potrivesc" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "Deschide atașament..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "Descărcare atașament de tipul:" #: ../glade/liferea.ui.h:59 #, 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Navighează" #: ../glade/liferea.ui.h:61 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/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Caută în toate fluxurile" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Caută după:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Avansat..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Monitor actualizări" #: ../glade/liferea.ui.h:68 #, fuzzy msgid "Pending Requests" msgstr "Cereri în așteptare" #: ../glade/liferea.ui.h:69 #, fuzzy msgid "Downloading Now" msgstr "Se descarcă acum" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "_Anulează tot" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Crează colecție știri" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Nume colecție știri:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Despre" #: ../glade/liferea.ui.h:74 #, fuzzy msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Drepturi de autor (c) 2003-2009\n" "Echipa Liferea\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea este un agregator de fluxuri pentru GTK+" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Pagina web Liferea" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Căutare avansată" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "_Dosar căutare..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Crează flux motor de căutare" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "introduceți orice șir doriți" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "_Numărul maxim de elemente în rezultat:" #: ../glade/liferea.ui.h:84 #, 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. " #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Descărcare / Postprocesare" #: ../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/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 tt-rss 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/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/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:4 #, fuzzy msgid "Feed Update Settings" msgstr "Actualizare flux" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Actualizează toate abonamentele." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "_Intervalul implicit de actualizare flux:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Fluxuri" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "Preferințe afișare dosar" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "Ascun_de elementele citite." #: ../glade/prefs.ui.h:13 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Iconițe fluxuri (Favicons)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "Act_ualizează acum toate faviconurile" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Dosare" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "Reading Headlines" msgstr "titluri necitite" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "Ră_sfoiește articolele cu:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "Web Integration" msgstr "Orientare" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Pune semne de carte la" #: ../glade/prefs.ui.h:22 #, fuzzy msgid "Internal Browser Settings" msgstr "Preferințele navigatorului intern" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Deschide legăturile în _fereastra din Liferea" #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Dezactivare JavaScript." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "Activ_ează modulele navigatorului." #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "Preferințe navigatorului extern" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Deschide legăturile în:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "Manual" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Navigator:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Navigator" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Notification Settings" msgstr "Preferințe notificare" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Afișează o fereastră _proeminentă cu noile titluri." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Afișează o _iconiță de stare în zona de notificare." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Afișează _numărul elementelor noi în iconița din zona de notificare" #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "Închid_e în loc de minimizare în zona de notificare" #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Pornește ca iconiță în zona de notificare." #: ../glade/prefs.ui.h:39 #, fuzzy msgid "Toolbar Settings" msgstr "Etichete _butoane bară de unelte:" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Ascunde bara de instrumente." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Etichete _butoane bară de unelte:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_Auto detectare (GNOME sau mediu de lucru)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "Fără _proxy" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "Configurări _manuale:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "_Port proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "_Gazdă proxy:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Folosește au_tentificare proxy" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Parolă pro_xy:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "N_ume utilizator proxy:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "Descărcare atașament" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Descarcă folosind" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "Deschide atașament..." #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Atașamente" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #~ 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" #, fuzzy #~ msgid "Synchronized with Nearby Hosts" #~ msgstr "" #~ "Sincronizat cu calculatoare din apropiere" #~ 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 "_Delete" #~ msgstr "Șt_erge" #~ 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://liferea.sf.net" #~ msgstr "http://liferea.sf.net" #~ 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 "Search all feeds." #~ msgstr "Caută în toate feedurile." #~ 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://liferea.sf.net/help/help" #~ msgstr "http://liferea.sf.net/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.10.17/po/ru.po000066400000000000000000002416141261475620100147100ustar00rootroot00000000000000# 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. # msgid "" msgstr "" "Project-Id-Version: liferea 1.7.x\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-05-20 18:33+0300\n" "PO-Revision-Date: 2013-05-29 23:44+0400\n" "Last-Translator: Leonid Selivanov \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.5\n" #: ../liferea.desktop.in.h:1 ../src/main.c:234 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Приложение для чтения новостей" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Приложение для чтения новостей Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 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 "No comments yet." msgstr "Комментариев пока нет." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Комментарии" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Обновление..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" 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:32 msgid "Default Browser" msgstr "Браузер по умолчанию" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Ошибка команды запуска браузера: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Запуск: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Ошибка авторизации:" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Невозможно создать каталог кэша \"%s\"!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Сегодня %k:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" — неверный конфигурационный файл типа вложения!" #: ../src/enclosure.c:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" "Не задано средство загрузки! Задайте его во вкладке «Вложения» меню " "Инструменты/Настройки." #: ../src/enclosure.c:306 #, 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:185 #, c-format msgid "Error renaming %s to %s\n" msgstr "Ошибка переименования %s в %s\n" #: ../src/export.c:414 ../src/export.c:416 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "Ошибка XML при чтении файла OPML! Невозможно импортировать \"%s\"!" #: ../src/export.c:422 ../src/export.c:424 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Документ пуст! OPML-документ \"%s\" не должен быть пустым при импортировании." #: ../src/export.c:445 ../src/export.c:447 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "" "OPML-документ \"%s\" не правилен! Liferea не может импортировать этот файл!" #: ../src/export.c:466 msgid "Imported feed list" msgstr "Импортированный список лент" #: ../src/export.c:478 msgid "Import Feed List" msgstr "Импорт списка лент" #: ../src/export.c:478 msgid "Import" msgstr "Импорт" #: ../src/export.c:478 ../src/export.c:495 ../src/fl_sources/opml_source.c:388 msgid "OPML Files" msgstr "Файлы OPML" #: ../src/export.c:486 msgid "Error while exporting feed list!" msgstr "Ошибка при экспортировании списка лент!" #: ../src/export.c:488 msgid "Feed List exported!" msgstr "Список лент экспортирован!" #: ../src/export.c:495 msgid "Export Feed List" msgstr "Экспорт списка лент" #: ../src/export.c:495 msgid "Export" msgstr "Экспорт" #: ../src/feed.c:254 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:283 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" обновлена..." #: ../src/feed.c:293 #, 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:404 msgid "There are no unread items" msgstr "Нет непрочитанных записей " #: ../src/main.c:163 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" "Запустить Liferea с основным окном в РЕЖИМЕ. РЕЖИМ может быть `shown', " "`iconified' или `hidden'" #: ../src/main.c:163 msgid "STATE" msgstr "РЕЖИМ" #: ../src/main.c:164 msgid "Show version information and exit" msgstr "Показать информацию о версии и выйти" #: ../src/main.c:165 msgid "Add a new subscription" msgstr "Добавить новую подписку" #: ../src/main.c:165 msgid "uri" msgstr "адрес" #: ../src/main.c:170 msgid "Print debugging messages of all types" msgstr "Выводить отладочную информацию всех типов" #: ../src/main.c:171 msgid "Print debugging messages for the cache handling" msgstr "Выводить отладочную информацию о обработке кэша" #: ../src/main.c:172 msgid "Print debugging messages for the configuration handling" msgstr "Выводить отладочную информацию о обработке конфигурации" #: ../src/main.c:173 msgid "Print debugging messages of the database handling" msgstr "Выводить отладочную информацию о обработке базы данных" #: ../src/main.c:174 msgid "Print debugging messages of all GUI functions" msgstr "Выводить отладочную информацию о всех функциях графического интерфейса" #: ../src/main.c:175 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-" "вывод, он также будет сохранять генерируемый HTML в ~/.cache/liferea/output." "xhtml" #: ../src/main.c:176 msgid "Print debugging messages of all network activity" msgstr "Выводить отладочную информацию о всей сетевой активности" #: ../src/main.c:177 msgid "Print debugging messages of all parsing functions" msgstr "Выводить отладочную информацию о всех функциях парсинга" #: ../src/main.c:178 msgid "Print debugging messages when a function takes too long to process" msgstr "" "Выводить отладочную информацию когда выполнение функции занимает очень " "долгое время" #: ../src/main.c:179 msgid "Print debugging messages when entering/leaving functions" msgstr "Выводить отладочную информацию о начале/завершении исполнения функций" #: ../src/main.c:180 msgid "Print debugging messages of the feed update processing" msgstr "Выводить отладочную информацию о процессе обновления лент" #: ../src/main.c:181 msgid "Print debugging messages of the search folder matching" msgstr "Выводить отладочную информацию о формировании поисковой папки" #: ../src/main.c:182 msgid "Print verbose debugging messages" msgstr "Выводить подробную отладочную информацию" #: ../src/main.c:193 ../src/main.c:194 msgid "Print debugging messages for the given topic" msgstr "Выводить отладочную информацию для данной темы" #: ../src/main.c:201 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea — приложение чтения новостей для Linux" #: ../src/main.c:202 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "" "За дополнительной информацией обратитесь к http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "Обновление было отменено" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Невозможно разрешить имя хоста назначения" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Невозможно разрешить имя хоста прокси" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Невозможно соединиться с удалённым узлом" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Невозможно соединиться с proxy-сервером" #: ../src/net.c:325 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" "Произошла сетевая ошибка или соединение неожиданно прервано удалённым " "сервером" #. http 3xx redirection #: ../src/net.c:328 msgid "The resource moved permanently to a new location" msgstr "Ресурс переехал на новое место расположения" #. http 4xx client error #: ../src/net.c:331 msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Вам нужно авторизоваться, чтобы загрузить эту ленту. Пожалуйста, проверьте " "ваше имя пользователя и пароль в свойствах ленты" #: ../src/net.c:333 msgid "Payment required" msgstr "Необходима оплата" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "У Вас нет прав на доступ к этому ресурсу" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Ресурс не найден" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Метод не поддерживается" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Не приемлемо" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Требуется авторизация на прокси" #: ../src/net.c:339 msgid "Request timed out" msgstr "Превышено время ожидания запроса" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Пусто. Ресурс не существует. Пожалуйста, отмените подписку!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "В процессе обновления произошла внутренняя ошибка" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Лента не доступна: Сервер запросил не поддерживаемое перенаправление!" #: ../src/net.c:349 msgid "Client Error" msgstr "Ошибка клиента" #: ../src/net.c:351 msgid "Server Error" msgstr "Ошибка сервера" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Подписка \"%s\" уже обновлена!" #: ../src/subscription.c:110 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "Подписка \"%s\" была остановлена. Liferea не будет больше её обновлять!" #: ../src/subscription.c:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Обновление иконки для \"%s\"" #: ../src/subscription.c:193 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "" "При чтении этой подписки обнаружены проблемы. Пожалуйста, проверьте URL и " "вывод консоли." #: ../src/subscription.c:211 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "Адрес \"%s\" изменился и был обновлен" #: ../src/subscription.c:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "Лента \"%s\" остановлена. Liferea не будет больше её обновлять!" #: ../src/subscription.c:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" не изменилась с момента последнего обновления" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Обновление \"%s\"" #: ../src/update.c:258 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Ошибка при открытии временного файла %s используемого при фильтрации!" #: ../src/update.c:281 #, c-format msgid "%s exited with status %d" msgstr "%s завершено с кодом %d" #: ../src/update.c:287 ../src/update.c:288 ../src/update.c:400 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Ошибка: Невозможно открыть канал \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:426 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Ошибка: Невозможно открыть файл \"%s\"" #: ../src/update.c:432 #, 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d вложение" msgstr[1] "%d вложения" msgstr[2] "%d вложений" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Выберите файл" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d новое)" msgstr[1] " (%d новых)" msgstr[2] " (%d новых)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Содержание" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Краткое руководство" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "ЧаВо" #: ../src/ui/liferea_shell.c:795 msgid "Liferea is now online" msgstr "Liferea сейчас подключена" #: ../src/ui/liferea_shell.c:797 msgid "Work Offline" msgstr "Работать автономно" #: ../src/ui/liferea_shell.c:799 msgid "Liferea is now offline" msgstr "Liferea сейчас отключена" #: ../src/ui/liferea_shell.c:801 msgid "Work Online" msgstr "Подключиться" #: ../src/ui/liferea_shell.c:897 msgid "_Subscriptions" msgstr "_Подписки" #: ../src/ui/liferea_shell.c:898 msgid "Update _All" msgstr "Обновить в_сё" #: ../src/ui/liferea_shell.c:898 msgid "Updates all subscriptions." msgstr "Обновляет все подписки." #: ../src/ui/liferea_shell.c:900 msgid "Mark All As _Read" msgstr "Отметить всё как _прочитанное" #: ../src/ui/liferea_shell.c:900 msgid "Marks read every item of every subscription." msgstr "Отмечает как прочитанное каждую запись в каждой подписке." #: ../src/ui/liferea_shell.c:902 msgid "_Import Feed List..." msgstr "_Импортировать список лент..." #: ../src/ui/liferea_shell.c:902 msgid "Imports an OPML feed list." msgstr "Импортирует какой-либо OPML список лент." #: ../src/ui/liferea_shell.c:903 msgid "_Export Feed List..." msgstr "_Экспортировать список лент..." #: ../src/ui/liferea_shell.c:903 msgid "Exports the feed list as OPML." msgstr "Экспортирует список лент в OPML." #: ../src/ui/liferea_shell.c:904 msgid "_Quit" msgstr "_Выход" #: ../src/ui/liferea_shell.c:906 msgid "_Feed" msgstr "_Лента" #: ../src/ui/liferea_shell.c:907 msgid "Remove _All Items" msgstr "Удалить все _записи" #: ../src/ui/liferea_shell.c:907 msgid "Removes all items of the currently selected feed." msgstr "Удаляет все записи выделенной ленты." #: ../src/ui/liferea_shell.c:910 msgid "_Item" msgstr "_Запись" #: ../src/ui/liferea_shell.c:911 msgid "Previous Item" msgstr "Предыдущая запись" #: ../src/ui/liferea_shell.c:913 msgid "Next Item" msgstr "Следующая запись" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:918 msgid "_Next Unread Item" msgstr "_Следующая непрочитанная" #: ../src/ui/liferea_shell.c:921 msgid "_View" msgstr "_Вид" #: ../src/ui/liferea_shell.c:922 ../src/ui/liferea_htmlview.c:653 msgid "_Increase Text Size" msgstr "У_величить шрифт" #: ../src/ui/liferea_shell.c:922 msgid "Increases the text size of the item view." msgstr "Увеличивает размер шрифта в тексте записи." #: ../src/ui/liferea_shell.c:924 ../src/ui/liferea_htmlview.c:654 msgid "_Decrease Text Size" msgstr "У_меньшить шрифт" #: ../src/ui/liferea_shell.c:924 msgid "Decreases the text size of the item view." msgstr "Уменьшает размер шрифта в тексте записи." #: ../src/ui/liferea_shell.c:927 msgid "_Tools" msgstr "_Инструменты" #: ../src/ui/liferea_shell.c:928 msgid "_Update Monitor" msgstr "_Монитор обновлений" #: ../src/ui/liferea_shell.c:928 msgid "Show a list of all feeds currently in the update queue" msgstr "Отображает список всех лент, ожидающих обновления" #: ../src/ui/liferea_shell.c:930 msgid "_Preferences" msgstr "_Настройки" #: ../src/ui/liferea_shell.c:930 msgid "Edit Preferences." msgstr "Изменить настройки." #: ../src/ui/liferea_shell.c:933 msgid "S_earch" msgstr "П_оиск" #: ../src/ui/liferea_shell.c:934 msgid "Search All Feeds..." msgstr "Поиск по всем лентам..." #: ../src/ui/liferea_shell.c:934 msgid "Show the search dialog." msgstr "Показать диалог поиска." #: ../src/ui/liferea_shell.c:936 msgid "_Help" msgstr "_Справка" #: ../src/ui/liferea_shell.c:937 msgid "_Contents" msgstr "_Содержание" #: ../src/ui/liferea_shell.c:937 msgid "View help for this application." msgstr "Открыть справку для этого приложения." #: ../src/ui/liferea_shell.c:938 msgid "_Quick Reference" msgstr "_Краткое руководство" #: ../src/ui/liferea_shell.c:938 msgid "View a list of all Liferea shortcuts." msgstr "Посмотреть список сочетаний клавиш Liferea." #: ../src/ui/liferea_shell.c:940 msgid "_FAQ" msgstr "_ЧаВо" #: ../src/ui/liferea_shell.c:940 msgid "View the FAQ for this application." msgstr "Часто задаваемые вопросы." #: ../src/ui/liferea_shell.c:941 msgid "_About" msgstr "_О программе" #: ../src/ui/liferea_shell.c:941 msgid "Shows an about dialog." msgstr "Отображает диалог \"О программе\"" #: ../src/ui/liferea_shell.c:945 msgid "_Normal View" msgstr "_Обычный вид" #: ../src/ui/liferea_shell.c:945 msgid "Set view mode to mail client mode." msgstr "Вид обычного почтового клиента." #: ../src/ui/liferea_shell.c:947 msgid "_Wide View" msgstr "_Широкий вид" #: ../src/ui/liferea_shell.c:947 msgid "Set view mode to use three vertical panes." msgstr "Вид с тремя вертикальными панелями." #: ../src/ui/liferea_shell.c:949 msgid "_Combined View" msgstr "_Сводный вид" #: ../src/ui/liferea_shell.c:949 msgid "Set view mode to two pane mode." msgstr "Установить двухпанельный вид." #: ../src/ui/liferea_shell.c:954 msgid "_Reduced Feed List" msgstr "Со_кращённый список лент" #: ../src/ui/liferea_shell.c:954 msgid "Hide feeds with no unread items." msgstr "Скрывает ленты, где нет непрочитанных статей." #: ../src/ui/liferea_shell.c:959 msgid "_New Subscription..." msgstr "Новая по_дписка..." #: ../src/ui/liferea_shell.c:959 msgid "Adds a subscription to the feed list." msgstr "Добавляет подписку в список лент." #: ../src/ui/liferea_shell.c:961 ../src/ui/popup_menu.c:314 msgid "New _Folder..." msgstr "Новая пап_ка" #: ../src/ui/liferea_shell.c:961 msgid "Adds a folder to the feed list." msgstr "Добавляет папку в список лент." #: ../src/ui/liferea_shell.c:962 ../src/ui/popup_menu.c:317 msgid "New S_earch Folder..." msgstr "Новая папка п_оиска..." #: ../src/ui/liferea_shell.c:962 msgid "Adds a new search folder to the feed list." msgstr "Добавляет новую поисковую папку в список лент." #: ../src/ui/liferea_shell.c:963 msgid "New _Source..." msgstr "Новый ис_точник лент..." #: ../src/ui/liferea_shell.c:963 msgid "Adds a new feed list source." msgstr "Добавляет новый источник списка лент." #: ../src/ui/liferea_shell.c:964 ../src/ui/popup_menu.c:319 msgid "New _News Bin..." msgstr "Новый _ящик новостей..." #: ../src/ui/liferea_shell.c:964 msgid "Adds a new news bin." msgstr "Добавляет новый ящик новостей." #: ../src/ui/liferea_shell.c:968 msgid "_Mark Items Read" msgstr "Отметить как _прочитанные" #: ../src/ui/liferea_shell.c:968 msgid "" "Marks all items of the selected feed list node / in the item list as read." msgstr "" "Отмечает все записи выбранной ленты или всех лент выбранной папки как " "прочитанные." #: ../src/ui/liferea_shell.c:970 ../src/ui/popup_menu.c:294 msgid "_Update" msgstr "_Обновить" #: ../src/ui/liferea_shell.c:970 msgid "" "Updates the selected subscription or all subscriptions of the selected " "folder." msgstr "Обновляет выбранные подписки или все подписки в выбранной папке." #: ../src/ui/liferea_shell.c:975 msgid "_Properties" msgstr "_Свойства" #: ../src/ui/liferea_shell.c:975 msgid "Opens the property dialog for the selected subscription." msgstr "Открывает диалог свойств выбранной подписки." #: ../src/ui/liferea_shell.c:976 msgid "_Remove" msgstr "_Удалить" #: ../src/ui/liferea_shell.c:976 msgid "Removes the selected subscription." msgstr "Удаляет выбранные подписки." #: ../src/ui/liferea_shell.c:980 ../src/ui/popup_menu.c:163 msgid "Toggle _Read Status" msgstr "_Переключить статус прочтения" #: ../src/ui/liferea_shell.c:980 msgid "Toggles the read status of the selected item." msgstr "Переключает статус прочтения выбранной записи." #: ../src/ui/liferea_shell.c:982 ../src/ui/popup_menu.c:164 msgid "Toggle Item _Flag" msgstr "Переключить _важность" #: ../src/ui/liferea_shell.c:982 msgid "Toggles the flag status of the selected item." msgstr "Переключает важность выбранной записи." #: ../src/ui/liferea_shell.c:984 msgid "R_emove" msgstr "_Удалить" #: ../src/ui/liferea_shell.c:984 msgid "Removes the selected item." msgstr "Удаляет выбранную запись." #: ../src/ui/liferea_shell.c:986 ../src/ui/popup_menu.c:127 msgid "Open In _Tab" msgstr "Открыть во _вкладке" #: ../src/ui/liferea_shell.c:986 msgid "Launches the item's link in a new Liferea browser tab." msgstr "Открывает ссылку на запись в новой вкладке браузера Liferea." #: ../src/ui/liferea_shell.c:988 ../src/ui/popup_menu.c:128 msgid "_Open In Browser" msgstr "_Открыть в браузере" #: ../src/ui/liferea_shell.c:988 msgid "Launches the item's link in the Liferea item pane." msgstr "Открывает ссылку на запись в панели записей Liferea." #: ../src/ui/liferea_shell.c:990 ../src/ui/popup_menu.c:129 msgid "Open In _External Browser" msgstr "Открыть во внешнем _браузере" #: ../src/ui/liferea_shell.c:990 msgid "Launches the item's link in the configured external browser." msgstr "Открывает ссылку на новость в заданном внешнем браузере." #: ../src/ui/liferea_shell.c:995 ../src/ui/popup_menu.c:193 msgid "_Work Offline" msgstr "Работать _автономно" #: ../src/ui/liferea_shell.c:995 msgid "This option allows you to disable subscription updating." msgstr "Эта опция позволяет отключить обновление подписки." #: ../src/ui/liferea_shell.c:997 msgid "_Fullscreen" msgstr "_Полноэкранный режим" #: ../src/ui/liferea_shell.c:997 msgid "Browse at full screen" msgstr "Режим просмотра на весь экран" #: ../src/ui/liferea_shell.c:1328 msgid "Liferea - Linux Feed Reader" msgstr "Liferea — читалка новостей для Linux" #: ../src/ui/liferea_shell.c:1330 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 и выбирая " "«Подписаться»

" #: ../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:211 msgid "All Files" msgstr "Все файлы" #: ../src/ui/feed_list_view.c:338 msgid "Deleting entry" msgstr "Удаление записи" #: ../src/ui/feed_list_view.c:339 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Вы уверены, что хотите удалить \"%s\" и её содержимое?" #: ../src/ui/feed_list_view.c:339 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Вы уверены, что хотите удалить \"%s\"?" #: ../src/ui/feed_list_view.c:351 msgid "Deletion Confirmation" msgstr "Подтверждение удаления" #: ../src/ui/feed_list_view.c:382 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea в автономном режиме. Обновление невозможно." #: ../src/ui/liferea_htmlview.c:624 msgid "Open Link In _Tab" msgstr "Открыть ссылку во _вкладке" #: ../src/ui/liferea_htmlview.c:625 msgid "_Open Link In Browser" msgstr "_Открыть ссылку в браузере" #: ../src/ui/liferea_htmlview.c:626 msgid "_Open Link In External Browser" msgstr "Открыть ссылку во внешнем _браузере" #: ../src/ui/liferea_htmlview.c:629 #, c-format msgid "_Bookmark Link at %s" msgstr "Создать _закладку на %s" #: ../src/ui/liferea_htmlview.c:633 msgid "_Copy Link Location" msgstr "_Копировать адрес ссылки" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Image Location" msgstr "Копировать адрес _изображения" #: ../src/ui/liferea_htmlview.c:638 msgid "S_ave Link As" msgstr "_Сохранить объект как" #: ../src/ui/liferea_htmlview.c:640 msgid "S_ave Image As" msgstr "Сохранить изо_бражение как" #: ../src/ui/liferea_htmlview.c:643 msgid "_Subscribe..." msgstr "_Подписаться..." #: ../src/ui/item_list_view.c:398 msgid "*** No title ***" msgstr "*** Без заголовка ***" #: ../src/ui/item_list_view.c:661 msgid "Date" msgstr "Дата" #: ../src/ui/item_list_view.c:675 msgid "Headline" msgstr "Заголовок" #: ../src/ui/item_list_view.c:777 ../src/ui/item_list_view.c:798 #: ../src/ui/item_list_view.c:819 ../src/ui/item_list_view.c:883 #: ../src/ui/item_list_view.c:968 ../src/ui/item_list_view.c:983 msgid "No item has been selected" msgstr "Не выбрана запись" #: ../src/ui/item_list_view.c:794 ../src/ui/item_list_view.c:815 msgid "This item has no link specified!" msgstr "Для этой записи не указана ссылка!" #: ../src/ui/item_list_view.c:871 msgid "You must select a feed to delete its items!" msgstr "Вы должны выбрать ленту для удаления её записей!" #: ../src/ui/popup_menu.c:141 msgid "Copy to News Bin" msgstr "Копировать в ящик новостей" #: ../src/ui/popup_menu.c:155 #, c-format msgid "_Bookmark at %s" msgstr "Создать _закладку на %s" #: ../src/ui/popup_menu.c:159 msgid "Copy Item _Location" msgstr "Копировать адрес _записи" #: ../src/ui/popup_menu.c:165 msgid "R_emove Item" msgstr "_Удалить запись" #: ../src/ui/popup_menu.c:178 msgid "Open Enclosure..." msgstr "Открыть вложение..." #: ../src/ui/popup_menu.c:179 msgid "Save As..." msgstr "Сохранить как..." #: ../src/ui/popup_menu.c:180 msgid "Copy Link Location" msgstr "Копировать адрес ссылки" #: ../src/ui/popup_menu.c:194 msgid "_Update All" msgstr "_Обновить всё" #: ../src/ui/popup_menu.c:199 msgid "_Show Liferea" msgstr "Показать _Liferea" #: ../src/ui/popup_menu.c:296 msgid "_Update Folder" msgstr "_Обновить папку" #: ../src/ui/popup_menu.c:298 msgid "_Mark All As Read" msgstr "Отметить все как _прочитанные" #: ../src/ui/popup_menu.c:308 msgid "_New" msgstr "_Новая" #: ../src/ui/popup_menu.c:311 msgid "New _Subscription..." msgstr "Новая _подписка..." #: ../src/ui/popup_menu.c:318 msgid "New S_ource..." msgstr "Новый _источник..." #: ../src/ui/popup_menu.c:327 msgid "Sort Feeds" msgstr "Сортировать ленты" #: ../src/ui/popup_menu.c:333 msgid "_Rebuild" msgstr "_Перестроить" #: ../src/ui/preferences_dialog.c:87 msgid "GNOME default" msgstr "По умолчанию в GNOME" #: ../src/ui/preferences_dialog.c:88 msgid "Text below icons" msgstr "Текст под значками" #: ../src/ui/preferences_dialog.c:89 msgid "Text beside icons" msgstr "Текст рядом со значками" #: ../src/ui/preferences_dialog.c:90 msgid "Icons only" msgstr "Только значки" #: ../src/ui/preferences_dialog.c:91 msgid "Text only" msgstr "Только текст" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "минут" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "часов" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "дней" #: ../src/ui/preferences_dialog.c:106 msgid "Space" msgstr "Пробел" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Пробел" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Пробел" #: ../src/ui/preferences_dialog.c:113 msgid "Normal View" msgstr "_Обычный вид" #: ../src/ui/preferences_dialog.c:114 msgid "Wide View" msgstr "_Широкий вид" #: ../src/ui/preferences_dialog.c:115 msgid "Combined View" msgstr "_Сводный вид" #: ../src/ui/preferences_dialog.c:500 msgid "Manual" msgstr "Задать вручную" #: ../src/ui/preferences_dialog.c:515 msgid "Browser default" msgstr "Как указано в браузере" #: ../src/ui/preferences_dialog.c:518 msgid "Existing window" msgstr "В существующем окне" #: ../src/ui/preferences_dialog.c:521 msgid "New window" msgstr "В новом окне" #: ../src/ui/preferences_dialog.c:524 msgid "New tab" msgstr "В новой вкладке" #: ../src/ui/preferences_dialog.c:683 msgid "Integrate with the messaging menu (indicator)" msgstr "Интегрировать с меню (индикатором) сообщений" #: ../src/ui/preferences_dialog.c:686 msgid "Terminate instead of minimizing to the messaging menu" msgstr "Закрыть вместо сворачивания в меню сообщений" #: ../src/ui/preferences_dialog.c:689 msgid "Start minimized to the messaging menu" msgstr "При запуске свернуть в меню сообщений" #: ../src/ui/preferences_dialog.c:789 msgid "Type" msgstr "Тип" #: ../src/ui/preferences_dialog.c:792 msgid "Program" msgstr "Программа" #: ../src/ui/ui_node.c:123 msgid "(Empty)" msgstr "(Пусто)" #: ../src/ui/ui_node.c:320 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Перестроение" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Для этой ленты не установлен интервал обновления по умолчанию." #: ../src/ui/browser_tabs.c:153 msgid "Untitled" msgstr "Без названия" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d новая запись" msgstr[1] "%d новые записи" msgstr[2] "%d новых записей" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Нет новых записей" #: ../src/ui/ui_tray.c:228 #, c-format 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 непрочитанных записей" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Нет непрочитанных записей" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Веб-сайт" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Некорректная лента Atom: автор не указан" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:273 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Новая подписка" #: ../src/fl_sources/google_source.c:115 msgid "Google Reader login failed!" msgstr "Авторизация в Google Reader не удалась!" #: ../src/fl_sources/google_source.c:382 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:383 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 " "предоставит ваши подписки и будет синхронизировать ваши списки лент и списки " "чтения." #: ../src/fl_sources/opml_source.c:326 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:327 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" #: ../src/fl_sources/opml_source.c:388 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:237 msgid "No feed list source types found!" msgstr "Типы источников лент не найдены!" #: ../src/fl_sources/node_source.c:267 msgid "Source Type" msgstr "Тип источника" #: ../src/fl_sources/ttrss_source.c:360 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:361 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 и будет синхронизировать ваши " "списки лент и списки чтения." #: ../src/fl_sources/ttrss_source_feed.c:119 msgid "Could not parse JSON returned by tt-rss API!" msgstr "Не удалось проанализировать JSON возвращённый tt-rss API!" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Эта лента более не существует!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Заголовок новости отсутствует" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Посетить" #: ../src/notification/libnotify.c:167 ../src/notification/libnotify.c:263 msgid "Open feed" msgstr "Открыть ленту" #: ../src/notification/libnotify.c:170 ../src/notification/libnotify.c:266 msgid "Mark all as read" msgstr "Отметить все прочитанным" #: ../src/notification/libnotify.c:247 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "%s%d обновление" msgstr[1] "%s%d обновления" msgstr[2] "%s%d обновлений" #: ../src/notification/libnotify.c:249 msgid "Feed Update" msgstr "Обновление ленты" #: ../src/notification/libnotify.c:260 msgid "Show details" msgstr "Показать подробности" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Авторизация" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Пароль:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "Имя _пользователя:" #: ../glade/auth.ui.h:6 msgid "" "Note: The username and password will be saved to your Liferea feedlist " "file without using encryption." msgstr "" "Примечание: Имя пользователя и пароль будут сохранены в файл списка лент " "Liferea в не зашифрованном виде." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Пароль" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "_Имя пользователя (email)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "обычный вид" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "широкий вид" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Просмотр заголовков" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "сводный вид" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Заголовки" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Кнопка «В сети»/«Автономная работа»" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Свойства подписки" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Название ленты" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "Название _ленты:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "Интервал обновления" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "Использовать _общий по умолчанию интервал обновления." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_Интервал обновления ленты" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Не обновлять эту ленту автоматически." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Предоставитель ленты рекомендует интервал обновления в %d минут." #: ../glade/liferea.ui.h:18 msgid "General" msgstr "Основные" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Источник ленты" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Тип источника:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Источник:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Команда" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Локальный файл" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Выбрать файл..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Использовать _фильтр преобразования" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Преобразовать ис_пользуя:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "Использовать настройки по _умолчанию" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Ничего не сохранять" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Сохранять все записи" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "_Количество сохраняемых записей:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Архив" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Использовать HTTP-_авторизацию" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "_Не использовать прокси для загрузки" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Загрузка" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "_Автоматически получать все вложения этой ленты." #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "При выборе _заголовка автоматически открывать ссылку на новость во " "встроенном браузере." #: ../glade/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "_Игнорировать ленты комментариев для этой подписки." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "Обеспечить появление всплывающих _уведомлений для этой подписки." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "_Не показывать всплывающих уведомлений для этой подписки." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "Отметить загруженные записи как прочитанные." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Дополнительно" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Новая папка" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "_Имя папки:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Переименование" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Новое название:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Свойства поисковой папки" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "_Название поиска:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "Найти записи, которые удовлетворяют следующим критериям" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "_Любое условие соответствует" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "_Все условия должны соответствовать" #: ../glade/liferea.ui.h:57 msgid "Open Enclosure" msgstr "Открыть вложение" #: ../glade/liferea.ui.h:58 msgid "Open an enclosure of type:" msgstr "Открыть вложение следующего типа:" #: ../glade/liferea.ui.h:59 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Обзор" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Выполнять это автоматически для вложений как это." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Поиск по всем лентам" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Искать:" #: ../glade/liferea.ui.h:64 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Введите строку, которую Liferea будет искать в заголовке или теле записи." #: ../glade/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Расширенный..." #: ../glade/liferea.ui.h:66 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Начинает поиск заданного текста во всех лентах. Результаты поиск будут " "отображены в списке записей." #: ../glade/liferea.ui.h:67 msgid "Update Monitor" msgstr "Монитор обновлений" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "В очереди" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "Получение" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "_Отменить всё" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Создать ящик новостей" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Название ящика новостей:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "О программе" #: ../glade/liferea.ui.h:74 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea — агрегатор новостей для GTK+" #: ../glade/liferea.ui.h:75 msgid "Liferea Homepage" msgstr "Домашняя страница Liferea" #: ../glade/liferea.ui.h:76 msgid "Advanced Search" msgstr "Расширенный поиск" #: ../glade/liferea.ui.h:77 msgid "_Search Folder..." msgstr "_Поисковая папка..." #: ../glade/liferea.ui.h:78 msgid "Create Search Engine Feed" msgstr "Создать поисковую ленту" #: ../glade/liferea.ui.h:79 msgid "enter any search string you want" msgstr "введите любую строку для поиска" #: ../glade/liferea.ui.h:80 msgid "Maximal _Number Of Result Items:" msgstr "Максимальное _количество результатов:" #: ../glade/liferea.ui.h:81 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 создаст подписку на ленту с результатами поиска по " "вашему запросу. Вы можете сохранить эту ленту и обновлять ее аналогично " "обычным лентам. " #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" 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/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 tt-rss account settings." msgstr "Пожалуйста, введите настройки вашего аккаунта tt-rss." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "Адрес _сервера" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" 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/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:4 msgid "Feed Update Settings" msgstr "Настройки обновления ленты" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "_Обновить все подписки при запуске." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "_Интервал обновления лент по умолчанию:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Ленты" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "Настройки отображения папки" #: ../glade/prefs.ui.h:11 msgid "_Show the items of all child feeds when a folder is selected." msgstr "_Показывать записи всех вложенных лент при выборе папки." #: ../glade/prefs.ui.h:12 msgid "_Hide read items." msgstr "_Скрывать прочитанные записи." #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Иконки лент (Favicons)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Обновить все иконки сейчас" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Папки" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Чтение заголовков" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "Переключение _между статьями по:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "Режим отображения по-_умолчанию:" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Интеграция с веб-сервисами" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Опубликовать закладки в" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Настройки встроенного браузера" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Открывать ссылки в _окне Liferea." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "Отключить Java_script." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "Задействовать _расширения браузера." #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "Настройки внешнего браузера" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "Открывать _ссылку:" #: ../glade/prefs.ui.h:28 msgid "_Manual:" msgstr "Задать _вручную:" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "(%s для URL)" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Браузер:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Браузер" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Настройки уведомлений" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Показывать _всплывающие уведомления с новыми заголовками." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Показывать з_начок состояния в области уведомлений (системном лотке)." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Показывать _количество новых записей в значке системного лотка." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "Закрыть в_место сворачивания в значок системного лотка." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_При запуске свернуть в системный лоток." #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Настройки панели инструментов" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Скрыть панель инструментов." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "На кн_опках панели инструментов:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Интерфейс" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr " HTTP прокси-сервер" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "Определять _автоматически (GNOME или другое окружение)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_Без прокси" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "Настроить _вручную:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "_Порт прокси:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "А_дрес прокси:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Ав_торизация на прокси-сервере" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Па_роль прокси:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "_Имя пользователя прокси:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Прокси" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "Получение вложений" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Загрузить с помощью" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "Открытие вложений" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Вложения" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "Плагины" #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2012\n" #~ "The Liferea Team\n" #~ msgstr "" #~ "Copyright (c) 2003-2011\n" #~ "The Liferea Team\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 "Копировать _URL записи в буфер обмена" #~ 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 не были удалены автоматически. Удалите её " #~ "самостоятельно, если вы уверены, что данные не были потеряны при " #~ "обновлении!" #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Скачивание НЕ УДАЛОСЬ: \"%s\"" #~ 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 "Synchronized with Nearby Hosts" #~ 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 "Синхронизация Liferea %s@%s" #~ 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\"" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d результат поиска" #~ msgstr[1] "%d результата поиска" #~ msgstr[2] "%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 "Liferea is unable to display this item's content." #~ msgstr "Liferea не удаётся отобразить содержимое этой записи." #~ msgid "

View this item's content.

" #~ msgstr "

Просмотреть текст этой записи.

" #~ msgid " (Website)" #~ msgstr " (Веб-сайт)" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Эта опция может вызвать значительные задержки при отображении папок с " #~ "большим количеством лент." #~ msgid "text/plain" #~ msgstr "text/plain" #~ 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 "%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_ru.html" #~ msgid "_Script Manager" #~ msgstr "Менеджер _сценариев" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Позволяет настраивать и редактировать вспомогательные сценарии LUA" #~ msgid "Search With ..." #~ msgstr "Искать ..." #~ msgid "You have to select a feed entry" #~ msgstr "Вы выбрали запись ленты" #~ msgid "(empty)" #~ msgstr "(пусто)" #~ msgid "_Delete" #~ 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 "feed updated" #~ msgstr "лента обновлена" #~ msgid "feed added" #~ msgstr "лента добавлена" #~ msgid "item selected" #~ msgstr "запись выбрана" #~ msgid "feed selected" #~ msgstr "лента выбрана" #~ msgid "item unselected" #~ msgstr "выделение записи снято" #~ msgid "feed unselected" #~ 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 "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 "%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" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Registered Scripts" #~ msgstr "Зарегистрированные сценарии" #~ msgid "Script Code" #~ 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 "Reuse existing script" #~ msgstr "Повторно использовать существующий сценарий" #~ msgid "Script Manager" #~ msgstr "Менеджер сценариев" #~ msgid "_Allow Flash in Feeds." #~ msgstr "_Разрешить Flash в лентах." liferea-1.10.17/po/sk.po000066400000000000000000002064771261475620100147070ustar00rootroot00000000000000# 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: 2013-01-25 23:54+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.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Čítačka kanálov" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea - čítačka kanálov" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 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 "No comments yet." msgstr "Doteraz žiadne komentáre." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Komentáre" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Aktualizuje sa..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Obnoviť" #: ../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:32 #, fuzzy msgid "Default Browser" msgstr "Predvolený prehliadač GNOME" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Zlyhal príkaz prehliadača: %s" #: ../src/browser.c:230 #, 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:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Nemôže byť vytvorený priečinok cache \"%s\"!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Dnes, %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d. %b. %Y" #: ../src/enclosure.c:197 #, 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:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Chyba premenovania %s na %s\n" #: ../src/export.c:406 ../src/export.c:408 #, 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:414 ../src/export.c:416 #, 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:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Zoznam dôležitých článkov" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Importovať zoznam kanálov" #: ../src/export.c:470 msgid "Import" msgstr "Importovať" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 #, fuzzy msgid "OPML Files" msgstr "Zvoľte OPML súbor" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Chyba počas exportovania zoznamu kanálov!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Zoznam kanálov bol exportovaný!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Exportovať zoznam kanálov" #: ../src/export.c:487 msgid "Export" msgstr "Exportovať" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" aktualizovaný..." #: ../src/feed.c:294 #, 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:404 #, fuzzy msgid "There are no unread items" msgstr "Nie sú tu žiadne neprečítané články " #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" "Spustí program Liferea s hlavným oknom v STAVE. STAV môže byť `shown', " "`iconified', alebo `hidden'" #: ../src/main.c:164 msgid "STATE" msgstr "STAV" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Vypíše informácie o verzii a skončí" #: ../src/main.c:166 #, fuzzy msgid "Add a new subscription" msgstr "Nové prihlásenie" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Vypíše správy ladenia všetkých typov" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "Vypíše správy ladenia pre ovládanie cache" #: ../src/main.c:173 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "Vypíše správy ladenia ovládania konfigurácie" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Vypíše správy ladenia ovládania databázy" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "Vypíše správy ladenia všetkých GUI funkcíí" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Vypíše správy ladenia všetkej sieťovej aktivity" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "Vypíše správy ladenia všetkých spracúvajúcich funkcií" #: ../src/main.c:179 msgid "Print debugging messages when a function takes too long to process" msgstr "Vypíše správy ladenia keď spracovanie funkcie trvá dlho" #: ../src/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "Vypíše správy ladenia keď sa vchádza/vychádza z funkcíí" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "Vypíše správy ladenia postupu aktualizácie kanálov" #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "Vypíše správy ladenia pre ovládanie cache" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "Vypíše rozsiahle správy ladenia" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "Vypíše správy ladenia pre zadanú tému" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea - čítačka kanálov pre Linux" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "Pre viac informácií navštívte http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "Požiadavka na aktualizáciu bolas zrušená" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Nepodarilo sa preložiť názov cieľového hostiteľa" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Nepodarilo sa preložiť názov proxy hostiteľa" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Nepodarilo sa pripojiť k vzdialenému hostiteľovi" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Nepodarilo sa pripojiť k proxy" #: ../src/net.c:325 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:328 msgid "The resource moved permanently to a new location" msgstr "Zdroj bol natrvalo presunutý na nové miesto" #. http 4xx client error #: ../src/net.c:331 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:333 msgid "Payment required" msgstr "Požadovaná platba" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Nemáte povolený prístup k tomuto zdroju" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Zdroj nebol nádjený" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Metóda nie je povolená" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Neprijateľný" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Požadované overenie proxy" #: ../src/net.c:339 msgid "Request timed out" msgstr "Čas požiadavky vypršal" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Beznádejné. Zdroj neexistuje. Odhláste sa, prosím!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Bola tu vnútorná chyba v aktualizačnom procese" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Kanál nie je dostupný: Server požadoval nepodporované presmerovanie!" #: ../src/net.c:349 msgid "Client Error" msgstr "Chyba klienta" #: ../src/net.c:351 msgid "Server Error" msgstr "Chyba serveru" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Prihlásenie \"%s\" je už aktualizované!" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Aktualizuje sa favicon pre \"%s\"" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" sa nezmenil od poslednej aktualizácie" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Aktualizuje sa \"%s\"" #: ../src/update.c:259 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "" #: ../src/update.c:282 #, c-format msgid "%s exited with status %d" msgstr "%s skončil so stavom %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Chyba: Nemohol byť otvorený súbor \"%s\"" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Chyba: Nie je tam žiadny súbor \"%s\"" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Nový priečinok hľadania" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Je tu viac chýb. Výstup bol skrátený!]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, 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:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Zvolte súbor" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, 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:330 #, 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:716 msgid "Help Topics" msgstr "Témy pomocníka" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Rýchla príručka" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "Často kladené otázky" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea je teraz pripojená" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Pracovať ako odpojený" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea je teraz odpojená" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Pracovať ako pripojený" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "Prihlá_senia" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "Aktualizovať _všetko" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Aktualizuje všetky prihlásenia." #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Označiť všetko ako p_rečítané" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Označí všetky články zo všetkých prihlásení ako prečítané." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Importovať zoznam kanálov..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Importuje OPML zoznam kanálov." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Exportovať zoznam kanálov..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Exportuje zoznam kanálov ako OPML." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Koniec" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Kanál" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Odstrániť _všetky články" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Odstráni všetky články z práve vybratého kanálu." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "Č_lánok" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "Ďa_lší neprečítaný článok" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "Ďa_lší neprečítaný článok" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Zobraziť" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "Zväčš_iť veľkosť písma" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Zväčší veľkosť písma v zobrazenom článku." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "Z_menšiť veľkosť textu" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Zmenší veľkosť písma v zobrazenom článku." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "Nás_troje" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "Monitor akt_ualizácií" #: ../src/ui/liferea_shell.c:939 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" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Predvoľby" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Upraviť predvoľby." #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "_Hľadať" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Hľadať vo všetkých článkoch..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Zobrazí dialóg hľadania." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Pomocník" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "Ob_sah" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Zobraziť pomocníka pre túto aplikáciu." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Rýchla príručka" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Zobraziť zoznam všetkých skratiek programu Liferea." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "Často k_ladené otázky" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Zobraziť Často kladené otázky pre túto aplikáciu." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_O programe" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Zobrazí dialóg o programe." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "_Normálny pohľad" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Nastaví režim zobrazenia na režim poštového klienta." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "P_ohľad na šírku" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Nastaví režim zobrazenia s použitím troch zvislých častí." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "_Kombinovaný pohľad" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Nastaví režim zobrazenia na režim s dvomi časťami." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "_Redukovať zoznam kanálov" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Skryť kanály, ktoré neobsahujú neprečítané články." #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "_Nové prihlásenie..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Pridá prihlásenie do zoznamu kanálov." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Nový _priečinok..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Pridá priečinok do zoznamu kanálov." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Nový priečinok _hľadania..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Pridá nový priečinok hľadania do zoznamu kanálov." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Nový _zdroj..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Pridá nový zdroj zoznamu kanálov." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "_Nový archív..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Pridá archív." #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "_Označiť články ako prečítané" #: ../src/ui/liferea_shell.c:979 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." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "Akt_ualizovať" #: ../src/ui/liferea_shell.c:981 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." #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "_Vlastnosti" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Otvorí dialóg vlastností pre vybrané prihlásenie." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "O_dstrániť" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Odstráni vybrané prihlásenie." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Prepnúť stav p_rečítaný" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Prepne stav prečítaný vybraného článku." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Prepnúť _emblém článku" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Prepne stav emblému vybraného článku." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "O_dstrániť" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Odstráni vybraný článok." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "Otvorí odkaz na článok v nastavenom prehliadači." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "_Zobraziť v prehliadači" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Otvorí odkaz na článok v nastavenom prehliadači." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Nastavenia vonkajšieho prehliadača" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Otvorí odkaz na článok v nastavenom prehliadači." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "P_racovať odpojený" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Táto voľba vám umožňuje zakázať aktualizáciu prihlásení." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - čítačka kanálov pre Linux" #: ../src/ui/liferea_shell.c:1341 #, 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." #: ../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:205 #, fuzzy msgid "All Files" msgstr "_Miestny súbor" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Odstraňuje sa položka" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, 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_view.c:354 msgid "Deletion Confirmation" msgstr "Potvrdenie odstránenia" #: ../src/ui/feed_list_view.c:385 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/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "Zobraziť odkaz na _karte" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "_Zobraziť odkaz v prehliadači" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "_Zobraziť odkaz v prehliadači" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "_Záložkovať odkaz na %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_Kopírovať umiestnenie odkazu" #: ../src/ui/liferea_htmlview.c:639 #, fuzzy msgid "_Copy Image Location" msgstr "_Kopírovať umiestnenie odkazu" #: ../src/ui/liferea_htmlview.c:641 #, fuzzy msgid "S_ave Link As" msgstr "Uložiť ako..." #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "Prihlá_siť..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Žiadny názov ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Dátum" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Článok" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Neboli vybrané články" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Tento článok nemá špecifikovaný odkaz!" #: ../src/ui/item_list_view.c:818 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/popup_menu.c:142 msgid "Copy to News Bin" msgstr "Kopírovať do archívu" #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "_Záložkovať odkaz na %s" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "_Kopírovať umiestnenie odkazu" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "O_dstrániť článok" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Otvoriť prílohu..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Uložiť ako..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "Kopírovať umiestnenie odkazu" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "Akt_ualizovať všetko" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "_Zobraziť program Liferea" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "Akt_ualizovať priečinok" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "_Označiť všetko ako prečítané" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "_Nový" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "Nové prihlá_senie..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "Nový zdr_oj..." #: ../src/ui/popup_menu.c:329 #, fuzzy msgid "Sort Feeds" msgstr "Importovať zoznam kanálov" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "GNOME predvolené" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Text pod ikonami" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Text vedľa ikon" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Len ikony" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Len text" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minút" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "hodín" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dní" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Medzera" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Medzera" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Medzera" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "_Normálny pohľad" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "P_ohľad na šírku" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "_Kombinovaný pohľad" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Vlastný" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Predvolený prehliadač" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Existujúce okno" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Nové okno" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Nová karta" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "" #: ../src/ui/preferences_dialog.c:685 #, fuzzy msgid "Terminate instead of minimizing to the messaging menu" msgstr "Ukončiť namies_to minimalizácie do ikony v oblasti upozornení." #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Typ" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "Tento kanál nemá určený interval aktualizácie." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "" #: ../src/ui/ui_tray.c:221 #, c-format 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" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Žiadne nové články" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Žiadny neprečítaný článok" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Neplatný Atom kanál: neznámy autor" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d. %b. %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../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:116 msgid "Google Reader login failed!" msgstr "Prihlásenie k Google Reader zlyhalo!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 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." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:326 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" #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Neboli nájdené žiadne typy zdrojov zoznamu kanálov!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Typ zdroja" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source.c:363 #, 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." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Tento kanál už viac neexistuje!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Táto novinka nemá titulok" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Navštíviť" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Otvoriť kanál" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Označiť všetko ako prečítané" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Aktualizácia kanálu" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Zobraziť podrobnosti" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Overenie" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Heslo:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "Používateľské me_no:" #: ../glade/auth.ui.h:6 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." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Heslo" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "Po_užívateľské meno (E-mail)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "normálny pohľad" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "pohľad na šírku" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Zobraziť články" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "kombinovaný pohľad" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Články" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Tlačidlo pripojený/odpojený" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Vlastnosti prihlásenia" #: ../glade/liferea.ui.h:9 #, fuzzy msgid "Feed Name" msgstr "_Názov kanálu:" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "_Názov kanálu:" #: ../glade/liferea.ui.h:11 #, fuzzy msgid "Update Interval" msgstr "Monitor aktualizácií" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "Po_užiť globálny predvolený interval aktualizácie." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "Š_pecifický interval aktualizácie kanálu" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "Ne_aktualizovať tento kanál automaticky." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Všeobecné" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Zdroj kanálu" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Typ zdroja:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "Z_droj:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "P_ríkaz" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Miestny súbor" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Vybrať súbor..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Použiť _filter konverzie" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Konvertovať po_užitím:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "Pre_dvolené nastavenia cache" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Zakázať cache" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "Neo_bmedzená cache" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "Počet uklada_ných článkov:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Archivácia" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Použiť HTTP ov_erenie" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "Ne_používať na sťahovanie proxy" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Sťahovanie" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "_Automaticky stiahnuť všetky prílohy tohto kanálu." #: ../glade/liferea.ui.h:42 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/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorovať kanály s _komentármi pre toto prihlásenie." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "_Vnútiť vyskakovacie upozornenia pre toto prihlásenie." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "_Nikdy nezobraziť vyskakovacie oznámenie pre toto prihlásenie." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Označiť stiahnuté články ako prečítané." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Pokročilé" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Nový priečinok" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "_Názov priečinku:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Premenovať" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Nový názov:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Vlastnosti priečinku hľadania" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "_Názov hľadania:" #: ../glade/liferea.ui.h:54 #, fuzzy msgid "Find Items that meet the following criteria" msgstr "Nájsť články, ktoré vyhovujú nasledujúcim kritériám" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "Akékoľv_ek pravidlo sa musí zhodovať" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "Všet_ky pravidlá sa musia zhodovať" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "Otvoriť prílohu..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "Sťaahuje sa príloha typu:" #: ../glade/liferea.ui.h:59 #, 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/liferea.ui.h:60 msgid "_Browse" msgstr "P_rehliadať" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "O_dteraz to robiť automaticky pre prílohy ako táto." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Hľadať vo všetkých článkoch" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "Vy_hľadávanie:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Pokročilé..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Monitor aktualizácií" #: ../glade/liferea.ui.h:68 #, fuzzy msgid "Pending Requests" msgstr "Čakajúce požiadavky" #: ../glade/liferea.ui.h:69 #, fuzzy msgid "Downloading Now" msgstr "Prebieha sťahovanie" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Z_rušiť všetko" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Vytvoriť archív" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Názov archívu:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "O programe" #: ../glade/liferea.ui.h:74 #, fuzzy msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Autorské právo (c) 2003-2009\n" "Tím Liferea\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea je agregátor správ pre GTK+" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Domovská stránka programu Liferea" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Pokročilé hľadanie" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "Priečinok _hľadania..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Vytvoriť kanál vyhľadávača" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "zadajte nejaký reťazec, ktorý chcete hľadať" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "Maximálny počet výsledných článkov:" #: ../glade/liferea.ui.h:84 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 "" #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Sťahovanie / Postprocesing" #: ../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/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 tt-rss 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/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/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:4 #, fuzzy msgid "Feed Update Settings" msgstr "Aktualizácia kanálu" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Aktualizuje všetky prihlásenia." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Predvolený _interval obnovovania kanálu:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Kanály" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "Nastavenia zobrazenia priečinkov" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "Skryť _prečítané články." #: ../glade/prefs.ui.h:13 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Ikony kanálov (Favicony)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "Akt_ualizovať všetky favicony teraz" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Priečinky" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "Reading Headlines" msgstr "neprečítané články" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "Pre_skakovať články pomocou:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "Web Integration" msgstr "Orientácia" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Posielať záložky do" #: ../glade/prefs.ui.h:22 #, fuzzy msgid "Internal Browser Settings" msgstr "Nastavenia vnútorného prehliadača" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Otvoriť odkazy v ok_ne programu Liferea." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "Za_kázať Javascript." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "_Povoliť doplnky prehliadača." #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "Nastavenia vonkajšieho prehliadača" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Otvoriť odkaz v:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "Vlastný" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "P_rehliadač:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Prehliadač" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Notification Settings" msgstr "Nastavenia upozorňovania" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Zobraziť _vyskakovacie okno s novými článkami." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Zobraziť stavovú _ikonu v oblasti upozornení." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Zobraziť počet nových článkov v oblasti upozornení." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "Ukončiť namies_to minimalizácie do ikony v oblasti upozornení." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Spustiť v oblasti upozornení." #: ../glade/prefs.ui.h:39 #, fuzzy msgid "Toolbar Settings" msgstr "Popisy _tlačidiel v paneli nástrojov:" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Skryť panel nástrojov." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Popisy _tlačidiel v paneli nástrojov:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_Automaticky zistiť (GNOME alebo prostredie)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "Žiadne pr_oxy" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Ručné nastavenie:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "_Port proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "_Hostiteľ proxy:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Použiť proxy ov_erenie" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "_Heslo proxy:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Po_užívateľské meno proxy:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "Sťahuje sa príloha" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Stiahnuť použitím" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "Otvoriť prílohu..." #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Prílohy" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #~ 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" #, fuzzy #~ msgid "Synchronized with Nearby Hosts" #~ msgstr "" #~ "Synchronizované s neďalekými hostiteľmi" #~ 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 "_Delete" #~ msgstr "O_dstrániť" #~ 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.10.17/po/sq.po000066400000000000000000002510261261475620100147030ustar00rootroot00000000000000# Albanian Translation of liferea.pot # Copyright (C) 2009-2012 # This file is distributed under the same license as the Liferea package. # Besnik Bleta , 2012. # msgid "" msgstr "" "Project-Id-Version: liferea 1.8-rc1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-04-27 14:08+0300\n" "PO-Revision-Date: 2012-11-09 12:13+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" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../liferea.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Lexues Prurjesh" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Lexuesi i Prurjeve Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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 "" "Kjo prurje është ndërprerë. Nuk 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 "" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Pati gabime ndërsa 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/liferea.ui.h:29 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ë nga" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "Përmes" #: ../xslt/item.xml.in.h:7 msgid "Related" msgstr "Relatuar" #: ../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 "No comments yet." msgstr "Ende pa komente." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Komente" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Po përditësohet..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Rifreskoje" #: ../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:32 msgid "Default Browser" msgstr "Shfletuesi Parazgjedhje" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Urdhri për shfletuesin dështoi: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Po niset: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Gabim Autorizimi" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Nuk krijohet dot drejtoria fshehtinë \"%s\"!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Sot %l:%M %p" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 msgid "Yesterday %l:%M %p" msgstr "Dje %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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%b %d %Y" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" nuk është kartelë e vlefshme formësimi lloji guackash!" #: ../src/enclosure.c:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" "Ende nuk keni të formësuar mjet shkarkimesh! Ju lutem, bëjeni këtë te skeda " "'Shkarko' te Mjete/Parapëlqime." #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Gabim në riemërtimin e kartelës si % si %s\n" #: ../src/export.c:406 ../src/export.c:408 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "Gabim XML ndërsa lexohej kartelë OPML! Nuk u importua dot \"%s\"!" #: ../src/export.c:414 ../src/export.c:416 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "" "Dokument bosh! Dokumenti OPML \"%s\" nuk duhet të jetë bosh kur importohet." #: ../src/export.c:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Listë e importuar prurjesh" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Importo Listë Prurjesh" #: ../src/export.c:470 msgid "Import" msgstr "Importo" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 msgid "OPML Files" msgstr "Kartela OPML" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Gabim gjatë eksportimit të listës së prurjeve!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Listë Prurjesh e eksportuar!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Eksporto Listë Prurjesh" #: ../src/export.c:487 msgid "Export" msgstr "Eksporto" #: ../src/feed.c:255 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 "" "

Nuk zbuloi dot llojin e 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:284 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" u përditësua..." #: ../src/feed.c:294 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" nuk është e mundshme" #: ../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\" nuk u ngarkua dot!

" #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Dokument bosh!" #: ../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 "Nuk u përcaktua dot lloji i prurjes" #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:404 msgid "There are no unread items" msgstr "Nuk ka objekte të palexuar" #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', 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/main.c:164 msgid "STATE" msgstr "GJENDJE" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Shfaq të dhëna versioni dhe dil" #: ../src/main.c:166 msgid "Add a new subscription" msgstr "Shtoni pajtim të ri" #: ../src/main.c:166 msgid "uri" msgstr "uri" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Shtyp mesazhe diagnostikimi të të gjitha llojeve" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "Shtyp mesazhe diagnostikimi gjatë trajtimit të fshehtinës" #: ../src/main.c:173 msgid "Print debugging messages for the configuration handling" msgstr "Shtyp mesazhe diagnostikimi gjatë trajtimmit të formësimit" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Shtyp mesazhe diagnostikimi gjatë trajtimit të bazës së të dhënave" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "Shtyp mesazhe diagnostikimi të krejt funksioneve GUI" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Shtyp mesazhe diagnostikimi për krejt veprimtarinë në rrjet" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "Shtyp mesazhe diagnostikimi për krejt funksionet e përtypjes" #: ../src/main.c:179 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/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "Shtyp mesazhe diagnostikimi për funksionet hyjnë/dalin" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "Shtyp mesazhe diagnostikimi për procesin e përditësimit të prurjes" #: ../src/main.c:182 msgid "Print debugging messages of the search folder matching" msgstr "" "Shtyp mesazhe diagnostikimi gjatë kërkimit të përputhjeve te dosje kërkimesh" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "Shtyp mesazhe fjalamane diagnostikimi" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "Shtyp mesazhe diagnostikimi për temën e treguar" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea - Lexuesi Linux i Prurjeve" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "" "Për më tepër të dhëna, ju lutemi, vizitoni http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "Kërkesa për përditësim u anulua" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "I pazoti të zbulojë emrin e strehës për destinacionin" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "I pazoti të zbulojë emrin e strehës për ndërmjetësin" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "I pazoti të lidhet te strehë e largët" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "I pazoti të lidhet te ndërmjetësi" #: ../src/net.c:325 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:328 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:331 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:333 msgid "Payment required" msgstr "Lypset pagesë" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Nuk ju lejohet të hyni në këtë burim" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Nuk u gjet Burim" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Metodë Jo e Lejuar" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "I papranueshëm" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Lypset mirëfilltësim ndërmjetësi" #: ../src/net.c:339 msgid "Request timed out" msgstr "Kërkesës i mbaroi koha" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Ka avulluar! Burimi nuk ekziston. Ju lutemi, çregjistrohuni!" #: ../src/net.c:345 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:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Nuk ka prurje: Shërbyesi kërkoi ridrejtim të pambuluar!" #: ../src/net.c:349 msgid "Client Error" msgstr "Gabim Klienti" #: ../src/net.c:351 msgid "Server Error" msgstr "Gabim Shërbyesi" #: ../src/net.c:353 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 "Objekt" #: ../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 "Titull objekti" #: ../src/rule.c:176 msgid "Item body" msgstr "përmbajtje e objektit" #: ../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ë i shenjuar" #: ../src/rule.c:178 msgid "is unflagged" msgstr "është i pashenjuar" #: ../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 "nuk është caktuar" #: ../src/rule.c:181 msgid "Feed title" msgstr "Titull prurjeje" #: ../src/subscription.c:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Pajtimit \"%s\" po përditësohet ndërkohë!" #: ../src/subscription.c:110 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "Pajtimi \"%s\" nuk vazhdon më. Liferea nuk do ta përditësojë më!" #: ../src/subscription.c:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Po përditësohet favikona për \"%s\"" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, 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:272 #, c-format msgid "Updating \"%s\"" msgstr "Po përditësohet \"%s\"" #: ../src/update.c:259 #, 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:282 #, c-format msgid "%s exited with status %d" msgstr "%s përfundoi me gjendje %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Gabim: S'hapa dot tubin \"%s\"" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Gabim: S'hapa dot kartelën \"%s\"" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Gabim: Nuk ka kartelë \"%s\"" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Dosje e re Kërkimi" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Pati edhe gabime të tjera. Përgjigja u cungua!]" #: ../src/xml.c:577 msgid "XML Parser: Could not parse document:\n" msgstr "Përtypësi XML: S'përtypa dot dokumentin:\n" #: ../src/ui/enclosure_list_view.c:175 msgid "Attachments" msgstr "Bashkangjitje" #. 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d bashkangjitje" msgstr[1] "%d bashkangjitje" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Zgjidhni Kartelë" #: ../src/ui/enclosure_list_view.c:438 #, 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'gjeta dot kartelë pixmap: %s" #: ../src/ui/liferea_shell.c:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d e re)" msgstr[1] " (%d të reja)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Zëra Ndihme" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Reference e Shpejtë" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "FAQ" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea tani është i lidhur" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Puno i palidhur" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea tani është i palidhur" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Puno \"Online\"" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Pajtime" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "Përditëso _Tërë" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Përditëso krejt pajtimet." #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Shënoji të Tëra Si të _Lexuara" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Shënon si të lexuar çdo zë të çdo pajtimi." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Importo Listë Prurjesh..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Importon një listë prurjesh OPML." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Eksporto Listë Prurjesh..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Eksporton listë prurjesh si OPML." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Dil" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Prurje" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Hiqi Tërë Zërat" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "heq tërë objektet e prurjes së përzgjedhur për çastin." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "_Element" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "Objekti i Mëparshëm" #: ../src/ui/liferea_shell.c:924 msgid "Next Item" msgstr "Objekti Pasues" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "Objekti _Pasues i Palexuar" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Parje" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "_Rrit Madhësi Teksti" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Rrit madhësinë e tekstit për parjen e objektit." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "_Zvogëlo Madhësi Teskti" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Zvogëlon madhësinë e tekstit për parjen e objektit." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "_Mjete" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "_Përditëso Monitorin" #: ../src/ui/liferea_shell.c:939 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ësime" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Parapëlqime" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Përpunoni Parapëlqimet." #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "_Kërko" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Kërkoni Në Tërë Prurjet..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Shfaq dialogun e kërkimeve." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Ndihmë" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Përmbajtje" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Shihni ndihmën për këtë zbatim." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Referencë e Shpejtë" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Shihni një listë të tërë shkurtoreve të Liferea-s." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_FAQ" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Shihni FAQ për këtë zbatim." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_Rreth" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Shfaq një dialog \"rreth\"" #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "Parje _Normale" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Caktoni si mënyrë parjeje mënyrën klient poste." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "Parje _Gjerasi" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Caktoni si mënyrë parjeje përdorimin e tre kuadrateve horizontalë." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "Pamje e _Ndërthurur" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Caktoni si mënyrë parjeje mënyrën me dy kuadrate." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "Listë Prurjesh e _Mpakur" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Fshihi prurjet pa objekte të palexuar. " #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "Pajtim i _Ri..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Shton te lista e prurjeve një pajtim." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "_Dosje e Re..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Shto dosje te lista e prurjeve." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "_Dosje e Re Kërkimesh..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Shton dosje të re kërkimesh te lista e prurjeve." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "_Burim i Ri..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Shton burim të ri liste prurjesh." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "Kosh i Ri _Lajmesh..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Shton një kosh të ri lajmesh." #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "_Shënoji Zërat Si të Lexuar" #: ../src/ui/liferea_shell.c:979 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 nyjes së përzgjedhur te lista e " "prurjeve / te pjesa e listës." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Përditësoje" #: ../src/ui/liferea_shell.c:981 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." #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "_Veti" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Hap dialog vetish të pajtimit të përzgjedhur." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "_Hiqe" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Heq pajtimin e përzgjedhur." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Këmbe Gjendje _Leximi" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Këmben gjendje leximi për objektin e përzgjedhur." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Këmbe _Shenjë Objekti" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Këmben gjendje flamurke për zërin e përzgjedhur." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "_Hiqe" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Heq objektin e përzgjedhur." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "Hap lidhjen e objektit në shfletuesin e formësuar." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "_Nis Prej Shfletuesi" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Hap lidhjen e objektit në shfletuesin e formësuar." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Rregullime Shfletuesi të Jashtëm" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Hap lidhjen e objektit në shfletuesin e formësuar." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "_Puno i Palidhur" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Kjo mundësi ju lejon të çaktivizoni përditësim pajtimi." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "_Sa Krejt Ekrani" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "Shfletoni me ekran të plotë" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Lexues Linux Prurjesh" #: ../src/ui/liferea_shell.c:1341 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 \"online\".

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

" #: ../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:205 msgid "All Files" msgstr "Krejt Kartelat" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Po fshihet zëri" #: ../src/ui/feed_list_view.c:342 #, 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 përmbajtja e saj?" #: ../src/ui/feed_list_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Jeni të sigurtë se doni të fshihen \"%s\"?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Ripohim Fshirjeje" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea është në mënyrën \"offline\". Përditësimi është i pamundur." #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "Hape Lidhjen Në _Skedë" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "_Hape Lidhjen Në Shfletues" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "_Hape Lidhjen Në Shfletues" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "_Faqeruaje Lidhjen te %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_Kopjo Vendndodhje Lidhjeje" #: ../src/ui/liferea_htmlview.c:639 msgid "_Copy Image Location" msgstr "_Kopjo Vendndodhje Figure" #: ../src/ui/liferea_htmlview.c:641 msgid "S_ave Link As" msgstr "_Ruajeni Lidhjen Si" #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "_Ruaje Figurën Si" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "_Pajtohuni..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Pa titull ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Datë" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Titull" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Nuk është zgjedhur objekt" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Këtij objekti nuk i është caktuar lidhje!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Për të fshirë objekte prurjesh, duhet të përzgjidhni një!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "Kopjoje te Kosh Lajmesh" #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "_Faqeruaje Lidhjen te %s" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "_Kopjo Vendndodhje Figure" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "_Hiqe Objektin" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Hapni Guackën..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Ruajeni Si..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "_Kopjo Vendndodhje Lidhjeje" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "_Përditësoji Krejt" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "_Shfaq Liferea-n" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "_Përditësoje Dosjen" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "_Shënoji Krejt Si të Lexuar" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "I _Ri" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "Pajtim i _Ri..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "_Burim i Ri..." #: ../src/ui/popup_menu.c:329 msgid "Sort Feeds" msgstr "Renditi Prurjet" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "_Rikrijoje" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "Parazgjedhje GNOME" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Tekst nën ikonat" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Tekst në krah të ikonave" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Vetëm ikona" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Vetëm tekst" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minuta" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "orë" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "ditë" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Hapësirë" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Hapësirë" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Hapësirë" #: ../src/ui/preferences_dialog.c:114 msgid "Normal View" msgstr "Parje Normale" #: ../src/ui/preferences_dialog.c:115 msgid "Wide View" msgstr "Parje Së Gjeri" #: ../src/ui/preferences_dialog.c:116 msgid "Combined View" msgstr "Pamje e Ndërthurur" #: ../src/ui/preferences_dialog.c:505 msgid "Manual" msgstr "Dorazi" #: ../src/ui/preferences_dialog.c:520 msgid "Browser default" msgstr "Parazgjedhje shfletuesi" #: ../src/ui/preferences_dialog.c:523 msgid "Existing window" msgstr "Dritare ekzistuese" #: ../src/ui/preferences_dialog.c:526 msgid "New window" msgstr "Dritare e re" #: ../src/ui/preferences_dialog.c:529 msgid "New tab" msgstr "Skedë e re" #: ../src/ui/preferences_dialog.c:688 msgid "Integrate with the messaging menu (indicator)" msgstr "Integroje me menunë e mesazheve (indikator)" #: ../src/ui/preferences_dialog.c:691 msgid "Terminate instead of minimizing to the messaging menu" msgstr "Në vend që ta minimizosh si ikonë paneli, përfundoje" #: ../src/ui/preferences_dialog.c:694 msgid "Start minimized to the messaging menu" msgstr "Fillo i minimizuar sa menuja e mesazheve" #: ../src/ui/preferences_dialog.c:794 msgid "Type" msgstr "Lloj" #: ../src/ui/preferences_dialog.c:797 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(E zbrazët)" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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] "" "Mundësuesi i kësaj prurjeje këshillon një interval përditësimi prej %d " "minute." msgstr[1] "" "Mundësuesi i kësaj prurjeje këshillon një interval përditësimi prej %d " "minutash." #: ../src/ui/subscription_dialog.c:434 msgid "This feed specifies no default update interval." msgstr "Kjo prurje nuk ka të përcaktuar interval parazgjedhje përditësimi." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "Pa titull" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d objekt i ri" msgstr[1] "%d objekte të rinj" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Pa gjëra të reja" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Pa zëra të palexuar" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Site Web" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Prurje Atom e pavlefshme: autor i panjohur" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../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:116 msgid "Google Reader login failed!" msgstr "Hyrja në Google Reader dështoi!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 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." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:326 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." #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Nuk u gjetën lloje burimi listash prurjesh!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Lloj Burimi" #: ../src/fl_sources/ttrss_source.c:367 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:368 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." #: ../src/fl_sources/ttrss_source_feed.c:111 msgid "Could not parse JSON returned by tt-rss API!" msgstr "Nuk përtypi dot JSON-in e kthyer nga API tt-rss!" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Kjo prurje nuk ekziston më!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Ky zë i ri nuk ka titull" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Vizitojeni" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Hape prurjen" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Shënoji të tëra si të lexuara" #: ../src/notification/libnotify.c:254 #, c-format 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" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Përditësim Prurjeje" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Shfaq hollësi" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Mirëfilltësim" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Fjalëkalim:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_Emër përdoruesi:" #: ../glade/auth.ui.h:6 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 kodim." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Fjalëkalim" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "_Emër përdoruesi (Email)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "parje normale" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "parje gjerazi" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Shihni Titujt" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "pamje e ndërthurur" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Tituj" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Buton Online|Offline" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Veti Pajtimi" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Emër Prurjeje" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "_Emër Prurjeje:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "Interval Përditësimi" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Përdor interval parazgjedhje të përgjithshëm përditësimesh." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_Interval i caktuar përditësimi prurjeje i" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Mos përditëso këtë prurje automatikisht." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "Ky mundësues prurjesh këshillon një interval përditësimi prej %d minutash." #: ../glade/liferea.ui.h:18 msgid "General" msgstr "Të përgjithshme" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Burim Prurjeje" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Tip Burimi:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Burim:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Urdhër" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Kartelë Vendore" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Përzgjidhni Kartelë..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Përdor _filtër shndërrimi" #: ../glade/liferea.ui.h:27 ../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 për të mundur të hyjë në " "prurje dhe drejtori në formate jo të mbuluar. Për më tepër të dhëna shihni " "dokumentimin." #: ../glade/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Shndërro _duke përdorur:" #: ../glade/liferea.ui.h:30 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 përmbajtja e prurjeve kur " "dilet. Objektet e shënuar ruhen përherë në fshehtinë." #: ../glade/liferea.ui.h:31 msgid "_Default cache settings" msgstr "Rregullime _parazgjedhje për fshehtinë" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "Çaktivizo fshehtinë" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Fshehtinë e pakufizuar" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "_Numër zërash për t'u ruajtur:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Arkivë" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Përdor mirëfilltësim HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "_Mos përdor ndërmjetës për shkarkime" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Shkarkoje" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "Shkarko _vetvetiu tërë guackat e kësaj prurjeje." #: ../glade/liferea.ui.h:42 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/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Shpërfilli prurjet e _komenteve për këtë pajtim." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "_Njoftimet flluskë për këtë pajtim bëji të detyrueshme." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "_Mos bëj kurrë njoftime flluskë për këtë pajtim." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Shënoji zërat e shkarkuar si të lexuar." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Të mëtejshme" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Dosje e Re" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "_Emër dosjeje:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Riemërtoje" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Emër e Ri:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Veti Dosjeje Kërkimesh" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "_Emër Kërkimi:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "Gjej zëra që pajtohen me kushtin vijues" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "Përputhje Me _Çfarëdo Rregulli" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "Përputhje Me _Krejt Rregullat" #: ../glade/liferea.ui.h:57 msgid "Open Enclosure" msgstr "Hapni Guackën" #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "Po shkarkohet një guackë e llojit:" #: ../glade/liferea.ui.h:59 #, 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 "" "Çfarë duhet të bëjë Liferea me këtë guackë? Ju lutemi, jepni më poshtë " "urdhrin që doni të përmbushet. Kartela e shkarkuar do të përdoret si " "argument për këtë urdhër:" #: ../glade/liferea.ui.h:60 msgid "_Browse" msgstr "_Shfletoni" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "_Nga tani e tutje, bëje këtë vetvetiu për guacka si kjo." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Kërkoni Në Tërë Prurjet" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Kërko për:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "Të _mëtejshme..." #: ../glade/liferea.ui.h:66 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 objekteve." #: ../glade/liferea.ui.h:67 msgid "Update Monitor" msgstr "Përditëso Monitorin" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "Kërkesa Në Pritje të Shqyrtimit" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "Po shkarkohet Tani" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Anuloji të Tëra" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Krijoni Kosh Lajmesh" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Emër Koshi Lajmesh:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Rreth" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Të drejta Kopjimi (c) 2003-2012\n" "Ekipi i Liferea-s\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea është një grumbullues lajmesh për GTK+" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Faqja Hyrëse e Liferea-s" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Kërkim i Thelluar" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "_Dosje Kërkimesh..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Krijo Prurje Motori Kërkimesh" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "jepni çfarëdo varg kërkimi që doni" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "_Numri më i Madh Zërash Përfundim:" #: ../glade/liferea.ui.h:84 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." #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Shkarkim / Paspërpunim" #: ../glade/node_source.ui.h:1 msgid "Source Selection" msgstr "Përrzgjedhje 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/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 tt-rss account settings." msgstr "Ju lutemi, jepni të dhënat për llogarinë tuaj tt-rss." #: ../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/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 \"site\"-it web, për të përdorur vetëzbulimin ose, në rast se " "e dini, vendin e saktë të prurjes." #: ../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:4 msgid "Feed Update Settings" msgstr "Rregullime Përditësimi Prurjesh" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "_Përditësoji krejt pajtimet gjatë nisjes." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "_Interval Parazgjedhje Rifreskimi Prurjeje:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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 prurjejeve më shpesh se një herë në çdo orë, është " "shpërdorim i bandës." #: ../glade/prefs.ui.h:9 msgid "Feeds" msgstr "Prurje" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "Rregullime Paraqitjeje Dosjesh" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "_Fshih objekte të lexuar." #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Ikona Prurjesh (Favikona)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Përditësoji tërë favikonat tani" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Dosje" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Po lexohen Titujt" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "Shihi artikujt për_ciptas me: " #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Integrim Web" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Postoji Faqerojtësit te" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Rregullime Shfletuesi të Brendshëm" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Lidhjet hapi në dritaren e Liferea-s." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Çaktivizo Javascript-in." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "_Aktivizoni shtojca shfletuesi." #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "Rregullime Shfletuesi të Jashtëm" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Hap lidhje në:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "Dorazi" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Shfletues:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Shfletues" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Rregullime Njoftimesh" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Me titujt e rinj, shfaq një dritare _flluckë." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Shfaq _ikonë gjendjeje te zona e njoftimeve (shtyllë sistemi)." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Shfaq te ikona e panelit _numrin e zërave të rinj." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "Në vend që ta minimizosh si ikonë paneli, _përfundoje." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Fillo si ikonë paneli." #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Rregullime Paneli" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Fshihe panelin." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "_Etiketa butonash paneli:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "Shërbyes HTTP Ndërmjetës" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_Vetëzbuloje (GNOME ose mejdis)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_Pa Ndërmjetës" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Rregullim Dorazi:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "Portë \"Proxy\":" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "Strehë \"Proxy\":" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Përdor Mirëfilltësim Përmes Ndërmjetësi" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Fjalëkalim për \"Proxy\":" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "_Emër Përdoruesi për \"Proxy\":" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "\"Proxy\"" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "Shkarkim Guackash" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Shkarko duke përdorur" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "Hapje Guackash" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Guacka" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #~ msgid "Download and view feeds" #~ msgstr "Shkarkoji dhe shfaqi prurjet" #~ msgid "You may want to validate the feed using" #~ msgstr "Mundet të doni të vleftësoni prurjen përmes " #~ msgid "bookmark" #~ msgstr "faqerojtës" #~ msgid "comments" #~ msgstr "komente" #~ msgid "flag" #~ msgstr "flamurkë" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Shkarkimi i guackës DËSHTOI: \"%s\"" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Shkarkimi i guackës përfundoi: \"%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 "" #~ "Ky version i Liferea-s përdor një format të ri fshehtine dhe e ka bërë " #~ "migrimin e fshehtinës së prurjes suaj. Lënda e fshehtinës nën %s nuk u " #~ "fshi vetvetiu. Ju lutemi, hiqeni dorazi këtë drejtori, pasi të jeni i " #~ "sigurt që migrimi qe i suksesshëm!" #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Hidhet te objekti tjetër i palexuar. Nëse është e nevojshme përzgjedh " #~ "prurjen pasuese me objekte të plaexuar." #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Shkarkimi DËSHTOI: \"%s\"" #~ msgid "Download finished." #~ msgstr "Shkarkimi përfundoi." #~ msgid "Launch Item In _Tab" #~ msgstr "Hape Objektin Në _Skedë" #~ msgid "_Launch Item In Browser" #~ msgstr "_Hape Objektin Në Shfletues" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Kopjoje _URL-në e Zërit te E papastra" #~ msgid "Choose download directory" #~ msgstr "Zgjidhni drejtori shkarkimesh" #~ msgid "Liferea Sync %s@%s" #~ msgstr "Njëkohësim i Liferea-s %s@%s" #~ msgid "Downloading Enclosure" #~ msgstr "Shkarkim Guackash" #~ msgid "Sync" #~ msgstr "Njëkohësoje" #~ msgid "Synchronized with Nearby Hosts" #~ msgstr "I njëkohësuar me Strehët Aty Afër" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "_Aktivizoni Njëkohësim me LAN Vendor" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Manual:\n" #~ "(%s për URL)" #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "_Jepe URL-në dhe mos e shkarko guackën." #~ msgid "_Save downloads in" #~ msgstr "_Shkarkimet ruaji te" #~ msgid "_Service Name" #~ msgstr "Emër _Shërbimi" #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "Shtyp mesazhe diagnostikimi për ngarkimin e shtojcës" #~ msgid "Liferea seems to be running already!" #~ msgstr "Duket se Liferea tashmë po xhiron!" #~ msgid "Update status" #~ msgstr "Gjendje përditësimi" #~ msgid "was updated" #~ msgstr "qe përditësuar" #~ msgid "was not updated" #~ msgstr "nuk qe përditësuar" #~ msgid "The orientation of the tray." #~ msgstr "Drejtimi i shtyllës së mjeteve." #~ 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 "Përgjegjës _Programthesh" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Lejon formësimin dhe përpunimin e LUA hook scripts" #~ msgid "Search With ..." #~ msgstr "Kërko Me..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d Përfundim Kërkimi për \"%s\"" #~ msgstr[1] "%d Përfundime Kërkimi për \"%s\"" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d Përfundim Kërkimi" #~ msgstr[1] "%d Përfundime Kërkimi" #~ 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 "" #~ "Tani lista e zërave përmban tërë zërat që kanë përputhje me vargun e " #~ "dhënë për kërkim. Po qe se doni ta ruani këtë përfundim kërkimi, " #~ "përgjithmonë, mund të klikoni te butoni \"Dosje Kërkimi\" te dialogu i " #~ "kërkimeve dhe Liferea do të shtojë një dosje kërkimi te lista juaj e " #~ "prurjeve." #~ msgid "You have to select a feed entry" #~ msgstr "Ju duhet të përzgjidhni një zë prurjeje" #~ msgid "(empty)" #~ msgstr "(bosh)" #~ msgid "_Delete" #~ msgstr "_Fshije" #~ msgid "_Properties..." #~ msgstr "_Veti..." #~ msgid "Update out-dated feeds" #~ msgstr "Përditëso prurje të vjetruara" #~ msgid "Force update of all feeds" #~ msgstr "Detyro përditësim të tërë prurjeve" #~ msgid "No feed update at all" #~ msgstr "Pa asnjë pëërditësim prurjesh" #~ msgid "startup" #~ msgstr "nisje" #~ msgid "feed updated" #~ msgstr "prurja u përditësua" #~ msgid "feed added" #~ msgstr "prurja u shtua" #~ msgid "item selected" #~ msgstr "objekti u përzgjodh" #~ msgid "feed selected" #~ msgstr "prurja u përzgjodh" #~ msgid "item unselected" #~ msgstr "objekti u çpërzgjodh" #~ msgid "feed unselected" #~ msgstr "prurja u çpërzgjodh" #~ msgid "shutdown" #~ msgstr "fikje" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Na ndjeni, përdorimi i programtheve nuk mbulohet!" #~ msgid "Script Name" #~ msgstr "Emër Programthi" #~ msgid "No script selected!" #~ msgstr "Pa programth të përzgjedhur!" #~ msgid "Create a new search feed." #~ msgstr "Krijoni prurje kërkimi të ri." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea s'është e zonja të shfaqë përmbajtjen e këtij objekti." #~ msgid "

View this item's content.

" #~ msgstr "

Shihni përmbajtjen e këtij zëri.

" #~ 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 "" #~ "Integroni listën e prurjeve nga llogaria juaj Bloglines. Liferea pajtimin " #~ "tuaj te Bloglines do ta paraqesë si një nënpemë vetëm e lexueshme, te " #~ "lista e prurjeve." #~ 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 ka %d të ri / titulli u përditësua\n" #~ msgstr[1] "%s has %d rinj / titujt u përditësuan\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Feed Source" #~ msgstr "Burim Prurjeje" #~ msgid "Registered Scripts" #~ msgstr "Programthe të Regjistruar" #~ msgid "Script Code" #~ msgstr "Kod Programthi" #~ msgid "text/plain" #~ msgstr "tekst/i thjeshtë" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Kjo mundësi mund të shkaktojë vonesa jo të vogla, kur ngarkohen dosje " #~ "që përmbajnë mjaft prurje." #~ msgid "Downloading Enclosures" #~ msgstr "Shkarkim Guackash" #~ msgid "Feed Cache Handling" #~ msgstr "Trajtim Fshehtine Prurjesh" #~ msgid "Feed Name" #~ msgstr "Emër Prurjeje" #~ msgid "Feed Update Settings" #~ msgstr "Rregullime Përditësimi Prurjesh" #~ msgid "HTTP Proxy Server" #~ msgstr "Shërbyes \"Proxy\" HTTP" #~ msgid "Opening Enclosures" #~ msgstr "Hapje Guackash" #~ msgid "Reading Headlines" #~ msgstr "Lexim Titujsh" #~ msgid "Toolbar Settings" #~ msgstr "Rregullime Paneli" #~ msgid "Update Interval" #~ msgstr "Interval Përditësimi" #~ msgid "Web Integration" #~ msgstr "Integrim Web" #~ msgid "Add Script" #~ msgstr "Shtoni Programth" #~ msgid "At _startup:" #~ msgstr "Në _nisje:" #~ msgid "Create new script" #~ msgstr "Krijo programth të ri" #~ msgid "Exec Command" #~ msgstr "Urdhër Përmbushje" #~ msgid "Reuse existing script" #~ msgstr "Ripërdor programth ekzistues" #~ msgid "Script Manager" #~ msgstr "Përgjegjës Programthesh" #, fuzzy #~ msgid "Count" #~ msgstr "Komente" #, fuzzy #~ msgid "Attention Profile" #~ msgstr "Dështoi mirëflltësimi" #~ msgid "%s" #~ msgstr "%s" #~ msgid "Rule" #~ msgstr "Rregull" #~ msgid "Liferea Homepage" #~ msgstr "" #~ "Faqja Hyrëse e Liferea-s" #~ 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, Arnime, Diagnostikim\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" #~ "dhe shumë të tjerë...\n" #~ "\n" #~ "Kod prej projektesh të tjera\n" #~ "\n" #~ "Anders Carlsson (mbulim ikonash paneli)\n" #~ "Philippe Martin, Brion Vibber (mbulim favikonash)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Included Software\n" #~ "\n" #~ "Liferea, për Muzikë, përdor Luajtësin Web XSPF,\n" #~ "që të lejojë luajtje të drejtpërdrejtë \"podcast\"-esh.\n" #~ "Ky luajtës qe shkruajtur nga Fabricio Zuardi dhe\n" #~ "mund të gjendet te http://musicplayer.sourceforge.net" #~ msgid "Contributors" #~ msgstr "Pjesëmarrës" #~ msgid "" #~ "Copyright (c) 2003-2007\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgstr "" #~ "Copyright (c) 2003-2007\n" #~ "Lars Lindner dhe \n" #~ "Nathan J. Conrad \n" #~ 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 "" #~ "Shënim: Te dosje kërkimesh shtohen zëra nëse ka, e pakta, një përputhje\n" #~ " me një rregull shtimi. Dhe hiqen, nëse ka e pakta një përputhje me një " #~ "rregull heqjeje." #~ msgid "" #~ "Saves this search as a search folder, which will appear in the feed list." #~ msgstr "" #~ "E ruan këtë kërkim si dosje kërkimi, e cila do të duket te lista e " #~ "prurjeve." #~ msgid "Show Menu _And Toolbar" #~ msgstr "Shfaq Menu dhe Panel" #~ msgid "Show _Menu Only" #~ msgstr "Shfaq Vetëm _Menu" #~ msgid "Show _Toolbar Only" #~ msgstr "Shfaq Vetëm _Panel" #~ msgid "Translation" #~ msgstr "Përkthim" #~ msgid "_Limit cache to" #~ msgstr "Kufizo fshehtinë në" #~ msgid "_Name:" #~ msgstr "_Emër:" #~ msgid "items." #~ msgstr "objekte." #~ msgid "" #~ "minutes\n" #~ "hours\n" #~ "days" #~ msgstr "" #~ "minuta\n" #~ "orë\n" #~ "ditë" #~ msgid "search" #~ msgstr "kërko" #~ msgid "Access Forbidden" #~ msgstr "Ndalohet Hyrja" #~ msgid "URL is invalid" #~ msgstr "URL-ja është e pavlefshme" #~ msgid "Unsupported network protocol" #~ msgstr "Protokoll i pambuluar rrjeti" #~ msgid "Hostname could not be found" #~ msgstr "S'mund të gjendej strehëemri" #~ msgid "Network connection was refused by the remote host" #~ msgstr "Lidhja në rrjet u hodh poshtë nga streha e largët" #~ msgid "Remote host did not finish sending data" #~ msgstr "Streha e largët nuk përfundoi dërgimin e të dhënave" #~ msgid "Too many HTTP redirects were encountered" #~ msgstr "U hasën shumë ridrejtime HTTP" #~ msgid "Remote host sent an invalid response" #~ msgstr "Streha e largët dërgoi një përgjigje të pavlefshme" #~ msgid "Webserver's authentication method incompatible with Liferea" #~ msgstr "Metodë mirëfilltësimi shërbyesi web e papajtueshme me Liferea-n" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "" #~ "Fund i papritur sekuence shenjash ose kodim UTF-8 i dëmtuar! Ca shenja u " #~ "shpërfillën!" #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "" #~ "Vetëzbulimi i lidhjeve për prurje dështoi! NUk u gjetën lidhje prurjesh!" #~ msgid " --help Print this help and exit" #~ msgstr " --help Shtyp këtë ndihmë dhe dil" #~ msgid " --mainwindow-state=STATE" #~ msgstr " --mainwindow-state=STATE" #~ msgid " Start Liferea with its main window in STATE." #~ msgstr " Nise Liferea-n me dritaren e vet kryesore STATE." #~ msgid " Possible topics are: all,cache,conf,db,gui,html" #~ msgstr "" #~ " Tema të mundshme janë: tërë,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 "Argumentit --mainwindow-state duhet t'i jepet një parametër.\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "Argumentit --session duhet t'i jepet një parametër.\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "Liferea hasi në një argument të panjohur: %s\n" #~ msgid "does match" #~ msgstr "përputhet" #~ msgid "does not match" #~ msgstr "nuk përputhet" #~ msgid "Could not download \"%s\". Will retry in %d seconds." #~ msgstr "Nuk shkarkoi dot \"%s\". Do të riprovohet në %d sekonda." #~ msgid "" #~ "Sorry, I was not able to load any installed browser plugin! Try the --" #~ "debug-plugins option to get debug information!" #~ msgstr "" #~ "Na ndjeni, nuk qeshë në gjendje të ngarkoj ndonjë modul shfletuesi të " #~ "instaluar! Që të merrni të dhëna diagnostikimi, provoni mundësinë --debug-" #~ "plugins!" #~ msgid "This item does not have a link assigned!" #~ msgstr "Këtij objekti nuk i është caktuar lidhje!" #~ msgid "No link selected!" #~ msgstr "Nuk u përzgjodh lidhje!" #~ msgid "http://liferea.sf.net" #~ msgstr "http://liferea.sf.net" #~ msgid "Updates all subscriptions. This does not update OCS directories." #~ msgstr "Përditëson tërë pajtimet. Kjo nuk do të përditësojë drejtoritë OCS." #~ msgid "/Toggle _Read Status" #~ msgstr "/Këmbe Gjendje _Leximi" #~ msgid "/Toggle Item _Flag" #~ msgstr "/Këmbe _Shenjë Ojekti" #~ msgid "/_Increase Text Size" #~ msgstr "/_Rrit Madhësi Teksti" #~ msgid "/_Decrease Text Size" #~ msgstr "/_Zvogëlo Madhësi Teksti" #~ msgid "/Toggle _Online|Offline" #~ msgstr "/Këmbe _Online|Offline" #~ msgid "/_Preferences..." #~ msgstr "/_Parapëlqime..." #~ msgid "/_Show|Hide Window" #~ msgstr "/_Shfaqe|Fshihe Dritaren" #~ msgid "/_Quit" #~ msgstr "/_Dil" #~ msgid "/_Update" #~ msgstr "/_Përditëso" #~ msgid "/_New/New _Subscription..." #~ msgstr "/I -ri/_Pajtim i Ri..." #~ msgid "/_New/New _Folder..." #~ msgstr "/_E re/_Dosje e Re..." #~ msgid "/_New/New S_earch Folder..." #~ msgstr "/_E re/Dosje e Re _Kërkimesh..." #~ msgid "/_New/New S_ource..." #~ msgstr "/_E re/_Burim i Ri..." #~ msgid "/_New/New _News Bin..." #~ msgstr "/_E re/Kosh i Ri _Lajmesh..." #~ msgid "/_Properties..." #~ msgstr "/_Veti..." #~ msgid "Cookie for %s has expired!" #~ msgstr "\"Cookie\" për %s ka skaduar!" #~ msgid "internal error! time conversion error! mktime failed!\n" #~ msgstr "gabim i brendshëm! gabim shndërrimi kohe! \"mktime\"-i dështoi!\n" #~ msgid "Invalid RFC822 date format! Ignoring date information!\n" #~ msgstr "Format i pavlefshëm date RFC822! Po shpërfill të dhëna date!\n" #~ msgid ".rdf" #~ msgstr ".rdf" #, fuzzy #~ msgid "Online Help Feed" #~ msgstr "&Kërko për Ndihmë" #~ msgid "

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

" #~ msgstr "" #~ "

\"%s\" nuk ëhstë një kartelë fshehtinë e vlefshme! Nuk mund të krijoj " #~ "kartelë fshehtinë!

" #~ msgid "There were errors while parsing cache file \"%s\"" #~ msgstr "Pati gabime gjatë përtypjes së kartelës fshehtinë \"%s\"" #~ msgid "user defined command" #~ msgstr "urdhër i përcaktuar nga përdoruesi" #~ msgid "Update _Selected" #~ msgstr "Përditëso të _Përzgjedhurën" #~ msgid "_Delete Selected" #~ msgstr "_Fshij të Përzgjedhurat" #~ msgid "Filter Feeds Without Unread Headlines" #~ msgstr "Filtro Prurje Pa Tituj të Palexuar" #~ msgid "Toggles the item flag." #~ msgstr "Këmben shenjën e objektit." #, fuzzy #~ msgid "Toggle Search Box" #~ msgstr "Kopjo Kuti Teksti" #~ msgid "Close search" #~ msgstr "Mbyll kërkimin" #~ msgid "single item view" #~ msgstr "Parje e një objekti" #~ msgid "label133" #~ msgstr "label133" #~ msgid "Conversion Filter" #~ msgstr "Filtër Shndërrimi" #~ msgid "Display only time" #~ msgstr "Shfaq vetëm kohë" #~ msgid "Display date and time" #~ msgstr "Shfaq datë dhe kohë" #~ msgid "User defined format:" #~ msgstr "Format i përcaktuar nga përdoruesi:" #, fuzzy #~ msgid "Headline Display" #~ msgstr "Shfaq Kredite" #~ msgid "_Enable Proxy" #~ msgstr "_Aktivizo \"Proxy\"" #, fuzzy #~ msgid "Feedster Search" #~ msgstr "Kërko Tekst..." #~ 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" #~ "\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 "" #~ "Kod, Arnime, 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" #~ "Kod prej projektesh të tjerë\n" #~ "\n" #~ "Anders Carlsson (tray icon support)\n" #~ "Philippe Martin, Brion Vibber (favicon support)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)" #~ 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" #~ "Tomislav Markovski \n" #~ "Jose Maria Mateos \n" #~ "Vladimir Petkov \n" #~ "Rex Tsai \n" #~ "Alekseev Vladimir \n" #~ "Antoine REVERSAT \n" #~ "Tibor Pittich \n" #~ msgid "Rules" #~ msgstr "Rregulla" #~ msgid "[No title]" #~ msgstr "[Pa titull]" #~ msgid "Item:" #~ msgstr "Objekt:" #~ msgid "" #~ "Another copy of Liferea was found to be running. Please us it instead. If " #~ "there is no other copy of Liferea running, please delete the \"~/.liferea/" #~ "lock\" lock file." #~ msgstr "" #~ "Ugjet nëj tjetër kopje e Liferea-s në xhirim e sipër. Ju lutem përdorni " #~ "më mirë atë. Nëse nuk ka një tjetër kopje të Liferea-s në xhirim e sipër, " #~ "ju lutem fshini kartelë kyçjeje \"~/.liferea/lock\" lock file." #~ msgid "enclosed file: %s" #~ msgstr "kartelë e përmbyllur: %s" #~ msgid "feed generator" #~ msgstr "prodhues prurjesh" #~ msgid "contributors" #~ msgstr "pjesëmarrësa" #~ msgid "language" #~ msgstr "gjuhë" #~ msgid "feed published on" #~ msgstr "prurje botuar në" #, fuzzy #~ msgid "managing editor" #~ msgstr "/Përpunues Luajliste" #~ msgid "webmaster" #~ msgstr "webmaster" #~ msgid "report errors to" #~ msgstr "raporto gabime te" #~ msgid "original source" #~ msgstr "burim fillestar" #~ msgid "original time" #~ msgstr "kohë fillestare" #~ msgid "license" #~ msgstr "licensë" #~ msgid "format" #~ msgstr "format" #~ msgid "identifier" #~ msgstr "identifikues" #~ msgid "source" #~ msgstr "burim" #~ msgid "coverage" #~ msgstr "mbulim" #~ msgid "ERROR: zlib_uncompress: %d %s\n" #~ msgstr "GABIM: zlib_uncompress: %d %s\n" #~ msgid "ERROR: Unsupported flags %d\n" #~ msgstr "GABIM: Shenja të pambuluara %d\n" #~ msgid "no namespace handler for <%s:%s>!\n" #~ msgstr "s'ka trajtues emërhapësire për <%s:%s>!\n" #~ msgid "

Could not find RDF header!

" #~ msgstr "

S'gjeta dot titull RDF!

" #~ msgid "

Could not find OPML header!

" #~ msgstr "

S'gjeta dot titull OPML!

" #~ msgid "You must select a feed entry" #~ msgstr "Duhet të përzgjidhni një zë prurjeje." #~ msgid "You must select a feed entry." #~ msgstr "Duhet të përzgjidhni një zë prurjeje." #~ msgid "A folder must be selected." #~ msgstr "Duhet përzgjedhur një dosje." #~ msgid "Htmlview API mismatch!" #~ msgstr "Ngatërrim API Htmlview!" #~ msgid "Available browser modules (%s):\n" #~ msgstr "Module të mundshëm shfletuesi (%s):\n" #~ msgid "Loading configured browser module (%s)!\n" #~ msgstr "Po ngarkoj modul të formësuar shfletuesi (%s)!\n" #~ msgid "No browser module configured!\n" #~ msgstr "Pa modul shfletuesi të formësuar!\n" #~ msgid "trying to load browser module %s (%s)\n" #~ msgstr "po provoj të ngarkoj modulin %s (%s)\n" #~ msgid "New Feed" #~ msgstr "Prurje e Re" #~ msgid "Next Unread" #~ msgstr "Të palexuarin Pasues" #~ msgid "Mark As Read" #~ msgstr "Shenjoje Si të Lexuar" #~ msgid "Update All" #~ msgstr "Përditëso Tërë" #~ msgid "Liferea notification" #~ msgstr "Njoftim Liferea" #~ msgid "/_Rename Folder..." #~ msgstr "/_Riemërto Dosjen..." #~ msgid "/_Delete Folder" #~ msgstr "/_Fshij Dosje" #~ msgid "/_Next Unread Item" #~ msgstr "/Objekti _Tjetër i Palexuar" #~ msgid "Please do a search first!" #~ msgstr "Ju lutem kryeni një kërkim më parë!" #~ msgid "URL" #~ msgstr "URL" liferea-1.10.17/po/sv.po000066400000000000000000002536161261475620100147170ustar00rootroot00000000000000# Swedish translation of Liferea. # Copyright (C) 2005-2011 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. # msgid "" msgstr "" "Project-Id-Version: liferea 1.8-rc1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-01-25 23:54+0100\n" "PO-Revision-Date: 2011-10-31 09:43+0100\n" "Last-Translator: Daniel Nylander \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" #: ../liferea.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Nyhetsläsare" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Nyhetsläsaren Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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 "" "Denna kanal är avslutad. Den är inte längre tillgänglig. Liferea kommer inte " "att uppdatera den mer, men du kan fortfarande få 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 prenumerationen misslyckades!
HTTP-felkod " ": " #: ../xslt/feed.xml.in.h:3 msgid "There were errors while parsing this feed!" msgstr "Fel inträffade under tolkning av denna kanal!" #: ../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 "" #: ../xslt/feed.xml.in.h:7 msgid "There were errors while filtering this feed!" msgstr "Det inträffade fel under filtreringen av denna kanal!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Detaljer för filterfel" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Kanal:" #: ../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 "Publicerare" #: ../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 "barn 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/liferea.ui.h:29 msgid "Source" msgstr "Källa" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Kanal" #: ../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 "No comments yet." msgstr "Inga kommentarer än." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Kommentarer" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Uppdaterar..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Uppdatera" #: ../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:32 msgid "Default Browser" msgstr "Standardwebbläsare" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Webbläsarkommandot misslyckades: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Startar: \"%s\"" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Auktoriseringsfel" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Kan inte skapa cachekatalogen \"%s\"!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Idag %H.%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%e %B %Y" #: ../src/enclosure.c:197 #, 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:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "Fel vid namnbyte från %s till %s\n" #: ../src/export.c:406 ../src/export.c:408 #, 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:414 ../src/export.c:416 #, 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 import." #: ../src/export.c:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "Importerad kanallista" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Importera kanallista" #: ../src/export.c:470 msgid "Import" msgstr "Importera" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 msgid "OPML Files" msgstr "OPML-filer" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Fel under export av kanallista!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Kanallistan exporterad!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Exportera kanallista" #: ../src/export.c:487 msgid "Export" msgstr "Exportera" #: ../src/feed.c:255 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 kanalens typ! Kontrollera om källan verkligen " "pekar på en resurs som tillhandahålls i ett av de synkroniseringsformaten " "som stöds!

Utdata från XML-tolkare:
" #: ../src/feed.c:284 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" har uppdaterats..." #: ../src/feed.c:294 #, 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 "" "URL:en du vill att Liferea ska prenumerera på pekar på en webbsida och den " "automatiska igenkänningen hittade inga kanaler på denna sida. Webbsidan " "kanske inte har stöd för automatisk igenkänning av kanaler." #: ../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 kanal! Kanalen \"%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 kanaltypen." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:404 msgid "There are no unread items" msgstr "Det finns inga olästa artiklar" #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" "Starta Liferea med dess huvudfönster i TILLSTÅND. TILLSTÅND kan vara \"shown" "\", \"iconified\" eller \"hidden\"" #: ../src/main.c:164 msgid "STATE" msgstr "TILLSTÅND" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "Visa versionsinformation och avsluta" #: ../src/main.c:166 msgid "Add a new subscription" msgstr "Lägg till en ny prenumeration" #: ../src/main.c:166 msgid "uri" msgstr "uri" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "Skriv ut felsökningsmeddelanden av alla typer" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "Skriv ut felsökningsmeddelanden för mellanlagringshantering" #: ../src/main.c:173 msgid "Print debugging messages for the configuration handling" msgstr "Skriv ut felsökningsmeddelanden för konfigurationshanteringen" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "Skriv ut felsökningsmeddelanden för databashantering" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "" "Skriv ut felsökningsmeddelanden för alla grafiska gränssnittsfunktioner" #: ../src/main.c:176 #, fuzzy 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 ~/.liferea_1.6/" "output.xhtml" #: ../src/main.c:177 msgid "Print debugging messages of all network activity" msgstr "Skriv ut felsökningsmeddelanden för all nätverksaktivitet" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "Skriv ut felsökningsmeddelanden för alla tolkningsfunktioner" #: ../src/main.c:179 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/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "Skriv ut felsökningsmeddelanden när funktioner används" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "Skriv ut felsökningsmeddelanden för kanaluppdateringsprocessen" #: ../src/main.c:182 msgid "Print debugging messages of the search folder matching" msgstr "Skriv ut felsökningsmeddelanden för sökmappsmatchningar" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "Skriv ut informativa felsökningsmeddelanden" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "Skriv ut felsökningsmeddelanden för angivet ämne" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, nyhetsläsaren för Linux" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "Besök http://lzone.de/liferea/ för mer information" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "Uppdateringsbegäran avbröts" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Kunde inte slå upp målets värdnamn" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Kunde inte slå upp proxyns värdnamn" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Kunde inte ansluta till fjärrvärden" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Kunde inte ansluta till proxyn" #: ../src/net.c:325 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:328 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:331 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 denna kanal. Uppdatera ditt användarnamn och " "lösenord i kanalens egenskapsruta" #: ../src/net.c:333 msgid "Payment required" msgstr "Betalning krävs" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "Du tillåts inte att komma åt denna resurs" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Resursen kunde inte hittas" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Metoden inte tillåten" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Inte acceptabelt" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Proxyautentisering krävs" #: ../src/net.c:339 msgid "Request timed out" msgstr "Begäran översteg tidsgränsen" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Borta. Resursen finns inte. Var god och avprenumerera!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Det uppstod ett internt fel i uppdateringsprocessen" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "" "Kanalen är inte tillgänglig: Servern begärde en omdirigering som inte stöds!" #: ../src/net.c:349 msgid "Client Error" msgstr "Klientfel" #: ../src/net.c:351 msgid "Server Error" msgstr "Serverfel" #: ../src/net.c:353 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 "Kanalnamn" #: ../src/subscription.c:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Prenumerationen \"%s\" håller redan på att uppdateras!" #: ../src/subscription.c:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Uppdaterar kanalikonen för \"%s\"" #: ../src/subscription.c:193 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 URL:en " "och utmatningen i konsollen." #: ../src/subscription.c:211 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "URL:en för \"%s\" har ändrats permanent och blev uppdaterad" #: ../src/subscription.c:219 #, 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:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" har inte ändrats sedan senaste uppdateringen" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Uppdaterar \"%s\"" #: ../src/update.c:259 #, 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:282 #, c-format msgid "%s exited with status %d" msgstr "%s avslutades med status %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, 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:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Fel: Kunde inte öppna filen \"%s\"" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Fel: Filen \"%s\" finns inte" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Ny sökmapp" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Det fanns ytterligare fel. Utmatningen har kortats ned!]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d bilaga" msgstr[1] "%d bilagor" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Välj fil" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d ny)" msgstr[1] " (%d nya)" #: ../src/ui/liferea_shell.c:330 #, 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:716 msgid "Help Topics" msgstr "Hjälpämnen" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Snabbreferens" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "Vanliga frågor" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea är nu i anslutet läge" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Arbeta frånkopplat" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea är nu i frånkopplat läge" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Arbeta ansluten" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "_Prenumerationer" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "Uppdatera _alla" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "Uppdaterar alla prenumerationer." #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Markera alla som _lästa" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Markerar alla artiklar i alla prenumerationer som lästa." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "_Importera kanallista..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "Importerar en OPML-kanallista." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "_Exportera kanallista..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Exporterar kanallistan i som OPML." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "A_vsluta" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Kanal" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Ta bort _alla artiklar" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Tar bort alla artiklar i den för närvarande markerade kanalen." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "_Artikel" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "_Nästa olästa artikel" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "_Nästa olästa artikel" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Visa" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "_Större textstorlek" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Ökar textstorleken i artikelvyn." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "_Mindre textstorlek" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Minskar textstorleken i artikelvyn." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "_Verktyg" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "_Uppdateringsövervakare" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "Visa en lista över alla kanaler som finns i uppdateringskön" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Inställningar" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Redigera inställningar." #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "S_ök" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Sök i alla kanaler..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Visa sökrutan." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Hjälp" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_Innehåll" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Visa hjälp för detta program." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Snabbreferens" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Visa en lista över alla genvägar i Liferea." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_Frågor och svar" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Visa de vanligast ställda frågorna och svaren." #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_Om" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Visar en \"Om\"-dialog." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "_Normal vy" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Ställ in vyläge till e-postklientläget." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "_Bred vy" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Ställ in vyläge till att använda tre vertikala paneler." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "_Kombinerad vy" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Ställ in vyläge till tvåpanelsläget." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "_Minskad kanallista" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "Dölj kanaler med inga olästa artiklar." #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "_Ny prenumeration..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Lägger till en prenumeration till kanallistan." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Ny _mapp..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Lägger till en mapp till kanallistan." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Ny sö_kmapp..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Lägger till en ny sökmapp till kanallistan." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Ny _källa..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Lägger till en ny kanallistkälla." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "Ny _nyhetskorg..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Lägg till en ny nyhetskorg." #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "_Markera artiklar som lästa" #: ../src/ui/liferea_shell.c:979 msgid "" "Marks all items of the selected feed list node / in the item list as read." msgstr "" "Markerar alla artiklar i den valda kanallistnoden / i artikellistan som " "lästa." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Uppdatera" #: ../src/ui/liferea_shell.c:981 msgid "" "Updates the selected subscription or all subscriptions of the selected " "folder." msgstr "" "Uppdaterar den markerade prenumerationen eller alla prenumerationer i den " "markerade mappen." #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "_Egenskaper" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Öppnar egenskapsdialogen för den markerade prenumerationen." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "_Ta bort" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Tar bort den markerade prenumerationen." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "Växla _lässtatus" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Växlar lässtatus för den markerade artikeln." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Växla artikel_flagga" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Växlar flaggstatus för den markerade artikeln." #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "Ta _bort" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Tar bort den markerade artikeln." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "Öppnar artikelns länk i den konfigurerade webbläsaren." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "_Öppna i webbläsare" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Öppnar artikelns länk i den konfigurerade webbläsaren." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Inställningar för extern webbläsare" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Öppnar artikelns länk i den konfigurerade webbläsaren." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "_Arbeta frånkopplat" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Detta alternativ låter dig inaktivera prenumerationsuppdatering." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Nyhetsläsare för Linux" #: ../src/ui/liferea_shell.c:1341 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älkommen till Liferea, en nyhetsläsare för nyhetskanaler på nätet." "

Du kan lägga till nya prenumerationer

  • Från huvudmenyns " "\"Prenumeration\" -> \"Ny prenumeration\"
  • Genom att släppa " "kanallänkar i prenumerationslistan
  • Genom att högerklicka på länkar " "och välja \"Prenumerera\" i Liferea

" #: ../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:205 msgid "All Files" msgstr "Alla filer" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Tar bort post" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, 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_view.c:354 msgid "Deletion Confirmation" msgstr "Bekräftelse för borttagning" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea är i frånkopplat läge. Inga uppdateringar är möjliga." #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "Öppna länk i _flik" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "Öppna länk i _webbläsare" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "Öppna länk i _webbläsare" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "_Bokmärk länk på %s" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "_Kopiera länkadress" #: ../src/ui/liferea_htmlview.c:639 msgid "_Copy Image Location" msgstr "_Kopiera bildadress" #: ../src/ui/liferea_htmlview.c:641 msgid "S_ave Link As" msgstr "Spara länk so_m" #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "Sp_ara bild som" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "_Prenumerera..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** Ingen titel ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Datum" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Rubrik" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Ingen artikel har markerats" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Artikeln har ingen angiven länk!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Du måste markera en kanal för att ta bort dess artiklar!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "Kopiera till nyhetskorg" #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "_Bokmärk länk på %s" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "_Kopiera bildadress" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "_Ta bort artikel" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "Öppna bilaga..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "Spara som..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "Kopiera länkadress" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "_Uppdatera alla" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "_Visa Liferea" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "_Uppdatera mapp" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "_Markera alla som lästa" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "_Ny" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "Ny p_renumeration..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "Ny _källa..." #: ../src/ui/popup_menu.c:329 msgid "Sort Feeds" msgstr "Sortera kanaler" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "Bygg _om" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "GNOME:s standardwebbläsare" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Text under ikoner" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Text bredvid ikoner" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Endast ikoner" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Endast text" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "minuter" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "timmar" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "dygn" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Blanksteg" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Blanksteg" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Blanksteg" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "_Normal vy" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "_Bred vy" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "_Kombinerad vy" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Manuell" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Webbläsarens standard" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Befintligt fönster" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Nytt fönster" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Ny flik" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "Integrera med meddelandemenyn (indikator)" #: ../src/ui/preferences_dialog.c:685 msgid "Terminate instead of minimizing to the messaging menu" msgstr "Avsluta istället för att minimera till meddelandemenyn" #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "Starta minimerat i meddelandemenyn" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Typ" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "(Tom)" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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] "Kanalens leverantör föreslår ett uppdateringsintervall på %d minut." msgstr[1] "" "Kanalens leverantör föreslår ett uppdateringsintervall på %d minuter." #: ../src/ui/subscription_dialog.c:434 msgid "This feed specifies no default update interval." msgstr "Denna kanal anger inget standardintervall för uppdatering." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "Namnlös" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d ny artikel" msgstr[1] "%d nya artiklar" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Inga nya artiklar" #: ../src/ui/ui_tray.c:228 #, c-format msgid "" "%s\n" "%d unread item" msgid_plural "" "%s\n" "%d unread items" msgstr[0] "" "%s\n" "Inga olästa artiklar" msgstr[1] "" "%s\n" "%d olästa artiklar" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Inga olästa artiklar" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Webbplats" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Ogiltig Atom-kanal: okänd författare" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%e %B %H.%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Ny prenumeration" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "Inloggning mot Google Reader misslyckades!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 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 "" "Integrera kanallistan för ditt Google Reader-konto. Liferea kommer att " "presentera dina Google Reader-prenumerationer och kommer att synkronisera " "din kanallista och läslistor." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:326 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 "" "Integrera blogrolls eller Planets i din kanallista. Liferea kommer " "automatiskt att lägga till och ta bort kanaler enligt ändringar gjorda i " "OPML-källdokumentet." #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Inga källtyper för kanallista hittades!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Källtyp" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:363 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 "" "Integrera kanallistan för ditt Tiny Tiny RSS 1.5+-konto. Liferea kommer att " "presentera dina tt-rss-prenumerationer och kommer att synkronisera din " "kanallista och läslistor." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "Kunde inte tolka JSON returnerad av tt-rss API!" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Den här kanalen finns inte längre!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Den här nyheten har ingen rubrik" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Besök" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Öppna kanal" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Markera alla som lästa" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "%s har %d uppdatering" msgstr[1] "%s har %d uppdateringar" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Kanaluppdatering" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Visa detaljer" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Autentisering" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Lösenord:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "Användar_namn:" #: ../glade/auth.ui.h:6 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 " "kanallistefil utan någon kryptering." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Lösenord" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "A_nvändarnamn (e-post)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "normal vy" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "bred vy" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Visa rubriker" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "kombinerad vy" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Rubriker" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Ansluten/Frånkopplad" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Egenskaper för prenumeration" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Kanalnamn" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "Kanal_namn:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "Uppdateringsintervall" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Använd globalt standardintervall för uppdatering." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_Kanalspecifikt uppdateringsintervall på" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "Uppdatera _inte denna kanal automatiskt." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "" "Denna kanals leverantör föreslår ett uppdateringsintervall på %d minuter." #: ../glade/liferea.ui.h:18 msgid "General" msgstr "Allmänt" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Plats" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Källtyp:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Källa:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Kommando" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Lokal fil" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Välj fil..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Använd konverterings_filter" #: ../glade/liferea.ui.h:27 ../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 kanaler och " "kataloger i format som inte stöds. Se dokumentationen för mer information." #: ../glade/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "_Konvertera med hjälp av:" #: ../glade/liferea.ui.h:30 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 kanalernas innehåll ska sparas när Liferea " "avslutas. Markerade artiklar sparas alltid till cachen." #: ../glade/liferea.ui.h:31 msgid "_Default cache settings" msgstr "_Standardinställningar för cache" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "_Inaktivera cache" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Obegränsad cache" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "A_ntal artiklar att spara:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Arkiv" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Använd HTTP-_autentisering" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "Anvä_nd inte proxy för hämtning" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Hämta" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "Hämta _automatiskt alla kanalens bilagor." #: ../glade/liferea.ui.h:42 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 " "markeras." #: ../glade/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Ignorera _kommentarkanaler för denna prenumeration." #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "_Tvinga visning av notifieringar för denna prenumeration." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "Visa a_ldrig notifieringar för denna prenumeration." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "_Markera hämtade artiklar som lästa." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Avancerat" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Ny mapp" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "_Mappnamn:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Byt namn" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Nytt namn:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Egenskaper för sökmapp" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "Sök_namn:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "Hitta artiklar som matchar följande kriteria" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "N_ågon regel matchar" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "_Alla regler måste matcha" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "Öppna bilaga..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "Hämtar en bilaga av typen:" #: ../glade/liferea.ui.h:59 #, 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 "" "Vad ska Liferea göra med denna bilaga? Ange kommandot som du vill köra " "nedan. Hämtade bilagor kommer att skickas med som ett argument till detta " "kommando:" #: ../glade/liferea.ui.h:60 msgid "_Browse" msgstr "_Bläddra" #: ../glade/liferea.ui.h:61 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/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Sök i alla kanaler" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Sök efter:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Avancerat..." #: ../glade/liferea.ui.h:66 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 kanaler. Sökträffarna kommer att " "visas i artikellistan." #: ../glade/liferea.ui.h:67 msgid "Update Monitor" msgstr "Uppdateringsövervakare" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "Väntande förfrågningar" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "Hämtar nu" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Avbryt _alla" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Skapa nyhetskorg" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Namn på nyhetskorg:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Om" #: ../glade/liferea.ui.h:74 #, fuzzy msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "Copyright © 2003-2011\n" "Liferea-teamet\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea är en nyhetsläsare för GTK+" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Webbsida för Liferea" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "Avancerad sökning" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "_Sökmapp..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Skapa sökmotorkanal" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "ange en valfri söksträng" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "_Maximalt antal resulterande artiklar:" #: ../glade/liferea.ui.h:84 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." #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Hämtning / Efterbehandling" #: ../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 url som pekar på en giltig OPML-kanallista." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Adress" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Välj fil" #: ../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 tt-rss account settings." msgstr "Ange dina kontoinställningar för tt-rss." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "_Server-URL" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "A_nvändarnamn" #: ../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 kanalidentifiering för eller om du " "vet den exakta kanaladressen." #: ../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 kanalcache" #: ../glade/prefs.ui.h:3 msgid "Default _number of items per feed to save:" msgstr "A_ntal artiklar per kanal att spara som standard:" #: ../glade/prefs.ui.h:4 msgid "Feed Update Settings" msgstr "Inställningar för kanaluppdatering" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "_Uppdatera alla prenumerationer vid uppstart." #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Standardintervall för _kanaluppdatering:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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 kanaler oftare än en gång i " "timmen." #: ../glade/prefs.ui.h:9 msgid "Feeds" msgstr "Kanaler" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "Inställningar för mappvisning" #: ../glade/prefs.ui.h:11 msgid "_Show the items of all child feeds when a folder is selected." msgstr "_Visa artiklar i alla barnkanaler när en mapp är markerad." #: ../glade/prefs.ui.h:12 msgid "_Hide read items." msgstr "_Dölj lästa artiklar." #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Kanalikoner (Favicons)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Uppdatera alla kanalikoner nu" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Mappar" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Läser rubriker" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "_Bläddra igenom artiklar med:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Webbintegration" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Posta bokmärken till" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Inställningar för intern webbläsare" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Öppna länkar i Liferea-_fönstret." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Inaktivera Javascript." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "_Aktivera webbläsarinstick." #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "Inställningar för extern webbläsare" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Öppna länk i:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "Manuell" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Webbläsare:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Webbläsare" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Notifieringsinställningar" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Visa ett _popupfönster med de nya rubrikerna." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Visa en status_ikon i notifieringsfältet (systembrickan)." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Visa a_ntal nya artiklar i notifieringsytan." #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "A_vsluta istället för att minimera till notifieringsytan." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Starta i notifieringsytan." #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Inställningar för verktygsrad" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "_Dölj verktygsrad." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Etiketter för verktygsrads_knappar:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Gränssnitt" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "Proxyserver för HTTP" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_Identifiera automatiskt (GNOME eller miljö)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_Ingen proxyserver" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Manuell inställning:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "Port för _proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "_Värd för proxy:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Använd proxyau_tentisering" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "_Lösenord för proxy:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Använda_rnamn för proxy:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxyserver" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "Hämtar bilagor" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Hämta med" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "Öppnar bilagor" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Bilagor" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #~ msgid "Download and view feeds" #~ msgstr "Hämta och visa kanaler" #~ msgid "You may want to validate the feed using" #~ msgstr "Du kanske vill validera kanalen med" #~ msgid "Launch Item In _Tab" #~ msgstr "Öppna artikel i _flik" #~ msgid "_Launch Item In Browser" #~ msgstr "Öppna artikel i _webbläsare" #~ msgid "Copy Item _URL to Clipboard" #~ msgstr "Kopiera artikelns _url till urklipp" #~ msgid "flag" #~ msgstr "flagga" #~ msgid "bookmark" #~ msgstr "bokmärke" #~ msgid "comments" #~ msgstr "kommentarer" #~ msgid "Enclosure download FAILED: \"%s\"" #~ msgstr "Hämtning av bilaga MISSLYCKADES: \"%s\"" #~ msgid "Enclosure download finished: \"%s\"" #~ msgstr "Hämtning av bilaga är färdig: \"%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 "" #~ "Den här versionen av Liferea använder ett nytt cacheformat och har " #~ "migrerat din kanalcache. Cachens innehåll i %s blev inte automatiskt " #~ "borttaget. Ta bort den här katalogen manuellt när du är säker på att " #~ "migreringen lyckades!" #~ msgid "Download FAILED: \"%s\"" #~ msgstr "Hämtningen MISSLYCKADES: \"%s\"" #~ msgid "Download finished." #~ msgstr "Hämtningen är färdig." #~ msgid "Choose download directory" #~ msgstr "Välj hämtningskatalog" #~ msgid "" #~ "_Manual:\n" #~ "(%s for URL)" #~ msgstr "" #~ "_Manuellt:\n" #~ "(%s för URL)" #~ msgid "_Save downloads in" #~ msgstr "_Spara hämtade filer i" #~ msgid "Synchronized with Nearby Hosts" #~ msgstr "Synkroniserad med närliggande värdar" #~ msgid "_Enable Local LAN Synchronization" #~ msgstr "_Aktivera lokal LAN-synkronisering" #~ msgid "_Service Name" #~ msgstr "_Tjänstenamn" #~ msgid "Sync" #~ msgstr "Synkronisera" #~ msgid "Downloading Enclosure" #~ msgstr "Hämtar bilaga" # Denna sträng är inte direkt kristallklar #~ msgid "_Pass URL and do not download enclosure." #~ msgstr "S_kicka URL:en och hämta inga bilagor." #~ msgid "" #~ "Jumps to the next unread item. If necessary selects the next feed with " #~ "unread items." #~ msgstr "" #~ "Hoppar till nästa olästa artikel. Om det behövs väljs nästa kanal med " #~ "olästa artiklar." #~ msgid "Liferea Sync %s@%s" #~ msgstr "Liferea-synkronisering %s@%s" # Technorati.. #~ msgid "link cosmos" #~ msgstr "link cosmos" #~ msgid "Print debugging messages for the plugin loading" #~ msgstr "Skriv ut felsökningsmeddelanden för inläsning av insticksmoduler" #~ msgid "Liferea seems to be running already!" #~ msgstr "Liferea verkar redan köra!" #~ msgid "Update status" #~ msgstr "Uppdateringsstatus" #~ msgid "was updated" #~ msgstr "blev uppdaterad" #~ msgid "was not updated" #~ msgstr "blev inte uppdaterad" #~ msgid "The orientation of the tray." #~ msgstr "Brickans orientering." #~ 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 "_Skripthanterare" #~ msgid "Allows to configure and edit LUA hook scripts" #~ msgstr "Tillåter konfigurering och redigering av LUA-hookskript" #~ msgid "Search With ..." #~ msgstr "Sök med ..." #~ msgid "%d Search Result for \"%s\"" #~ msgid_plural "%d Search Results for \"%s\"" #~ msgstr[0] "%d sökträff för \"%s\"" #~ msgstr[1] "%d sökträffar för \"%s\"" #~ msgid "%d Search Result" #~ msgid_plural "%d Search Results" #~ msgstr[0] "%d sökträff" #~ msgstr[1] "%d sökträffar" #~ 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 "" #~ "Artikellistan innehåller nu alla artiklar som matchar det angivna " #~ "sökmönstret. Om du vill spara dessa sökträffar permanent kan du klicka på " #~ "knappen \"Sökmapp\" i sökfönstret, så skapar Liferea en sökmapp i din " #~ "kanallista." #~ msgid "Count" #~ msgstr "Antal" #~ msgid "You have to select a feed entry" #~ msgstr "Du måste markera en kanal" #~ msgid "(empty)" #~ msgstr "(tom)" #~ msgid "_Delete" #~ msgstr "_Ta bort" #~ msgid "_Properties..." #~ msgstr "_Egenskaper..." #~ msgid "Update out-dated feeds" #~ msgstr "Uppdatera utdaterade kanaler" #~ msgid "Force update of all feeds" #~ msgstr "Tvinga uppdatering av alla kanaler" #~ msgid "No feed update at all" #~ msgstr "Ingen kanaluppdatering alls" #~ msgid "startup" #~ msgstr "uppstart" #~ msgid "feed updated" #~ msgstr "kanal uppdaterad" #~ msgid "feed added" #~ msgstr "kanal tillagd" #~ msgid "item selected" #~ msgstr "artikel markerad" #~ msgid "feed selected" #~ msgstr "kanal markerad" #~ msgid "item unselected" #~ msgstr "artikel avmarkerad" #~ msgid "feed unselected" #~ msgstr "kanal avmarkerad" #~ msgid "shutdown" #~ msgstr "stäng av" #~ msgid "Sorry, no scripting support available!" #~ msgstr "Tyvärr, stöd för skript är inte tillgängligt!" #~ msgid "Script Name" #~ msgstr "Skriptnamn" #~ msgid "No script selected!" #~ msgstr "Inget skript har markerats!" #~ msgid "Create a new search feed." #~ msgstr "Skapa en ny sökkanal." #~ msgid "Liferea is unable to display this item's content." #~ msgstr "Liferea kan inte visa artikelns innehåll." #~ msgid "

View this item's content.

" #~ msgstr "

Visa artikelns innehåll.

" #~ 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 "" #~ "Integrera kanallistan för ditt Bloglines-konto. Liferea kommer att " #~ "presentera din Bloglines-prenumeration som ett skrivskyddat underträd i " #~ "kanallistan." #~ msgid "feedlist.opml" #~ msgstr "feedlist_sv.opml" #~ msgid "%s has %d new / updated headline\n" #~ msgid_plural "%s has %d new / updated headlines\n" #~ msgstr[0] "%s innehåller %d ny / uppdaterad rubrik\n" #~ msgstr[1] "%s innehåller %d nya / uppdaterade rubriker\n" #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid " " #~ msgstr " " #~ msgid "Feed Source" #~ msgstr "Kanalkälla" #~ msgid "Hook" #~ msgstr "Hook" #~ msgid "Registered Scripts" #~ msgstr "Registrerade skript" #~ msgid "Script Code" #~ msgstr "Skriptkod" #~ msgid "text/plain" #~ msgstr "text/plain" #~ msgid "" #~ "This option can cause significant delays when loading folders " #~ "containing many feeds." #~ msgstr "" #~ "Detta alternativ kan orsaka rejäla fördröjningar vid inläsning av " #~ "mappar som innehåller många kanaler." #~ msgid "Downloading Enclosures" #~ msgstr "Hämtning av bilagor" #~ msgid "Feed Cache Handling" #~ msgstr "Hantering av kanalcache" #~ msgid "Feed Name" #~ msgstr "Kanalnamn" #~ msgid "Feed Update Settings" #~ msgstr "Inställningar för kanaluppdatering" #~ msgid "HTTP Proxy Server" #~ msgstr "HTTP-proxyserver" #~ msgid "Opening Enclosures" #~ msgstr "Öppning av bilagor" #~ msgid "Reading Headlines" #~ msgstr "Läsning av rubriker" #~ msgid "Toolbar Settings" #~ msgstr "Inställningar för verktygsrad" #~ msgid "Update Interval" #~ msgstr "Uppdateringsintervall" #~ msgid "Web Integration" #~ msgstr "Webbintegrering" #~ msgid "Add Script" #~ msgstr "Lägg till skript" #~ msgid "At _startup:" #~ msgstr "Vid _uppstart:" # APML #~ msgid "Attention Profile" #~ msgstr "Attention Profile" #~ msgid "Create new script" #~ msgstr "Skapa nytt skript" #~ msgid "Exec Command" #~ msgstr "Kör kommando" #~ msgid "Reuse existing script" #~ msgstr "Återanvänd befintligt skript" #~ msgid "Script Manager" #~ msgstr "Skripthanterare" #~ msgid "Search _Link Cosmos with" #~ msgstr "Sök _Link Cosmos med" #~ msgid "%s" #~ msgstr "%s" #, fuzzy #~ msgid "FAILED to download enclosure: \"%s\"" #~ msgstr "Hämtning av bilaga är färdig: \"%s\"" #, fuzzy #~ msgid "" #~ "Copyright (c) 2003-2009\n" #~ "Lars Lindner and \n" #~ "Nathan J. Conrad \n" #~ msgstr "" #~ "Copyright © 2003-2007\n" #~ "Lars Lindner och \n" #~ "Nathan J. Conrad \n" #~ msgid "/_Bookmark Link at %s" #~ msgstr "/_Bokmärk länk på %s" #~ msgid "/Toggle _Read Status" #~ msgstr "/Växla _läst\\/oläst" #~ msgid "/Toggle Item _Flag" #~ msgstr "/Växla artikel_flagga" #~ msgid "/_Preferences" #~ msgstr "/_Inställningar" #~ msgid "/_Quit" #~ msgstr "/_Avsluta" #, fuzzy #~ msgid "/Copy Link Location" #~ msgstr "/_Kopiera länkadress" #~ msgid "/_Update" #~ msgstr "/_Uppdatera" #~ msgid "/_New/New _Subscription..." #~ msgstr "/_Ny/Ny _prenumeration..." #~ msgid "/_New/New _Folder..." #~ msgstr "/_Ny/Ny _mapp..." #~ msgid "/_New/New S_earch Folder..." #~ msgstr "/_Ny/Ny _sökmapp..." #~ msgid "/_New/New S_ource..." #~ msgstr "/_Ny/Ny _källa..." #~ msgid "/_New/New _News Bin..." #~ msgstr "/_Ny/Ny _nyhetskorg..." #~ msgid "Access Forbidden" #~ msgstr "Åtkomst förbjuden" #~ msgid " --help Print this help and exit" #~ msgstr " --help Skriv ut detta meddelande och avsluta" #~ msgid " --mainwindow-state=STATE" #~ msgstr " --mainwindow-state=TILLSTÅND" #~ msgid " Start Liferea with its main window in STATE." #~ msgstr "" #~ " Starta Liferea med dess huvudfönster i TILLSTÅND." #~ msgid " Possible topics are: all,cache,conf,db,gui,html" #~ msgstr " Möjliga ämnen är: 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 "Argumentet --mainwindow-state måste anges med en parameter.\n" #~ msgid "The --session argument must be given a parameter.\n" #~ msgstr "--session argument måste anges med en parameter.\n" #~ msgid "Liferea encountered an unknown argument: %s\n" #~ msgstr "Liferea påträffade på ett okänt argument: %s\n" #~ msgid "Cookie for %s has expired!" #~ msgstr "Kakan för %s har gått ut!" #, fuzzy #~ msgid "Network error" #~ msgstr "anmäl fel till" #~ msgid "_Limit cache to" #~ msgstr "_Begränsa cache till" #~ msgid "items." #~ msgstr "artiklar." #~ msgid "Feed link auto discovery failed! No feed links found!" #~ msgstr "" #~ "Automatisk länkidentifering för kanaler misslyckades! Inga kanallänkar " #~ "hittades!" #~ msgid "Could not download \"%s\". Will retry in %d seconds." #~ msgstr "Kunde inte hämta \"%s\". Försöker igen om %d sekunder." #~ msgid "http://liferea.sf.net" #~ msgstr "http://liferea.sf.net" #~ msgid "Show Menu _And Toolbar" #~ msgstr "Vis_a meny och verktygsrad" #~ msgid "Show _Menu Only" #~ msgstr "Visa endast _meny" #~ msgid "Show _Toolbar Only" #~ msgstr "Visa endast _verktygsrad" #~ msgid "" #~ "Unexpected end of character sequence or corrupt UTF-8 encoding! Some " #~ "characters were dropped!" #~ msgstr "" #~ "Oväntad teckenslutssekvens eller felaktig UTF-8-kodning! Vissa tecken " #~ "uteslöts!" #~ msgid "" #~ "Sorry, I was not able to load any installed browser plugin! Try the --" #~ "debug-plugins option to get debug information!" #~ msgstr "" #~ "Tyvärr, jag kunde inte läsa in några installerade webbläsarinstick. Prova " #~ "argumentet --debug-plugins för att få felsökningsinformation!" #~ msgid "This item does not have a link assigned!" #~ msgstr "Den här artikeln har ingen tilldelad länk!" #~ msgid "No link selected!" #~ msgstr "Ingen länk har markerats!" #~ msgid "/_Increase Text Size" #~ msgstr "/_Större textstorlek" #~ msgid "/_Decrease Text Size" #~ msgstr "/_Mindre textstorlek" #~ msgid "/Toggle _Online|Offline" #~ msgstr "/Växla _ansluten|frånkopplad" #~ msgid "/_Show|Hide Window" #~ msgstr "/_Visa|Dölj fönster" #~ msgid "" #~ "Saves this search as a search folder, which will appear in the feed list." #~ msgstr "" #~ "Sparar denna sökning som en sökmapp, vilken kommer att synas i " #~ "kanallistan." #~ msgid "search" #~ msgstr "sök" #~ msgid "does match" #~ msgstr "matchar" #~ msgid "does not match" #~ msgstr "matchar inte" #~ msgid "Updates all subscriptions. This does not update OCS directories." #~ msgstr "" #~ "Uppdaterar alla prenumerationer. Detta uppdaterar inte OCS-kataloger." #~ msgid "Rule" #~ msgstr "Regel" #~ msgid "Liferea Homepage" #~ msgstr "Lifereas webbsida" #~ 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, programfixar, felsökning\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" #~ "och många andra...\n" #~ "\n" #~ "Kod från andra projekt\n" #~ "\n" #~ "Anders Carlsson (stöd för meddelandefältikon)\n" #~ "Philippe Martin, Brion Vibber (stöd för favicon)\n" #~ "Jonathan Blandford (GtkTreeModelFilter)\n" #~ "Kristian Rietveld (GtkTreeModelFilter)\n" #~ "\n" #~ "Inkluderad programvara\n" #~ "\n" #~ "Liferea använd XSPF Web Music Player för att \n" #~ "tillåta direktuppspelning av poddsändningar. Den\n" #~ "här spelaren skrevs av Fabricio Zuardi och kan \n" #~ "hittas på http://musicplayer.sourceforge.net" #~ msgid "Contributors" #~ msgstr "Bidragsgivare" #~ msgid "" #~ "GNOME default\n" #~ "Text below icons\n" #~ "Text beside icons\n" #~ "Icons only\n" #~ "Text only" #~ msgstr "" #~ "GNOME-standard\n" #~ "Text under ikoner\n" #~ "Text bredvid ikoner\n" #~ "Endast ikoner\n" #~ "Endast text" #~ 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 "" #~ "Observera: Artiklar läggs till sökmappen om minst en tilläggsregel\n" #~ "matchar. De tas bort om minst en borttagande regel matchar." #~ msgid "" #~ "Space\n" #~ " Space\n" #~ " Space" #~ msgstr "" #~ "Space\n" #~ " Space\n" #~ " Space" #~ msgid "Translation" #~ msgstr "Översättning" #~ msgid "" #~ "Update out-dated feeds\n" #~ "Force update of all feeds\n" #~ "No feed update at all" #~ msgstr "" #~ "Uppdatera utdaterade kanaler\n" #~ "Tvinga uppdatering av alla kanaler\n" #~ "Ingen kanaluppdatering alls" #~ msgid "_Name:" #~ msgstr "_Namn:" #~ msgid "" #~ "minutes\n" #~ "hours\n" #~ "days" #~ msgstr "" #~ "minuter\n" #~ "timmar\n" #~ "dygn" #~ msgid "URL is invalid" #~ msgstr "URL:en är ogiltig" #~ msgid "Unsupported network protocol" #~ msgstr "Nätverksprotokollet stöds inte" #~ msgid "Hostname could not be found" #~ msgstr "Värdnamnet kunde inte hittas" #~ msgid "Network connection was refused by the remote host" #~ msgstr "Nätverksanslutningen nekades av fjärrvärden" #~ msgid "Remote host did not finish sending data" #~ msgstr "Fjärrvärden avslutade inte sändningen av data" #~ msgid "Too many HTTP redirects were encountered" #~ msgstr "För många HTTP-omdirigeringar påträffades" #~ msgid "Remote host sent an invalid response" #~ msgstr "Fjärrvärden skickade ett ogiltigt svar" #~ msgid "Webserver's authentication method incompatible with Liferea" #~ msgstr "Webbserverns autentiseringsmetod är inte kompatibel med Liferea" #~ msgid "_Program" #~ msgstr "_Program" #~ msgid "Remove _Selected" #~ msgstr "Ta bort _markerad" #~ msgid "Update _Selected" #~ msgstr "Uppdatera _markerade" #~ msgid "_Delete Selected" #~ msgstr "_Ta bort markerade" #~ msgid "" #~ "Liferea reuses the GNOME proxy settings. If you use GNOME you can " #~ "change these settings in the GNOME Control Center." #~ msgstr "" #~ "Liferea återanvänder GNOME:s proxyinställningar. Om du använder GNOME " #~ "kan du ändra dessa inställningar i GNOME:s kontrollpanel" #~ msgid "_Enable Proxy" #~ msgstr "_Aktivera proxyserver" #~ msgid "Update only feeds scheduled for updates" #~ msgstr "Uppdatera endast kanaler som är schemalagda för uppdatering" #~ msgid "Reset feed update timers (Update no feeds)" #~ msgstr "Nollställ kanalernas uppdateringstimers (utan att uppdatera)" #~ msgid "Searching for \"%s\"" #~ msgstr "Söker efter \"%s\"" #~ msgid "There were errors while parsing the feed %s!" #~ msgstr "Det inträffade fel under tolkning av kanalen %s!" #~ msgid "Liferea notification" #~ msgstr "Notifiering från Liferea" #, fuzzy #~ msgid "item unselect" #~ msgstr "Ingen artikel har markerats" #~ msgid "" #~ "Error while reading cache file \"%s\" ! Cache file could not be loaded!" #~ msgstr "" #~ "Fel vid läsning av cachefilen \"%s\"! Cachefilen kunde inte läsas in!" #~ msgid "" #~ "

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

" #~ msgstr "" #~ "

XML-fel vid tolkning av cachefil! Kanalens cachefil \"%s\" kunde inte " #~ "läsas in!

" #~ msgid "

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

" #~ msgstr "

\"%s\" är inte en giltig cachefil! Kan inte läsa cachefilen!

" #~ msgid "There were errors while parsing cache file \"%s\"" #~ msgstr "Fel inträffade vid tolkning av cachefilen \"%s\"" #~ msgid "Feed Loading Settings" #~ msgstr "Laddning" #~ msgid "Optimize for reduced _memory usage." #~ msgstr "Optimera för minimal _minnesförbrukning." #~ msgid "Optimize for _speed." #~ msgstr "Optimera för _snabbhet." #~ msgid "_View Headlines With" #~ msgstr "_Visa rubriker med" #~ msgid "Please restart Liferea for changes to take effect." #~ msgstr "" #~ "Liferea måste startas om för att förändringarna ska få effekt." #~ msgid "" #~ " --debug-html Enable HTML debugging (saving to ~/.liferea_1.2/output." #~ "xhtml)" #~ msgstr "" #~ " --debug-html Aktivera HTML-felsökning (sparar till ~/.liferea_1.2/" #~ "output.xhtml)" #~ msgid " --debug-plugins Print debugging messages when loading plugins" #~ msgstr "" #~ " --debug-plugins Skriv ut felsökningsmeddelanden när instick läses in" #, fuzzy #~ msgid "window1" #~ msgstr "Nytt fönster" #~ msgid " " #~ msgstr " " #~ msgid "Lower Right" #~ msgstr "Nedre högra hörnet" #~ msgid "Upper Right" #~ msgstr "Övre högra hörnet" #~ msgid "Upper Left" #~ msgstr "Övre vänstra hörnet" #~ msgid "Lower Left" #~ msgstr "Nedre vänstra hörnet" #~ msgid "Popup Placement" #~ msgstr "Placering av popupfönster" #~ msgid "internal OCS namespace parsing error!" #~ msgstr "Internt tolkningsfel av OCS-namnrymd!" #~ msgid "Item:" #~ msgstr "Artikel:" #~ msgid "no namespace handler for <%s:%s>!\n" #~ msgstr "ingen namnrymdshanterare för <%s:%s>!\n" #~ msgid "

Could not find RDF header!

" #~ msgstr "

Kunde inte hitta RDF-huvud!

" #~ msgid "

Could not find OPML header!

" #~ msgstr "

Kunde inte hitta OPML-huvud!

" #~ msgid "This item's contents is invalid." #~ msgstr "Artikelns innehåll är ogiltigt." #~ msgid "

Could not find Atom 1.0 header!

" #~ msgstr "

Kunde inte hitta Atom 1.0-huvud!

" #~ msgid "internal error! time conversion error! mktime failed!\n" #~ msgstr "internt fel! Tidskonverteringsfel! mktime misslyckades!\n" #~ msgid "Invalid ISO8601 date format! Ignoring information!\n" #~ msgstr "Ogiltigt ISO8601 datum-format! Ignorerar information!\n" #~ msgid "" #~ "

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

" #~ msgstr "" #~ "

Kunde inte avgöra kanalens typ. Vänligen kontrollera att den är giltig och i ett av de stödda " #~ "formaten.

" #~ msgid "user defined command" #~ msgstr "användardefinierat kommando" #~ msgid "" #~ "
You may want to validate the feed using Du kanske vill validera kanalen med hjälp av FeedValidator." #~ msgstr "\">FeedValidator." #~ msgid "New _VFolder..." #~ msgstr "Ny _sökmapp" #~ msgid "Toggles the item list mode between condensed and normal mode." #~ msgstr "" #~ "Ändrar mellan att visa alla artiklar för sig och alla tillsammans på rad " #~ "efter varandra." #~ msgid "single item view" #~ msgstr "enkel-artikel-visning" #~ msgid "label133" #~ msgstr "label133" #~ msgid "Date Column Settings" #~ msgstr "Datumkolumnen" #~ msgid "Display only _time" #~ msgstr "Visa endast _tid" #~ msgid "Display _date and time" #~ msgstr "Visa _datum och tid" #~ msgid "_User defined format:" #~ msgstr "_Användardefinierat format:" #~ msgid "" #~ "for expert users: specify a time format string, consult the strftime() " #~ "manpage for the format codes" #~ msgstr "" #~ "för avancerade användare: ange en tidsformatsträng, kolla i man-sidan för " #~ "kommandot strftime() för giltiga formatkoder." #~ msgid "Feedster Search" #~ msgstr "Feedster-sökning" #~ msgid "[No title]" #~ msgstr "[Ingen rubrik]" #~ msgid "date" #~ msgstr "datum" #~ 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 "" #~ "Det upptäcktes en annan instans av Liferea som redan körs. Vänligen " #~ "använd den istället. Om det inte finns någon annan instans av Liferea som " #~ "körs just nu, ta bort filen \"~/.liferea/lock\" och starta om." #~ msgid "feed generator" #~ msgstr "generator" #~ msgid "contributors" #~ msgstr "bidragsgivare" #~ msgid "language" #~ msgstr "språk" #~ msgid "feed published on" #~ msgstr "kanal publicerades" #~ msgid "managing editor" #~ msgstr "redigerare" #~ msgid "webmaster" #~ msgstr "webbmaster" #~ msgid "original source" #~ msgstr "ursprunglig kanal" #~ msgid "original time" #~ msgstr "ursprunglig tid" #~ msgid "license" #~ msgstr "licens" #~ msgid "type" #~ msgstr "typ" #~ msgid "format" #~ msgstr "format" #~ msgid "identifier" #~ msgstr "identifierare" #~ msgid "source" #~ msgstr "kanal" #~ msgid "coverage" #~ msgstr "täckning" #~ msgid "

Could not find Atom/Echo/PIE header!

" #~ msgstr "

Kunde inte hitta Atom/Echo/PIE-huvud!

" #~ msgid "

Could not find RDF/RSS header!

" #~ msgstr "

Kunde inte hitta RDF/RSS-huvud!

" #~ msgid "Note: Using the subscriptions filter disables drag & drop" #~ msgstr "" #~ "Notera: Användande av prenumerationsfilter stänger av drag- och släpp." #~ msgid "You must select a feed entry" #~ msgstr "Du måste välja en kanal" #~ msgid "You must select a feed entry." #~ msgstr "Du måste välja en kanal" #~ msgid "A folder must be selected." #~ msgstr "En mapp måste väljas" #~ msgid "" #~ "internal error! unknown entry type! cannot display appropriate icon!\n" #~ msgstr "Internt fel! Okänd inläggstyp! Kan inte visa lämplig ikon!\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" #~ "Försöker ladda Mozilla-modulen. Notera att detta kanske inte \n" #~ "fungerar med varje Mozilla version. Om du får problem och\n" #~ "Liferea inte startar, försök sätta MOZILLA_FIVE_HOME till\n" #~ "en annan Mozilla-installation eller ta bort gconf-inställningarna\n" #~ "i /apps/liferea/browser-module!\n" #~ "\n" #~ msgid "" #~ "Failed to open HTML widget module (%s) specified in configuration!\n" #~ "%s\n" #~ msgstr "" #~ "Kunde inte öppna HTML-objektsmodul (%s) angiven i inställningarna!\n" #~ "%s\n" #~ msgid "Htmlview API mismatch!" #~ msgstr "Htmlview API mismatch!" #~ msgid "Detected module is not a valid htmlview module!" #~ msgstr "Igenkänd modul är inte en giltig htmlview modul!" #~ msgid "Cannot load HTML widget module (%s)!" #~ msgstr "Kan inte ladda HTML-objektsmodul (%s)!" #~ msgid "Available browser modules (%s):\n" #~ msgstr "Tillgängliga webbläsar-moduler (%s):\n" #~ msgid "Loading configured browser module (%s)!\n" #~ msgstr "Laddar inställd webbläsar-modul (%s)!\n" #~ msgid "No browser module configured!\n" #~ msgstr "Ingen webbläsarmodul angiven!\n" #~ msgid "trying to load browser module %s (%s)\n" #~ msgstr "försöker ladda webbläsar-modulen %s (%s)\n" #~ msgid "New Feed" #~ msgstr "Ny prenumeration" #~ msgid "Next Unread" #~ msgstr "Nästa olästa" #~ msgid "Update All" #~ msgstr "Uppdatera alla" #~ msgid "Search all feeds." #~ msgstr "Sök i alla kanaler" #~ msgid "Viewing Mode" #~ msgstr "Visningsläge" #~ msgid "Switches between 2 and 3 pane mode." #~ msgstr "Växla mellan att visa artiklar var för sig eller i ihopdraget läge." #~ msgid "/_Rename Folder..." #~ msgstr "/_Byt namn på mapp" #~ msgid "/_Delete Folder" #~ msgstr "/_Ta bort mapp" #~ msgid "/_Next Unread Item" #~ msgstr "/_Nästa olästa" #~ msgid "Please do a search first!" #~ msgstr "Vänligen gör en sökning först!" #~ msgid "New VFolder" #~ msgstr "Ny sökmapp" #~ msgid "URL" #~ msgstr "URL" #~ msgid "" #~ "The included HTML tag is not supported with GtkHTML2.\n" #~ "Included Plugins might not be displayed." #~ msgstr "" #~ "Den inkluderade HTML-taggen stöds inte av GtkHTML2.\n" #~ "Inkluderade tillägg kommer kanske inte att visas." liferea-1.10.17/po/tr.po000066400000000000000000002366011261475620100147070ustar00rootroot00000000000000# translation of tr_new.po to # translation of tr.po.4.po to # Liferea Turkish Translation # 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. msgid "" msgstr "" "Project-Id-Version: tr_new\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-01-25 23:54+0100\n" "PO-Revision-Date: 2007-09-01 08:19+0300\n" "Last-Translator: Eren Türkay \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 < 2 ? 0 : 1;\n" "X-Generator: KBabel 1.11.4\n" #: ../liferea.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Haber Okuyucusu" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Liferea Haber Okuyucusu" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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 "" "Bu haber kaynağı durdurulmuş. Artık geçerli değil. Liferea bunu artık " "güncellemeyecek ama siz bellekteki 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 aboneligin 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 haberi ayrıştırırken hatalar oluştu!" #: ../xslt/feed.xml.in.h:4 msgid "Parser Error Details" msgstr "Ayrıştırıcı Hata Detayları" #: ../xslt/feed.xml.in.h:5 msgid "Details" msgstr "Detaylar" #: ../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 "Bu haberi filtrelerken hatalar oluştu!" #: ../xslt/feed.xml.in.h:8 msgid "Filter Error Details" msgstr "Filtre Hata Detayları" #: ../xslt/feed.xml.in.h:9 msgid "Feed:" msgstr "Haber:" #: ../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 "çocukla" #: ../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/liferea.ui.h:29 msgid "Source" msgstr "Kaynak" #: ../xslt/item.xml.in.h:2 msgid "Feed" msgstr "Haber" #: ../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 "" #: ../xslt/item.xml.in.h:6 msgid "Via" msgstr "" #: ../xslt/item.xml.in.h:7 #, fuzzy msgid "Related" msgstr "Ismini değiştir" #: ../xslt/item.xml.in.h:8 msgid "Also posted in" msgstr "Tekrarlanan yer" #: ../xslt/item.xml.in.h:9 msgid "Creator" msgstr "Oluşturan" #: ../xslt/item.xml.in.h:10 msgid "No comments yet." msgstr "Henüz yorum yok" #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Yorumlar" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Güncelleniyor..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Yenile" #: ../xslt/item.xml.in.h:14 msgid "Section" msgstr "Kısım" #: ../xslt/item.xml.in.h:15 msgid "Department" msgstr "Bölüm" #: ../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 "" "Öğenin durum menüsünde \"Haber Sepetine Kopyala\" seçeneğini seçerek haber " "sepetine öğe ekle." #: ../xslt/vfolder.xml.in.h:1 msgid "Search Folder:" msgstr "Arama Klasörü:" #: ../src/browser.c:32 #, fuzzy msgid "Default Browser" msgstr "GNOME Ön Tanımlı Web Tarayıcısı" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Tarayıcı komutu başarısız oldu: %s" #: ../src/browser.c:230 #, 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:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Bellek klasörü \"%s\" yaratılamadı!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Bugün %H:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d %b %Y" #: ../src/enclosure.c:197 #, 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:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "%s öğesini %s ismine değiştirmede hata\n" #: ../src/export.c:406 ../src/export.c:408 #, fuzzy, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "Bellek dosyası okunurken XML hatası! \"%s\" içeri aktarılamadı!" #: ../src/export.c:414 ../src/export.c:416 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "Boş dosya! \"%s\" isimli OPML dosyası içeri aktarılırken boş olmamalı." #: ../src/export.c:437 ../src/export.c:439 #, 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:458 msgid "Imported feed list" msgstr "İçe aktarılan haber listesi" #: ../src/export.c:470 msgid "Import Feed List" msgstr "Haber Kaynak Listesini İçeri Aktar" #: ../src/export.c:470 msgid "Import" msgstr "Içeri Aktar" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 #, fuzzy msgid "OPML Files" msgstr "OPML Dosyası Seç" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "Haber kaynak listesini " #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Haber Kaynak Listesi dışarı aktarıldı!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "Haber Kaynak Listesini Dışarı Aktar" #: ../src/export.c:487 msgid "Export" msgstr "Dışarı Aktar" #: ../src/feed.c:255 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 haber kaynağının türü anlaşılamadı! LÜtfen kaynağın desteklenen " "toplama formatlarından birinde sağlandığından emin olun!

XML Ayrıştırıcı " "Çıktısı:
" #: ../src/feed.c:284 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" güncellendi..." #: ../src/feed.c:294 #, c-format msgid "\"%s\" is not available" msgstr "\"%s\" müsait 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 " "otomatik keşif bu sayfada haber kaynağı bulamadı. Belki de bu web sayfası " "haber kaynaklarının otomatik keşfini desteklemiyordur." #: ../src/feed_parser.c:170 #, c-format msgid "XML error while reading feed! Feed \"%s\" could not be loaded!" msgstr "Haber kaynağı okunurken XML hatası! Haber kaynağı \"%s\" yüklenemedi." #: ../src/feed_parser.c:175 msgid "Empty document!" msgstr "Boş dosya!" #: ../src/feed_parser.c:187 msgid "Invalid XML!" msgstr "Geçersiz XML!" #: ../src/feed_parser.c:227 msgid "Source points to HTML document." msgstr "HTML dosyasına kaynak" #: ../src/feed_parser.c:230 msgid "Could not determine the feed type." msgstr "Haber kaynağı türü belirlenemedi." #. if we don't find a feed with unread items do nothing #: ../src/itemlist.c:404 #, fuzzy msgid "There are no unread items" msgstr "Okunmamış öğe yok " #: ../src/main.c:164 #, fuzzy msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" " STATE, `shown' (göster), `iconified' (simge), ya da " "`hidden' (saklı) olabilir" #: ../src/main.c:164 msgid "STATE" msgstr "" #: ../src/main.c:165 #, fuzzy msgid "Show version information and exit" msgstr " --version Sürüm bilgisini ver ve çık" #: ../src/main.c:166 #, fuzzy msgid "Add a new subscription" msgstr "Yeni Abonelik" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 #, fuzzy msgid "Print debugging messages of all types" msgstr " --debug-all Her tür hata ayıklama mesajını göster" #: ../src/main.c:172 #, fuzzy msgid "Print debugging messages for the cache handling" msgstr "" " --debug-conf Ayar işlenmesi hakkındaki hata ayıklama mesajlarını göster" #: ../src/main.c:173 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "" " --debug-conf Ayar işlenmesi hakkındaki hata ayıklama mesajlarını göster" #: ../src/main.c:174 #, fuzzy msgid "Print debugging messages of the database handling" msgstr "" " --debug-conf Ayar işlenmesi hakkındaki hata ayıklama mesajlarını göster" #: ../src/main.c:175 #, fuzzy msgid "Print debugging messages of all GUI functions" msgstr "" " --debug-gui Grafik arayüz işlevleri hakkındaki hata ayıklama " "mesajlarını göster" #: ../src/main.c:176 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/main.c:177 #, fuzzy msgid "Print debugging messages of all network activity" msgstr " --debug-all Her tür hata ayıklama mesajını göster" #: ../src/main.c:178 #, fuzzy msgid "Print debugging messages of all parsing functions" msgstr "" " --debug-parsing Ayrıştırma işlevleri hakkındaki hata ayıklama mesajlarını " "göster" #: ../src/main.c:179 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/main.c:180 #, fuzzy msgid "Print debugging messages when entering/leaving functions" msgstr "" " --debug-trace İşlevlere girerken ve işlemlerden çıkarken hata ayıklama " "mesajlarını göster" #: ../src/main.c:181 #, fuzzy msgid "Print debugging messages of the feed update processing" msgstr "" " --debug-update Haber kaynak güncellemesi hakkındaki hata ayıklama " "mesajlarını göster" #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "" " --debug-conf Ayar işlenmesi hakkındaki hata ayıklama mesajlarını göster" #: ../src/main.c:183 #, fuzzy msgid "Print verbose debugging messages" msgstr "" " --debug-verbose Gereksiz sözlerle dolu (verbose) hata ayıklama " "mesajlarını göster" #: ../src/main.c:194 ../src/main.c:195 #, fuzzy msgid "Print debugging messages for the given topic" msgstr " --debug- Verilen başlık için hata ayıklama mesajı yaz." #: ../src/main.c:202 #, fuzzy msgid "Liferea, the Linux Feed Reader" msgstr "Liferea - Linux Haber Okuyucusu" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "" #: ../src/net.c:323 #, fuzzy msgid "Unable to connect to remote host" msgstr "Uzak bilgisayara bağlanırken hata" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "" #: ../src/net.c:325 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:328 msgid "The resource moved permanently to a new location" msgstr "" #. http 4xx client error #: ../src/net.c:331 #, fuzzy msgid "" "You are unauthorized to download this feed. Please update your username and " "password in the feed properties dialog box" msgstr "" "Bu haber kaynağını yükleme izniniz yok. Lütfen kullanıcı adınızı ve " "şifrenizi haber kaynak özellikleri diyalog kutusunu kullanarak güncelleyiniz." #: ../src/net.c:333 #, fuzzy msgid "Payment required" msgstr "Ödeme Gerekli" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Kaynak Bulunamadı" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Yönteme İzin Verilmiyor" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Kabul Edilemez" #: ../src/net.c:338 #, fuzzy msgid "Proxy authentication required" msgstr "Vekil Sunucu Kimlik Doğrulaması Gerekli" #: ../src/net.c:339 #, fuzzy msgid "Request timed out" msgstr "İstek Zaman Aşımına Uğradı" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Yokoldu. Kaynak mevcut değil. Lütfen aboneliğinizi iptal edin!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Haber kaynağı müsait değil: Sunucu, desteklenmeyen yönlendirme istedi!" #: ../src/net.c:349 msgid "Client Error" msgstr "Alıcı Hatası" #: ../src/net.c:351 msgid "Server Error" msgstr "Sunucu Hatası" #: ../src/net.c:353 #, fuzzy msgid "An unknown networking error happened!" msgstr "(bilinmeyen ağ hatasıyla karşılaşıldı)" #. 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 "Madde" #: ../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 "Madde başlığı" #: ../src/rule.c:176 msgid "Item body" msgstr "Madde içeriği" #: ../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 "İşaretlenme durumu" #: ../src/rule.c:178 msgid "is flagged" msgstr "işaretli" #: ../src/rule.c:178 msgid "is unflagged" msgstr "işaretsiz" #: ../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 #, fuzzy msgid "Category" msgstr "Oluşturan" #: ../src/rule.c:180 #, fuzzy msgid "is set" msgstr "okunmuş" #: ../src/rule.c:180 msgid "is not set" msgstr "" #: ../src/rule.c:181 msgid "Feed title" msgstr "Haber başlığı" #: ../src/subscription.c:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Bu haber kaynağı \"%s\" zaten güncelleniyor!" #: ../src/subscription.c:110 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "" "Bu haber kaynağı \"%s\"durdurulmuş. Liferea bunu artık güncellemeyecek!" #: ../src/subscription.c:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "\"%s\" için haber kaynak simgesi güncelleniyor" #: ../src/subscription.c:193 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 " "cıktısını kontrol edin." #: ../src/subscription.c:211 #, 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üncelleniyor" #: ../src/subscription.c:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" durdurulmuş. Liferea bunu artık güncellemeyecek" #: ../src/subscription.c:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" son güncellemeden beri değişmemiş" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "\"%s\" güncelleniyor" #: ../src/update.c:259 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Filtrelemede kullanmak için %s geçici dosyasını açarken hata!" #: ../src/update.c:282 #, c-format msgid "%s exited with status %d" msgstr "%s , %d durumunda çıktı" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Hata: Pipe \"%s\" açılamadı" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Hata: Dosya \"%s\" açılamadı" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "Hata: \"%s\" Böyle bir dosya yok" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "Yeni Arama Klasörü" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[Daha fazla hata vardı. Çıktı kısaltılmıştı!]" #: ../src/xml.c:577 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 #, fuzzy msgid "Attachments" msgstr "yorumlar" #. 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:288 #, c-format msgid "%d%s" msgstr "" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "" msgstr[1] "" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Dosya Seç" #: ../src/ui/enclosure_list_view.c:438 #, fuzzy, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d yeni)" msgstr[1] " (%d yeni)" #: ../src/ui/liferea_shell.c:330 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d okunmamış%s" msgstr[1] "%d okunmamış%s" #: ../src/ui/liferea_shell.c:716 msgid "Help Topics" msgstr "Yardım Konuları" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Hızlı Başvuru" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "SSS" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea şimdi çevrimiçi" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "Çevrimdışı çalış" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Liferea şimdi çevrimdışı" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "Çevrimiçi çalış" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "A_bonelikler" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "_Hepsini Güncelle" #: ../src/ui/liferea_shell.c:909 #, fuzzy msgid "Updates all subscriptions." msgstr "Yeni Abonelik" #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "Hepsini _Okundu Olarak İşaretle" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "Her aboneliğin her öğesini okundu olarak işaretler." #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "Haber Kaynak Listesini _İçeri Aktar..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "OPML haber kaynak listesini içeri aktarır." #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "Haber kaynak listesini _Dışarı Aktar..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "Haber kaynak listesini OPML dosyası olarak dışarı aktarır." #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "_Çık" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Haber Kaynağı" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "Tüm Öğeleri _Sil" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "Seçili haber kaynağındaki bütün öğeleri siler." #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "_Öğe" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "_Sonraki Okunmamış Madde" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "_Sonraki Okunmamış Madde" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "_Görüntüle" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "Metin Boyutunu _Büyüt" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "Madde görünümünün metin boyutunu büyütür." #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "Metin Boyutunu _Küçült" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "Madde görünümünün metin boyutunu küçültür." #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "A_raçlar" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "Küçük Gü_ncelleme" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "Güncelleme kuyruğundaki bütün haber kaynalarının bir listesini göster" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "_Seçenekler" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "Seçenekleri Düzenle." #: ../src/ui/liferea_shell.c:944 #, fuzzy msgid "S_earch" msgstr "_Ara" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "Bütün Maddeleri Ara..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "Arama penceresini göster." #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "_Yardım" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "_İçindekiler" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "Bu uygulamanın yardımını görüntüle." #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "_Hızlı Başvuru" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "Liferea kısaollarının bir listesini göster." #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_SSS" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "Bu uygulamanın sıkça sorulan sorularını göster" #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "_Hakkında" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "Hakkında penceresini gösterir." #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "_Normal Görünüm" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "Görünüm modunu, posta istemci moduna ayarla." #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "_Geniş Görünüm" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "Görünüm modunu, üç dikey pano kullanacak şekilde ayarla." #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "_Birleşik Görünüm" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "Görünüm modunu iki pano moduna ayarla." #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "" #: ../src/ui/liferea_shell.c:965 #, fuzzy msgid "Hide feeds with no unread items." msgstr "Okunmamış öğe yok " #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "_Yeni Abonelik..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "Haber kaynak listesine yeni abonelik ekler." #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "Yeni _Klasör..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "Haber kaynak listesine yeni klasör ekler." #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "Yeni A_rama Klasörü..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "Haber kaynak listesine yeni arama klasörü ekler." #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "Yeni _Kaynak..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "Yeni haber kaynağı ekler." #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 msgid "New _News Bin..." msgstr "Yeni _Haber Sepeti..." #: ../src/ui/liferea_shell.c:975 msgid "Adds a new news bin." msgstr "Yeni haber sepeti ekler." #: ../src/ui/liferea_shell.c:979 #, fuzzy msgid "_Mark Items Read" msgstr "_Hepsini Okundu Olarak İşaretle" #: ../src/ui/liferea_shell.c:979 #, fuzzy msgid "" "Marks all items of the selected feed list node / in the item list as read." msgstr "" "Seçili abonelikteki bütün öğeleri, ya da seçili klasördeki bütün " "abonelikleri okudu olarak işaretler." #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "_Güncelle" #: ../src/ui/liferea_shell.c:981 msgid "" "Updates the selected subscription or all subscriptions of the selected " "folder." msgstr "Seçili aboneliği ya da seçili klasördeki bütün abonelikleri günceller." #: ../src/ui/liferea_shell.c:986 #, fuzzy msgid "_Properties" msgstr "_Özellikler" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "Seçili abonelik için özellikler penceresini açar." #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "_Kaldır" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "Seçili aboneliği siler." #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "_Okunma Durumunu Değiştir" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "Seçili öğenin okunma durumunu değiştirir." #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "Madde _İşaretini Değiştir" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "Seçili öğenin işaretini ekler ya da siler" #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "K_aldır" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "Seçili öğeyi siler." #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "Maddenin linkini ayarlı tarayıcıda açar." #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "Tarayıcıda _Aç" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "Maddenin linkini ayarlı tarayıcıda açar." #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "Dış Tarayıcı Ayarları" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "Maddenin linkini ayarlı tarayıcıda açar." #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "_Çevrimdışı Çalış" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "Bu seçenek, abonelik güncellenmesini devreden çıkarmanızı sağlar." #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Linux Haber Okuyucusu" #: ../src/ui/liferea_shell.c:1341 #, 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.

" #: ../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 şifre giriniz:" #: ../src/ui/auth_dialog.c:125 msgid "Unknown source" msgstr "Bilinmeyen kaynak" #: ../src/ui/ui_common.c:205 #, fuzzy msgid "All Files" msgstr "_Yerel Dosya" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "Girişi siliyor" #: ../src/ui/feed_list_view.c:342 #, 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_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "\"%s\"yi silmek istediğinizden emin misiniz?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "Silme Onayı" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea çevrim dışı. Güncelleme olanaksız." #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "/Linki _Sekmede Aç" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "/Linki _Tarayıcıda Aç" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "/Linki _Tarayıcıda Aç" #: ../src/ui/liferea_htmlview.c:632 #, fuzzy, c-format msgid "_Bookmark Link at %s" msgstr "/_Yer İmi Ekle %s" #: ../src/ui/liferea_htmlview.c:636 #, fuzzy msgid "_Copy Link Location" msgstr "/Link Adresini _Kopyala" #: ../src/ui/liferea_htmlview.c:639 #, fuzzy msgid "_Copy Image Location" msgstr "/Link Adresini _Kopyala" #: ../src/ui/liferea_htmlview.c:641 #, fuzzy msgid "S_ave Link As" msgstr "/Farklı Kaydet..." #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "" #: ../src/ui/liferea_htmlview.c:646 #, fuzzy msgid "_Subscribe..." msgstr "/_Abone Ol..." #: ../src/ui/item_list_view.c:347 #, fuzzy msgid "*** No title ***" msgstr "*** Başlık yok ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "Tarih" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "Haber Başlığı" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "Hiçbir öğe seçilmedi" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "Bu öğe için belirlenmiş link yok!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "Bu öğeleri silmek için bir haber kaynağı seçmelisiniz!" #: ../src/ui/popup_menu.c:142 #, fuzzy msgid "Copy to News Bin" msgstr "/Haber Sepetine Kopyala/%s" #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "/_Yer İmi Ekle %s" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "/Link Adresini _Kopyala" #: ../src/ui/popup_menu.c:166 #, fuzzy msgid "R_emove Item" msgstr "/Maddeyi _Sil" #: ../src/ui/popup_menu.c:179 #, fuzzy msgid "Open Enclosure..." msgstr "/Eki Aç..." #: ../src/ui/popup_menu.c:180 #, fuzzy msgid "Save As..." msgstr "/Farklı Kaydet..." #: ../src/ui/popup_menu.c:181 #, fuzzy msgid "Copy Link Location" msgstr "/Link Adresini _Kopyala" #: ../src/ui/popup_menu.c:195 #, fuzzy msgid "_Update All" msgstr "/_Hepsini Güncelle" #: ../src/ui/popup_menu.c:200 #, fuzzy msgid "_Show Liferea" msgstr "Liferea" #: ../src/ui/popup_menu.c:298 #, fuzzy msgid "_Update Folder" msgstr "/Klasörü _Güncelle" #: ../src/ui/popup_menu.c:300 #, fuzzy msgid "_Mark All As Read" msgstr "/_Hepsini Okundu Olarak İşaretle" #: ../src/ui/popup_menu.c:310 #, fuzzy msgid "_New" msgstr "/_Yeni" #: ../src/ui/popup_menu.c:313 #, fuzzy msgid "New _Subscription..." msgstr "_Yeni Abonelik..." #: ../src/ui/popup_menu.c:320 #, fuzzy msgid "New S_ource..." msgstr "Yeni _Kaynak..." #: ../src/ui/popup_menu.c:329 #, fuzzy msgid "Sort Feeds" msgstr "Haber Kaynak Listesini İçeri Aktar" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "GNOME Ön Tanımlı Ayarları" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "Simgelerin altında yazı" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "Simgelerin yanında yazı" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "Sadece simge" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "Sadece yazı" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "dakika" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "saat" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "gün" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "Boşluk" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Boşluk" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " Boşluk" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "_Normal Görünüm" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "_Geniş Görünüm" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "_Birleşik Görünüm" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "Elle gir" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "Tarayıcı öntanımı" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "Varolan pencere" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "Yeni pencere" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "Yeni sekme" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "" #: ../src/ui/preferences_dialog.c:685 #, fuzzy msgid "Terminate instead of minimizing to the messaging menu" msgstr "Sim_ge durumunda küçültmek yerine programı kapat" #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "Tür" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "Program" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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 haber kaynağının sunucusu %d dakikalık güncelleme aralığı öneriyor." msgstr[1] "" "Bu haber kaynağının sunucusu %d dakikalık güncelleme aralığı öneriyor." #: ../src/ui/subscription_dialog.c:434 msgid "This feed specifies no default update interval." msgstr "Bu haber kaynağının öntanımlı güncelleme aralığı yok." #: ../src/ui/browser_tabs.c:155 msgid "Untitled" msgstr "Başlıksız" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d yeni madde" msgstr[1] "%d yeni madde" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Yeni madde yok" #: ../src/ui/ui_tray.c:228 #, c-format 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" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Okunmamış madde yok" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Geçersiz Atom haber kaynağı: bilinmeyen yazar" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Yeni Abonelik" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "Google Okuyucu girişi başarısız!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Okuyucu" #: ../src/fl_sources/google_source.c:384 #, 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." #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:326 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" #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "Hiçbir haber kaynak türü bulunamadı!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "Kaynak Türü" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source.c:363 #, 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." #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Bu haber kaynağı artık yok!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Bu haber girdisi başlığa sahip değil" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Ziyaret Et" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "Haber kaynağı aç" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "Hepsini okundu olarak işaretle" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "" msgstr[1] "" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Haber Listesi Güncellemesi" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "Detayları Göster" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Doğrulama" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Şifre:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "Kullanıcı_adı:" #: ../glade/auth.ui.h:6 msgid "" "Note: The username and password will be saved to your Liferea feedlist " "file without using encryption." msgstr "" "Note: Kullanıcı adı ve şifre, Liferea'nın haber kaynak liste dosyasında " "şifrelemeden saklanacaktır." #: ../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 girin." #: ../glade/google_source.ui.h:3 ../glade/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Şifre" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "_Kullanıcı Adı (Eposta)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "normal görünüm" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "geniş görünüm" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Haber Başlıklarını Görüntüle" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "birleşik görünüm" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Haber Başlıkları" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Çevrimiçi/Çevrimdışı Dügmesi" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Abonelik Özellikleri" #: ../glade/liferea.ui.h:9 #, fuzzy msgid "Feed Name" msgstr "Haber Kaynağı _Adı:" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "Haber Kaynağı _Adı:" #: ../glade/liferea.ui.h:11 #, fuzzy msgid "Update Interval" msgstr "Güncelleme Denetçisi" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "_Evrensel öntanımlı güncelleme aralığını kullan." #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_Haber kaynağına özel güncelleme aralığı olan" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Bu haber kaynağını otomatik olarak güncelleme." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Bu haber kaynağının sunucusu %d dakikalık güncelleme aralığı öneriyor." #: ../glade/liferea.ui.h:18 msgid "General" msgstr "Genel" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Haber Kaynağı" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Kaynak Türü:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Kaynak:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_Adres" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Komut" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Yerel Dosya" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Dosya Seç..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Dönüştürme filtresi _kullan" #: ../glade/liferea.ui.h:27 ../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 format kullanan haber kaynağı ve dizinlerine giriş " "yapmak için dış kaynaklı filtre eklentileri kullanabilir. Daha fazla bilgi " "için yardım belgelerine bakın." #: ../glade/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "_Bunu kullanarak dönüştür:" #: ../glade/liferea.ui.h:30 msgid "" "The cache setting controls if the contents of feeds are saved when Liferea " "exits. Marked items are always saved to the cache." msgstr "" "Bellek ayarları, Liferea kapatıldığında haber kaynaklarının içeriklerinin " "saklanıp saklanmayacağını kontrol eder. Işaretli öğeler her zaman belleğe " "alınır." #: ../glade/liferea.ui.h:31 msgid "_Default cache settings" msgstr "_Öntanımlı bellek ayarları" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "Belleği devreden çı_kar" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Sınırsız bellek" #: ../glade/liferea.ui.h:34 #, fuzzy msgid "_Number of items to save:" msgstr "Saklanacak öntanımlı haber _sayısı" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Arşiv" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "HTTP kimlik doğrulaması _kullan" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "_Indirme için vekil sunucu kullanma" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Indir" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "_Bu Haber kaynağı için bütün ekleri otomatik olarak indir." #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" "Makaleleri seçerken öğe linkini ayarlanmış tarayıcıda otomatik olarak _yükle." #: ../glade/liferea.ui.h:43 #, fuzzy msgid "Ignore _comment feeds for this subscription." msgstr "Seçili abonelik için özellikler penceresini açar." #: ../glade/liferea.ui.h:44 #, fuzzy msgid "_Enforce popup notification for this subscription." msgstr "Seçili abonelik için özellikler penceresini açar." #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "" #: ../glade/liferea.ui.h:46 #, fuzzy msgid "_Mark downloaded items as read." msgstr "Seçiliyi Okundu Olarak _İşaretle" #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Ileri Düzey" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Yeni Klasör" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "_Klasör ismi:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Ismini değiştir" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Yeni İsim:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Arama Klasörü Özellikleri" #: ../glade/liferea.ui.h:53 #, fuzzy msgid "Search _Name:" msgstr "Haber Kaynağı _Adı:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "/Eki Aç..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "Şu tür ek indiriliyor:" #: ../glade/liferea.ui.h:59 #, 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 bu ekle ne yapmalı? Lütfen çalıştırılacak komutu aşağıda belirtiniz. " "Indirilen dosya, bu komutun değişkeni olarak kullanılacaktır:" #: ../glade/liferea.ui.h:60 msgid "_Browse" msgstr "_Seç" #: ../glade/liferea.ui.h:61 #, fuzzy msgid "_Do this automatically for enclosures like this from now on." msgstr "_Bu tür dosyalar için artık otomatik olarak bunu yap." #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Bütün Haber Kaynaklarını Ara" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Ara:" #: ../glade/liferea.ui.h:64 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" "Liferea'nın, öğenin başlığında ya da içeriğinde bulmasını istediğiniz " "dizgiyi belirtiniz." #: ../glade/liferea.ui.h:65 #, fuzzy msgid "_Advanced..." msgstr "Detaylı..." #: ../glade/liferea.ui.h:66 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "" "Belirtilen metni bütün haber kaynaklarında aramaya başlar. Arama sonucu öğe " "listesinde gözükecek." #: ../glade/liferea.ui.h:67 msgid "Update Monitor" msgstr "Güncelleme Denetçisi" #: ../glade/liferea.ui.h:68 #, fuzzy msgid "Pending Requests" msgstr "Beklemedeki İstemler" #: ../glade/liferea.ui.h:69 #, fuzzy msgid "Downloading Now" msgstr "Şimdi İndiriliyor" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Hepsini _İptal Et" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Haber Sepeti Yarat" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_HaberSepetinin Adı:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Hakkında" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea, GTK+ için bir haber okuyucusudur" #: ../glade/liferea.ui.h:78 #, fuzzy msgid "Liferea Homepage" msgstr "Liferea Haber Okuyucusu" #: ../glade/liferea.ui.h:79 #, fuzzy msgid "Advanced Search" msgstr "Ileri Düzey" #: ../glade/liferea.ui.h:80 #, fuzzy msgid "_Search Folder..." msgstr "Arama Klasörü" #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "Arama Motoru Haber Kaynağı Yarat" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "istediğiniz anahtar kelimeleri yazınız" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "En Fazla Sonuç _Sayısı" #: ../glade/liferea.ui.h:84 #, 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." #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "Indir / Ardişlem" #: ../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 tipini 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 "" "Yerel bir dosya ya da geçerli bir OPML haber kaynağı listesine yönelten " "adres belirtin." #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "_Yer" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "_Dosya Seç" #: ../glade/ttrss_source.ui.h:1 #, fuzzy msgid "Add Tiny Tiny RSS Account" msgstr "Bloglines Hesabı Ekle" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your tt-rss account settings." msgstr "Bloglines hesap ayarlarınızı giriniz." #: ../glade/ttrss_source.ui.h:3 #, fuzzy msgid "_Server URL" msgstr "Sunucu Hatası" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" msgstr "_Kullanıcı adı" #: ../glade/simple_subscription.ui.h:2 msgid "Advanced..." msgstr "Detaylı..." #: ../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 "" "Haber kaynak otomatik keşfini kullanmak istediğiniz, ya da haber kaynağının " "tam yerini bildiğiniz web sitesinin adresini belirtiniz. " #: ../glade/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Liferea Tercihleri" #: ../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 "Saklanacak öntanımlı haber _sayısı" #: ../glade/prefs.ui.h:4 #, fuzzy msgid "Feed Update Settings" msgstr "Haber Listesi Güncellemesi" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "Yeni Abonelik" #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Öntanımlı Haber Güncelleme _Aralığı:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Haber Kaynakları" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "Klasör Görüntüleme Ayarları" #: ../glade/prefs.ui.h:11 msgid "_Show the items of all child feeds when a folder is selected." msgstr "_Klasörü seçince, içerdiği bütün haberleri göster" #: ../glade/prefs.ui.h:12 msgid "_Hide read items." msgstr "_Okunan haberleri sakla." #: ../glade/prefs.ui.h:13 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Haber Kaynak Simgeleri (GözdeSimge)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Bütün GözdeSimgeleri şimdi güncelle" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Klasörler" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "Reading Headlines" msgstr "okunmamış haber başlığı" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "_Makaleleri şu tuş(lar)la gözden geçir:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "Web Integration" msgstr "Yön" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Yer imlerini gönder" #: ../glade/prefs.ui.h:22 #, fuzzy msgid "Internal Browser Settings" msgstr "İç Tarayıcı Ayarları" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Linkleri Liferea'nın _penceresinde aç." #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "_Javascripti devreden çıkar." #: ../glade/prefs.ui.h:25 #, fuzzy msgid "_Enable browser plugins." msgstr "Dış Tarayıcı Ayarları" #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "Dış Tarayıcı Ayarları" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "_Linki içinde aç:" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "Elle gir" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Tarayıcı:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Tarayıcı" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Notification Settings" msgstr "Uyarı Ayarları" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Yeni haber başlıklarını gösteren yeni _pencere aç." #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Uyarı alanında (sistem çubuğu) durum _simgesini göster." #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Sistem ç_ekmecesinde güncellenen haber kaynağı listesini göster" #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "Sim_ge durumunda küçültmek yerine programı kapat" #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "" #: ../glade/prefs.ui.h:39 #, fuzzy msgid "Toolbar Settings" msgstr "Araç çubuğu _düğme etiketleri:" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "" #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Araç çubuğu _düğme etiketleri:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Grafik Arayüzü" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "O_tomatik Tanı (GNOME veya masaüstü ortamı)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "Vekil Sunucu Yok" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "E_l Ayarları:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "Vekil _Port:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "Vekil Makina _Adı:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Vekil _Kimlik Doğrulaması Kullan" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Vekil _Şifresi:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "vekil _Kullanıcı Adı:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Vekil" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "Ek İndiriliyor" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Kullanarak indir" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "/Eki Aç..." #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Ekler" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #~ 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 "Synchronized with Nearby Hosts" #~ msgstr "Haber Kaynağı Adı" #, 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 "_Delete" #~ msgstr "/_Sil" #, 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://liferea.sf.net" #~ msgstr "http://liferea.sf.net" #~ 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" liferea-1.10.17/po/uk.po000066400000000000000000002527541261475620100147100ustar00rootroot00000000000000# 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. msgid "" msgstr "" "Project-Id-Version: liferea 1.10-rc4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-06-11 22:55+0200\n" "PO-Revision-Date: 2013-06-12 17:45+0300\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.desktop.in.h:1 ../src/main.c:234 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Програма для читання подач" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Програма для читання подач Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 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 "No comments yet." msgstr "Коментарів ще немає." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Коментарі" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Оновлення…" #: ../xslt/item.xml.in.h:13 msgid "Refresh" 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:32 msgid "Default Browser" msgstr "Типовий переглядач" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Помилка команди переглядача: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "Початок: «%s»" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "Помилка розпізнавання" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Не вдалося створити каталог кешування «%s»!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "Сьогодні %k:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%d %b, %Y" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "«%s» не коректним файлом налаштувань типів вкладень." #: ../src/enclosure.c:288 msgid "You have not configured a download tool yet! Please do so in the 'Download' tab in Tools/Preferences." msgstr "Вами ще не налаштовано інструмент звантаження! Будь ласка, налаштуйте його за допомогою вкладки «Звантаження» у вікні «Інструменти → Параметри»." #: ../src/enclosure.c:306 #, 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:185 #, c-format msgid "Error renaming %s to %s\n" msgstr "Помилка під час спроби перейменування %s на %s\n" #: ../src/export.c:414 ../src/export.c:416 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "Помилка у XML під час спроби читання файла OPML. Не вдалося імпортувати «%s»." #: ../src/export.c:422 ../src/export.c:424 #, c-format msgid "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "Порожній документ. Документ OPML «%s» не повинен бути порожнім під час імпортування." #: ../src/export.c:445 ../src/export.c:447 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "«%s» не є коректним документом OPML. Liferea не здатна імпортувати цей файл." #: ../src/export.c:466 msgid "Imported feed list" msgstr "Список імпортованих подач" #: ../src/export.c:478 msgid "Import Feed List" msgstr "Імпортувати список подач" #: ../src/export.c:478 msgid "Import" msgstr "Імпортувати" #: ../src/export.c:478 ../src/export.c:495 ../src/fl_sources/opml_source.c:394 msgid "OPML Files" msgstr "Файли OPML" #: ../src/export.c:486 msgid "Error while exporting feed list!" msgstr "Помилка під час спроби експортування списку подач." #: ../src/export.c:488 msgid "Feed List exported!" msgstr "Список подач експортовано." #: ../src/export.c:495 msgid "Export Feed List" msgstr "Експортувати список подач" #: ../src/export.c:495 msgid "Export" msgstr "Експортувати" #: ../src/feed.c:254 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:283 #, c-format msgid "\"%s\" updated..." msgstr "«%s» оновлено…" #: ../src/feed.c:293 #, 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:404 msgid "There are no unread items" msgstr "Немає непрочитаних пунктів" #: ../src/main.c:163 msgid "Start Liferea with its main window in STATE. STATE may be `shown', `iconified', or `hidden'" msgstr "Запустити Liferea з головним вікном у режимі СТАН. СТАН може приймати значення «shown» (показ), «iconified» (згортання) або «hidden» (приховування)." #: ../src/main.c:163 msgid "STATE" msgstr "СТАН" #: ../src/main.c:164 msgid "Show version information and exit" msgstr "Показати інформацію про версію і завершити роботу" #: ../src/main.c:165 msgid "Add a new subscription" msgstr "Додати нову підписку" #: ../src/main.c:165 msgid "uri" msgstr "адреса" #: ../src/main.c:170 msgid "Print debugging messages of all types" msgstr "Виводити діагностичні повідомлення всіх типів" #: ../src/main.c:171 msgid "Print debugging messages for the cache handling" msgstr "Виводити діагностичні повідомлення щодо обробки кешу" #: ../src/main.c:172 msgid "Print debugging messages for the configuration handling" msgstr "Виводити діагностичні повідомлення щодо обробки налаштувань" #: ../src/main.c:173 msgid "Print debugging messages of the database handling" msgstr "Виводити діагностичні повідомлення щодо обробки бази даних" #: ../src/main.c:174 msgid "Print debugging messages of all GUI functions" msgstr "Виводити діагностичні повідомлення щодо функцій інтерфейсу" #: ../src/main.c:175 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/main.c:176 msgid "Print debugging messages of all network activity" msgstr "Виводити діагностичні повідомлення для всіх дій, пов’язаних з мережею" #: ../src/main.c:177 msgid "Print debugging messages of all parsing functions" msgstr "Виводити діагностичні повідомлення щодо функцій обробки" #: ../src/main.c:178 msgid "Print debugging messages when a function takes too long to process" msgstr "Виводити діагностичні повідомлення, якщо обробка у функції триває занадто довго" #: ../src/main.c:179 msgid "Print debugging messages when entering/leaving functions" msgstr "Виводити діагностичні повідомлення під час входу-виходу з функцій" #: ../src/main.c:180 msgid "Print debugging messages of the feed update processing" msgstr "Виводити діагностичні повідомлення обробки оновлення подач" #: ../src/main.c:181 msgid "Print debugging messages of the search folder matching" msgstr "Виводити діагностичні повідомлення щодо пошуку відповідних тек" #: ../src/main.c:182 msgid "Print verbose debugging messages" msgstr "Виводити докладні діагностичні повідомлення" #: ../src/main.c:193 ../src/main.c:194 msgid "Print debugging messages for the given topic" msgstr "Виводити діагностичні повідомлення з вказаною темою" #: ../src/main.c:201 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, програма для читання подач у Linux" #: ../src/main.c:202 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "Докладніше про програму можна дізнатися за адресою http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "Запит щодо оновлення було скасовано" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "Не вдалося визначити назву вузла призначення" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "Не вдалося визначити назву вузла проксі-сервера" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "Не вдалося з’єднатися з віддаленим вузлом" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Не вдалося встановити з’єднання з проксі-сервером" #: ../src/net.c:325 msgid "A network error occurred, or the other end closed the connection unexpectedly" msgstr "Сталася помилка роботи з мережею або з’єднання було несподівано розірвано з боку джерела даних" #. http 3xx redirection #: ../src/net.c:328 msgid "The resource moved permanently to a new location" msgstr "Ресурс даних було остаточно пересунуто на нове місце" #. http 4xx client error #: ../src/net.c:331 msgid "You are unauthorized to download this feed. Please update your username and password in the feed properties dialog box" msgstr "Ви не маєте прав доступу для звантаження цієї подачі. Будь ласка, оновіть дані щодо імені користувача і пароля у діалоговому вікні властивостей подачі." #: ../src/net.c:333 msgid "Payment required" msgstr "Потрібна сплата" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "У вас немає прав доступу до цього ресурсу" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "Ресурс не знайдено" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Заборонений метод" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Дані не прийнято" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Потрібно пройти розпізнавання на проксі-сервері" #: ../src/net.c:339 msgid "Request timed out" msgstr "Тайм-аут запиту" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "Вилучено. Ресурсу більше не існує. Будь ласка, скасуйте підписку." #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "Під час оновлення сталася внутрішня помилка" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Подача недоступна: сервером надіслано запит на непідтримуваний тип переспрямування." #: ../src/net.c:349 msgid "Client Error" msgstr "Помилка клієнта" #: ../src/net.c:351 msgid "Server Error" msgstr "Помилка сервера" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Дані підписки «%s» вже оновлюються." #: ../src/subscription.c:110 #, c-format msgid "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "Підписка «%s» вже не підтримується авторами. Liferea більше не буде її оновлювати." #: ../src/subscription.c:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Оновлення піктограми «%s»" #: ../src/subscription.c:193 msgid "There was a problem while reading this subscription. Please check the URL and console output." msgstr "Під час спроби читання цієї підписки виникли проблеми. Будь ласка, перевірте, чи правильно вказано адресу, і ознайомтеся з даними, виведеними до консолі." #: ../src/subscription.c:211 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "Адресу «%s» було остаточно змінено. Програма оновила дані щодо адреси." #: ../src/subscription.c:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "«%s» вже не підтримується авторами. Liferea більше не буде оновлювати дані." #: ../src/subscription.c:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "«%s» не змінювалася з часу останнього оновлення" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "Оновлення «%s»" #: ../src/update.c:258 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "Помилка під час спроби відкриття файла тимчасових даних %s, який використовується для фільтрування." #: ../src/update.c:281 #, c-format msgid "%s exited with status %d" msgstr "%s завершила роботу з повідомленням про стан %d" #: ../src/update.c:287 ../src/update.c:288 ../src/update.c:400 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "Помилка: не вдалося відкрити канал «%s»" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:426 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Помилка: не вдалося відкрити файл «%s»" #: ../src/update.c:432 #, 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, 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:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Виберіть файл" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, 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:330 #, 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:716 msgid "Help Topics" msgstr "Розділи довідки" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Швидке ознайомлення" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "Поширені питання" #: ../src/ui/liferea_shell.c:795 msgid "Liferea is now online" msgstr "Liferea працює у мережі" #: ../src/ui/liferea_shell.c:797 msgid "Work Offline" msgstr "Працювати автономно" #: ../src/ui/liferea_shell.c:799 msgid "Liferea is now offline" msgstr "Liferea працює у автономному режимі" #: ../src/ui/liferea_shell.c:801 msgid "Work Online" msgstr "Працювати в мережі" #: ../src/ui/liferea_shell.c:897 msgid "_Subscriptions" msgstr "_Підписки" #: ../src/ui/liferea_shell.c:898 msgid "Update _All" msgstr "Оновити _всі" #: ../src/ui/liferea_shell.c:898 msgid "Updates all subscriptions." msgstr "Оновити всі підписки." #: ../src/ui/liferea_shell.c:900 msgid "Mark All As _Read" msgstr "Позначити всі _як прочитані" #: ../src/ui/liferea_shell.c:900 msgid "Marks read every item of every subscription." msgstr "Позначити всі пункти у всіх підписках як прочитані." #: ../src/ui/liferea_shell.c:902 msgid "_Import Feed List..." msgstr "_Імпортувати список подач…" #: ../src/ui/liferea_shell.c:902 msgid "Imports an OPML feed list." msgstr "Імпортувати список подач у форматі OPML." #: ../src/ui/liferea_shell.c:903 msgid "_Export Feed List..." msgstr "_Експортувати список подач…" #: ../src/ui/liferea_shell.c:903 msgid "Exports the feed list as OPML." msgstr "Експортувати список подач у форматі OPML." #: ../src/ui/liferea_shell.c:904 msgid "_Quit" msgstr "Ви_йти" #: ../src/ui/liferea_shell.c:906 msgid "_Feed" msgstr "П_одача" #: ../src/ui/liferea_shell.c:907 msgid "Remove _All Items" msgstr "Вилу_чити всі пункти" #: ../src/ui/liferea_shell.c:907 msgid "Removes all items of the currently selected feed." msgstr "Вилучити всі пункти з поточної позначеної подачі." #: ../src/ui/liferea_shell.c:910 msgid "_Item" msgstr "П_ункт" #: ../src/ui/liferea_shell.c:911 msgid "Previous Item" msgstr "Попередній пункт" #: ../src/ui/liferea_shell.c:913 msgid "Next Item" msgstr "Наступний пункт" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:918 msgid "_Next Unread Item" msgstr "_Наступний непрочитаний пункт" #: ../src/ui/liferea_shell.c:921 msgid "_View" msgstr "П_ерегляд" #: ../src/ui/liferea_shell.c:922 ../src/ui/liferea_htmlview.c:653 msgid "_Increase Text Size" msgstr "З_більшити розмір символів" #: ../src/ui/liferea_shell.c:922 msgid "Increases the text size of the item view." msgstr "Збільшити розмір символів на панелі перегляду." #: ../src/ui/liferea_shell.c:924 ../src/ui/liferea_htmlview.c:654 msgid "_Decrease Text Size" msgstr "З_меншити розмір символів" #: ../src/ui/liferea_shell.c:924 msgid "Decreases the text size of the item view." msgstr "Зменшити розмір символів на панелі перегляду." #: ../src/ui/liferea_shell.c:927 msgid "_Tools" msgstr "_Інструменти" #: ../src/ui/liferea_shell.c:928 msgid "_Update Monitor" msgstr "С_постереження за оновленням" #: ../src/ui/liferea_shell.c:928 msgid "Show a list of all feeds currently in the update queue" msgstr "Показати список всіх пунктів подач, які перебувають у черзі оновлення" #: ../src/ui/liferea_shell.c:930 msgid "_Preferences" msgstr "П_араметри" #: ../src/ui/liferea_shell.c:930 msgid "Edit Preferences." msgstr "Змінити параметри роботи програми." #: ../src/ui/liferea_shell.c:933 msgid "S_earch" msgstr "По_шук" #: ../src/ui/liferea_shell.c:934 msgid "Search All Feeds..." msgstr "Шукати у всіх подачах…" #: ../src/ui/liferea_shell.c:934 msgid "Show the search dialog." msgstr "Показати діалогове вікно пошуку." #: ../src/ui/liferea_shell.c:936 msgid "_Help" msgstr "_Довідка" #: ../src/ui/liferea_shell.c:937 msgid "_Contents" msgstr "_Зміст" #: ../src/ui/liferea_shell.c:937 msgid "View help for this application." msgstr "Показати довідку до цієї програми." #: ../src/ui/liferea_shell.c:938 msgid "_Quick Reference" msgstr "_Швидке ознайомлення" #: ../src/ui/liferea_shell.c:938 msgid "View a list of all Liferea shortcuts." msgstr "Показати список всіх клавіатурних скорочень Liferea." #: ../src/ui/liferea_shell.c:940 msgid "_FAQ" msgstr "_ЧаП" #: ../src/ui/liferea_shell.c:940 msgid "View the FAQ for this application." msgstr "Показати список поширених питань щодо програми та відповідей на них." #: ../src/ui/liferea_shell.c:941 msgid "_About" msgstr "_Про програму" #: ../src/ui/liferea_shell.c:941 msgid "Shows an about dialog." msgstr "Показати діалогове вікно даними щодо програми." #: ../src/ui/liferea_shell.c:945 msgid "_Normal View" msgstr "_Звичайний перегляд" #: ../src/ui/liferea_shell.c:945 msgid "Set view mode to mail client mode." msgstr "Перемкнути програму у режим перегляду клієнта електронної пошти." #: ../src/ui/liferea_shell.c:947 msgid "_Wide View" msgstr "_Широкий режим" #: ../src/ui/liferea_shell.c:947 msgid "Set view mode to use three vertical panes." msgstr "Перемкнути програму у режим показу трьох вертикальних панелей." #: ../src/ui/liferea_shell.c:949 msgid "_Combined View" msgstr "_Комбінований перегляд" #: ../src/ui/liferea_shell.c:949 msgid "Set view mode to two pane mode." msgstr "Перемкнути програму у режим перегляду з двома панелями." #: ../src/ui/liferea_shell.c:954 msgid "_Reduced Feed List" msgstr "Ст_ислий список подач" #: ../src/ui/liferea_shell.c:954 msgid "Hide feeds with no unread items." msgstr "Приховати подачі, у яких немає непрочитаних пунктів." #: ../src/ui/liferea_shell.c:959 msgid "_New Subscription..." msgstr "О_формити підписку…" #: ../src/ui/liferea_shell.c:959 msgid "Adds a subscription to the feed list." msgstr "Додати до списку подач новий запис подачі." #: ../src/ui/liferea_shell.c:961 ../src/ui/popup_menu.c:320 msgid "New _Folder..." msgstr "С_творити теку…" #: ../src/ui/liferea_shell.c:961 msgid "Adds a folder to the feed list." msgstr "Додати до списку подач нову теку." #: ../src/ui/liferea_shell.c:962 ../src/ui/popup_menu.c:323 msgid "New S_earch Folder..." msgstr "Створити т_еку пошуку…" #: ../src/ui/liferea_shell.c:962 msgid "Adds a new search folder to the feed list." msgstr "Додати до списку подач новий запис теки пошуку." #: ../src/ui/liferea_shell.c:963 msgid "New _Source..." msgstr "Створити д_жерело…" #: ../src/ui/liferea_shell.c:963 msgid "Adds a new feed list source." msgstr "Додати нове джерело списку подач." #: ../src/ui/liferea_shell.c:964 ../src/ui/popup_menu.c:325 msgid "New _News Bin..." msgstr "Ст_ворити кошик новин…" #: ../src/ui/liferea_shell.c:964 msgid "Adds a new news bin." msgstr "Додати новий кошик новин." #: ../src/ui/liferea_shell.c:968 msgid "_Mark Items Read" msgstr "П_означити пункти як прочитані" #: ../src/ui/liferea_shell.c:968 msgid "Marks all items of the selected feed list node / in the item list as read." msgstr "Позначити всі пункти позначеного вузла у списку подач або у списку пунктів як прочитані." #: ../src/ui/liferea_shell.c:970 ../src/ui/popup_menu.c:300 msgid "_Update" msgstr "_Оновити" #: ../src/ui/liferea_shell.c:970 msgid "Updates the selected subscription or all subscriptions of the selected folder." msgstr "Оновити поточну подачу або всі подачі у позначеній теці." #: ../src/ui/liferea_shell.c:975 msgid "_Properties" msgstr "_Властивості" #: ../src/ui/liferea_shell.c:975 msgid "Opens the property dialog for the selected subscription." msgstr "Відкрити діалогове вікно параметрів позначеного пункту підписки." #: ../src/ui/liferea_shell.c:976 msgid "_Remove" msgstr "В_илучити" #: ../src/ui/liferea_shell.c:976 msgid "Removes the selected subscription." msgstr "Вилучити позначений пункт підписки." #: ../src/ui/liferea_shell.c:980 ../src/ui/popup_menu.c:163 msgid "Toggle _Read Status" msgstr "Перемкнути стан п_рочитання" #: ../src/ui/liferea_shell.c:980 msgid "Toggles the read status of the selected item." msgstr "Перемкнути стан прочитання позначеного пункту." #: ../src/ui/liferea_shell.c:982 ../src/ui/popup_menu.c:164 msgid "Toggle Item _Flag" msgstr "Перемкнути п_рапорець пункту" #: ../src/ui/liferea_shell.c:982 msgid "Toggles the flag status of the selected item." msgstr "Перемкнути прапорець стану позначеного пункту." #: ../src/ui/liferea_shell.c:984 msgid "R_emove" msgstr "Ви_лучити" #: ../src/ui/liferea_shell.c:984 msgid "Removes the selected item." msgstr "Вилучити позначений пункт." #: ../src/ui/liferea_shell.c:986 ../src/ui/popup_menu.c:127 msgid "Open In _Tab" msgstr "Відкрити у в_кладці" #: ../src/ui/liferea_shell.c:986 msgid "Launches the item's link in a new Liferea browser tab." msgstr "Відкрити посилання пункту на новій панелі перегляду Liferea." #: ../src/ui/liferea_shell.c:988 ../src/ui/popup_menu.c:128 msgid "_Open In Browser" msgstr "Ві_дкрити у переглядачі" #: ../src/ui/liferea_shell.c:988 msgid "Launches the item's link in the Liferea item pane." msgstr "Відкрити посилання пункту на панелі записів Liferea." #: ../src/ui/liferea_shell.c:990 ../src/ui/popup_menu.c:129 msgid "Open In _External Browser" msgstr "Відкрити у _зовнішньому переглядачі" #: ../src/ui/liferea_shell.c:990 msgid "Launches the item's link in the configured external browser." msgstr "Відкрити посилання пункту у вказаній вами зовнішній програмі для перегляду інтернету." #: ../src/ui/liferea_shell.c:995 ../src/ui/popup_menu.c:193 msgid "_Work Offline" msgstr "_Автономний режим" #: ../src/ui/liferea_shell.c:995 msgid "This option allows you to disable subscription updating." msgstr "За допомогою цього пункту ви можете вимкнути оновлення подач." #: ../src/ui/liferea_shell.c:997 msgid "_Fullscreen" msgstr "На весь _екран" #: ../src/ui/liferea_shell.c:997 msgid "Browse at full screen" msgstr "Перегляд у повноекранному режимі" #: ../src/ui/liferea_shell.c:1328 msgid "Liferea - Linux Feed Reader" msgstr "Liferea — програма для читання подач у Linux" #: ../src/ui/liferea_shell.c:1330 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

" #: ../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:211 msgid "All Files" msgstr "Всі файли" #: ../src/ui/feed_list_view.c:338 msgid "Deleting entry" msgstr "Вилучення запису" #: ../src/ui/feed_list_view.c:339 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "Ви справді бажаєте вилучити «%s» і всі дані, які там зберігаються?" #: ../src/ui/feed_list_view.c:339 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "Ви справді бажаєте вилучити «%s»?" #: ../src/ui/feed_list_view.c:351 msgid "Deletion Confirmation" msgstr "Підтвердження вилучення" #: ../src/ui/feed_list_view.c:382 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea працює у автономному режимі. Оновлення даних неможливе." #: ../src/ui/liferea_htmlview.c:624 msgid "Open Link In _Tab" msgstr "Відкрити посилання у в_кладці" #: ../src/ui/liferea_htmlview.c:625 msgid "_Open Link In Browser" msgstr "Ві_дкрити посилання у переглядачі" #: ../src/ui/liferea_htmlview.c:626 msgid "_Open Link In External Browser" msgstr "Ві_дкрити посилання у зовнішньому переглядачі" #: ../src/ui/liferea_htmlview.c:629 #, c-format msgid "_Bookmark Link at %s" msgstr "С_творити закладку для посилання на %s" #: ../src/ui/liferea_htmlview.c:633 msgid "_Copy Link Location" msgstr "_Копіювати посилання" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Image Location" msgstr "_Копіювати адресу зображення" #: ../src/ui/liferea_htmlview.c:638 msgid "S_ave Link As" msgstr "З_берегти посилання як" #: ../src/ui/liferea_htmlview.c:640 msgid "S_ave Image As" msgstr "З_берегти зображення як" #: ../src/ui/liferea_htmlview.c:643 msgid "_Subscribe..." msgstr "_Підписатися…" #: ../src/ui/item_list_view.c:398 msgid "*** No title ***" msgstr "*** без заголовка ***" #: ../src/ui/item_list_view.c:661 msgid "Date" msgstr "Дата" #: ../src/ui/item_list_view.c:675 msgid "Headline" msgstr "Заголовок" #: ../src/ui/item_list_view.c:777 ../src/ui/item_list_view.c:798 #: ../src/ui/item_list_view.c:819 ../src/ui/item_list_view.c:883 #: ../src/ui/item_list_view.c:968 ../src/ui/item_list_view.c:983 msgid "No item has been selected" msgstr "Не позначено жодного пункту" #: ../src/ui/item_list_view.c:794 ../src/ui/item_list_view.c:815 msgid "This item has no link specified!" msgstr "У цьому пункті не вказано жодного посилання." #: ../src/ui/item_list_view.c:871 msgid "You must select a feed to delete its items!" msgstr "Для вилучення пунктів подачі слід вказати якусь з подач." #: ../src/ui/popup_menu.c:141 msgid "Copy to News Bin" msgstr "Копіювати до кошика новин" #: ../src/ui/popup_menu.c:155 #, c-format msgid "_Bookmark at %s" msgstr "С_творити закладку для %s" #: ../src/ui/popup_menu.c:159 msgid "Copy Item _Location" msgstr "Копіювати _адресу пункту" #: ../src/ui/popup_menu.c:165 msgid "R_emove Item" msgstr "Ви_лучити пункт" #: ../src/ui/popup_menu.c:178 msgid "Open Enclosure..." msgstr "Відкрити вкладення…" #: ../src/ui/popup_menu.c:179 msgid "Save As..." msgstr "Зберегти як…" #: ../src/ui/popup_menu.c:180 msgid "Copy Link Location" msgstr "Скопіювати адресу посилання" #: ../src/ui/popup_menu.c:194 msgid "_Update All" msgstr "_Оновити всі" #: ../src/ui/popup_menu.c:199 msgid "_Show Liferea" msgstr "По_казати Liferea" #: ../src/ui/popup_menu.c:302 msgid "_Update Folder" msgstr "_Оновити теку" #: ../src/ui/popup_menu.c:304 msgid "_Mark All As Read" msgstr "Поз_начити всі як прочитані" #: ../src/ui/popup_menu.c:314 msgid "_New" msgstr "_Створити" #: ../src/ui/popup_menu.c:317 msgid "New _Subscription..." msgstr "Нова п_ідписка…" #: ../src/ui/popup_menu.c:324 msgid "New S_ource..." msgstr "Нове д_жерело…" #: ../src/ui/popup_menu.c:333 msgid "Sort Feeds" msgstr "Впорядкувати подачі" #: ../src/ui/popup_menu.c:339 msgid "_Rebuild" msgstr "П_еребудувати" #: ../src/ui/popup_menu.c:351 msgid "Convert To Local Subscriptions..." msgstr "Перетворити на локальні підписки…" #: ../src/ui/preferences_dialog.c:87 msgid "GNOME default" msgstr "Типові параметри GNOME" #: ../src/ui/preferences_dialog.c:88 msgid "Text below icons" msgstr "Текст під піктограмами" #: ../src/ui/preferences_dialog.c:89 msgid "Text beside icons" msgstr "Текст збоку від піктограм" #: ../src/ui/preferences_dialog.c:90 msgid "Icons only" msgstr "Лише піктограми" #: ../src/ui/preferences_dialog.c:91 msgid "Text only" msgstr "Лише текст" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "хвилин" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "годин" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "днів" #: ../src/ui/preferences_dialog.c:106 msgid "Space" msgstr "Пробіл" #: ../src/ui/preferences_dialog.c:107 msgid " Space" msgstr " Пробіл" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " Пробіл" #: ../src/ui/preferences_dialog.c:113 msgid "Normal View" msgstr "Звичайний перегляд" #: ../src/ui/preferences_dialog.c:114 msgid "Wide View" msgstr "Широкий режим" #: ../src/ui/preferences_dialog.c:115 msgid "Combined View" msgstr "Комбінований перегляд" #: ../src/ui/preferences_dialog.c:500 msgid "Manual" msgstr "Вручну" #: ../src/ui/preferences_dialog.c:515 msgid "Browser default" msgstr "Типовий для переглядача" #: ../src/ui/preferences_dialog.c:518 msgid "Existing window" msgstr "У існуючому вікні" #: ../src/ui/preferences_dialog.c:521 msgid "New window" msgstr "У новому вікні" #: ../src/ui/preferences_dialog.c:524 msgid "New tab" msgstr "У новій вкладці" #: ../src/ui/preferences_dialog.c:683 msgid "Integrate with the messaging menu (indicator)" msgstr "Вбудовуватися до меню (індикатора) повідомлень" #: ../src/ui/preferences_dialog.c:686 msgid "Terminate instead of minimizing to the messaging menu" msgstr "Завершувати роботу замість згортання до меню повідомлень" #: ../src/ui/preferences_dialog.c:689 msgid "Start minimized to the messaging menu" msgstr "Запускати згорнутою до меню повідомлень" #: ../src/ui/preferences_dialog.c:789 msgid "Type" msgstr "Тип" #: ../src/ui/preferences_dialog.c:792 msgid "Program" msgstr "Програма" #: ../src/ui/ui_node.c:123 msgid "(Empty)" msgstr "(Порожньо)" #: ../src/ui/ui_node.c:320 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Перезбирання" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "У цій подачі не вказано ніякого типового проміжку між оновленнями." #: ../src/ui/browser_tabs.c:153 msgid "Untitled" msgstr "Без назви" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d новий пункт" msgstr[1] "%d нових пункти" msgstr[2] "%d нових пунктів" msgstr[3] "%d новий пункт" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Нових пунктів немає" #: ../src/ui/ui_tray.c:228 #, c-format 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 непрочитаний пункт" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Непрочитаних пунктів немає" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Сайт" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Некоректна подача Atom: невідомий автор" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%d %b, %k:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:273 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Нова підписка" #: ../src/fl_sources/google_source.c:115 msgid "Google Reader login failed!" msgstr "Помилка під час спроби входу до системи Google Reader." #: ../src/fl_sources/google_source.c:394 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:395 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 і виконуватиме синхронізацію вашого спису подач та списку прочитаних пунктів." #: ../src/fl_sources/opml_source.c:326 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:327 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." #: ../src/fl_sources/opml_source.c:394 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:238 msgid "No feed list source types found!" msgstr "У списку подач не виявлено даних про тип джерел." #: ../src/fl_sources/node_source.c:268 msgid "Source Type" 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:412 #, c-format msgid "The '%s' subscription was successfully converted to local feeds!" msgstr "Ппідписні дані «%s» успішно перетворено на локальні подачі!" #: ../src/fl_sources/ttrss_source.c:360 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:361 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 і виконуватиме синхронізацію вашого спису подач та списку прочитаних пунктів." #: ../src/fl_sources/ttrss_source_feed.c:119 msgid "Could not parse JSON returned by tt-rss API!" msgstr "Не вдалося обробити код JSON, повернутий програмним інтерфейсом tt-rss!" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Цієї подачі більше не існує." #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "У цього запису новин немає заголовка" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Відвідати" #: ../src/notification/libnotify.c:167 ../src/notification/libnotify.c:263 msgid "Open feed" msgstr "Відкрити подачу" #: ../src/notification/libnotify.c:170 ../src/notification/libnotify.c:266 msgid "Mark all as read" msgstr "Позначити всі як прочитані" #: ../src/notification/libnotify.c:247 #, c-format 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 оновлення" #: ../src/notification/libnotify.c:249 msgid "Feed Update" msgstr "Оновлення подач" #: ../src/notification/libnotify.c:260 msgid "Show details" msgstr "Показати подробиці" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Розпізнавання" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Пароль:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "_Користувач:" #: ../glade/auth.ui.h:6 msgid "Note: The username and password will be saved to your Liferea feedlist file without using encryption." msgstr "Зауваження: ім’я користувача і пароль буде збережено у вашому файлі списку подач Liferea без будь-якого шифрування." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Пароль" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "_Користувач (адреса ел. пошти)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "звичайний перегляд" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "широкий перегляд" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Перегляд заголовків" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "суміщений перегляд" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Заголовки" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Кнопка «У мережі»/«Автономний режим»" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Параметри підписки" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Назва подачі" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "_Назва подачі:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "Проміжок між оновленнями" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "Ви_користовувати загальний типовий проміжок між оновленнями" #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "_Окремий проміжок між оновленнями для подач" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "_Не оновлювати цю подачу у автоматичному режимі" #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Цим надавачем подач запропоновано проміжок між оновленнями у %d хвилин." #: ../glade/liferea.ui.h:18 msgid "General" msgstr "Загальне" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Джерело подачі" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Тип джерела:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "Д_жерело:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_Адреса" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Команда" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Локальний файл" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Вибрати файл…" #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Використовувати _фільтр перетворення" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Перетворити за _допомогою:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "_Типові параметри кешу" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "Ви_мкнути кешування" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Необмежений кеш" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "_Кількість пунктів для зберігання:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Архівування" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Використовувати HTTP-_розпізнавання" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "_Не використовувати проксі-сервер для звантаження" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Звантажити" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "_Автоматично звантажувати всі вкладення цієї подачі" #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "А_втозавантажувати посилання у вказаному переглядачі після позначення статті" #: ../glade/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "Ігнорувати подачі _коментарів у цій підписці" #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "_Завжди сповіщати контекстними вікнами про цю подачу" #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "_Ніколи не сповіщати контекстними вікнами про цю подачу" #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "Позна_чати звантажені пункти як прочитані" #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Додатково" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Нова тека" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "_Назва теки:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Перейменувати" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "_Нова назва:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Властивості теки пошуку" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "_Назва пошуку:" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "Знайти пункти, які відповідають вказаним нижче критеріям" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "Ві_дповідність будь-якому з правил" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "В_ідповідність кожному з правил" #: ../glade/liferea.ui.h:57 msgid "Open Enclosure" msgstr "Відкрити вкладення" #: ../glade/liferea.ui.h:58 msgid "Open an enclosure of type:" msgstr "Відкрити вкладення такого типу:" #: ../glade/liferea.ui.h:59 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/liferea.ui.h:60 msgid "_Browse" msgstr "Ви_брати" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "Ви_конувати вказану дію автоматично для всіх вкладено, подібних до цього" #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Шукати у всіх подачах" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Шукати:" #: ../glade/liferea.ui.h:64 msgid "Enter a search string Liferea should find either in a items title or in its content." msgstr "Вкажіть рядок, який Liferea має знайти у заголовках пунктів або їх тексті." #: ../glade/liferea.ui.h:65 msgid "_Advanced..." msgstr "Д_одатково…" #: ../glade/liferea.ui.h:66 msgid "Starts searching for the specified text in all feeds. The search result will appear in the item list." msgstr "Розпочати пошук вказаного фрагмента тексту у всіх подачах. Результат пошуку буде показано у списку пунктів." #: ../glade/liferea.ui.h:67 msgid "Update Monitor" msgstr "Спостереження за оновленням" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "Запити у черзі" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "Звантаження" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Скасувати _всі" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Створити кошик новин" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "_Назва кошика новин:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Про програму" #: ../glade/liferea.ui.h:74 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea програма для читання новин з використанням GTK+" #: ../glade/liferea.ui.h:75 msgid "Liferea Homepage" msgstr "Домашня сторінка Liferea" #: ../glade/liferea.ui.h:76 msgid "Advanced Search" msgstr "Складний пошук" #: ../glade/liferea.ui.h:77 msgid "_Search Folder..." msgstr "_Тека пошуку…" #: ../glade/liferea.ui.h:78 msgid "Create Search Engine Feed" msgstr "Створення подачі рушія пошуку" #: ../glade/liferea.ui.h:79 msgid "enter any search string you want" msgstr "вкажіть ключ пошуку" #: ../glade/liferea.ui.h:80 msgid "Maximal _Number Of Result Items:" msgstr "Максимальна _кількість пунктів-відповідників:" #: ../glade/liferea.ui.h:81 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 створити підписку на подачу, яка використовуватиметься для опитування рушія пошуку щодо результатів пошуку вказаного рядка. Ви можете зберегти таку подачу і оновлювати її дані подібно до будь-якої іншої підписки." #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" 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/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 tt-rss account settings." msgstr "Будь ласка, вкажіть параметри вашого облікового запису tt-rss." #: ../glade/ttrss_source.ui.h:3 msgid "_Server URL" msgstr "_Адреса сервера" #: ../glade/ttrss_source.ui.h:5 msgid "_Username" 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/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:4 msgid "Feed Update Settings" msgstr "Параметри оновлення подач" #: ../glade/prefs.ui.h:5 msgid "_Update all subscriptions at startup." msgstr "_Оновлювати всі підписки під час запуску" #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "Типовий проміжок між _оновленнями подачі:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Подачі" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "Параметри показу тек" #: ../glade/prefs.ui.h:11 msgid "_Show the items of all child feeds when a folder is selected." msgstr "По_казувати пункти всіх вкладених подач, якщо позначено теку" #: ../glade/prefs.ui.h:12 msgid "_Hide read items." msgstr "При_ховувати прочитані пункти" #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Піктограми подач (улюблені)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "_Оновити всі піктограми улюблених зараз" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Теки" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Читання заголовків" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "Про_глянути статті з:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "_Типовий режим перегляду:" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Інтернет-інтеграція" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "_Додати закладки до" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Параметри переглядача інтернету" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "Відкривати поси_лання у вікні Liferea" #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "Ви_мкнути Javascript" #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "_Увімкнути додатки переглядача" #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "Параметри зовнішнього переглядача" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "В_ідкривати посилання у:" #: ../glade/prefs.ui.h:28 msgid "_Manual:" msgstr "В_ручну:" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "(%s для адреси)" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Переглядач:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Переглядач" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Параметри сповіщення" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "Показувати _контекстне вікно з новими заголовками" #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "Показувати п_іктограму стану у області сповіщень (системному лотку)" #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "Показувати _кількість нових пунктів за допомогою піктограми лотка" #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "З_авершувати роботу замість згортання до системного лотка" #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Запускати згорнутою у лоток" #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Параметри панелі інструментів" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "При_ховувати панель інструментів" #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Мітки _кнопок панелі інструментів:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "Інтерфейс" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "Проксі-сервер HTTP" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "_Автоматичне визначення (GNOME або середовище)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_Без проксі" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "_Ручне налаштування:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "Проксі-п_орт:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "Проксі-_вузол:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Використовувати проксі-р_озпізнавання" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "_Пароль проксі:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "_Користувач проксі:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Проксі" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "Звантаження вкладень" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "_Звантажувати за допомогою" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "Відкриття вкладень" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Вкладення" #: ../glade/prefs.ui.h:57 msgid "Plugins" 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 "Synchronized with Nearby Hosts" #~ 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 "_Delete" #~ 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.10.17/po/vi.po000066400000000000000000002051271261475620100146770ustar00rootroot00000000000000# 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. # msgid "" msgstr "" "Project-Id-Version: liferea-1.10-rc4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-06-11 22:55+0200\n" "PO-Revision-Date: 2013-06-13 07:38+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: Poedit 1.5.5\n" #: ../liferea.desktop.in.h:1 ../src/main.c:234 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Bộ đọc Feed" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Bộ đọc Feed Liferea" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" msgstr "Đọc các tin mới và blog" #: ../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/liferea.ui.h:29 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 "No comments yet." msgstr "Vẫn chưa có ghi chú nào." #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "Ghi chú" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "Đang cập nhật..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" msgstr "Làm mới lại" #: ../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:32 msgid "Default Browser" msgstr "Trình duyệt mặc định" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "Lệnh duyệt gặp lỗi: %s" #: ../src/browser.c:230 #, 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:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "Không thể tạo thư mục nhớ đệm \"%s\"!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 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:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%b %d %Y" #: ../src/enclosure.c:197 #, 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:288 msgid "You have not configured a download tool yet! Please do so in the 'Download' 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 'Tải về' trong 'Công cụ/Cá nhân hóa'." #: ../src/enclosure.c:306 #, 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 và hoạt động có chính xác hay không! Bạn thay đổi chúng tại tab 'Tải về' trong 'Công cụ/Cá nhân hóa'." #: ../src/export.c:185 #, c-format msgid "Error renaming %s to %s\n" msgstr "Gặp lỗi khi thay đổi tên %s thành %s\n" #: ../src/export.c:414 ../src/export.c:416 #, 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:422 ../src/export.c:424 #, 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:445 ../src/export.c:447 #, 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:466 msgid "Imported feed list" msgstr "Nhập vào danh sách feed" #: ../src/export.c:478 msgid "Import Feed List" msgstr "Nhập vào danh sách feed" #: ../src/export.c:478 msgid "Import" msgstr "Nhập" #: ../src/export.c:478 ../src/export.c:495 ../src/fl_sources/opml_source.c:394 msgid "OPML Files" msgstr "Tập tin OPML" #: ../src/export.c:486 msgid "Error while exporting feed list!" msgstr "Gặp lỗi khi xuất ra danh sách feed!" #: ../src/export.c:488 msgid "Feed List exported!" msgstr "Danh sách feed đã được xuất ra!" #: ../src/export.c:495 msgid "Export Feed List" msgstr "Xuất ra danh sách feed" #: ../src/export.c:495 msgid "Export" msgstr "Xuất" #: ../src/feed.c:254 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:283 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" đã được cập nhật..." #: ../src/feed.c:293 #, 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:404 msgid "There are no unread items" msgstr "Không có mục tin nào chưa đọc cả" #: ../src/main.c:163 msgid "Start Liferea with its main window in STATE. STATE may be `shown', `iconified', 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', `iconified', hoặc `hidden'" #: ../src/main.c:163 msgid "STATE" msgstr "TRẠNG-THÁI" #: ../src/main.c:164 msgid "Show version information and exit" msgstr "hiển thị thông tin phiên bản rồi thoát" #: ../src/main.c:165 msgid "Add a new subscription" msgstr "Thêm một địa chỉ đặt xem dài hạn" #: ../src/main.c:165 msgid "uri" msgstr "uri" #: ../src/main.c:170 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/main.c:171 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/main.c:172 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/main.c:173 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/main.c:174 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/main.c:175 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 ~/.liferea_1.6/output.xhtml" #: ../src/main.c:176 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/main.c:177 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/main.c:178 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/main.c:179 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/main.c:180 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/main.c:181 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/main.c:182 msgid "Print verbose debugging messages" msgstr "Hiển thị thông tin gỡ lỗi chi tiết" #: ../src/main.c:193 ../src/main.c:194 msgid "Print debugging messages for the given topic" msgstr "Hiển thị ra thông tin để gỡ lỗi cho chủ đề đã chỉ ra" #: ../src/main.c:201 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea, một bộ đọc Feed trên Linux" #: ../src/main.c:202 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "Để biết thêm chi tiết, hãy truy cập trang chủ http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "Yêu cầu cập nhật đã bị hủy bỏ" #: ../src/net.c:321 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:322 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:323 msgid "Unable to connect to remote host" msgstr "Không thể kết nối đến máy chủ" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "Không thể kết nối đến máy chủ ủy thác" #: ../src/net.c:325 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:328 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:331 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:333 msgid "Payment required" msgstr "Yêu cầu phải trả tiền" #: ../src/net.c:334 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:335 msgid "Resource Not Found" msgstr "Không tìm thấy tài nguyên" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "Phương thức không được phép" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "Không được chấp nhận" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "Máy chủ ủy thác proxy yêu cầu xác thực" #: ../src/net.c:339 msgid "Request timed out" msgstr "Kết nối bị lỗi quá thời gian" #: ../src/net.c:340 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:345 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:347 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:349 msgid "Client Error" msgstr "Lỗi máy khách" #: ../src/net.c:351 msgid "Server Error" msgstr "Lỗi máy phục vụ" #: ../src/net.c:353 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:105 #, 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:110 #, 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:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "Đang cập nhật favicon cho \"%s\"" #: ../src/subscription.c:193 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:211 #, 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:219 #, 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:222 #, 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:272 #, c-format msgid "Updating \"%s\"" msgstr "Đang cập nhật \"%s\"" #: ../src/update.c:258 #, 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:281 #, c-format msgid "%s exited with status %d" msgstr "%s đã thoát với trạng thái %d" #: ../src/update.c:287 ../src/update.c:288 ../src/update.c:400 #, 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:426 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "Lỗi: Không thể mở tập tin \"%s\"" #: ../src/update.c:432 #, 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, 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:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "Chọn một tệp tin" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d mới)" #: ../src/ui/liferea_shell.c:330 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d chưa đọc%s" #: ../src/ui/liferea_shell.c:716 msgid "Help Topics" msgstr "Trợ Giúp Theo Chủ Đề" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "Tham khảo nhanh" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "FAQ" #: ../src/ui/liferea_shell.c:795 msgid "Liferea is now online" msgstr "Liferea hiện tại đang trực tuyến" #: ../src/ui/liferea_shell.c:797 msgid "Work Offline" msgstr "Làm việc ngoại tuyến" #: ../src/ui/liferea_shell.c:799 msgid "Liferea is now offline" msgstr "Liferea hiện tại đang ngoại tuyến" #: ../src/ui/liferea_shell.c:801 msgid "Work Online" msgstr "Làm việc trực tuyến" #: ../src/ui/liferea_shell.c:897 msgid "_Subscriptions" msgstr "Địa chỉ đặt xem dài hạn" #: ../src/ui/liferea_shell.c:898 msgid "Update _All" msgstr "Cập nhật _tất cả" #: ../src/ui/liferea_shell.c:898 msgid "Updates all subscriptions." msgstr "Cập nhật tất cả các địa chỉ đặt xem dài hạn" #: ../src/ui/liferea_shell.c:900 msgid "Mark All As _Read" msgstr "Đánh dấu là tất cả đã đọ_c" #: ../src/ui/liferea_shell.c:900 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." #: ../src/ui/liferea_shell.c:902 msgid "_Import Feed List..." msgstr "_Nhập vào danh sách feed..." #: ../src/ui/liferea_shell.c:902 msgid "Imports an OPML feed list." msgstr "Nhập vào danh sách feed kiểu OPML." #: ../src/ui/liferea_shell.c:903 msgid "_Export Feed List..." msgstr "_Xuất ra danh sách feed..." #: ../src/ui/liferea_shell.c:903 msgid "Exports the feed list as OPML." msgstr "Xuất ra danh sách feed kiểu OPML." #: ../src/ui/liferea_shell.c:904 msgid "_Quit" msgstr "T_hoát" #: ../src/ui/liferea_shell.c:906 msgid "_Feed" msgstr "_Feed" #: ../src/ui/liferea_shell.c:907 msgid "Remove _All Items" msgstr "Gỡ bỏ _mọi mục tin" #: ../src/ui/liferea_shell.c:907 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." #: ../src/ui/liferea_shell.c:910 msgid "_Item" msgstr "_Mục" #: ../src/ui/liferea_shell.c:911 msgid "Previous Item" msgstr "Mục kế trước" #: ../src/ui/liferea_shell.c:913 msgid "Next Item" msgstr "Mục kế tiếp" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:918 msgid "_Next Unread Item" msgstr "Mục chưa đọc _kế tiếp" #: ../src/ui/liferea_shell.c:921 msgid "_View" msgstr "_Trình bày" #: ../src/ui/liferea_shell.c:922 ../src/ui/liferea_htmlview.c:653 msgid "_Increase Text Size" msgstr "Tăn_g kích thước chữ" #: ../src/ui/liferea_shell.c:922 msgid "Increases the text size of the item view." msgstr "Tăng kích thước hiển thị các mục." #: ../src/ui/liferea_shell.c:924 ../src/ui/liferea_htmlview.c:654 msgid "_Decrease Text Size" msgstr "Giả_m kích thước chữ" #: ../src/ui/liferea_shell.c:924 msgid "Decreases the text size of the item view." msgstr "Giảm kích thước hiển thị các mục" #: ../src/ui/liferea_shell.c:927 msgid "_Tools" msgstr "_Công cụ" #: ../src/ui/liferea_shell.c:928 msgid "_Update Monitor" msgstr "_Cập nhật bộ theo dõi" #: ../src/ui/liferea_shell.c:928 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" #: ../src/ui/liferea_shell.c:930 msgid "_Preferences" msgstr "_Cá nhân hóa" #: ../src/ui/liferea_shell.c:930 msgid "Edit Preferences." msgstr "Sửa sở thích riêng." #: ../src/ui/liferea_shell.c:933 msgid "S_earch" msgstr "Tìm _kiếm" #: ../src/ui/liferea_shell.c:934 msgid "Search All Feeds..." msgstr "Tìm trong tất cả các Feed..." #: ../src/ui/liferea_shell.c:934 msgid "Show the search dialog." msgstr "Hiển thị hộp thoại tìm kiếm." #: ../src/ui/liferea_shell.c:936 msgid "_Help" msgstr "Trợ g_iúp" #: ../src/ui/liferea_shell.c:937 msgid "_Contents" msgstr "_Nội dung" #: ../src/ui/liferea_shell.c:937 msgid "View help for this application." msgstr "Hiển thị trợ giúp cho ứng dụng này." #: ../src/ui/liferea_shell.c:938 msgid "_Quick Reference" msgstr "_Tham khảo nhanh" #: ../src/ui/liferea_shell.c:938 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." #: ../src/ui/liferea_shell.c:940 msgid "_FAQ" msgstr "_FAQ" #: ../src/ui/liferea_shell.c:940 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." #: ../src/ui/liferea_shell.c:941 msgid "_About" msgstr "_Giới thiệu" #: ../src/ui/liferea_shell.c:941 msgid "Shows an about dialog." msgstr "Hiển thị hộp thoại giới thiệu chương trình." #: ../src/ui/liferea_shell.c:945 msgid "_Normal View" msgstr "Trình bày _bình thường" #: ../src/ui/liferea_shell.c:945 msgid "Set view mode to mail client mode." msgstr "Đặt chế độ trình bày cho chế độ máy khách thư" #: ../src/ui/liferea_shell.c:947 msgid "_Wide View" msgstr "Trình bày kiểu _rộng" #: ../src/ui/liferea_shell.c:947 msgid "Set view mode to use three vertical panes." msgstr "Đặt chế độ hiển thị để sử dụng cho chế độ 3 bảng đứng" #: ../src/ui/liferea_shell.c:949 msgid "_Combined View" msgstr "Trình bày kiểu tổ hợ_p" #: ../src/ui/liferea_shell.c:949 msgid "Set view mode to two pane mode." msgstr "Đặt chế độ trình bày cho chế độ hai cửa sổ" #: ../src/ui/liferea_shell.c:954 msgid "_Reduced Feed List" msgstr "_Tiết giảm danh sách feed" #: ../src/ui/liferea_shell.c:954 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ả." #: ../src/ui/liferea_shell.c:959 msgid "_New Subscription..." msgstr "Thêm một địa chỉ đặt xem dài hạn..." #: ../src/ui/liferea_shell.c:959 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." #: ../src/ui/liferea_shell.c:961 ../src/ui/popup_menu.c:320 msgid "New _Folder..." msgstr "Thư _mục mới..." #: ../src/ui/liferea_shell.c:961 msgid "Adds a folder to the feed list." msgstr "Thêm một thư mục vào danh sách feed." #: ../src/ui/liferea_shell.c:962 ../src/ui/popup_menu.c:323 msgid "New S_earch Folder..." msgstr "Thêm thư mục tìm _kiếm..." #: ../src/ui/liferea_shell.c:962 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." #: ../src/ui/liferea_shell.c:963 msgid "New _Source..." msgstr "Thêm _Nguồn mới..." #: ../src/ui/liferea_shell.c:963 msgid "Adds a new feed list source." msgstr "Thêm vào một nguồn danh sách feed mới." #: ../src/ui/liferea_shell.c:964 ../src/ui/popup_menu.c:325 msgid "New _News Bin..." msgstr "Thùng rác tin tức mới..." #: ../src/ui/liferea_shell.c:964 msgid "Adds a new news bin." msgstr "Thêm một thùng rác tin tức mới." #: ../src/ui/liferea_shell.c:968 msgid "_Mark Items Read" msgstr "Đánh dấ_u các mục là đã đọc" #: ../src/ui/liferea_shell.c:968 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." #: ../src/ui/liferea_shell.c:970 ../src/ui/popup_menu.c:300 msgid "_Update" msgstr "_Cập nhật" #: ../src/ui/liferea_shell.c:970 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." #: ../src/ui/liferea_shell.c:975 msgid "_Properties" msgstr "_Thuộc tính" #: ../src/ui/liferea_shell.c:975 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." #: ../src/ui/liferea_shell.c:976 msgid "_Remove" msgstr "_Xóa bỏ" #: ../src/ui/liferea_shell.c:976 msgid "Removes the selected subscription." msgstr "Gỡ bỏ những địa chỉ đặt dài hạn đã chọn." #: ../src/ui/liferea_shell.c:980 ../src/ui/popup_menu.c:163 msgid "Toggle _Read Status" msgstr "Bật/Tắt trạng thái đọc" #: ../src/ui/liferea_shell.c:980 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." #: ../src/ui/liferea_shell.c:982 ../src/ui/popup_menu.c:164 msgid "Toggle Item _Flag" msgstr "Bật/Tắt Cờ của mục tin" #: ../src/ui/liferea_shell.c:982 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." #: ../src/ui/liferea_shell.c:984 msgid "R_emove" msgstr "Gỡ _bỏ" #: ../src/ui/liferea_shell.c:984 msgid "Removes the selected item." msgstr "Gỡ bỏ mục đã được chọn." #: ../src/ui/liferea_shell.c:986 ../src/ui/popup_menu.c:127 msgid "Open In _Tab" msgstr "Mở Trong _Tab" #: ../src/ui/liferea_shell.c:986 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." #: ../src/ui/liferea_shell.c:988 ../src/ui/popup_menu.c:128 msgid "_Open In Browser" msgstr "_Mở trong trình duyệt" #: ../src/ui/liferea_shell.c:988 msgid "Launches the item's link in the Liferea item pane." msgstr "Mở liên kết trong bảng mục tin Liferea." #: ../src/ui/liferea_shell.c:990 ../src/ui/popup_menu.c:129 msgid "Open In _External Browser" msgstr "Mở liên kết trong bộ duyệt _Bên ngoài" #: ../src/ui/liferea_shell.c:990 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." #: ../src/ui/liferea_shell.c:995 ../src/ui/popup_menu.c:193 msgid "_Work Offline" msgstr "_Làm việc ngoại tuyến" #: ../src/ui/liferea_shell.c:995 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." #: ../src/ui/liferea_shell.c:997 msgid "_Fullscreen" msgstr "Chế độ t_oàn màn hình" #: ../src/ui/liferea_shell.c:997 msgid "Browse at full screen" msgstr "Duyệt toàn màn hình" #: ../src/ui/liferea_shell.c:1328 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - một bộ đọc Feed trên Linux" #: ../src/ui/liferea_shell.c:1330 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

" #: ../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:211 msgid "All Files" msgstr "Mọi kiểu tập tin" #: ../src/ui/feed_list_view.c:338 msgid "Deleting entry" msgstr "Đang xóa mục" #: ../src/ui/feed_list_view.c:339 #, 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_view.c:339 #, 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_view.c:351 msgid "Deletion Confirmation" msgstr "Xác nhận việc xóa" #: ../src/ui/feed_list_view.c:382 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/liferea_htmlview.c:624 msgid "Open Link In _Tab" msgstr "Mở liên kết trong _Tab" #: ../src/ui/liferea_htmlview.c:625 msgid "_Open Link In Browser" msgstr "_Mở liên kết trong trình duyệt" #: ../src/ui/liferea_htmlview.c:626 msgid "_Open Link In External Browser" msgstr "_Mở liên kết trong trình duyệt ngoài" #: ../src/ui/liferea_htmlview.c:629 #, c-format msgid "_Bookmark Link at %s" msgstr "Đánh dấu liên kết ở %s" #: ../src/ui/liferea_htmlview.c:633 msgid "_Copy Link Location" msgstr "Sao chép địa chỉ liên kết" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Image Location" msgstr "Sao chép địa chỉ của ảnh" #: ../src/ui/liferea_htmlview.c:638 msgid "S_ave Link As" msgstr "Ghi lại Link với tên" #: ../src/ui/liferea_htmlview.c:640 msgid "S_ave Image As" msgstr "Ghi lại ảnh với tên" #: ../src/ui/liferea_htmlview.c:643 msgid "_Subscribe..." msgstr "Đặt _dài hạn..." #: ../src/ui/item_list_view.c:398 msgid "*** No title ***" msgstr "*** Vô đề ***" #: ../src/ui/item_list_view.c:661 msgid "Date" msgstr "Ngày tháng" #: ../src/ui/item_list_view.c:675 msgid "Headline" msgstr "Tin chính" #: ../src/ui/item_list_view.c:777 ../src/ui/item_list_view.c:798 #: ../src/ui/item_list_view.c:819 ../src/ui/item_list_view.c:883 #: ../src/ui/item_list_view.c:968 ../src/ui/item_list_view.c:983 msgid "No item has been selected" msgstr "Không có mục nào được chọn" #: ../src/ui/item_list_view.c:794 ../src/ui/item_list_view.c:815 msgid "This item has no link specified!" msgstr "Mục này chưa chỉ ra đường link!" #: ../src/ui/item_list_view.c:871 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/popup_menu.c:141 msgid "Copy to News Bin" msgstr "Sao chép vào Thùng rác tin tức" #: ../src/ui/popup_menu.c:155 #, c-format msgid "_Bookmark at %s" msgstr "Đánh dấ_u ở %s" #: ../src/ui/popup_menu.c:159 msgid "Copy Item _Location" msgstr "Sao chép địa chỉ _Mục tin" #: ../src/ui/popup_menu.c:165 msgid "R_emove Item" msgstr "Xóa bỏ mục t_in" #: ../src/ui/popup_menu.c:178 msgid "Open Enclosure..." msgstr "Mở tập tin đính kèm..." #: ../src/ui/popup_menu.c:179 msgid "Save As..." msgstr "Ghi lại bằng tên mới..." #: ../src/ui/popup_menu.c:180 msgid "Copy Link Location" msgstr "Sao chép địa chỉ liên kết" #: ../src/ui/popup_menu.c:194 msgid "_Update All" msgstr "_Cập nhật tất cả" #: ../src/ui/popup_menu.c:199 msgid "_Show Liferea" msgstr "Hiển thị Liferea" #: ../src/ui/popup_menu.c:302 msgid "_Update Folder" msgstr "Cập nhật thư mục" #: ../src/ui/popup_menu.c:304 msgid "_Mark All As Read" msgstr "Đánh dấu là tất cả đã đọc" #: ../src/ui/popup_menu.c:314 msgid "_New" msgstr "_Mới" #: ../src/ui/popup_menu.c:317 msgid "New _Subscription..." msgstr "Thêm một địa chỉ đặt dài hạn..." #: ../src/ui/popup_menu.c:324 msgid "New S_ource..." msgstr "Nguồn mới..." #: ../src/ui/popup_menu.c:333 msgid "Sort Feeds" msgstr "Sắp xếp Feed" #: ../src/ui/popup_menu.c:339 msgid "_Rebuild" msgstr "_Xây dụng lại" #: ../src/ui/popup_menu.c:351 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:87 msgid "GNOME default" msgstr "mặc định GNOME" #: ../src/ui/preferences_dialog.c:88 msgid "Text below icons" msgstr "Chữ ở dưới biểu tượng" #: ../src/ui/preferences_dialog.c:89 msgid "Text beside icons" msgstr "Chữ ở bên cạnh biểu tượng" #: ../src/ui/preferences_dialog.c:90 msgid "Icons only" msgstr "Chỉ có biểu tượng" #: ../src/ui/preferences_dialog.c:91 msgid "Text only" msgstr "Chỉ có chữ" #: ../src/ui/preferences_dialog.c:99 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "phút" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "giờ" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "ngày" #: ../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:108 msgid " Space" msgstr " Space" #: ../src/ui/preferences_dialog.c:113 msgid "Normal View" msgstr "Trình bày bình thường" #: ../src/ui/preferences_dialog.c:114 msgid "Wide View" msgstr "Trình bày kiểu rộng" #: ../src/ui/preferences_dialog.c:115 msgid "Combined View" msgstr "Trình bày kiểu tổ hợp" #: ../src/ui/preferences_dialog.c:500 msgid "Manual" msgstr "Manual" #: ../src/ui/preferences_dialog.c:515 msgid "Browser default" msgstr "Trình duyệt mặc định" #: ../src/ui/preferences_dialog.c:518 msgid "Existing window" msgstr "Thoát ra" #: ../src/ui/preferences_dialog.c:521 msgid "New window" msgstr "Mở cửa sổ mới" #: ../src/ui/preferences_dialog.c:524 msgid "New tab" msgstr "Tab mới" #: ../src/ui/preferences_dialog.c:683 msgid "Integrate with the messaging menu (indicator)" msgstr "Tổ hợp với trình đơn thông điệp (bộ chỉ thị)" #: ../src/ui/preferences_dialog.c:686 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" #: ../src/ui/preferences_dialog.c:689 msgid "Start minimized to the messaging menu" msgstr "Khởi đầu ở dạng thu nhỏ vào trình đơn thông điệp" #: ../src/ui/preferences_dialog.c:789 msgid "Type" msgstr "Kiểu" #: ../src/ui/preferences_dialog.c:792 msgid "Program" msgstr "Chương trình" #: ../src/ui/ui_node.c:123 msgid "(Empty)" msgstr "(Rỗng)" #: ../src/ui/ui_node.c:320 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" "%s\n" "Đang xây dụng lại" #: ../src/ui/subscription_dialog.c:430 #, 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:434 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:153 msgid "Untitled" msgstr "Không tên" #: ../src/ui/ui_tray.c:221 #, c-format msgid "%d new item" msgid_plural "%d new items" msgstr[0] "%d mục tin mới" #: ../src/ui/ui_tray.c:224 msgid "No new items" msgstr "Không có mục mới" #: ../src/ui/ui_tray.c:228 #, c-format msgid "" "%s\n" "%d unread item" msgid_plural "" "%s\n" "%d unread items" msgstr[0] "" "%s\n" "%d mục tin chưa đọc" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "Không có mục nào chưa đọc" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "Website" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "Feed kiểu Atom không hợp lệ: không biết tác giả" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:273 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "Thêm một địa chỉ đặt dài hạn" #: ../src/fl_sources/google_source.c:115 msgid "Google Reader login failed!" msgstr "Đăng nhập Google Reader gặp lỗi!" #: ../src/fl_sources/google_source.c:394 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:395 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." #: ../src/fl_sources/opml_source.c:326 msgid "Planet, BlogRoll, OPML" msgstr "Planet, BlogRoll, OPML" #: ../src/fl_sources/opml_source.c:327 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" #: ../src/fl_sources/opml_source.c:394 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:238 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:268 msgid "Source Type" msgstr "Kiểu nguồn" #. 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:412 #, 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/ttrss_source.c:360 msgid "Tiny Tiny RSS" msgstr "Tiny Tiny RSS" #: ../src/fl_sources/ttrss_source.c:361 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." #: ../src/fl_sources/ttrss_source_feed.c:119 msgid "Could not parse JSON returned by tt-rss API!" msgstr "Không thể phân tích cú pháp của JSON được trả về từ API tt-rss!" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "Feed này không tồn tại thêm nữa!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "Mục tin này không có tiêu đề" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "Thăm" #: ../src/notification/libnotify.c:167 ../src/notification/libnotify.c:263 msgid "Open feed" msgstr "Mở feed" #: ../src/notification/libnotify.c:170 ../src/notification/libnotify.c:266 msgid "Mark all as read" msgstr "Đánh dấu là tất cả đã đọc" #: ../src/notification/libnotify.c:247 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "%s%d cập nhật" #: ../src/notification/libnotify.c:249 msgid "Feed Update" msgstr "Cập nhật feed" #: ../src/notification/libnotify.c:260 msgid "Show details" msgstr "Hiển thị chi tiết" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "Xác thực" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "_Mật khẩu:" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "Tài khoả_n:" #: ../glade/auth.ui.h:6 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ả." #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "_Mật khẩu" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "_Tài khoản (Email)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "trình bày bình thường" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "Trình bày kiểu rộng" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "Hiển thị tiêu đề" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "trình bày kiểu tổ hợp" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "Headlines" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "Nút bấm Trực_tuyến/Ngoại_tuyến" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "Các thuộc tính của địa chỉ đặt dài hạn" #: ../glade/liferea.ui.h:9 msgid "Feed Name" msgstr "Tên Feed" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "Tên Feed:" #: ../glade/liferea.ui.h:11 msgid "Update Interval" msgstr "Khoảng thời gian giữa hai lần cập nhật" #: ../glade/liferea.ui.h:12 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/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "Nhịp cập nhật đặc thù _feed của" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "Không cập nhật feed này một cách tự động." #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, 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/liferea.ui.h:18 msgid "General" msgstr "Chung" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "Nguồn Feed" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "Kiểu Nguồn:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "_Nguồn:" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "_URL" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "_Lệnh" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "_Tệp tin nội bộ" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "Chọn tập tin..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "Sử dụng bộ lọc chuyển đổi" #: ../glade/liferea.ui.h:27 ../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ổ xung 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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "Chuyển đổi sử dụng:" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "Sử dụng cài đặt bộ nhớ tạm mặc định" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "Tắt nhớ đệm" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "_Không hạn chế đệm" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "Số mục để ghi:" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "Lưu trữ" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "Sử dụng xác thực kiểu HTTP" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "Không sử dụng proxy khi tải dữ liệu về" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "Tải về" #: ../glade/liferea.ui.h:41 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/liferea.ui.h:42 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/liferea.ui.h:43 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/liferea.ui.h:44 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." #: ../glade/liferea.ui.h:45 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." #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "Đánh dấu các mục tin đã được tải về là đã đọc." #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "Cao cấp" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "Tạo thư mục mới" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "Tên thư mục:" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "Đổi tên" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "Tên mới:" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "Thuộc tính thư mục tìm kiếm" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "Tên tìm kiếm:" #: ../glade/liferea.ui.h:54 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/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "Bất kỳ quy tắc nào khớp" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "Tất cả các quy tắc phải khớp" #: ../glade/liferea.ui.h:57 msgid "Open Enclosure" msgstr "Mở đính kèm" #: ../glade/liferea.ui.h:58 msgid "Open an enclosure of type:" msgstr "Mở các tài liệu đính kèm cho các kiểu sau:" #: ../glade/liferea.ui.h:59 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/liferea.ui.h:60 msgid "_Browse" msgstr "_Tìm duyệt" #: ../glade/liferea.ui.h:61 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/liferea.ui.h:62 msgid "Search All Feeds" msgstr "Tìm trong tất cả các Feed" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "_Tìm kiếm cho:" #: ../glade/liferea.ui.h:64 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/liferea.ui.h:65 msgid "_Advanced..." msgstr "_Cao cấp..." #: ../glade/liferea.ui.h:66 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/liferea.ui.h:67 msgid "Update Monitor" msgstr "Cập nhật bộ theo dõi" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "Các yêu cầu còn treo" #: ../glade/liferea.ui.h:69 msgid "Downloading Now" msgstr "Tải về ngay" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "Hủy bỏ _tất cả" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "Tạo thùng rác tin tức" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "Tên thùng rác tin tức:" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "Giới thiệu" #: ../glade/liferea.ui.h:74 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/liferea.ui.h:75 msgid "Liferea Homepage" msgstr "Trang chủ Liferea" #: ../glade/liferea.ui.h:76 msgid "Advanced Search" msgstr "Tìm kiếm cấp cao" #: ../glade/liferea.ui.h:77 msgid "_Search Folder..." msgstr "Thư mục tìm kiếm..." #: ../glade/liferea.ui.h:78 msgid "Create Search Engine Feed" msgstr "Tạo bộ máy tìm kiếm Feed" #: ../glade/liferea.ui.h:79 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" #: ../glade/liferea.ui.h:80 msgid "Maximal _Number Of Result Items:" msgstr "Số lượng tối đa mục tin kết quả:" #: ../glade/liferea.ui.h:81 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." #: ../glade/new_subscription.ui.h:9 msgid "Download / Postprocessing" msgstr "Tải về / Xử lý sau" #: ../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/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 tt-rss account settings." msgstr "Hãy nhập vào các cài đặt tài khoản kiểu tt-rss 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/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/prefs.ui.h:1 msgid "Liferea Preferences" msgstr "Cá nhân hóa 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:4 msgid "Feed Update Settings" msgstr "Cài đặt cập nhật feed" #: ../glade/prefs.ui.h:5 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:6 msgid "Default Feed Refresh _Interval:" msgstr "Nhịp thời gian cập nhật feed mặc định:" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Feeds" #: ../glade/prefs.ui.h:10 msgid "Folder Display Settings" msgstr "Cài đặt hiển thị thư mục" #: ../glade/prefs.ui.h:11 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:12 msgid "_Hide read items." msgstr "Ẩn các mục tin đã đọc." #: ../glade/prefs.ui.h:13 msgid "Feed Icons (Favicons)" msgstr "Biểu tượng Feed (Favicons)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "Cập nhật tất cả favicons ngay bây giờ" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "Thư mục" #: ../glade/prefs.ui.h:16 msgid "Reading Headlines" msgstr "Đang đọc tiêu đề" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "Đọc lướt qua toàn bộ bài viết bằng:" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "Chế độ xem Mặc địn_h:" #: ../glade/prefs.ui.h:19 msgid "Web Integration" msgstr "Hợp nhất Web" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "Gửi dấu trang tới" #: ../glade/prefs.ui.h:22 msgid "Internal Browser Settings" msgstr "Cài đặt trình duyệt nội tại" #: ../glade/prefs.ui.h:23 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:24 msgid "_Disable Javascript." msgstr "_Tắt Javascript." #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "Bật các phần bổ xung trình duyệt" #: ../glade/prefs.ui.h:26 msgid "External Browser Settings" msgstr "Cài đặt trình duyệt bên ngoài" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "Mở liên kết trong:" #: ../glade/prefs.ui.h:28 msgid "_Manual:" msgstr "_Thủ công:" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "(%s cho URL)" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "_Trình duyệt:" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "Trình duyệt" #: ../glade/prefs.ui.h:33 msgid "Notification Settings" msgstr "Cài đặt cách thông báo" #: ../glade/prefs.ui.h:34 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." #: ../glade/prefs.ui.h:35 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)." #: ../glade/prefs.ui.h:36 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ồ." #: ../glade/prefs.ui.h:37 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ồ)." #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "_Bắt đầu ở khay đồng hồ." #: ../glade/prefs.ui.h:39 msgid "Toolbar Settings" msgstr "Cài đặt thanh công cụ" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "Ẩn thanh công cụ." #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "Những nhãn cho nút bấm trên thanh công cụ:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "GUI" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "Máy chủ HTTP Proxy" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "Tự dò tìm (GNOME hoặc môi trường)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "_Không dùng máy chủ ủy thác" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "Cài đặt _thủ công:" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "Cổn_g proxy:" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "Má_y chủ proxy:" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "Dùng xác thực ủy thác" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "Mật khẩu Proxy:" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "Tên tài khoản proxy:" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "Proxy" #: ../glade/prefs.ui.h:53 msgid "Downloading Enclosures" msgstr "Đang mở các tài liệu đính kèm" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "Tả_i về sử dụng" #: ../glade/prefs.ui.h:55 msgid "Opening Enclosures" msgstr "Đang mở tài liệu đính kèm" #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "Những tài liệu đính kèm" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "Phần bổ sung" #~ 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 "Synchronized with Nearby Hosts" #~ msgstr "Đồng bộ hóa với Nearby Hosts" #~ 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.10.17/po/zh_CN.po000066400000000000000000001771451261475620100152720ustar00rootroot00000000000000# 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: 2013-01-25 23:54+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.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "Liferea" #: ../liferea.desktop.in.h:2 msgid "Feed Reader" msgstr "Feed 阅读器" #: ../liferea.desktop.in.h:3 msgid "Liferea Feed Reader" msgstr "Lifera Feed 阅读器" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 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 "No comments yet." msgstr "尚无评论。" #: ../xslt/item.xml.in.h:11 msgid "Comments" msgstr "评论" #: ../xslt/item.xml.in.h:12 msgid "Updating..." msgstr "正在更新..." #: ../xslt/item.xml.in.h:13 msgid "Refresh" 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:32 #, fuzzy msgid "Default Browser" msgstr "GNOME 默认浏览器" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "浏览器命令失败:%s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "正在启动:%s" #. unauthorized #: ../src/comments.c:120 msgid "Authorization Error" msgstr "认证错误" #: ../src/common.c:62 #, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "无法创建缓存目录 %s!" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "今天 %H:%M" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "%b %d %Y" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "%s 不是有效的附件类型配置文件!" #: ../src/enclosure.c:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "无法将 %s 更名为 %s\n" #: ../src/export.c:406 ../src/export.c:408 #, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "读取 OPML 文件时发生 XML 错误!无法导入“%s”!" #: ../src/export.c:414 ../src/export.c:416 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "空白文档!OPML 文档“%s”在导入时不应是空白文件。" #: ../src/export.c:437 ../src/export.c:439 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "“%s”不是有效的 OPML 文档!Liferea 无法导入该文件!" #: ../src/export.c:458 msgid "Imported feed list" msgstr "已导入的 Feed 列表" #: ../src/export.c:470 msgid "Import Feed List" msgstr "导入 Feed 列表" #: ../src/export.c:470 msgid "Import" msgstr "导入" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 #, fuzzy msgid "OPML Files" msgstr "选择 OPML 文件" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "导出 Feed 列表出错!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "Feed 列表已导出!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "导出 Feed 列表" #: ../src/export.c:487 msgid "Export" msgstr "导出" #: ../src/feed.c:255 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:284 #, c-format msgid "\"%s\" updated..." msgstr "“%s”已更新..." #: ../src/feed.c:294 #, 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:404 #, fuzzy msgid "There are no unread items" msgstr "没有未读条目 " #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr " 状态 STATE 可以是 shown, iconified 或 hidden" #: ../src/main.c:164 msgid "STATE" msgstr "状态" #: ../src/main.c:165 msgid "Show version information and exit" msgstr "显示 Liferea 版本信息并退出" #: ../src/main.c:166 #, fuzzy msgid "Add a new subscription" msgstr "新增订阅" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 msgid "Print debugging messages of all types" msgstr "输出所有调试信息" #: ../src/main.c:172 msgid "Print debugging messages for the cache handling" msgstr "输出缓存处理的调试信息" #: ../src/main.c:173 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr "输出配置处理的调试信息" #: ../src/main.c:174 msgid "Print debugging messages of the database handling" msgstr "输出缓存处理的调试信息" #: ../src/main.c:175 msgid "Print debugging messages of all GUI functions" msgstr "输出所有图形界面的调试信息" #: ../src/main.c:176 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/main.c:177 msgid "Print debugging messages of all network activity" msgstr "输出所有网络活动的调试信息" #: ../src/main.c:178 msgid "Print debugging messages of all parsing functions" msgstr "输出所有解析函数的调试信息" #: ../src/main.c:179 msgid "Print debugging messages when a function takes too long to process" msgstr "当某函数运行时间过长时输出调试信息" #: ../src/main.c:180 msgid "Print debugging messages when entering/leaving functions" msgstr "输出进入或离开函数时的调试信息" #: ../src/main.c:181 msgid "Print debugging messages of the feed update processing" msgstr "输出 Feed 更新的调试信息" #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr "输出缓存处理的调试信息" #: ../src/main.c:183 msgid "Print verbose debugging messages" msgstr "输出详细调试信息" #: ../src/main.c:194 ../src/main.c:195 msgid "Print debugging messages for the given topic" msgstr "输出给定主题的调试信息" #: ../src/main.c:202 msgid "Liferea, the Linux Feed Reader" msgstr "Liferea,Linux Feed 阅读器" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "更多信息请访问 http://lzone.de/liferea/" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "更新请求已取消" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "无法解析目标主机名" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "无法解析代理服务器主机名" #: ../src/net.c:323 msgid "Unable to connect to remote host" msgstr "无法连接到远程主机" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "无法连接到代理服务器" #: ../src/net.c:325 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "发生网络错误,或另一端意外关闭了连接。" #. http 3xx redirection #: ../src/net.c:328 msgid "The resource moved permanently to a new location" msgstr "资源已经永久移动到新位置。" #. http 4xx client error #: ../src/net.c:331 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:333 msgid "Payment required" msgstr "需要付费" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "您无法访问这个资源" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "资源未找到" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "方法不允许" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "无法接受" #: ../src/net.c:338 msgid "Proxy authentication required" msgstr "代理服务器需要认证" #: ../src/net.c:339 msgid "Request timed out" msgstr "请求超时" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "资源不存在。请取消订阅!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "更新过程中发生内部错误" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "Feed 无法使用:服务器使用未支持的重定向!" #: ../src/net.c:349 msgid "Client Error" msgstr "客户端错误" #: ../src/net.c:351 msgid "Server Error" msgstr "服务器端错误" #: ../src/net.c:353 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:105 #, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "Feed “%s”已经更新!" #: ../src/subscription.c:110 #, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "Feed “%s”已失效。Liferea 将不会再更新它。" #: ../src/subscription.c:144 #, c-format msgid "Updating favicon for \"%s\"" msgstr "正在更新 Feed “%s”的图标" #: ../src/subscription.c:193 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "读取此订阅时出现问题,请检查网址和终端输出。" #: ../src/subscription.c:211 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "“%s”的地址已经永久改变,已被更新。" #: ../src/subscription.c:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "“%s”已不再更新。Liferea 将不会再更新它!" #: ../src/subscription.c:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "“%s”自上次更新后没有改变" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "正在更新“%s”" #: ../src/update.c:259 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "无法读取用于过滤的临时文件 %s!" #: ../src/update.c:282 #, c-format msgid "%s exited with status %d" msgstr "%s 终止,错误代码:%d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "错误:无法开启管道“%s”!" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "错误:无法打开文件“%s”!" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "错误:无此文件“%s”!" #: ../src/vfolder.c:55 msgid "New Search Folder" msgstr "新建搜索目录" #: ../src/xml.c:424 msgid "[There were more errors. Output was truncated!]" msgstr "[有更多的错误,输出已被截断!]" #: ../src/xml.c:577 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:288 #, c-format msgid "%d%s" msgstr "%d%s" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "%d 个附件" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "选择文件" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] " (%d 个新条目)" #: ../src/ui/liferea_shell.c:330 #, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "%d 未读 %s" #: ../src/ui/liferea_shell.c:716 msgid "Help Topics" msgstr "帮助主题" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "快速参考" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "FAQ" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea 现为在线模式。" #: ../src/ui/liferea_shell.c:808 msgid "Work Offline" msgstr "离线浏览" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Lifeare 现为离线模式" #: ../src/ui/liferea_shell.c:812 msgid "Work Online" msgstr "在线浏览" #: ../src/ui/liferea_shell.c:908 msgid "_Subscriptions" msgstr "订阅(_S)" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "更新全部(_A)" #: ../src/ui/liferea_shell.c:909 msgid "Updates all subscriptions." msgstr "更新全部订阅。" #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "全部标记为已读(_R)" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "标记所有订阅项的条目为已读。" #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "导入 Feed 列表(_I)..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "导入 OPML 格式 Feed 列表。" #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "导出 Feed 列表(_E)..." #: ../src/ui/liferea_shell.c:914 msgid "Exports the feed list as OPML." msgstr "导出 OPML 格式 Feed 列表。" #: ../src/ui/liferea_shell.c:915 msgid "_Quit" msgstr "退出(_Q)" #: ../src/ui/liferea_shell.c:917 msgid "_Feed" msgstr "_Feed" #: ../src/ui/liferea_shell.c:918 msgid "Remove _All Items" msgstr "删除所有条目(_A)" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "删除现选定 Feed 的所有条目。" #: ../src/ui/liferea_shell.c:921 msgid "_Item" msgstr "条目(_I)" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "下一个未读条目(_N)" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "下一个未读条目(_N)" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "视图(_V)" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "增大字号(_I)" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "放大条目显示窗口字体大小。" #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "减小字号(_D)" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "缩小条目显示窗口字体大小。" #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "工具(_T)" #: ../src/ui/liferea_shell.c:939 msgid "_Update Monitor" msgstr "更新监视器(_U)" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "显示当前更新队列中的全部 Feed" #: ../src/ui/liferea_shell.c:941 msgid "_Preferences" msgstr "首选项(_P)" #: ../src/ui/liferea_shell.c:941 msgid "Edit Preferences." msgstr "编辑首选项。" #: ../src/ui/liferea_shell.c:944 msgid "S_earch" msgstr "搜索(_E)" #: ../src/ui/liferea_shell.c:945 msgid "Search All Feeds..." msgstr "搜索所有 Feed..." #: ../src/ui/liferea_shell.c:945 msgid "Show the search dialog." msgstr "显示搜索对话框。" #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "帮助(_H)" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "目录(_C)" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "查看该程序的帮助。" #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "快速参考(_Q)" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "查看所有快捷键列表。" #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "_FAQ" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "查看该程序的 FAQ。" #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "关于(_A)" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "显示关于对话框。" #: ../src/ui/liferea_shell.c:956 msgid "_Normal View" msgstr "正常视图(_N)" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "设置查看模式为邮件客户端模式。" #: ../src/ui/liferea_shell.c:958 msgid "_Wide View" msgstr "宽视图(_W)" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "设置查看模式以试用三个竖行。" #: ../src/ui/liferea_shell.c:960 msgid "_Combined View" msgstr "合并视图(_C)" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "设置查看模式为两栏。" #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "减少 Feed 列表(_R)" #: ../src/ui/liferea_shell.c:965 msgid "Hide feeds with no unread items." msgstr "隐藏没有未读条目的 Feed。" #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "新增订阅(_N)..." #: ../src/ui/liferea_shell.c:970 msgid "Adds a subscription to the feed list." msgstr "新增订阅。" #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "新建目录(_F)..." #: ../src/ui/liferea_shell.c:972 msgid "Adds a folder to the feed list." msgstr "向 Feed 列表添加文件夹。" #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 msgid "New S_earch Folder..." msgstr "新建搜索目录(_E)..." #: ../src/ui/liferea_shell.c:973 msgid "Adds a new search folder to the feed list." msgstr "为 Feed 列表添加心得搜索文件夹。" #: ../src/ui/liferea_shell.c:974 msgid "New _Source..." msgstr "添加源(_S)..." #: ../src/ui/liferea_shell.c:974 msgid "Adds a new feed list source." msgstr "添加新的 Feed 列表源。" #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 #, fuzzy msgid "New _News Bin..." msgstr "新目录(_F)..." #: ../src/ui/liferea_shell.c:975 #, fuzzy msgid "Adds a new news bin." msgstr "新增订阅。" #: ../src/ui/liferea_shell.c:979 msgid "_Mark Items Read" msgstr "标记为已读(_M)" #: ../src/ui/liferea_shell.c:979 msgid "" "Marks all items of the selected feed list node / in the item list as read." msgstr "标记所有选定订阅下的所有条目或选定目录下的所有订阅为已读。" #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 msgid "_Update" msgstr "更新(_U)" #: ../src/ui/liferea_shell.c:981 msgid "" "Updates the selected subscription or all subscriptions of the selected " "folder." msgstr "更新选定的订阅项或目录下的所有订阅项目。" #: ../src/ui/liferea_shell.c:986 msgid "_Properties" msgstr "属性(_P)" #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "开启选定订阅的属性对话框。" #: ../src/ui/liferea_shell.c:987 msgid "_Remove" msgstr "删除(_R)" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "删除选定的订阅项。" #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "切换阅读状态(_R)" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "切换选定条目的阅读状态。" #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "切换条目标签(_F)" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "切换选定条目的阅读状态。" #: ../src/ui/liferea_shell.c:995 msgid "R_emove" msgstr "删除(_E)" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "删除选定的条目。" #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "在设置浏览器中载入此条目链接。" #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "在浏览器中打开(_L)" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "在设置浏览器中载入此条目链接。" #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "外部浏览器设置" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "在设置浏览器中载入此条目链接。" #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "离线浏览(_W)" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "此选项允许禁用订阅更新。" #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 msgid "Liferea - Linux Feed Reader" msgstr "Liferea - Linux Feed 阅读器" #: ../src/ui/liferea_shell.c:1341 #, 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,程序会把标题自动载入到右侧的主窗口内。

" #: ../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:205 #, fuzzy msgid "All Files" msgstr "本地文件(_H)" #: ../src/ui/feed_list_view.c:341 msgid "Deleting entry" msgstr "删除入口中" #: ../src/ui/feed_list_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\" and its contents?" msgstr "您确定要删除 %s 及其内容吗?" #: ../src/ui/feed_list_view.c:342 #, c-format msgid "Are you sure that you want to delete \"%s\"?" msgstr "您确定要删除 %s 吗 ?" #: ../src/ui/feed_list_view.c:354 msgid "Deletion Confirmation" msgstr "删除确认" #: ../src/ui/feed_list_view.c:385 msgid "Liferea is in offline mode. No update possible." msgstr "Liferea 处于离线模式,无法更新。" #: ../src/ui/liferea_htmlview.c:627 #, fuzzy msgid "Open Link In _Tab" msgstr "在标签中打开链接(_T)" #: ../src/ui/liferea_htmlview.c:628 #, fuzzy msgid "_Open Link In Browser" msgstr "在浏览器中开启链接(_L)" #: ../src/ui/liferea_htmlview.c:629 #, fuzzy msgid "_Open Link In External Browser" msgstr "在浏览器中开启链接(_L)" #: ../src/ui/liferea_htmlview.c:632 #, c-format msgid "_Bookmark Link at %s" msgstr "在 %s 加入书签(_B)" #: ../src/ui/liferea_htmlview.c:636 msgid "_Copy Link Location" msgstr "复制链接地址(_C)" #: ../src/ui/liferea_htmlview.c:639 #, fuzzy msgid "_Copy Image Location" msgstr "复制链接地址(_C)" #: ../src/ui/liferea_htmlview.c:641 #, fuzzy msgid "S_ave Link As" msgstr "另存为..." #: ../src/ui/liferea_htmlview.c:643 msgid "S_ave Image As" msgstr "" #: ../src/ui/liferea_htmlview.c:646 msgid "_Subscribe..." msgstr "订阅(_S)..." #: ../src/ui/item_list_view.c:347 msgid "*** No title ***" msgstr "*** 无标题 ***" #: ../src/ui/item_list_view.c:598 msgid "Date" msgstr "日期" #: ../src/ui/item_list_view.c:612 msgid "Headline" msgstr "标题" #: ../src/ui/item_list_view.c:714 ../src/ui/item_list_view.c:735 #: ../src/ui/item_list_view.c:756 ../src/ui/item_list_view.c:830 #: ../src/ui/item_list_view.c:915 ../src/ui/item_list_view.c:930 msgid "No item has been selected" msgstr "未选择条目!" #: ../src/ui/item_list_view.c:731 ../src/ui/item_list_view.c:752 msgid "This item has no link specified!" msgstr "此条目没有指定链接!" #: ../src/ui/item_list_view.c:818 msgid "You must select a feed to delete its items!" msgstr "您必须先选择一个 Feed 才能删除条目!" #: ../src/ui/popup_menu.c:142 msgid "Copy to News Bin" msgstr "" #: ../src/ui/popup_menu.c:156 #, fuzzy, c-format msgid "_Bookmark at %s" msgstr "在 %s 加入书签(_B)" #: ../src/ui/popup_menu.c:160 #, fuzzy msgid "Copy Item _Location" msgstr "复制链接地址(_C)" #: ../src/ui/popup_menu.c:166 msgid "R_emove Item" msgstr "删除条目(_E)" #: ../src/ui/popup_menu.c:179 msgid "Open Enclosure..." msgstr "开启附件..." #: ../src/ui/popup_menu.c:180 msgid "Save As..." msgstr "另存为..." #: ../src/ui/popup_menu.c:181 msgid "Copy Link Location" msgstr "复制链接地址" #: ../src/ui/popup_menu.c:195 msgid "_Update All" msgstr "更新全部(_U)" #: ../src/ui/popup_menu.c:200 msgid "_Show Liferea" msgstr "显示 Liferea (_S)" #: ../src/ui/popup_menu.c:298 msgid "_Update Folder" msgstr "更新目录(_U)" #: ../src/ui/popup_menu.c:300 msgid "_Mark All As Read" msgstr "全部标记为已读(_M)" #: ../src/ui/popup_menu.c:310 msgid "_New" msgstr "新增(_N)" #: ../src/ui/popup_menu.c:313 msgid "New _Subscription..." msgstr "新增订阅(_S)..." #: ../src/ui/popup_menu.c:320 msgid "New S_ource..." msgstr "新增来源(_O)..." #: ../src/ui/popup_menu.c:329 #, fuzzy msgid "Sort Feeds" msgstr "导入 Feed 列表" #: ../src/ui/popup_menu.c:335 msgid "_Rebuild" msgstr "" #: ../src/ui/preferences_dialog.c:88 msgid "GNOME default" msgstr "GNOME 默认" #: ../src/ui/preferences_dialog.c:89 msgid "Text below icons" msgstr "文本在图标下方" #: ../src/ui/preferences_dialog.c:90 msgid "Text beside icons" msgstr "文本在图标旁" #: ../src/ui/preferences_dialog.c:91 msgid "Icons only" msgstr "仅图标" #: ../src/ui/preferences_dialog.c:92 msgid "Text only" msgstr "仅文本" #: ../src/ui/preferences_dialog.c:100 ../src/ui/subscription_dialog.c:43 msgid "minutes" msgstr "分" #: ../src/ui/preferences_dialog.c:101 ../src/ui/subscription_dialog.c:44 msgid "hours" msgstr "小时" #: ../src/ui/preferences_dialog.c:102 ../src/ui/subscription_dialog.c:45 msgid "days" msgstr "天" #: ../src/ui/preferences_dialog.c:107 msgid "Space" msgstr "空格键" #: ../src/ui/preferences_dialog.c:108 msgid " Space" msgstr " 空格键" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " 空格键" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "正常视图(_N)" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "宽视图(_W)" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "合并视图(_C)" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "手动" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "浏览器预设" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "现有窗口" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "新窗口" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "新标签" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "" #: ../src/ui/preferences_dialog.c:685 #, fuzzy msgid "Terminate instead of minimizing to the messaging menu" msgstr "退出而不是最小化到托盘(_E)。" #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "类型" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "程序" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "此 Feed 未指定默认更新周期。" #: ../src/ui/browser_tabs.c:155 msgid "Untitled" 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 个新条目" #: ../src/ui/ui_tray.c:221 #, c-format 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 个新条目" #: ../src/ui/ui_tray.c:224 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 个新条目" #: ../src/ui/ui_tray.c:228 #, c-format 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 个新条目" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "没有未读条目" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "无效的 Atom Feed:未知作者" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "%b %d %H:%M" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "新增订阅" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "Google Reader 登录失败!" #: ../src/fl_sources/google_source.c:383 msgid "Google Reader" msgstr "Google Reader" #: ../src/fl_sources/google_source.c:384 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 列表和阅读列表。" #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "" #: ../src/fl_sources/opml_source.c:326 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 "" #: ../src/fl_sources/opml_source.c:387 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:238 msgid "No feed list source types found!" msgstr "未找到 Feed 列表源类型!" #: ../src/fl_sources/node_source.c:269 msgid "Source Type" msgstr "来源类型" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source.c:363 #, 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 列表和阅读列表。" #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 msgid "This feed does not exist anymore!" msgstr "此 Feed 已不存在!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "此新闻条目没有标题" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "访问" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "打开 Feed" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 msgid "Mark all as read" msgstr "全部标记为已读" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 msgid "Feed Update" msgstr "Feed 更新" #: ../src/notification/libnotify.c:271 msgid "Show details" msgstr "显示详细信息" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "认证" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "密码(_P):" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "用户名(_N):" #: ../glade/auth.ui.h:6 msgid "" "Note: The username and password will be saved to your Liferea feedlist " "file without using encryption." msgstr "注意:帐号跟密码会以明码存于您的 Liferea Feed 列表文件中。" #: ../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/ttrss_source.ui.h:4 msgid "_Password" msgstr "密码(_P)" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "用户名(电子邮件地址)(_U)" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "常规视图" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "宽视图" #: ../glade/liferea.ui.h:4 msgid "View Headlines" msgstr "查看标题" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "合并视图" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "标题" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "在线/离线按钮" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "订阅属性" #: ../glade/liferea.ui.h:9 #, fuzzy msgid "Feed Name" msgstr "Feed 名称(_N):" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "Feed 名称(_N):" #: ../glade/liferea.ui.h:11 #, fuzzy msgid "Update Interval" msgstr "更新监视" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "使用预设更新周期(_U)。" #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "特定 Feed 的更新间隔(_F)" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "不自动更新此 Feed(_D)。" #: ../glade/liferea.ui.h:15 msgid " " msgstr " " #: ../glade/liferea.ui.h:17 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "Feed 提供者建议更新周期为 %d 分钟。" #: ../glade/liferea.ui.h:18 msgid "General" msgstr "常规" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 #, fuzzy msgid "Feed Source" msgstr "Feed 来源" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "来源类型:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "源(_S):" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "网址(_U)" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "命令(_C)" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "本地文件(_H)" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "选择文件..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "使用会话过滤器(_F)" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "转换工具(_U):" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "默认缓存设置(_D)" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "禁用缓存(_S)" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "无限制缓存(_U)" #: ../glade/liferea.ui.h:34 msgid "_Number of items to save:" msgstr "保存条目数(_N):" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "存档" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "使用 HTTP 认证(_A)" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "下载时不使用代理服务器(_D)" #: ../glade/liferea.ui.h:40 msgid "Download" msgstr "下载" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "自动下载此 Feed 的所有附件(_A)。" #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "选择文章时自动在配置好的浏览器中载入项目链接(_L)。" #: ../glade/liferea.ui.h:43 msgid "Ignore _comment feeds for this subscription." msgstr "忽略此订阅的评论 Feed (_C)。" #: ../glade/liferea.ui.h:44 msgid "_Enforce popup notification for this subscription." msgstr "强制弹出此订阅提示(_E)。" #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "不再为此订阅弹出提示(_N)。" #: ../glade/liferea.ui.h:46 msgid "_Mark downloaded items as read." msgstr "标记下载的条目为已读(_M)。" #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "高级" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "新目录" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "目录名称(_F):" #: ../glade/liferea.ui.h:50 msgid "Rename" msgstr "重命名" #: ../glade/liferea.ui.h:51 msgid "_New Name:" msgstr "新名称(_N):" #: ../glade/liferea.ui.h:52 msgid "Search Folder Properties" msgstr "搜索目录属性" #: ../glade/liferea.ui.h:53 msgid "Search _Name:" msgstr "搜索名称(_N):" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "所有匹配的规则(_N)" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "必须匹配所有规则(_A)" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "开启附件..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "下载附件类型:" #: ../glade/liferea.ui.h:59 #, 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/liferea.ui.h:60 msgid "_Browse" msgstr "浏览(_B)" #: ../glade/liferea.ui.h:61 msgid "_Do this automatically for enclosures like this from now on." msgstr "从现在开始自动对所有附件执行此次进行的操作(_D)。" #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "搜索所有 Feed" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "搜索(_S):" #: ../glade/liferea.ui.h:64 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "输入一个让 Liferea 在条目标题或内容中寻找的搜索字符。" #: ../glade/liferea.ui.h:65 msgid "_Advanced..." msgstr "高级(_A)..." #: ../glade/liferea.ui.h:66 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "开始在所有 Feed 中搜索该文本,结果会出现在条目列表中。" #: ../glade/liferea.ui.h:67 msgid "Update Monitor" msgstr "更新监视" #: ../glade/liferea.ui.h:68 #, fuzzy msgid "Pending Requests" msgstr "待验证请求" #: ../glade/liferea.ui.h:69 #, fuzzy msgid "Downloading Now" msgstr "立即下载" #: ../glade/liferea.ui.h:70 msgid "Cancel _All" msgstr "取消全部(_A)" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "关于" #: ../glade/liferea.ui.h:74 #, fuzzy msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" "版权所有 (C) 2003-2009\n" "Liferea 团队\n" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea 是 GTK+ 新闻搜集器" #: ../glade/liferea.ui.h:78 msgid "Liferea Homepage" msgstr "Liferea 主页" #: ../glade/liferea.ui.h:79 msgid "Advanced Search" msgstr "高级搜索" #: ../glade/liferea.ui.h:80 msgid "_Search Folder..." msgstr "搜索目录(_S)..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "创建搜索引擎 Feed" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "输入您想搜索的字符串" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "最大搜索结果数(_N):" #: ../glade/liferea.ui.h:84 #, 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订阅。您可以永久保留此定" "阅,并如同其他订阅一般更新。" #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" 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 Feed 列表的 URL。" #: ../glade/opml_source.ui.h:3 msgid "_Location" msgstr "位置(_L)" #: ../glade/opml_source.ui.h:4 msgid "_Select File" msgstr "选择文件(_S)" #: ../glade/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "" #: ../glade/ttrss_source.ui.h:2 #, fuzzy msgid "Please enter your tt-rss 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/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/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:4 #, fuzzy msgid "Feed Update Settings" msgstr "Feed 更新" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "更新全部订阅。" #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "默认 Feed 更新周期(_I):" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 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:9 msgid "Feeds" msgstr "Feed" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "目录显示设置" #: ../glade/prefs.ui.h:11 msgid "_Show the items of all child feeds when a folder is selected." msgstr "当选择目录时,显示所有子 Feed 条目。" #: ../glade/prefs.ui.h:12 msgid "_Hide read items." msgstr "隐藏已读条目(_H)。" #: ../glade/prefs.ui.h:13 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "Feed 图标(favicon)" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "立即更新所有 Feed 图标(_U)。" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "目录" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "Reading Headlines" msgstr "标记未读" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "浏览文章(_S):" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "Web Integration" msgstr "方位" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "发送书签到(_P)" #: ../glade/prefs.ui.h:22 #, fuzzy msgid "Internal Browser Settings" msgstr "内部浏览器设置" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "在 Liferea 的窗口开启链接(_W)。" #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "禁用 Javascript(_D)。" #: ../glade/prefs.ui.h:25 msgid "_Enable browser plugins." msgstr "启用浏览器插件(_E)。" #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "外部浏览器设置" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "开启链接于(_O):" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "手动" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "浏览器(_B):" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "浏览器" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Notification Settings" msgstr "程序状态通知设置" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "使用弹出窗口显示新标题(_P)。" #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "在程序状态通知区中显示状态图标(系统托盘)(_I)。" #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "在托盘图标上显示新条目数量。" #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "退出而不是最小化到托盘(_E)。" #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "启动后最小化到托盘(_S)。" #: ../glade/prefs.ui.h:39 #, fuzzy msgid "Toolbar Settings" msgstr "工具栏按钮标签:" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "隐藏工具栏(_H)。" #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "工具栏按钮标签:" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "图形界面" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "自动检测(GNOME 或环境)(_A)" #: ../glade/prefs.ui.h:45 msgid "_No Proxy" msgstr "不使用代理(_N)" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "手工设置(_M):" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "代理服务器端口(_P):" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "代理服务器地址(_H):" #: ../glade/prefs.ui.h:49 msgid "Use Proxy Au_thentication" msgstr "使用代理服务器认证(_T)" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "代理服务器密码(_W):" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "代理服务器用户名(_U):" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "代理服务器" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "附件下载中" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "下载方式(_D):" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "开启附件..." #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "附件" #: ../glade/prefs.ui.h:57 msgid "Plugins" msgstr "" #~ 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)" #, fuzzy #~ msgid "Synchronized with Nearby Hosts" #~ msgstr "已与临近主机同步" #~ 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 "_Delete" #~ msgstr "删除(_D)" #~ 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.10.17/po/zh_TW.po000066400000000000000000002222561261475620100153160ustar00rootroot00000000000000# 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: 2013-01-25 23:54+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.desktop.in.h:1 ../src/main.c:235 ../glade/liferea.ui.h:1 msgid "Liferea" msgstr "" #: ../liferea.desktop.in.h:2 #, fuzzy msgid "Feed Reader" msgstr "饋流快取" #: ../liferea.desktop.in.h:3 #, fuzzy msgid "Liferea Feed Reader" msgstr "Lifeera 偏好" #: ../liferea.desktop.in.h:4 msgid "Read news feeds and blogs" 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/liferea.ui.h:29 #, 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 #, fuzzy msgid "No comments yet." msgstr "說明" #: ../xslt/item.xml.in.h:11 #, fuzzy msgid "Comments" msgstr "說明" #: ../xslt/item.xml.in.h:12 #, fuzzy msgid "Updating..." msgstr "更新: \"%s\"" #: ../xslt/item.xml.in.h:13 msgid "Refresh" 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 #, 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:32 #, fuzzy msgid "Default Browser" msgstr "瀏覽器" #: ../src/browser.c:207 ../src/browser.c:227 #, c-format msgid "Browser command failed: %s" msgstr "瀏覽器指令失敗: %s" #: ../src/browser.c:230 #, c-format msgid "Starting: \"%s\"" msgstr "啟動: \"%s\"" #. unauthorized #: ../src/comments.c:120 #, fuzzy msgid "Authorization Error" msgstr "認證" #: ../src/common.c:62 #, fuzzy, c-format msgid "Cannot create cache directory \"%s\"!" msgstr "無法建立快取目錄 %s !" #. translation hint: date format for today, reorder format codes as necessary #: ../src/date.c:80 msgid "Today %l:%M %p" msgstr "" #. translation hint: date format for yesterday, reorder format codes as necessary #: ../src/date.c:91 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:104 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:113 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:116 msgid "%b %d %Y" msgstr "" #: ../src/enclosure.c:197 #, c-format msgid "\"%s\" is not a valid enclosure type config file!" msgstr "\"%s\" 不是有效的設定檔!" #: ../src/enclosure.c:288 msgid "" "You have not configured a download tool yet! Please do so in the 'Download' " "tab in Tools/Preferences." msgstr "" #: ../src/enclosure.c:306 #, 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:177 #, c-format msgid "Error renaming %s to %s\n" msgstr "無法將 %s 更名為 %s\n" #: ../src/export.c:406 ../src/export.c:408 #, fuzzy, c-format msgid "XML error while reading OPML file! Could not import \"%s\"!" msgstr "讀入快取檔案 \"%s\" 時發生 XML 錯誤 ! 無法讀入快取檔案!" #: ../src/export.c:414 ../src/export.c:416 #, c-format msgid "" "Empty document! OPML document \"%s\" should not be empty when importing." msgstr "空白文件! OPML \"%s\" 檔案不應是空白檔案。" #: ../src/export.c:437 ../src/export.c:439 #, c-format msgid "\"%s\" is not a valid OPML document! Liferea cannot import this file!" msgstr "\"%s\" 不是有效的 OPML 檔案! 無法匯入!" #: ../src/export.c:458 msgid "Imported feed list" msgstr "匯入饋流列表" #: ../src/export.c:470 msgid "Import Feed List" msgstr "匯入饋流列表" #: ../src/export.c:470 msgid "Import" msgstr "匯入" #: ../src/export.c:470 ../src/export.c:487 ../src/fl_sources/opml_source.c:387 #, fuzzy msgid "OPML Files" msgstr "選擇檔案" #: ../src/export.c:478 msgid "Error while exporting feed list!" msgstr "在匯出饋流列表時錯誤!" #: ../src/export.c:480 msgid "Feed List exported!" msgstr "饋流列表已匯出!" #: ../src/export.c:487 msgid "Export Feed List" msgstr "匯出饋流列表" #: ../src/export.c:487 msgid "Export" msgstr "匯出" #: ../src/feed.c:255 #, 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:284 #, c-format msgid "\"%s\" updated..." msgstr "\"%s\" 更新中" #: ../src/feed.c:294 #, 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:404 #, fuzzy msgid "There are no unread items" msgstr "沒有未讀項目 " #: ../src/main.c:164 msgid "" "Start Liferea with its main window in STATE. STATE may be `shown', " "`iconified', or `hidden'" msgstr "" #: ../src/main.c:164 msgid "STATE" msgstr "" #: ../src/main.c:165 #, fuzzy msgid "Show version information and exit" msgstr " --version 印出 Liferea 版本編號" #: ../src/main.c:166 #, fuzzy msgid "Add a new subscription" msgstr "新增訂閱" #: ../src/main.c:166 msgid "uri" msgstr "" #: ../src/main.c:171 #, fuzzy msgid "Print debugging messages of all types" msgstr " --debug-all 印出所有類別的除錯訊息" #: ../src/main.c:172 #, fuzzy msgid "Print debugging messages for the cache handling" msgstr " --debug-cache 印出處理快取時的除錯訊息" #: ../src/main.c:173 #, fuzzy msgid "Print debugging messages for the configuration handling" msgstr " --debug-conf 印出設定的除錯訊息" #: ../src/main.c:174 #, fuzzy msgid "Print debugging messages of the database handling" msgstr " --debug-cache 印出處理快取時的除錯訊息" #: ../src/main.c:175 #, fuzzy msgid "Print debugging messages of all GUI functions" msgstr " --debug-gui 印出所有圖形使用者介面的除錯訊息" #: ../src/main.c:176 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/main.c:177 #, fuzzy msgid "Print debugging messages of all network activity" msgstr " --debug-all 印出所有類別的除錯訊息" #: ../src/main.c:178 #, fuzzy msgid "Print debugging messages of all parsing functions" msgstr " --debug-parsing 印出所有分析功能的除錯訊息" #: ../src/main.c:179 msgid "Print debugging messages when a function takes too long to process" msgstr "" #: ../src/main.c:180 #, fuzzy msgid "Print debugging messages when entering/leaving functions" msgstr " --debug-trace 印出 entering/leaving 函式除錯訊息" #: ../src/main.c:181 #, fuzzy msgid "Print debugging messages of the feed update processing" msgstr " --debug-update 印出饋流升級的錯誤訊息" #: ../src/main.c:182 #, fuzzy msgid "Print debugging messages of the search folder matching" msgstr " --debug-cache 印出處理快取時的除錯訊息" #: ../src/main.c:183 #, fuzzy msgid "Print verbose debugging messages" msgstr " --debug-verbose 印出繁瑣除錯訊息" #: ../src/main.c:194 ../src/main.c:195 #, fuzzy msgid "Print debugging messages for the given topic" msgstr " --debug-cache 印出處理快取時的除錯訊息" #: ../src/main.c:202 #, fuzzy msgid "Liferea, the Linux Feed Reader" msgstr "Lifeera 偏好" #: ../src/main.c:203 msgid "For more information, please visit http://lzone.de/liferea/" msgstr "" #. Some libsoup transport errors #: ../src/net.c:320 msgid "The update request was cancelled" msgstr "" #: ../src/net.c:321 msgid "Unable to resolve destination host name" msgstr "" #: ../src/net.c:322 msgid "Unable to resolve proxy host name" msgstr "" #: ../src/net.c:323 #, fuzzy msgid "Unable to connect to remote host" msgstr "無法連線到遠端主機" #: ../src/net.c:324 msgid "Unable to connect to proxy" msgstr "" #: ../src/net.c:325 msgid "" "A network error occurred, or the other end closed the connection unexpectedly" msgstr "" #. http 3xx redirection #: ../src/net.c:328 msgid "The resource moved permanently to a new location" msgstr "" #. http 4xx client error #: ../src/net.c:331 #, 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:333 #, fuzzy msgid "Payment required" msgstr "Payment Required" #: ../src/net.c:334 msgid "You're not allowed to access this resource" msgstr "" #: ../src/net.c:335 msgid "Resource Not Found" msgstr "未找到資源" #: ../src/net.c:336 msgid "Method Not Allowed" msgstr "方法不允許" #: ../src/net.c:337 msgid "Not Acceptable" msgstr "無法接受" #: ../src/net.c:338 #, fuzzy msgid "Proxy authentication required" msgstr "代理伺服器需要認證" #: ../src/net.c:339 #, fuzzy msgid "Request timed out" msgstr "存取逾時" #: ../src/net.c:340 msgid "Gone. Resource doesn't exist. Please unsubscribe!" msgstr "完了。資源不存在。請取消訂閱!" #: ../src/net.c:345 msgid "There was an internal error in the update process" msgstr "" #: ../src/net.c:347 msgid "Feed not available: Server requested unsupported redirection!" msgstr "饋流無法使用: 伺服器使用未支援的重導!" #: ../src/net.c:349 msgid "Client Error" msgstr "客戶端的錯誤" #: ../src/net.c:351 msgid "Server Error" msgstr "伺服器端的錯誤" #: ../src/net.c:353 #, 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:105 #, fuzzy, c-format msgid "Subscription \"%s\" is already being updated!" msgstr "此饋流 \"%s\" 已經更新!" #: ../src/subscription.c:110 #, fuzzy, c-format msgid "" "The subscription \"%s\" was discontinued. Liferea won't update it anymore!" msgstr "饋流 %s 已經失效。Liferea 將不會更新它。" #: ../src/subscription.c:144 #, fuzzy, c-format msgid "Updating favicon for \"%s\"" msgstr "更新饋流 \"%s\" 的圖示" #: ../src/subscription.c:193 msgid "" "There was a problem while reading this subscription. Please check the URL " "and console output." msgstr "讀取此訂閱時出現問題。請確認網址與終端機輸出!" #: ../src/subscription.c:211 #, c-format msgid "The URL of \"%s\" has changed permanently and was updated" msgstr "\"%s\" 已經更新為永久網址。" #: ../src/subscription.c:219 #, c-format msgid "\"%s\" is discontinued. Liferea won't updated it anymore!" msgstr "\"%s\" 終止更新。Liferea 將不會更新此饋流!" #: ../src/subscription.c:222 #, c-format msgid "\"%s\" has not changed since last update" msgstr "\"%s\" 自從最後更新後沒有改變。" #: ../src/subscription.c:272 #, c-format msgid "Updating \"%s\"" msgstr "更新: \"%s\"" #: ../src/update.c:259 #, c-format msgid "Error opening temp file %s to use for filtering!" msgstr "當開始暫存檔 %s 以處理過濾時,發生錯誤!" #: ../src/update.c:282 #, c-format msgid "%s exited with status %d" msgstr "%s 終止,錯誤代碼: %d" #: ../src/update.c:288 ../src/update.c:289 ../src/update.c:401 #, c-format msgid "Error: Could not open pipe \"%s\"" msgstr "錯誤: 無法開啟管道 \"%s\"!" #. FIXME: maybe setting request->returncode would be better #: ../src/update.c:427 #, c-format msgid "Error: Could not open file \"%s\"" msgstr "錯誤: 無法開啟檔案 \"%s\"!" #: ../src/update.c:433 #, c-format msgid "Error: There is no file \"%s\"" msgstr "錯誤: 無此檔案 \"%s\"!" #: ../src/vfolder.c:55 #, fuzzy msgid "New Search Folder" msgstr "新目錄" #: ../src/xml.c:424 #, fuzzy msgid "[There were more errors. Output was truncated!]" msgstr "[解析器的錯誤訊息已截去!]" #: ../src/xml.c:577 #, 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:288 #, c-format msgid "%d%s" msgstr "" #. update list title #: ../src/ui/enclosure_list_view.c:321 #, c-format msgid "%d attachment" msgid_plural "%d attachments" msgstr[0] "" msgstr[1] "" #: ../src/ui/enclosure_list_view.c:377 ../src/ui/subscription_dialog.c:356 msgid "Choose File" msgstr "選擇檔案" #: ../src/ui/enclosure_list_view.c:438 #, 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:325 #, fuzzy, c-format msgid " (%d new)" msgid_plural " (%d new)" msgstr[0] "%d 個新項目" msgstr[1] "%d 個新項目" #: ../src/ui/liferea_shell.c:330 #, fuzzy, c-format msgid "%d unread%s" msgid_plural "%d unread%s" msgstr[0] "未讀" msgstr[1] "未讀" #: ../src/ui/liferea_shell.c:716 msgid "Help Topics" msgstr "" #: ../src/ui/liferea_shell.c:722 msgid "Quick Reference" msgstr "快速參考" #: ../src/ui/liferea_shell.c:728 msgid "FAQ" msgstr "" #: ../src/ui/liferea_shell.c:806 msgid "Liferea is now online" msgstr "Liferea 現為線上模式。" #: ../src/ui/liferea_shell.c:808 #, fuzzy msgid "Work Offline" msgstr "離線瀏覽(_W)" #: ../src/ui/liferea_shell.c:810 msgid "Liferea is now offline" msgstr "Lifeare 現為離線模式" #: ../src/ui/liferea_shell.c:812 #, fuzzy msgid "Work Online" msgstr "離線瀏覽(_W)" #: ../src/ui/liferea_shell.c:908 #, fuzzy msgid "_Subscriptions" msgstr "新增訂閱" #: ../src/ui/liferea_shell.c:909 msgid "Update _All" msgstr "更新全部(_A)" #: ../src/ui/liferea_shell.c:909 #, fuzzy msgid "Updates all subscriptions." msgstr "新增訂閱" #: ../src/ui/liferea_shell.c:911 msgid "Mark All As _Read" msgstr "全部標示為已讀(_R)" #: ../src/ui/liferea_shell.c:911 msgid "Marks read every item of every subscription." msgstr "標示每個訂閱的所有項目為已讀" #: ../src/ui/liferea_shell.c:913 msgid "_Import Feed List..." msgstr "匯入饋流列表(_I)..." #: ../src/ui/liferea_shell.c:913 msgid "Imports an OPML feed list." msgstr "匯入 OPML 格式饋流列表" #: ../src/ui/liferea_shell.c:914 msgid "_Export Feed List..." msgstr "匯出饋流列表(_E)..." #: ../src/ui/liferea_shell.c:914 #, fuzzy msgid "Exports the feed list as OPML." msgstr "匯出 OPML 格式饋流列表" #: ../src/ui/liferea_shell.c:915 #, fuzzy msgid "_Quit" msgstr "/離開(_Q)" #: ../src/ui/liferea_shell.c:917 #, fuzzy msgid "_Feed" msgstr "饋流(_F)" #: ../src/ui/liferea_shell.c:918 #, fuzzy msgid "Remove _All Items" msgstr "移除所有項目(_A)" #: ../src/ui/liferea_shell.c:918 msgid "Removes all items of the currently selected feed." msgstr "移除現選擇饋流的所有項目。" #: ../src/ui/liferea_shell.c:921 #, fuzzy msgid "_Item" msgstr "項目(_I)" #: ../src/ui/liferea_shell.c:922 msgid "Previous Item" msgstr "" #: ../src/ui/liferea_shell.c:924 #, fuzzy msgid "Next Item" msgstr "下筆未讀項目(_N)" #. No tooltip here as it really hinders usability to have it flashing #. when skimming through items using "Next Unread"! #: ../src/ui/liferea_shell.c:929 msgid "_Next Unread Item" msgstr "下筆未讀項目(_N)" #: ../src/ui/liferea_shell.c:932 msgid "_View" msgstr "檢視項目(_V)" #: ../src/ui/liferea_shell.c:933 ../src/ui/liferea_htmlview.c:656 msgid "_Increase Text Size" msgstr "放大字型(_I)" #: ../src/ui/liferea_shell.c:933 msgid "Increases the text size of the item view." msgstr "放大項目顯示視窗字型大小" #: ../src/ui/liferea_shell.c:935 ../src/ui/liferea_htmlview.c:657 msgid "_Decrease Text Size" msgstr "縮小字型(D)" #: ../src/ui/liferea_shell.c:935 msgid "Decreases the text size of the item view." msgstr "縮小項目顯示視窗字型大小" #: ../src/ui/liferea_shell.c:938 msgid "_Tools" msgstr "" #: ../src/ui/liferea_shell.c:939 #, fuzzy msgid "_Update Monitor" msgstr "/更新目錄(_U)" #: ../src/ui/liferea_shell.c:939 msgid "Show a list of all feeds currently in the update queue" msgstr "" #: ../src/ui/liferea_shell.c:941 #, fuzzy msgid "_Preferences" msgstr "偏好設定" #: ../src/ui/liferea_shell.c:941 #, fuzzy msgid "Edit Preferences." msgstr "編輯偏好設定。" #: ../src/ui/liferea_shell.c:944 #, fuzzy msgid "S_earch" msgstr "搜尋" #: ../src/ui/liferea_shell.c:945 #, fuzzy msgid "Search All Feeds..." msgstr "搜尋所有饋流" #: ../src/ui/liferea_shell.c:945 #, fuzzy msgid "Show the search dialog." msgstr "顯示或隱藏搜尋視窗" #: ../src/ui/liferea_shell.c:947 msgid "_Help" msgstr "求助(_H)" #: ../src/ui/liferea_shell.c:948 msgid "_Contents" msgstr "內容(_C)" #: ../src/ui/liferea_shell.c:948 msgid "View help for this application." msgstr "" #: ../src/ui/liferea_shell.c:949 msgid "_Quick Reference" msgstr "快速參考(_Q)" #: ../src/ui/liferea_shell.c:949 msgid "View a list of all Liferea shortcuts." msgstr "檢視所有捷徑的列表" #: ../src/ui/liferea_shell.c:951 msgid "_FAQ" msgstr "" #: ../src/ui/liferea_shell.c:951 msgid "View the FAQ for this application." msgstr "檢視本應用程式的 FAQ 文件" #: ../src/ui/liferea_shell.c:952 msgid "_About" msgstr "關於(_A)" #: ../src/ui/liferea_shell.c:952 msgid "Shows an about dialog." msgstr "顯示關於對話視窗" #: ../src/ui/liferea_shell.c:956 #, fuzzy msgid "_Normal View" msgstr "本地檔案(_L)" #: ../src/ui/liferea_shell.c:956 msgid "Set view mode to mail client mode." msgstr "" #: ../src/ui/liferea_shell.c:958 #, fuzzy msgid "_Wide View" msgstr "檢視項目(_V)" #: ../src/ui/liferea_shell.c:958 msgid "Set view mode to use three vertical panes." msgstr "" #: ../src/ui/liferea_shell.c:960 #, fuzzy msgid "_Combined View" msgstr "啟動摘要模式(_C)" #: ../src/ui/liferea_shell.c:960 msgid "Set view mode to two pane mode." msgstr "" #: ../src/ui/liferea_shell.c:965 msgid "_Reduced Feed List" msgstr "" #: ../src/ui/liferea_shell.c:965 #, fuzzy msgid "Hide feeds with no unread items." msgstr "沒有未讀項目 " #: ../src/ui/liferea_shell.c:970 msgid "_New Subscription..." msgstr "新增訂閱(_N)..." #: ../src/ui/liferea_shell.c:970 #, fuzzy msgid "Adds a subscription to the feed list." msgstr "新增訂閱到餽流列表" #: ../src/ui/liferea_shell.c:972 ../src/ui/popup_menu.c:316 msgid "New _Folder..." msgstr "新目錄(_F)..." #: ../src/ui/liferea_shell.c:972 #, fuzzy msgid "Adds a folder to the feed list." msgstr "新增目錄到餽流列表中。" #: ../src/ui/liferea_shell.c:973 ../src/ui/popup_menu.c:319 #, fuzzy msgid "New S_earch Folder..." msgstr "新目錄(_F)..." #: ../src/ui/liferea_shell.c:973 #, fuzzy msgid "Adds a new search folder to the feed list." msgstr "新增目錄到餽流列表中。" #: ../src/ui/liferea_shell.c:974 #, fuzzy msgid "New _Source..." msgstr "/新增(_N)/新增目錄(_O)" #: ../src/ui/liferea_shell.c:974 #, fuzzy msgid "Adds a new feed list source." msgstr "新增目錄到餽流列表中。" #: ../src/ui/liferea_shell.c:975 ../src/ui/popup_menu.c:321 #, fuzzy msgid "New _News Bin..." msgstr "/新增(_N)/新增目錄(_O)" #: ../src/ui/liferea_shell.c:975 #, fuzzy msgid "Adds a new news bin." msgstr "新增訂閱" #: ../src/ui/liferea_shell.c:979 #, fuzzy msgid "_Mark Items Read" msgstr "全部標示為已讀" #: ../src/ui/liferea_shell.c:979 #, fuzzy msgid "" "Marks all items of the selected feed list node / in the item list as read." msgstr "標示所有選擇的項目或目錄下所有的項目為已讀。" #: ../src/ui/liferea_shell.c:981 ../src/ui/popup_menu.c:296 #, fuzzy msgid "_Update" msgstr "/更新(U)" #: ../src/ui/liferea_shell.c:981 msgid "" "Updates the selected subscription or all subscriptions of the selected " "folder." msgstr "更新選擇的訂閱項目或目錄下的所有訂閱項目。" #: ../src/ui/liferea_shell.c:986 #, fuzzy msgid "_Properties" msgstr "屬性(_P)..." #: ../src/ui/liferea_shell.c:986 msgid "Opens the property dialog for the selected subscription." msgstr "開啟選擇訂閱的屬性設定視窗" #: ../src/ui/liferea_shell.c:987 #, fuzzy msgid "_Remove" msgstr "移除所有項目(_A)" #: ../src/ui/liferea_shell.c:987 msgid "Removes the selected subscription." msgstr "移除選擇的訂閱項目。" #: ../src/ui/liferea_shell.c:991 ../src/ui/popup_menu.c:164 msgid "Toggle _Read Status" msgstr "切換閱讀狀態(_R)" #: ../src/ui/liferea_shell.c:991 msgid "Toggles the read status of the selected item." msgstr "切換選擇項目的閱讀狀態。" #: ../src/ui/liferea_shell.c:993 ../src/ui/popup_menu.c:165 msgid "Toggle Item _Flag" msgstr "切換項目旗標(_F)" #: ../src/ui/liferea_shell.c:993 msgid "Toggles the flag status of the selected item." msgstr "切換選擇項目的狀態。" #: ../src/ui/liferea_shell.c:995 #, fuzzy msgid "R_emove" msgstr "/移除項目(_E)" #: ../src/ui/liferea_shell.c:995 msgid "Removes the selected item." msgstr "移除選擇的項目。" #: ../src/ui/liferea_shell.c:997 ../src/ui/popup_menu.c:128 msgid "Open In _Tab" msgstr "" #: ../src/ui/liferea_shell.c:997 #, fuzzy msgid "Launches the item's link in a new Liferea browser tab." msgstr "在設定瀏覽器中載入此項目連結。" #: ../src/ui/liferea_shell.c:999 ../src/ui/popup_menu.c:129 #, fuzzy msgid "_Open In Browser" msgstr "載入瀏覽器(_L)" #: ../src/ui/liferea_shell.c:999 #, fuzzy msgid "Launches the item's link in the Liferea item pane." msgstr "在設定瀏覽器中載入此項目連結。" #: ../src/ui/liferea_shell.c:1001 ../src/ui/popup_menu.c:130 #, fuzzy msgid "Open In _External Browser" msgstr "外部瀏覽器設定" #: ../src/ui/liferea_shell.c:1001 #, fuzzy msgid "Launches the item's link in the configured external browser." msgstr "在設定瀏覽器中載入此項目連結。" #: ../src/ui/liferea_shell.c:1006 ../src/ui/popup_menu.c:194 msgid "_Work Offline" msgstr "離線瀏覽(_W)" #: ../src/ui/liferea_shell.c:1006 msgid "This option allows you to disable subscription updating." msgstr "本選項允許你抑制訂閱項目的更新" #: ../src/ui/liferea_shell.c:1008 msgid "_Fullscreen" msgstr "" #: ../src/ui/liferea_shell.c:1008 msgid "Browse at full screen" msgstr "" #: ../src/ui/liferea_shell.c:1339 #, fuzzy msgid "Liferea - Linux Feed Reader" msgstr "Lifeera 偏好" #: ../src/ui/liferea_shell.c:1341 #, 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!這是一個桌用新聞匯集器。

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

Space" msgstr " 空白鍵" #: ../src/ui/preferences_dialog.c:109 msgid " Space" msgstr " 空白鍵" #: ../src/ui/preferences_dialog.c:114 #, fuzzy msgid "Normal View" msgstr "本地檔案(_L)" #: ../src/ui/preferences_dialog.c:115 #, fuzzy msgid "Wide View" msgstr "檢視項目(_V)" #: ../src/ui/preferences_dialog.c:116 #, fuzzy msgid "Combined View" msgstr "啟動摘要模式(_C)" #: ../src/ui/preferences_dialog.c:499 msgid "Manual" msgstr "手動" #: ../src/ui/preferences_dialog.c:514 msgid "Browser default" msgstr "瀏覽器預設" #: ../src/ui/preferences_dialog.c:517 msgid "Existing window" msgstr "現行視窗" #: ../src/ui/preferences_dialog.c:520 msgid "New window" msgstr "新視窗" #: ../src/ui/preferences_dialog.c:523 msgid "New tab" msgstr "新分頁" #: ../src/ui/preferences_dialog.c:682 msgid "Integrate with the messaging menu (indicator)" msgstr "" #: ../src/ui/preferences_dialog.c:685 msgid "Terminate instead of minimizing to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:688 msgid "Start minimized to the messaging menu" msgstr "" #: ../src/ui/preferences_dialog.c:788 msgid "Type" msgstr "型態" #: ../src/ui/preferences_dialog.c:791 msgid "Program" msgstr "程式" #: ../src/ui/feed_list_node.c:124 msgid "(Empty)" msgstr "" #: ../src/ui/feed_list_node.c:321 #, c-format msgid "" "%s\n" "Rebuilding" msgstr "" #: ../src/ui/subscription_dialog.c:430 #, 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:434 msgid "This feed specifies no default update interval." msgstr "此饋流未指定預設更新頻率" #: ../src/ui/browser_tabs.c:155 msgid "Untitled" 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 個新項目" #: ../src/ui/ui_tray.c:221 #, 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 個新項目" # 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/ui_tray.c:224 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 個新項目" #: ../src/ui/ui_tray.c:228 #, c-format msgid "" "%s\n" "%d unread item" msgid_plural "" "%s\n" "%d unread items" msgstr[0] "" "%s\n" "%d 個未讀項目" msgstr[1] "" "%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 個新項目" #: ../src/ui/ui_tray.c:230 #, c-format msgid "" "%s\n" "No unread items" msgstr "" "%s\n" "沒有未讀的項目" #: ../src/parsers/atom10.c:241 ../src/parsers/pie_feed.c:141 msgid "Website" msgstr "" #: ../src/parsers/atom10.c:251 msgid "Invalid Atom feed: unknown author" msgstr "不正確的 Atom 餽流: 未知的作者" #: ../src/parsers/ns_ag.c:70 msgid "%b %d %H:%M" msgstr "" #: ../src/fl_sources/default_source.c:145 #: ../src/fl_sources/google_source.c:274 ../glade/new_subscription.ui.h:1 #: ../glade/simple_subscription.ui.h:1 msgid "New Subscription" msgstr "新增訂閱" #: ../src/fl_sources/google_source.c:116 msgid "Google Reader login failed!" msgstr "" #: ../src/fl_sources/google_source.c:383 #, fuzzy msgid "Google Reader" msgstr "饋流快取" #: ../src/fl_sources/google_source.c:384 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 "" #: ../src/fl_sources/opml_source.c:325 msgid "Planet, BlogRoll, OPML" msgstr "" #: ../src/fl_sources/opml_source.c:326 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 "" #: ../src/fl_sources/opml_source.c:387 #, 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:238 msgid "No feed list source types found!" msgstr "" #: ../src/fl_sources/node_source.c:269 #, fuzzy msgid "Source Type" msgstr "來源類型:" #: ../src/fl_sources/ttrss_source.c:362 msgid "Tiny Tiny RSS" msgstr "" #: ../src/fl_sources/ttrss_source.c:363 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 "" #: ../src/fl_sources/ttrss_source_feed.c:105 msgid "Could not parse JSON returned by tt-rss API!" msgstr "" #: ../src/notification/libnotify.c:61 ../src/notification/libnotify.c:83 #: ../src/notification/libnotify.c:152 #, fuzzy msgid "This feed does not exist anymore!" msgstr "此項目沒有連結!" #: ../src/notification/libnotify.c:125 #, c-format msgid "This news entry has no headline" msgstr "" #: ../src/notification/libnotify.c:130 msgid "Visit" msgstr "" #: ../src/notification/libnotify.c:171 ../src/notification/libnotify.c:274 msgid "Open feed" msgstr "" #: ../src/notification/libnotify.c:174 ../src/notification/libnotify.c:277 #, fuzzy msgid "Mark all as read" msgstr "全部標示為已讀(_R)" #: ../src/notification/libnotify.c:254 #, c-format msgid "%s has %d update" msgid_plural "%s has %d updates" msgstr[0] "" msgstr[1] "" #: ../src/notification/libnotify.c:257 ../src/notification/libnotify.c:259 #, fuzzy msgid "Feed Update" msgstr "饋流快取" #: ../src/notification/libnotify.c:271 #, fuzzy msgid "Show details" msgstr "顯示細節" #: ../glade/auth.ui.h:1 msgid "Authentication" msgstr "認證" #: ../glade/auth.ui.h:4 ../glade/liferea.ui.h:37 msgid "_Password:" msgstr "密碼(_P):" #: ../glade/auth.ui.h:5 ../glade/liferea.ui.h:38 msgid "User_name:" msgstr "使用者名稱:" #: ../glade/auth.ui.h:6 msgid "" "Note: The username and password will be saved to your Liferea feedlist " "file without using encryption." msgstr "注: 帳號跟密碼會以明碼存於您的 Liferea 饋流列表檔案。" #: ../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/ttrss_source.ui.h:4 #, fuzzy msgid "_Password" msgstr "密碼(_P):" #: ../glade/google_source.ui.h:4 msgid "_Username (Email)" msgstr "" #: ../glade/liferea.ui.h:2 msgid "normal view" msgstr "" #: ../glade/liferea.ui.h:3 msgid "wide view" msgstr "" #: ../glade/liferea.ui.h:4 #, fuzzy msgid "View Headlines" msgstr "標題瀏覽器(_V)" #: ../glade/liferea.ui.h:5 msgid "combined view" msgstr "" #: ../glade/liferea.ui.h:6 ../glade/prefs.ui.h:21 msgid "Headlines" msgstr "標題" #: ../glade/liferea.ui.h:7 msgid "Online/Offline Button" msgstr "" #: ../glade/liferea.ui.h:8 msgid "Subscription Properties" msgstr "訂閱屬性" #: ../glade/liferea.ui.h:9 #, fuzzy msgid "Feed Name" msgstr "饋流名稱(_N):" #: ../glade/liferea.ui.h:10 msgid "Feed _Name:" msgstr "饋流名稱(_N):" #: ../glade/liferea.ui.h:11 #, fuzzy msgid "Update Interval" msgstr "/更新目錄(_U)" #: ../glade/liferea.ui.h:12 msgid "_Use global default update interval." msgstr "使用預設更新週期(_U)" #: ../glade/liferea.ui.h:13 msgid "_Feed specific update interval of" msgstr "指定該饋流的更新週期:(不使用預設值)" #: ../glade/liferea.ui.h:14 msgid "_Don't update this feed automatically." msgstr "不自動更新本饋流(_D)" #: ../glade/liferea.ui.h:15 msgid " " msgstr "" #: ../glade/liferea.ui.h:17 #, no-c-format msgid "This feed provider suggests an update interval of %d minutes." msgstr "饋流供應者建議更新週期為 %d 分鐘" #: ../glade/liferea.ui.h:18 msgid "General" msgstr "一般" #: ../glade/liferea.ui.h:19 ../glade/new_subscription.ui.h:2 #: ../glade/simple_subscription.ui.h:3 msgid "Feed Source" msgstr "饋流來源" #: ../glade/liferea.ui.h:20 ../glade/new_subscription.ui.h:8 msgid "Source Type:" msgstr "來源類型:" #: ../glade/liferea.ui.h:21 ../glade/new_subscription.ui.h:3 msgid "_Source:" msgstr "來源:(_S)" #: ../glade/liferea.ui.h:22 ../glade/new_subscription.ui.h:4 msgid "_URL" msgstr "網址(_U)" #: ../glade/liferea.ui.h:23 ../glade/new_subscription.ui.h:5 msgid "_Command" msgstr "指令(_C)" #: ../glade/liferea.ui.h:24 ../glade/new_subscription.ui.h:6 msgid "_Local File" msgstr "本地檔案(_L)" #: ../glade/liferea.ui.h:25 ../glade/new_subscription.ui.h:7 msgid "Select File..." msgstr "選擇檔案..." #: ../glade/liferea.ui.h:26 ../glade/new_subscription.ui.h:11 msgid "Use conversion _filter" msgstr "使用轉換篩選器(_F)" #: ../glade/liferea.ui.h:27 ../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/liferea.ui.h:28 ../glade/new_subscription.ui.h:13 msgid "Convert _using:" msgstr "使用以下工具轉換:(_U)" #: ../glade/liferea.ui.h:30 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/liferea.ui.h:31 msgid "_Default cache settings" msgstr "預設快取設定(_D)" #: ../glade/liferea.ui.h:32 msgid "Di_sable cache" msgstr "取消快取(_S)" #: ../glade/liferea.ui.h:33 msgid "_Unlimited cache" msgstr "無限制快取(_U)" #: ../glade/liferea.ui.h:34 #, fuzzy msgid "_Number of items to save:" msgstr "Liferea 退出時單一饋流最多儲存項目數: (_N)" #: ../glade/liferea.ui.h:35 msgid "Archive" msgstr "" #: ../glade/liferea.ui.h:36 msgid "Use HTTP _authentication" msgstr "使用 HTTP 認證(_A)" #: ../glade/liferea.ui.h:39 ../glade/new_subscription.ui.h:10 msgid "_Don't use proxy for download" msgstr "" #: ../glade/liferea.ui.h:40 #, fuzzy msgid "Download" msgstr "下載方式:(_D)" #: ../glade/liferea.ui.h:41 msgid "_Automatically download all enclosures of this feed." msgstr "" #: ../glade/liferea.ui.h:42 msgid "Auto-_load item link in configured browser when selecting articles." msgstr "" #: ../glade/liferea.ui.h:43 #, fuzzy msgid "Ignore _comment feeds for this subscription." msgstr "開啟選擇訂閱的屬性設定視窗" #: ../glade/liferea.ui.h:44 #, fuzzy msgid "_Enforce popup notification for this subscription." msgstr "開啟選擇訂閱的屬性設定視窗" #: ../glade/liferea.ui.h:45 msgid "_Never do popup notification for this subscription." msgstr "" #: ../glade/liferea.ui.h:46 #, fuzzy msgid "_Mark downloaded items as read." msgstr "全部標示為已讀(_M)" #: ../glade/liferea.ui.h:47 msgid "Advanced" msgstr "" #: ../glade/liferea.ui.h:48 msgid "New Folder" msgstr "新目錄" #: ../glade/liferea.ui.h:49 msgid "_Folder name:" msgstr "目錄名稱:(_F)" #: ../glade/liferea.ui.h:50 #, fuzzy msgid "Rename" msgstr "重新命名目錄" #: ../glade/liferea.ui.h:51 #, fuzzy msgid "_New Name:" msgstr "名稱:(_N)" #: ../glade/liferea.ui.h:52 #, fuzzy msgid "Search Folder Properties" msgstr "虛擬目錄屬性" #: ../glade/liferea.ui.h:53 #, fuzzy msgid "Search _Name:" msgstr "饋流名稱(_N):" #: ../glade/liferea.ui.h:54 msgid "Find Items that meet the following criteria" msgstr "" #: ../glade/liferea.ui.h:55 msgid "A_ny Rule Matches" msgstr "" #: ../glade/liferea.ui.h:56 msgid "_All Rules Must Match" msgstr "" #: ../glade/liferea.ui.h:57 #, fuzzy msgid "Open Enclosure" msgstr "/開啟附件..." #: ../glade/liferea.ui.h:58 #, fuzzy msgid "Open an enclosure of type:" msgstr "下載附件型態:" #: ../glade/liferea.ui.h:59 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/liferea.ui.h:60 msgid "_Browse" msgstr "瀏覽器(_B):" #: ../glade/liferea.ui.h:61 #, fuzzy msgid "_Do this automatically for enclosures like this from now on." msgstr "從現在開始自動替檔案作同樣的處理(_D)" #: ../glade/liferea.ui.h:62 msgid "Search All Feeds" msgstr "搜尋所有饋流" #: ../glade/liferea.ui.h:63 msgid "_Search for:" msgstr "搜尋:(_S)" #: ../glade/liferea.ui.h:64 msgid "" "Enter a search string Liferea should find either in a items title or in its " "content." msgstr "" #: ../glade/liferea.ui.h:65 msgid "_Advanced..." msgstr "" #: ../glade/liferea.ui.h:66 msgid "" "Starts searching for the specified text in all feeds. The search result will " "appear in the item list." msgstr "開始在所有餽流搜尋指定的文字,搜尋結果將會出現在項目列表中。" #: ../glade/liferea.ui.h:67 #, fuzzy msgid "Update Monitor" msgstr "/更新目錄(_U)" #: ../glade/liferea.ui.h:68 msgid "Pending Requests" msgstr "" #: ../glade/liferea.ui.h:69 #, fuzzy msgid "Downloading Now" msgstr "附件下載中" #: ../glade/liferea.ui.h:70 #, fuzzy msgid "Cancel _All" msgstr "更新全部(_A)" #: ../glade/liferea.ui.h:71 msgid "Create News Bin" msgstr "" #: ../glade/liferea.ui.h:72 msgid "_News Bin Name:" msgstr "" #: ../glade/liferea.ui.h:73 msgid "About" msgstr "關於" #: ../glade/liferea.ui.h:74 msgid "" "Copyright (c) 2003-2012\n" "The Liferea Team\n" msgstr "" #: ../glade/liferea.ui.h:77 msgid "Liferea is a news aggregator for GTK+" msgstr "Liferea 是 GTK+ 新聞資訊蒐集器" #: ../glade/liferea.ui.h:78 #, fuzzy msgid "Liferea Homepage" msgstr "Lifeera 偏好" #: ../glade/liferea.ui.h:79 #, fuzzy msgid "Advanced Search" msgstr "Feedster 搜尋" #: ../glade/liferea.ui.h:80 #, fuzzy msgid "_Search Folder..." msgstr "新目錄(_F)..." #: ../glade/liferea.ui.h:81 msgid "Create Search Engine Feed" msgstr "" #: ../glade/liferea.ui.h:82 msgid "enter any search string you want" msgstr "輸入您想搜尋的任何字串" #: ../glade/liferea.ui.h:83 msgid "Maximal _Number Of Result Items:" msgstr "最大搜尋結果數量:(_N)" #: ../glade/liferea.ui.h:84 #, 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 查詢特定字串的饋流訂閱。您可以永久保留此訂" "閱,並如同其他訂閱一般更新。" #: ../glade/new_subscription.ui.h:9 #, fuzzy msgid "Download / Postprocessing" msgstr "下載方式:(_D)" #: ../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/ttrss_source.ui.h:1 msgid "Add Tiny Tiny RSS Account" msgstr "" #: ../glade/ttrss_source.ui.h:2 msgid "Please enter your tt-rss 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/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/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:4 #, fuzzy msgid "Feed Update Settings" msgstr "饋流快取" #: ../glade/prefs.ui.h:5 #, fuzzy msgid "_Update all subscriptions at startup." msgstr "新增訂閱" #: ../glade/prefs.ui.h:6 msgid "Default Feed Refresh _Interval:" msgstr "饋流更新週期(_I):" #. Feed update interval hint in preference dialog. #: ../glade/prefs.ui.h:8 #, 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:9 msgid "Feeds" msgstr "饋流" #: ../glade/prefs.ui.h:10 #, fuzzy msgid "Folder Display Settings" msgstr "饋流顯示設定" #: ../glade/prefs.ui.h:11 msgid "_Show the items of all child feeds when a folder is selected." msgstr "當目錄被選取時,顯示所有子饋流項目(_S)" #: ../glade/prefs.ui.h:12 msgid "_Hide read items." msgstr "隱藏閱讀過的項目(_H)" #: ../glade/prefs.ui.h:13 #, fuzzy msgid "Feed Icons (Favicons)" msgstr "饋流圖示" #: ../glade/prefs.ui.h:14 msgid "_Update all favicons now" msgstr "更新所有饋流圖示(_U)" #: ../glade/prefs.ui.h:15 msgid "Folders" msgstr "虛擬目錄" #: ../glade/prefs.ui.h:16 #, fuzzy msgid "Reading Headlines" msgstr "標題" #: ../glade/prefs.ui.h:17 msgid "_Skim through articles with:" msgstr "快速檢閱文章的方式:(_S)" #: ../glade/prefs.ui.h:18 msgid "_Default View Mode:" msgstr "" #: ../glade/prefs.ui.h:19 #, fuzzy msgid "Web Integration" msgstr "方位" #: ../glade/prefs.ui.h:20 msgid "_Post Bookmarks to" msgstr "" #: ../glade/prefs.ui.h:22 #, fuzzy msgid "Internal Browser Settings" msgstr "內部瀏覽器設定" #: ../glade/prefs.ui.h:23 msgid "Open links in Liferea's _window." msgstr "在 Liferea 的視窗開啟連結(_W)" #: ../glade/prefs.ui.h:24 msgid "_Disable Javascript." msgstr "停止使用 Javascript (_D)" #: ../glade/prefs.ui.h:25 #, fuzzy msgid "_Enable browser plugins." msgstr "外部瀏覽器設定" #: ../glade/prefs.ui.h:26 #, fuzzy msgid "External Browser Settings" msgstr "外部瀏覽器設定" #: ../glade/prefs.ui.h:27 msgid "_Open link in:" msgstr "開啟連結於(_O):" #: ../glade/prefs.ui.h:28 #, fuzzy msgid "_Manual:" msgstr "手動" #: ../glade/prefs.ui.h:30 #, no-c-format msgid "(%s for URL)" msgstr "" #: ../glade/prefs.ui.h:31 msgid "_Browser:" msgstr "瀏覽器(_B):" #: ../glade/prefs.ui.h:32 msgid "Browser" msgstr "瀏覽器" #: ../glade/prefs.ui.h:33 #, fuzzy msgid "Notification Settings" msgstr "程式狀態通知區" #: ../glade/prefs.ui.h:34 msgid "Show a _popup window with new headlines." msgstr "以跳出視窗顯示新標題" #: ../glade/prefs.ui.h:35 msgid "Show a status _icon in the notification area (system tray)." msgstr "在程式狀態通知區中顯示狀態圖示 (亦稱為系統列) (_i)" #: ../glade/prefs.ui.h:36 msgid "Show _number of new items in the tray icon." msgstr "" #: ../glade/prefs.ui.h:37 msgid "T_erminate instead of minimizing to tray icon." msgstr "" #: ../glade/prefs.ui.h:38 msgid "_Start in tray icon." msgstr "" #: ../glade/prefs.ui.h:39 #, fuzzy msgid "Toolbar Settings" msgstr "饋流顯示設定" #: ../glade/prefs.ui.h:40 msgid "_Hide toolbar." msgstr "" #: ../glade/prefs.ui.h:41 msgid "Toolbar _button labels:" msgstr "" #: ../glade/prefs.ui.h:42 msgid "GUI" msgstr "圖形使用者介面" #: ../glade/prefs.ui.h:43 msgid "HTTP Proxy Server" msgstr "" #: ../glade/prefs.ui.h:44 msgid "_Auto Detect (GNOME or environment)" msgstr "" #: ../glade/prefs.ui.h:45 #, fuzzy msgid "_No Proxy" msgstr "代理伺服器" #: ../glade/prefs.ui.h:46 msgid "_Manual Setting:" msgstr "" #: ../glade/prefs.ui.h:47 msgid "Proxy _Port:" msgstr "代理伺服器埠號(_P)" #: ../glade/prefs.ui.h:48 msgid "Proxy _Host:" msgstr "代理伺服器位址(_H):" #: ../glade/prefs.ui.h:49 #, fuzzy msgid "Use Proxy Au_thentication" msgstr "使用代理伺服器認證(_A)" #: ../glade/prefs.ui.h:50 msgid "Proxy Pass_word:" msgstr "代理伺服器密碼(_W):" #: ../glade/prefs.ui.h:51 msgid "Proxy _Username:" msgstr "代理伺服器使用者名稱(_U):" #: ../glade/prefs.ui.h:52 msgid "Proxy" msgstr "代理伺服器" #: ../glade/prefs.ui.h:53 #, fuzzy msgid "Downloading Enclosures" msgstr "附件下載中" #: ../glade/prefs.ui.h:54 msgid "_Download using" msgstr "下載方式:(_D)" #: ../glade/prefs.ui.h:55 #, fuzzy msgid "Opening Enclosures" msgstr "/開啟附件..." #: ../glade/prefs.ui.h:56 msgid "Enclosures" msgstr "附件" #: ../glade/prefs.ui.h:57 msgid "Plugins" 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" #~ "(%s 是網址)" #~ msgid "_Save downloads in" #~ msgstr "將下載存於...(_S)" #, fuzzy #~ msgid "Synchronized with Nearby Hosts" #~ 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 印出處理快取時的除錯訊息" #, 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 "(空)" #, fuzzy #~ msgid "_Delete" #~ msgstr "/刪除饋流(_D)" #~ 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 "Search all feeds." #~ 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.10.17/src/000077500000000000000000000000001261475620100140635ustar00rootroot00000000000000liferea-1.10.17/src/Makefile.am000066400000000000000000000055701261475620100161260ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in SUBDIRS = parsers notification ui fl_sources webkit . 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 \ e-date.c e-date.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 \ 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) EXTRA_DIST = $(srcdir)/liferea-add-feed.in DISTCLEANFILES = $(srcdir)/liferea-add-feed AM_INSTALLCHECK_STD_OPTIONS_EXEMPT = liferea-add-feed if WITH_LIBNOTIFY liferea_LDADD += notification/libnotify.a $(LIBNOTIFY_LIBS) endif if WITH_LIBINDICATE liferea_LDADD += $(LIBINDICATE_LIBS) endif -include $(INTROSPECTION_MAKEFILE) INTROSPECTION_GIRS = Liferea-3.0.gir Liferea-3.0.gir: liferea 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 Liferea_3_0_gir_FILES = \ auth.c auth.h \ auth_activatable.c auth_activatable.h \ enclosure.h \ ui/itemview.c ui/itemview.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 Liferea_3_0_gir_INCLUDES = Gtk-3.0 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) liferea-1.10.17/src/auth.c000066400000000000000000000076601261475620100152010ustar00rootroot00000000000000/* * @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.10.17/src/auth.h000066400000000000000000000037341261475620100152040ustar00rootroot00000000000000/* * @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.10.17/src/auth_activatable.c000066400000000000000000000053651261475620100175400ustar00rootroot00000000000000/* * @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.10.17/src/auth_activatable.h000066400000000000000000000071171261475620100175420ustar00rootroot00000000000000/* * @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.10.17/src/browser.c000066400000000000000000000165161261475620100157230ustar00rootroot00000000000000/** * @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" static struct browser browsers[] = { { "default", N_("Default Browser"), NULL, /* triggering gtk_show_uri() */ NULL, NULL, NULL, NULL, NULL, NULL }, { /* tested with Firefox 1.5 and 2.0 */ "firefox", "Firefox", "firefox \"%s\"", "firefox \"%s\"", NULL, "firefox -a firefox -new-window \"%s\"", NULL, "firefox -a firefox -new-tab \"%s\"", NULL }, { "google-chrome", "Chrome", "google-chrome \"%s\"", NULL, NULL, NULL, NULL, NULL, NULL }, { "opera", "Opera", "opera \"%s\"", "opera \"%s\"", "opera -remote \"openURL(%s)\"", "opera -newwindow \"%s\"", NULL, "opera -newpage \"%s\"", NULL }, { "epiphany", "Epiphany", "epiphany \"%s\"", NULL, NULL, "epiphany \"%s\"", NULL, "epiphany -n \"%s\"", NULL }, { /* tested with SeaMonkey 1.0.6 */ "mozilla", "Mozilla", "mozilla %s", NULL, "mozilla -remote openURL(%s)", NULL, "mozilla -remote 'openURL(%s,new-window)'", NULL, "mozilla -remote 'openURL(%s,new-tab)'" }, { "konqueror", "Konqueror", "kfmclient openURL \"%s\"", NULL, NULL, NULL, NULL, NULL, NULL }, { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } }; /** * Returns a shell command format string which can be used to create * a browser launch command. The string will contain exactly one %s * to fill in the URL. * * @param browser browser definition (or NULL) as returned * by prefs_get_browser() * @param remote TRUE if remote command variant is requested * @param fallback TRUE if the default command is to be returned * if the specific launch type is not available. * If set to FALSE no command might be returned. * * @returns a newly allocated command string */ static gchar * browser_get_command (struct browser *browser, gboolean remote, gboolean fallback) { gchar *cmd = NULL; gchar *libname; gint place; conf_get_int_value (BROWSER_PLACE, &place); /* 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); } else { /* non manual browser definitions... */ if (browser) { if (remote) { switch (place) { case 1: cmd = browser->existingwinremote; break; case 2: cmd = browser->newwinremote; break; case 3: cmd = browser->newtabremote; break; } } else { switch (place) { case 1: cmd = browser->existingwin; break; case 2: cmd = browser->newwin; break; case 3: cmd = browser->newtab; break; } } if (fallback && !cmd) /* Default when no special mode defined */ cmd = browser->defaultplace; } if (fallback && !cmd) /* Last fallback: first browser default */ cmd = browsers[0].defaultplace; } g_free (libname); return g_strdup (cmd); } /** * Returns the browser definition structure for the currently * configured external browser or NULL if a user defined * browser command is defined. * * @returns external browser definition */ static struct browser * browser_get_default (void) { gchar *libname; struct browser *browser = NULL; conf_get_str_value (BROWSER_ID, &libname); if (!g_str_equal (libname, "manual")) { struct browser *iter; for (iter = browsers; iter->id != NULL; iter++) { if (g_str_equal (libname, iter->id)) browser = iter; } } g_free (libname); return browser; } struct browser * browser_get_all (void) { return browsers; } static gboolean browser_execute (const gchar *cmd, const gchar *uri, gboolean sync) { GError *error = NULL; gchar *safeUri, *tmp, **argv, **iter; gint argc; gint status = 0; gboolean done = FALSE; g_assert (cmd != NULL); g_assert (uri != NULL); safeUri = common_uri_sanitize (uri); /* If we run using a "-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 failed: %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); debug2 (DEBUG_GUI, "Running the browser-remote %s command '%s'", sync ? "sync" : "async", tmp); if (sync) g_spawn_sync (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL, &status, &error); else 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 if (status == 0) { 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) { struct browser *browser; gchar *cmd = NULL; gboolean done = FALSE; gchar *libname = NULL; g_assert (uri != NULL); browser = browser_get_default (); if (browser) { /* try to execute synchronously... */ cmd = browser_get_command (browser, TRUE /* remote */, FALSE /* fallback */); if (cmd) { done = browser_execute (cmd, uri, TRUE); g_free (cmd); } else { /* the "default" browser has no command to use the GTK launch mechanism, so we use gtk_show_uri() instead */ conf_get_str_value (BROWSER_ID, &libname); if (g_str_equal (libname, "default")) done = gtk_show_uri (NULL, uri, 0, NULL); g_free (libname); } } if (done) return TRUE; /* if it failed try to execute asynchronously... */ cmd = browser_get_command (browser, FALSE /* remote */, TRUE /* fallback */); if (!cmd) { liferea_shell_set_important_status_bar ("Fatal: cannot retrieve browser command!"); g_warning ("Fatal: cannot retrieve browser command!"); return FALSE; } done = browser_execute (cmd, uri, FALSE); g_free (cmd); return done; } liferea-1.10.17/src/browser.h000066400000000000000000000042401261475620100157170ustar00rootroot00000000000000/** * @file browser.h Launching different external browsers * * 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 _BROWSER_H #define _BROWSER_H #include /** Browser preference definition structure */ struct browser { gchar *id; /**< Unique ID used in storing the prefs */ gchar *display; /**< Name to display in the prefs */ gchar *defaultplace; /**< Default command.... Use %s to specify URL. This command is called in the background. */ gchar *existingwin; /**< Optional command variant for opening in existing window */ gchar *existingwinremote; /**< Optional command variant for opening in existing window with remote protocol */ gchar *newwin; /**< Optional command variant for opening in new window */ gchar *newwinremote; /**< Optional command variant for opening in new window with remote protocol */ gchar *newtab; /**< Optional command variant for opening in new tab */ gchar *newtabremote; /**< Optional command variant for opening in new tab with remote protocol */ }; /** * Return the list of all supported browser definitions. * * @returns NULL terminated array of browser definitions */ struct browser * browser_get_all (void); /** * 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.10.17/src/browser_history.c000066400000000000000000000047311261475620100175000ustar00rootroot00000000000000/** * @file browser_history.c managing the URI history * * 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 "browser_history.h" browserHistory * browser_history_new (void) { return (browserHistory *)g_new0 (browserHistory, 1); } void browser_history_free (browserHistory *history) { GList *iter; g_return_if_fail (NULL != history); iter = history->locations; while (iter) { g_free (iter->data); iter = g_list_next (iter); } g_list_free (history->locations); 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); history->current = url; return url->data; } 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)); } 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.10.17/src/browser_history.h000066400000000000000000000045251261475620100175060ustar00rootroot00000000000000/** * @file browser_history.h managing the URI history * * 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 _BROWSER_HISTORY_H #define _BROWSER_HISTORY_H #include /** structure holding all URLs visited in a tab */ typedef struct browserHistory { GList *locations; /**< list of all visited URLs */ GList *current; /**< pointer into locations */ } 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.10.17/src/comments.c000066400000000000000000000201501261475620100160520ustar00rootroot00000000000000/** * @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.10.17/src/comments.h000066400000000000000000000026201261475620100160610ustar00rootroot00000000000000/** * @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.10.17/src/common.c000066400000000000000000000231741261475620100155260ustar00rootroot00000000000000/** * @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" 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.10.17/src/common.h000066400000000000000000000137451261475620100155360ustar00rootroot00000000000000/** * @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.10.17/src/conf.c000066400000000000000000000174431261475620100151650ustar00rootroot00000000000000/** * @file conf.c Liferea configuration (GSettings access) * * Copyright (C) 2011 Mikel Olasagasti Uranga * Copyright (C) 2003-2013 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 "common.h" #include "conf.h" #include "debug.h" #include "net.h" #include "update.h" #include "ui/liferea_shell.h" #include "ui/ui_tray.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_tray_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::" SHOW_TRAY_ICON, G_CALLBACK (conf_tray_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_tray_settings_cb (GSettings *settings, guint cnxn_id, gchar *key, gpointer user_data) { GVariant *gv; if (key) { gv = g_settings_get_value (settings, key); if (gv && g_variant_get_type(gv) == G_VARIANT_TYPE_BOOLEAN) ui_tray_enable (g_settings_get_boolean (settings,key)); } } 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; proxyname = NULL; proxyport = 0; proxyusername = NULL; proxypassword = NULL; conf_get_int_value (PROXY_DETECT_MODE, &proxydetectmode); 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 (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_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_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); } liferea-1.10.17/src/conf.h000066400000000000000000000140771261475620100151720ustar00rootroot00000000000000/** * @file conf.h Liferea configuration (GSettings access) * * Copyright (C) 2011 Mikel Olasagasti Uranga * Copyright (C) 2003-2013 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_PLACE "browser-place" #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_TOOL "download-tool" /* 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 SHOW_TRAY_ICON "trayicon" #define SHOW_NEW_COUNT_IN_TRAY "trayicon-new-count" #define DONT_MINIMIZE_TO_TRAY "dont-minimize-to-tray" #define START_IN_TRAY "start-in-tray" #define SHOW_POPUP_WINDOWS "show-popup-windows" #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 LAST_ITEM_SELECTED "last-item-selected" /* 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" /* 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_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 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 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); #endif liferea-1.10.17/src/date.c000066400000000000000000000233471261475620100151550ustar00rootroot00000000000000/** * @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 */ #define _XOPEN_SOURCE 600 /* glibc2 needs this (man strptime) */ #include "date.h" #include #include #include #include #include "common.h" #include "debug.h" #include "e-date.h" #define TIMESTRLEN 256 /* date formatting methods */ /* This function is originally from the Evolution 2.6.2 code (e-cell-date.c) */ static gchar * date_format_nice (time_t date) { time_t nowdate = time(NULL); time_t yesdate; struct tm then, now, yesterday; gchar *temp, *buf; gboolean done = FALSE; if (date == 0) { return g_strdup (""); } buf = g_new0(gchar, TIMESTRLEN + 1); localtime_r (&date, &then); localtime_r (&nowdate, &now); /* 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 (then.tm_mday == now.tm_mday && then.tm_mon == now.tm_mon && then.tm_year == now.tm_year) { /* translation hint: date format for today, reorder format codes as necessary */ e_utf8_strftime_fix_am_pm (buf, TIMESTRLEN, _("Today %l:%M %p"), &then); done = TRUE; } } if (!done) { yesdate = nowdate - 60 * 60 * 24; localtime_r (&yesdate, &yesterday); if (then.tm_mday == yesterday.tm_mday && then.tm_mon == yesterday.tm_mon && then.tm_year == yesterday.tm_year) { /* translation hint: date format for yesterday, reorder format codes as necessary */ e_utf8_strftime_fix_am_pm (buf, TIMESTRLEN, _("Yesterday %l:%M %p"), &then); done = TRUE; } } if (!done) { int i; for (i = 2; i < 7; i++) { yesdate = nowdate - 60 * 60 * 24 * i; localtime_r (&yesdate, &yesterday); if (then.tm_mday == yesterday.tm_mday && then.tm_mon == yesterday.tm_mon && then.tm_year == yesterday.tm_year) { /* translation hint: date format for dates older than 2 days but not older than a week, reorder format codes as necessary */ e_utf8_strftime_fix_am_pm (buf, TIMESTRLEN, _("%a %l:%M %p"), &then); done = TRUE; break; } } } if (!done) { if (then.tm_year == now.tm_year) { /* translation hint: date format for dates older than a week but from this year, reorder format codes as necessary */ e_utf8_strftime_fix_am_pm (buf, TIMESTRLEN, _("%b %d %l:%M %p"), &then); } else { /* translation hint: date format for dates from the last years, reorder format codes as necessary */ e_utf8_strftime_fix_am_pm (buf, TIMESTRLEN, _("%b %d %Y"), &then); } } temp = buf; while ((temp = strstr (temp, " "))) { memmove (temp, temp + 1, strlen (temp)); } temp = g_strstrip (buf); return temp; } gchar * date_format (time_t date, const gchar *date_format) { gchar *result; struct tm date_tm; if (date == 0) { return g_strdup (""); } if (date_format) { localtime_r (&date, &date_tm); result = g_new0 (gchar, TIMESTRLEN); e_utf8_strftime_fix_am_pm (result, TIMESTRLEN, date_format, &date_tm); } else { result = date_format_nice (date); } return result; } /* date parsing methods */ time_t date_parse_ISO8601 (const gchar *date) { struct tm tm; time_t t, t2, offset = 0; gboolean success = FALSE; gchar *pos; g_assert (date != NULL); memset (&tm, 0, sizeof (struct tm)); /* 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 */ pos = strptime (date, "%t%Y-%m-%dT%H:%M%t", &tm); if (pos) { /* Parse seconds */ if (*pos == ':') pos++; if (isdigit (pos[0]) && !isdigit (pos[1])) { tm.tm_sec = pos[0] - '0'; pos++; } else if (isdigit (pos[0]) && isdigit (pos[1])) { tm.tm_sec = 10*(pos[0]-'0') + pos[1] - '0'; pos +=2; } /* Parse second fractions */ if (*pos == '.') { while (*pos == '.' || isdigit (pos[0])) pos++; } /* Parse timezone */ if (*pos == 'Z') offset = 0; else if ((*pos == '+' || *pos == '-') && isdigit (pos[1]) && isdigit (pos[2]) && strlen (pos) >= 3) { offset = (10*(pos[1] - '0') + (pos[2] - '0')) * 60 * 60; if (pos[3] == ':' && isdigit (pos[4]) && isdigit (pos[5])) offset += (10*(pos[4] - '0') + (pos[5] - '0')) * 60; else if (isdigit (pos[3]) && isdigit (pos[4])) offset += (10*(pos[3] - '0') + (pos[4] - '0')) * 60; offset *= (pos[0] == '+') ? 1 : -1; } success = TRUE; /* only date */ } else if (NULL != strptime (date, "%t%Y-%m-%d", &tm)) { success = TRUE; } /* there were others combinations too... */ if (success) { if ((time_t)(-1) != (t = mktime (&tm))) { /* Correct for the local timezone*/ struct tm tmp_tm; t = t - offset; gmtime_r (&t, &tmp_tm); t2 = mktime (&tmp_tm); t = t - (t2 - t); return t; } else { debug0 (DEBUG_PARSING, "Internal error! time conversion error! mktime failed!"); } } else { debug0 (DEBUG_PARSING, "Invalid ISO8601 date format! Ignoring information!"); } return 0; } /* in theory, we'd need only the RFC822 timezones here in practice, feeds also use other timezones... */ static struct { const char *name; int offset; } tz_offsets [] = { { "IDLW", -1200 }, { "HAST", -1000 }, { "AKST", -900 }, { "AKDT", -800 }, { "WESZ", 100 }, { "WEST", 100 }, { "WEDT", 100 }, { "MEST", 200 }, { "MESZ", 200 }, { "CEST", 200 }, { "CEDT", 200 }, { "EEST", 300 }, { "EEDT", 300 }, { "IRST", 430 }, { "CNST", 800 }, { "ACST", 930 }, { "ACDT", 1030 }, { "AEST", 1000 }, { "AEDT", 1100 }, { "IDLE", 1200 }, { "NZST", 1200 }, { "NZDT", 1300 }, { "GMT", 0 }, { "EST", -500 }, { "EDT", -400 }, { "CST", -600 }, { "CDT", -500 }, { "MST", -700 }, { "MDT", -600 }, { "PST", -800 }, { "PDT", -700 }, { "HDT", -900 }, { "YST", -900 }, { "YDT", -800 }, { "AST", -400 }, { "ADT", -300 }, { "VST", -430 }, { "NST", -330 }, { "NDT", -230 }, { "WET", 0 }, { "WEZ", 0 }, { "IST", 100 }, { "CET", 100 }, { "MEZ", 100 }, { "EET", 200 }, { "MSK", 300 }, { "MSD", 400 }, { "IRT", 330 }, { "IST", 530 }, { "ICT", 700 }, { "JST", 900 }, { "NFT", 1130 }, { "UT", 0 }, { "PT", -800 }, { "BT", 300 }, { "Z", 0 }, { "A", -100 }, { "M", -1200 }, { "N", 100 }, { "Y", 1200 } }; /** @returns timezone offset in seconds */ static time_t date_parse_rfc822_tz (char *token) { int offset = 0; const char *inptr = token; int num_timezones = sizeof (tz_offsets) / sizeof ((tz_offsets)[0]); if (*inptr == '+' || *inptr == '-') { offset = atoi (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))) { offset = tz_offsets[t].offset; break; } } return 60 * ((offset / 100) * 60 + (offset % 100)); } time_t date_parse_RFC822 (const gchar *date) { struct tm tm; time_t t, t2; char *oldlocale; char *pos; gboolean success = FALSE; memset (&tm, 0, sizeof (struct tm)); /* 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; /* we expect English month names, so we set the locale */ oldlocale = g_strdup (setlocale (LC_TIME, NULL)); setlocale (LC_TIME, "C"); /* standard format with seconds and 4 digit year */ if (NULL != (pos = strptime ((const char *)date, " %d %b %Y %T", &tm))) success = TRUE; /* non-standard format without seconds and 4 digit year */ else if (NULL != (pos = strptime ((const char *)date, " %d %b %Y %H:%M", &tm))) success = TRUE; /* non-standard format with seconds and 2 digit year */ else if (NULL != (pos = strptime ((const char *)date, " %d %b %y %T", &tm))) success = TRUE; /* non-standard format without seconds 2 digit year */ else if (NULL != (pos = strptime ((const char *)date, " %d %b %y %H:%M", &tm))) success = TRUE; while (pos && *pos != '\0' && isspace ((int)*pos)) /* skip whitespaces before timezone */ pos++; if (oldlocale) { setlocale (LC_TIME, oldlocale); /* and reset it again */ g_free (oldlocale); } if (success) { if ((time_t)(-1) != (t = mktime (&tm))) { /* GMT time, with no daylight savings time correction. (Usually, there is no daylight savings time since the input is GMT.) */ t = t - date_parse_rfc822_tz (pos); t2 = mktime (gmtime(&t)); t = t - (t2 - t); return t; } else { debug0 (DEBUG_PARSING, "internal error! time conversion error! mktime failed!"); } } return 0; } liferea-1.10.17/src/date.h000066400000000000000000000034431261475620100151550ustar00rootroot00000000000000/** * @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 (time_t date, const gchar *date_format); /** * Parses a ISO8601 date. * * @param date the date string to parse * * @returns timestamp */ time_t 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) */ time_t date_parse_RFC822 (const gchar *date); #endif liferea-1.10.17/src/db.c000066400000000000000000001360521261475620100146230ustar00rootroot00000000000000/** * @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: http://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 = sqlite3_column_text(stmt, 0); value = 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_int (stmt, 9); item->commentFeedId = g_strdup (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 (sqlite3_column_text (stmt, 14)); item->parentNodeId = g_strdup (sqlite3_column_text (stmt, 15)); item->title = g_strdup (sqlite3_column_text(stmt, 0)); item->sourceId = g_strdup (sqlite3_column_text(stmt, 6)); tmp = sqlite3_column_text(stmt, 5); if (tmp) item->source = g_strdup (tmp); tmp = 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_int (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( 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, sqlite3_column_text(stmt, 0), 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 = 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.10.17/src/db.h000066400000000000000000000120551261475620100146240ustar00rootroot00000000000000/** * @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.10.17/src/dbus.c000066400000000000000000000147461261475620100152000ustar00rootroot00000000000000/** * @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.10.17/src/dbus.h000066400000000000000000000035741261475620100152020ustar00rootroot00000000000000/** * @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.10.17/src/debug.c000066400000000000000000000122761261475620100153250ustar00rootroot00000000000000/* * 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" 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.10.17/src/debug.h000066400000000000000000000077141261475620100153330ustar00rootroot00000000000000/* * 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.10.17/src/e-date.c000066400000000000000000000064101261475620100153670ustar00rootroot00000000000000/* The following date formatting code is originally from Evolution. */ /* * e-util.c * Copyright 2000, 2001, Ximian, Inc. * * Authors: * Chris Lahey * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License, version 2, as published by the Free Software Foundation. * * 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; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include #include "e-date.h" /** * 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 size_t e_strftime_fix_am_pm(char *s, size_t max, const char *fmt, const struct tm *tm) { char buf[10]; char *sp; char *ffmt; size_t ret; if (strstr(fmt, "%p")==NULL && strstr(fmt, "%P")==NULL) { /* No AM/PM involved - can use the fmt string directly */ ret=strftime(s, max, fmt, tm); } else { /* Get the AM/PM symbol from the locale */ strftime (buf, 10, "%p", tm); if (buf[0]) { /** * AM/PM have been defined in the locale * so we can use the fmt string directly **/ ret=strftime(s, max, fmt, tm); } else { /** * No AM/PM defined by locale * must change to 24 hour clock **/ ffmt=g_strdup(fmt); for (sp=ffmt; (sp=strstr(sp, "%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=strstr(sp, "%I")); sp++) { sp[1]='H'; } ret=strftime(s, max, ffmt, tm); g_free(ffmt); } } return(ret); } size_t e_utf8_strftime_fix_am_pm(char *s, size_t max, const char *fmt, const struct tm *tm) { size_t sz, ret; char *locale_fmt, *buf; locale_fmt = g_locale_from_utf8(fmt, -1, NULL, &sz, NULL); if (!locale_fmt) return 0; ret = e_strftime_fix_am_pm(s, max, locale_fmt, tm); if (!ret) { g_free (locale_fmt); return 0; } buf = g_locale_to_utf8(s, ret, NULL, &sz, NULL); if (!buf) { g_free (locale_fmt); return 0; } if (sz >= max) { char *tmp = buf + max - 1; tmp = g_utf8_find_prev_char(buf, tmp); if (tmp) sz = tmp - buf; else sz = 0; } memcpy(s, buf, sz); s[sz] = '\0'; g_free(locale_fmt); g_free(buf); return sz; } liferea-1.10.17/src/e-date.h000066400000000000000000000020401261475620100153670ustar00rootroot00000000000000/* The e_date.c functionality is originally from Evolution. */ /* * e-util.h * Copyright 2000, 2001, Ximian, Inc. * * Authors: * Chris Lahey * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License, version 2, as published by the Free Software Foundation. * * 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; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _E_UTIL_H_ #define _E_UTIL_H_ size_t e_utf8_strftime_fix_am_pm (char *s, size_t max, const char *fmt, const struct tm *tm); #endif liferea-1.10.17/src/enclosure.c000066400000000000000000000174461261475620100162420ustar00rootroot00000000000000/** * @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 #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" /* 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)) { g_warning ("Dropping incorrectly encoded enclosure: >>>%s<<< (nr of fields=%d)\n", str, g_strv_length (fields)); 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 = common_uri_escape (url); result = g_strdup_printf ("enc:%s:%s:%" G_GSSIZE_FORMAT ":%s", downloaded?"1":"0", 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->url); 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 = xmlGetProp (cur, BAD_CAST"mime"); etp->extension = xmlGetProp (cur, BAD_CAST"extension"); etp->cmd = 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 ("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", etp->cmd); if (etp->mime) xmlNewProp (cur, BAD_CAST"mime", etp->mime); if (etp->extension) xmlNewProp (cur, BAD_CAST"extension", 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 const * 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 { const 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 'Download' tab in Tools/Preferences.")); return; } debug2 (DEBUG_UPDATE, "downloading URL %s with %s...", urlQ, toolCmd); cmd = g_strdup_printf (toolCmd, urlQ); } 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.10.17/src/enclosure.h000066400000000000000000000101611261475620100162320ustar00rootroot00000000000000/* * @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 /** 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) * * Parses enclosure description. * * @param str the enclosure description * * @returns new enclosure structure (to be free'd using enclosure_free) */ enclosurePtr enclosure_from_string (const gchar *str); /** * enclosure_values_to_string: * * Serialize enclosure infos to string. * * @param url the enclosure URL * @param mime the MIME type (optional, can be NULL) * @param size the enclosure size (optional, can be 0, and also -1) * @param downloaded downloading state (TRUE=downloaded) * * @returns 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: * * Serialize enclosure to string. * * @param enclosure the enclosure * * @returns 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 * * Return value: (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 * * Return value: (transfer full): MIME type string, free after use */ gchar * enclosure_get_mime (const gchar *str); /** * enclosure_free: * * Free all memory associated with the enclosure. * * @oparam enclosure the enclosure */ void enclosure_free (enclosurePtr enclosure); /** * enclosure_mime_types_get: (skip) * * Returns all configured enclosure types. * * @returns list of encType structures */ const GSList const * enclosure_mime_types_get (void); /** * enclosure_mime_type_add: * * Adds a new MIME type handling definition. * * @param type the new definition */ void enclosure_mime_type_add (encTypePtr type); /** * enclosure_mime_type_remove: * * Removes an existing MIME type handling definition. * The definition will be free'd by this function. * * @param type the definition to remove */ void enclosure_mime_type_remove (encTypePtr type); /** * enclosure_mime_types_save: * * Save all MIME type definitions. */ void enclosure_mime_types_save (void); /** * enclosure_download: * @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.10.17/src/export.c000066400000000000000000000331541261475620100155560ustar00rootroot00000000000000/** * @file export.c OPML feed list import & export * * 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 */ #include #include "export.h" #include #include "auth.h" #include "common.h" #include "db.h" #include "debug.h" #include "favicon.h" #include "feedlist.h" #include "folder.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) { if (rename (backupFilename, filename) < 0) { g_warning (_("Error renaming %s to %s\n"), backupFilename, filename); 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_set_icon (node, favicon_load_from_cache (node->id)); /* 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.10.17/src/export.h000066400000000000000000000040401261475620100155530ustar00rootroot00000000000000/** * @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.10.17/src/favicon.c000066400000000000000000000252561261475620100156660ustar00rootroot00000000000000/** * @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) { 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, 16, 16, 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"); } 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; 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.10.17/src/favicon.h000066400000000000000000000047401261475620100156660ustar00rootroot00000000000000/** * @file favicon.h Liferea favicon handling * * 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 _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 * * @returns a pixmap (or NULL) */ GdkPixbuf * favicon_load_from_cache(const gchar *id); /** * 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.10.17/src/feed.c000066400000000000000000000253541261475620100151430ustar00rootroot00000000000000/** * @file feed.c feed node and subscription type * * Copyright (C) 2003-2011 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 "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" #include "notification/notification.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); /* popup enforcement/prevention flags */ tmp = xmlGetProp (xml, BAD_CAST"enforcePopup"); if (tmp && !xmlStrcmp (tmp, BAD_CAST"true")) feed->enforcePopup = TRUE; xmlFree (tmp); tmp = xmlGetProp (xml, BAD_CAST"preventPopup"); if (tmp && !xmlStrcmp (tmp, BAD_CAST"true")) feed->preventPopup = TRUE; xmlFree (tmp); tmp = xmlGetProp (xml, BAD_CAST"markAsRead"); if (tmp && !xmlStrcmp (tmp, BAD_CAST"true")) feed->markAsRead = 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->enforcePopup) xmlNewProp (xml, BAD_CAST"enforcePopup", BAD_CAST"true"); if (feed->preventPopup) xmlNewProp (xml, BAD_CAST"preventPopup", BAD_CAST"true"); if (feed->markAsRead) xmlNewProp (xml, BAD_CAST"markAsRead", 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; } } /* 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; guint newCount; node->available = TRUE; /* merge the resulting items into the node's item set */ itemSet = node_get_itemset (node); newCount = itemset_merge_items (itemSet, ctxt->items, ctxt->feed->valid, ctxt->feed->markAsRead); itemlist_merge_itemset (itemSet); itemset_free (itemSet); feedlist_node_was_updated (node, newCount); /* 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)); if (!feed->preventPopup && newCount) notification_node_has_new_items (node, feed->enforcePopup); } feed_free_parser_ctxt (ctxt); } else { node->available = FALSE; liferea_shell_set_status_bar (_("\"%s\" is not available"), node_get_title (node)); } 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.10.17/src/feed.h000066400000000000000000000070411261475620100151410ustar00rootroot00000000000000/** * @file feed.h common feed handling interface * * Copyright (C) 2003-2010 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 */ time_t 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 enforcePopup; /**< if TRUE enforce popup notifications for this feed */ gboolean preventPopup; /**< if TRUE prevents popup notifications for this feed */ gboolean markAsRead; /**< if TRUE downloaded items are automatically marked as read */ } *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); /** * 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); /** * 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.10.17/src/feed_parser.c000066400000000000000000000160751261475620100165170ustar00rootroot00000000000000/** * @file feed_parser.c parsing of different feed formats * * Copyright (C) 2008-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 "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); /* parse it */ 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.10.17/src/feed_parser.h000066400000000000000000000066051261475620100165220ustar00rootroot00000000000000/** * @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.10.17/src/feedlist.c000066400000000000000000000363121261475620100160330ustar00rootroot00000000000000/** * @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 "ui/ui_tray.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 */ }; #define ROOTNODE feedlist->priv->rootNode #define SELECTED feedlist->priv->selectedNode static GObjectClass *parent_class = NULL; static 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); if (feedlist->priv->saveTimer) g_source_remove (feedlist->priv->saveTimer); /* Enforce synchronous save upon exit */ feedlist_save (); /* 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; 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); ui_tray_update (); /* 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_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_update_new_item_count (guint addValue) { feedlist->priv->newCount += addValue; /* 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; ui_tray_update (); liferea_shell_update_unread_stats (); } void feedlist_reset_new_item_count (void) { if (feedlist->priv->newCount) { feedlist->priv->newCount = 0; ui_tray_update (); liferea_shell_update_unread_stats (); } } void feedlist_node_was_updated (nodePtr node, guint newCount) { node_update_counters (node); feedlist_update_new_item_count (newCount); } 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 (); } /* next unread scanning */ enum scanStateType { UNREAD_SCAN_INIT, /* selected not yet passed */ UNREAD_SCAN_FOUND_SELECTED, /* selected passed */ UNREAD_SCAN_SECOND_PASS /* no unread items after selected feed */ }; static enum scanStateType scanState = UNREAD_SCAN_INIT; /* This method tries to find a feed with unread items in two passes. In the first pass it tries to find one after the currently selected feed (including the selected feed). If there are no such feeds the search is restarted for all feeds. */ static nodePtr feedlist_unread_scan (nodePtr folder) { nodePtr childNode; GSList *selectedIter = NULL; if (SELECTED) selectedIter = g_slist_find(SELECTED->parent->children, SELECTED); else scanState = UNREAD_SCAN_SECOND_PASS; GSList *iter = folder->children; while (iter) { nodePtr node = iter->data; if (node == SELECTED) scanState = UNREAD_SCAN_FOUND_SELECTED; /* feed match if beyond the selected feed or in second pass... */ if ((scanState != UNREAD_SCAN_INIT) && (node->unreadCount > 0) && (NULL == node->children) && !IS_VFOLDER(node)) { return node; } /* folder traversal if we are searching the selected feed which might be a descendant of the folder and if we are beyond the selected feed and the folder contains feeds with unread items... */ if (node->children && (((scanState != UNREAD_SCAN_INIT) && (node->unreadCount > 0)) || (selectedIter && (node_is_ancestor (node, SELECTED))))) { childNode = feedlist_unread_scan (node); if (childNode) return childNode; } iter = g_slist_next (iter); } /* When we come here we didn't find anything from the selected feed down to the end of the feed list. */ if (folder == ROOTNODE) { if (0 == ROOTNODE->unreadCount) { /* this may mean there is nothing more to find */ } else { /* or that there are unread items above the selected feed */ g_assert (scanState != UNREAD_SCAN_SECOND_PASS); scanState = UNREAD_SCAN_SECOND_PASS; return feedlist_unread_scan (ROOTNODE); } } return NULL; } nodePtr feedlist_find_unread_feed (nodePtr folder) { scanState = UNREAD_SCAN_INIT; return feedlist_unread_scan (folder); } /* 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 */ feedlist_foreach (node_save); /* step 2: request saving for the root node and thereby forcing the root plugin to save the feed list structure */ 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); } /* 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.10.17/src/feedlist.h000066400000000000000000000160611261475620100160370ustar00rootroot00000000000000/** * @file feedlist.h subscriptions as an hierarchic tree * * Copyright (C) 2005-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 _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; struct FeedList { GObject parent; /*< private >*/ FeedListPrivate *priv; }; struct FeedListClass { GObjectClass parent_class; }; GType feedlist_get_type (void); /** * Set up the feed list. * * @returns the feed list instance */ FeedList * feedlist_create (void); /** * Get currently selected feed list node * * @returns selected node (or NULL) */ nodePtr feedlist_get_selected (void); /** * Query overall number of of unread items. * * @returns overall number of unread items. */ guint feedlist_get_unread_item_count (void); /** * 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); /** * Changes the overall number of new items. * * Note: Do not use this method directly, use * feedlist_node_was_updated() instead. */ void feedlist_update_new_item_count (guint addValue); /** * Reset the global feed list new item counter. * * @todo: use signal instead */ void feedlist_reset_new_item_count (void); /** * 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. * * @param node the updated node * @param newCount number of new and unread items * * @todo: use signal instead */ void feedlist_node_was_updated (nodePtr node, guint newCount); /** * Helper function to query the feed list root node. * * @returns the feed list root node */ nodePtr feedlist_get_root (void); typedef enum { NODE_BY_URL, NODE_BY_ID, FOLDER_BY_TITLE } feedListFindType; /** * 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. * * @param parent parent node to traverse from (or NULL) * @param type NODE_BY_(URL|FOLDER_TITLE|ID) * @param str string to compare to * * @returns a nodePtr or NULL */ nodePtr feedlist_find_node (nodePtr parent, feedListFindType type, const gchar *str); /** * Adds a new subscription to the feed list. * * @param source the subscriptions source URL * @param filter NULL or the filter for the subscription * @param options NULL or the update options * @param flags download request flags */ void feedlist_add_subscription (const gchar *source, const gchar *filter, updateOptionsPtr options, gint flags); /** * Adds a folder to the feed list without any user interaction. * * @param title the title of the new folder. */ void feedlist_add_folder (const gchar *title); /** * 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(). * * @param node the new node */ void feedlist_node_added (nodePtr 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(). * * @param node the new node */ void feedlist_node_imported (nodePtr node); /** * Removes the given node from the feed list. * * @param node the node to remove */ void feedlist_remove_node (nodePtr 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. * * @param node the removed node */ void feedlist_node_removed (nodePtr node); /** * 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); /** * Resets the update counter of all childs of the given node * * @param node the node (or NULL for whole feed list) */ void feedlist_reset_update_counters (nodePtr node); gboolean feedlist_is_writable (void); /** * Triggers a recursive mark-all-read on the given node * and updates the feed list afterwards. * * @param node the node to start with */ void feedlist_mark_all_read (nodePtr node); /* feed list iterating interface */ /** * Helper function to recursivly call node methods for all * nodes in the feed list. This method is just a wrapper for * node_foreach_child(). * * @param func the function to process all found elements */ #define feedlist_foreach(func) node_foreach_child(feedlist_get_root(), func) /** * 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(). * * @param func the function to process all found elements * @param user_data specifies the second argument that func should be passed */ #define feedlist_foreach_data(func, user_data) node_foreach_child_data(feedlist_get_root(), func, user_data) /* UI callbacks */ /** * Callback for feed list selection change . * * @param node the new selected node */ void feedlist_selection_changed (nodePtr node); /** * Tries to find the first node with an unread item in the given folder. * * @param folder the folder to search * * @return a found node or NULL */ nodePtr feedlist_find_unread_feed (nodePtr folder); G_END_DECLS #endif liferea-1.10.17/src/fl_sources/000077500000000000000000000000001261475620100162275ustar00rootroot00000000000000liferea-1.10.17/src/fl_sources/Makefile.am000066400000000000000000000031721261475620100202660ustar00rootroot00000000000000## 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 \ aol_source.c aol_source.h \ aol_source_edit.c aol_source_edit.h \ aol_source_feed.c \ aol_source_opml.c aol_source_opml.h \ default_source.c default_source.h \ dummy_source.c dummy_source.h \ google_source.c google_source.h \ inoreader_source.c inoreader_source.h \ inoreader_source_edit.c inoreader_source_edit.h \ inoreader_source_feed.c \ inoreader_source_feed_list.c inoreader_source_feed_list.h \ json_api_mapper.c json_api_mapper.h \ opml_source.c opml_source.h \ reedah_source.c reedah_source.h \ reedah_source_edit.c reedah_source_edit.h \ reedah_source_feed.c \ reedah_source_feed_list.c reedah_source_feed_list.h \ theoldreader_source.c theoldreader_source.h \ theoldreader_source_edit.c theoldreader_source_edit.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.10.17/src/fl_sources/aol_source.c000066400000000000000000000270121261475620100205300ustar00rootroot00000000000000/** * @file aol_source.c AOL reader feed list source support * * Copyright (C) 2007-2014 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/aol_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 "ui/liferea_htmlview.h" #include "fl_sources/node_source.h" #include "fl_sources/opml_source.h" #include "fl_sources/aol_source_edit.h" #include "fl_sources/aol_source_opml.h" /** default AOL reader subscription list update interval = once a day */ #define AOL_SOURCE_UPDATE_INTERVAL 60*60*24 /** create a AOL source with given node as root */ static AolSourcePtr aol_source_new (nodePtr node) { AolSourcePtr source = g_new0 (struct AolSource, 1) ; source->root = node; source->actionQueue = g_queue_new (); source->loginState = AOL_SOURCE_STATE_NONE; source->lastTimestampMap = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); return source; } static void aol_source_free (AolSourcePtr source) { if (!source) return; update_job_cancel_by_owner (source); g_free (source->authHeaderValue); g_queue_free (source->actionQueue) ; g_hash_table_unref (source->lastTimestampMap); g_free (source); } void aol_source_set_state (AolSourcePtr source, gint state) { debug3 (DEBUG_UPDATE, "AOL source '%s' now in state %d (was %d)", source->root->id, state, source->loginState); source->loginState = state; } static void aol_source_login_cb (const struct updateResult * const result, gpointer userdata, updateFlags flags) { AolSourcePtr source = (AolSourcePtr) userdata; gchar *tmp = NULL; subscriptionPtr subscription = source->root->subscription; debug1 (DEBUG_UPDATE, "google login processing... %s", result->data); g_assert (!source->authHeaderValue); if (result->data && result->httpstatus == 200) tmp = strstr (result->data, "Auth="); if (tmp) { gchar *ttmp = tmp; tmp = strchr (tmp, '\n'); if (tmp) *tmp = '\0'; source->authHeaderValue = g_strdup_printf ("GoogleLogin auth=%s", ttmp + 5); debug1 (DEBUG_UPDATE, "AOL reader Auth token found: %s", source->authHeaderValue); aol_source_set_state (source, AOL_SOURCE_STATE_ACTIVE); source->authFailures = 0; /* now that we are authenticated trigger updating to start data retrieval */ if (!(flags & AOL_SOURCE_UPDATE_ONLY_LOGIN)) subscription_update (subscription, flags); /* process any edits waiting in queue */ aol_source_edit_process (source); } else { debug0 (DEBUG_UPDATE, "AOL reader login failed! no Auth token found in result!"); subscription->node->available = FALSE; g_free (subscription->updateError); subscription->updateError = g_strdup (_("AOL Reader login failed!")); source->authFailures++; if (source->authFailures < AOL_SOURCE_MAX_AUTH_FAILURES) aol_source_set_state (source, AOL_SOURCE_STATE_NONE); else aol_source_set_state (source, AOL_SOURCE_STATE_NO_AUTH); auth_dialog_new (subscription, flags); } } /** * Perform a login to AOL Reader with OAuth2, if the login completes the * AolSource will have a valid Auth token and will have loginStatus * AOL_SOURCE_LOGIN_ACTIVE. */ void aol_source_login (AolSourcePtr source, guint32 flags) { GtkWidget *window; LifereaHtmlView *htmlview; /* There will be session expirations due to OAuth2, FIXME: handle them with refresh token! */ if (source->loginState != AOL_SOURCE_STATE_NONE) debug1(DEBUG_UPDATE, "Logging in while login state is %d\n", source->loginState); aol_source_set_state (source, AOL_SOURCE_STATE_IN_PROGRESS); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), _("AOL Reader Login")); gtk_window_set_default_size (GTK_WINDOW (window), 640, 480); htmlview = liferea_htmlview_new (FALSE); // FIXME: Redirect doesn't work yet liferea_htmlview_launch_URL_internal (htmlview, "https://api.screenname.aol.com/auth/authorize?client_id=:li1CKi3GIZzVBPyw&scope=reader&response_type=token&redirect_uri=liferea-aol-oauth2://"); gtk_container_add (GTK_CONTAINER (window), liferea_htmlview_get_widget (htmlview)); gtk_widget_show_all (window); } /* node source type implementation */ static void aol_source_update (nodePtr node) { AolSourcePtr source = (AolSourcePtr) node->data; /* Reset AOL_SOURCE_STATE_NO_AUTH as this is a manual user interaction and no auto-update so we can query for credentials again. */ if (source->loginState == AOL_SOURCE_STATE_NO_AUTH) aol_source_set_state (source, AOL_SOURCE_STATE_NONE); subscription_update (node->subscription, 0); // FIXME: 0 ? } static void aol_source_auto_update (nodePtr node) { GTimeVal now; AolSourcePtr source = (AolSourcePtr) node->data; if (source->loginState == AOL_SOURCE_STATE_NONE) { aol_source_update (node); return; } if (source->loginState == AOL_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 + AOL_SOURCE_UPDATE_INTERVAL <= now.tv_sec) { subscription_update (node->subscription, 0); g_get_current_time (&source->lastQuickUpdate); } else if (source->lastQuickUpdate.tv_sec + AOL_SOURCE_QUICK_UPDATE_INTERVAL <= now.tv_sec) { aol_source_opml_quick_update (source); aol_source_edit_process (source); g_get_current_time (&source->lastQuickUpdate); } } static void aol_source_init (void) { } static void aol_source_deinit (void) { } static void aol_source_import_node (nodePtr node) { GSList *iter; for (iter = node->children; iter; iter = g_slist_next(iter)) { nodePtr subnode = iter->data; if (subnode->subscription) subnode->subscription->type = &aolSourceFeedSubscriptionType; if (subnode->type->capabilities & NODE_CAPABILITY_SUBFOLDERS) aol_source_import_node (subnode); } } static void aol_source_import (nodePtr node) { opml_source_import (node); node->subscription->updateInterval = -1; node->subscription->type = &aolSourceOpmlSubscriptionType; if (!node->data) node->data = (gpointer) aol_source_new (node); aol_source_import_node (node); } static void aol_source_export (nodePtr node) { opml_source_export (node); } static gchar * aol_source_get_feedlist (nodePtr node) { return opml_source_get_feedlist (node); } static void aol_source_remove (nodePtr node) { opml_source_remove (node); } static nodePtr aol_source_add_subscription (nodePtr node, subscriptionPtr subscription) { debug_enter ("aol_source_add_subscription"); nodePtr child = node_new (feed_get_node_type ()); debug0 (DEBUG_UPDATE, "AolSource: Adding a new subscription"); node_set_data (child, feed_new ()); node_set_subscription (child, subscription); child->subscription->type = &aolSourceFeedSubscriptionType; node_set_title (child, _("New Subscription")); aol_source_edit_add_subscription (node_source_root_from_node (node)->data, subscription->source); debug_exit ("aol_source_add_subscription"); return child; } static void aol_source_remove_node (nodePtr node, nodePtr child) { gchar *src; AolSourcePtr source = node->data; if (child == node) { feedlist_node_removed (child); return; } src = g_strdup (child->subscription->source); feedlist_node_removed (child); /* propagate the removal only if there aren't other copies */ if (!aol_source_opml_get_node_by_source (source, src)) aol_source_edit_remove_subscription (source, src); g_free (source); } /* GUI callbacks */ static void aol_source_get_account_info (void) { /* We do not need credentials as this will be handled by OAuth2 during login */ nodePtr node; subscriptionPtr subscription; subscription = subscription_new ("http://reader.aol.com/", NULL, NULL); node = node_new (node_source_get_node_type ()); node_set_title (node, "AOL Reader"); node_source_new (node, aol_source_get_type ()); node_set_subscription (node, subscription); subscription->type = &aolSourceOpmlSubscriptionType ; node->data = aol_source_new (node); feedlist_node_added (node); aol_source_update (node); } static void aol_source_cleanup (nodePtr node) { AolSourcePtr reader = (AolSourcePtr) node->data; aol_source_free(reader); node->data = NULL ; } static void aol_source_item_set_flag (nodePtr node, itemPtr item, gboolean newStatus) { nodePtr root = node_source_root_from_node (node); aol_source_edit_mark_starred ((AolSourcePtr)root->data, item->sourceId, node->subscription->source, newStatus); item_flag_state_changed (item, newStatus); } static void aol_source_item_mark_read (nodePtr node, itemPtr item, gboolean newStatus) { nodePtr root = node_source_root_from_node (node); aol_source_edit_mark_read ((AolSourcePtr)root->data, 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 aol_source_convert_to_local (nodePtr node) { AolSourcePtr source = node->data; aol_source_set_state (source, AOL_SOURCE_STATE_MIGRATE); } /* node source type definition */ static struct nodeSourceType nst = { .id = "fl_aol", .name = N_("AOL Reader"), .description = N_("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."), .capabilities = NODE_SOURCE_CAPABILITY_DYNAMIC_CREATION | NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST | NODE_SOURCE_CAPABILITY_ADD_FEED | NODE_SOURCE_CAPABILITY_ITEM_STATE_SYNC | NODE_SOURCE_CAPABILITY_CONVERT_TO_LOCAL, .source_type_init = aol_source_init, .source_type_deinit = aol_source_deinit, .source_new = aol_source_get_account_info, .source_delete = aol_source_remove, .source_import = aol_source_import, .source_export = aol_source_export, .source_get_feedlist = aol_source_get_feedlist, .source_update = aol_source_update, .source_auto_update = aol_source_auto_update, .free = aol_source_cleanup, .item_set_flag = aol_source_item_set_flag, .item_mark_read = aol_source_item_mark_read, .add_folder = NULL, .add_subscription = aol_source_add_subscription, .remove_node = aol_source_remove_node, .convert_to_local = aol_source_convert_to_local }; nodeSourceTypePtr aol_source_get_type (void) { return &nst; } liferea-1.10.17/src/fl_sources/aol_source.h000066400000000000000000000210061261475620100205320ustar00rootroot00000000000000/** * @file aol_source.h AOL 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 _AOL_SOURCE_H #define _AOL_SOURCE_H #include "fl_sources/node_source.h" /** * A node source for AOL Reader */ typedef struct AolSource { nodePtr root; /**< the root node in the feed list */ gchar *authHeaderValue; /**< the authorization token */ GQueue *actionQueue; gint loginState; /**< The current login state */ gint authFailures; /**< Number of authentication failures */ /** * A map from a subscription source to a timestamp when it was last * updated (provided by remote service). */ GHashTable *lastTimestampMap; /** * A timestamp when the last Quick update took place. */ GTimeVal lastQuickUpdate; } *AolSourcePtr; enum { AOL_SOURCE_STATE_NONE = 0, /**< no authentication tried so far */ AOL_SOURCE_STATE_IN_PROGRESS, /**< authentication in progress */ AOL_SOURCE_STATE_ACTIVE, /**< authentication succeeded */ AOL_SOURCE_STATE_NO_AUTH, /**< authentication has failed */ AOL_SOURCE_STATE_MIGRATE, /**< source will be migrated, do not do anything anymore! */ }; enum { /** * Update only the subscription list, and not each node underneath it. * Note: Uses higher 16 bits to avoid conflict. */ AOL_SOURCE_UPDATE_ONLY_LIST = (1<<16), /** * Only login, do not do any updates. */ AOL_SOURCE_UPDATE_ONLY_LOGIN = (1<<17) }; /** * Number of auth failures after which we stop bothering the user while * auto-updating until he manually updates again. */ #define AOL_SOURCE_MAX_AUTH_FAILURES 3 /** * AOL API URL's * In each of the following, the _URL indicates the URL to use, and _POST * indicates the corresponging postdata to send. * @see * However as of now, the GoogleReaderAPI documentation seems outdated, some of * mark read/unread API does not work as mentioned in the documentation. */ /** * Google Reader 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 AOL_READER_LOGIN_URL "https://www.google.com/accounts/ClientLogin" #define AOL_READER_LOGIN_POST "service=reader&Email=%s&Passwd=%s&source=liferea&continue=http://www.google.com" /** * Acts like a feed, indicating all the posts shared by the Google Reader * friends. Does not take any params, but the Authorization header needs to be set. */ #define AOL_READER_BROADCAST_FRIENDS_URL "http://www.google.com/reader/atom/user/-/state/com.google/broadcast-friends" /** * Get a list of subscriptions. */ #define AOL_READER_SUBSCRIPTION_LIST_URL "http://www.google.com/reader/api/0/subscription/list" /** * Get a token for an edit operation. (@todo A token can actually be used * for multiple transactions.) */ #define AOL_READER_TOKEN_URL "http://www.google.com/reader/api/0/token" /** * Add a subscription * @param URL The feed URL, or the page URL for feed autodiscovery. * @param T a token obtained using AOL_READER_TOKEN_URL */ #define AOL_READER_ADD_SUBSCRIPTION_URL "http://www.google.com/reader/api/0/subscription/edit?client=liferea" #define AOL_READER_ADD_SUBSCRIPTION_POST "s=feed%%2F%s&i=null&ac=subscribe&T=%s" /** * Unsubscribe from a subscription. * @param url The feed URL * @param T a token obtained using AOL_READER_TOKEN_URL */ #define AOL_READER_REMOVE_SUBSCRIPTION_URL "http://www.google.com/reader/api/0/subscription/edit?client=liferea" #define AOL_READER_REMOVE_SUBSCRIPTION_POST "s=feed%%2F%s&i=null&ac=unsubscribe&T=%s" /** * A list of subscriptions with the unread counters, and the last updated * timestamps. */ #define AOL_READER_UNREAD_COUNTS_URL "http://www.google.com/reader/api/0/unread-count?all=true&client=liferea" /** * Edit the tags associated with an item. The parameters to this _have_ to be * sent as post data. */ #define AOL_READER_EDIT_TAG_URL "http://www.google.com/reader/api/0/edit-tag?client=liferea" /** * Postdata for adding a tag when using AOL_READER_EDIT_TAG_URL. * @param i The guid of the item. * @param prefix The prefix to 's'. For normal feeds this will be "feed", for * links etc, this should be "user". * @param s The URL of the subscription containing the item. (Note that the * following string adds the "feed/" prefix to this.) * @param a The tag to add. * @param T a token obtained using AOL_READER_TOKEN_URL */ #define AOL_READER_EDIT_TAG_ADD_TAG "i=%s&s=%s%%2F%s&a=%s&ac=edit-tags&T=%s&async=true" /** * Postdata for removing a tag, when using AOL_READER_EDIT_TAG_URL. Do * not use for removing the "read" tag, see AOL_READER_EDIT_TAG_AR_TAG * for that. * * @param i The guid of the item. * @param prefix The prefix to 's'. @see AOL_READER_EDIT_TAG_ADD_TAG * @param s The URL of the subscription containing the item. (Note that the * final value of s is feed + "/" + this string) * @param r The tag to remove * @param T a token obtained using AOL_READER_TOKEN_URL */ #define AOL_READER_EDIT_TAG_REMOVE_TAG "i=%s&s=%s%%2F%s&r=%s&ac=edit-tags&T=%s&async=true" /** * Postdata for adding a tag, and removing another tag at the same time, * when using AOL_READER_EDIT_TAG_URL. * @param i The guid of the item. * @param prefix The prefix to 's'. @see AOL_READER_EDIT_TAG_ADD_TAG * @param s The URL of the subscription containing the item. (Note that the * final value of s is feed + "/" + this string) * @param a The tag to add. * @param r The tag to remove * @param T a token obtained using AOL_READER_TOKEN_URL */ #define AOL_READER_EDIT_TAG_AR_TAG "i=%s&s=%s%%2F%s&a=%s&r=%s&ac=edit-tags&T=%s&async=true" /** * Postdata for adding a tag, and removing another tag at the same time, for a * _link_ item, when using AOL_READER_EDIT_TAG_URL * @param i The guid of the link (as provided by google) * @param a The tag to add * @param r The tag to remove * @param T a token obtained using AOL_READER_TOKEN_URL */ #define AOL_READER_EDIT_TAG_ADD_TAG_FOR_LINK "i=%s&s=user%2F-%2Fsource%2Fcom.google%2Flink&a=%s&r=%s&ac=edit-tags&T=%s&async=true" /** A set of tags (states) defined by Google reader */ #define AOL_READER_TAG_KEPT_UNREAD "user/-/state/com.google/kept-unread" #define AOL_READER_TAG_READ "user/-/state/com.google/read" #define AOL_READER_TAG_TRACKING_KEPT_UNREAD "user/-/state/com.google/tracking-kept-unread" #define AOL_READER_TAG_STARRED "user/-/state/com.google/starred" /** Interval (in seconds) for doing a Quick Update: 10min */ #define AOL_SOURCE_QUICK_UPDATE_INTERVAL 600 /** * @returns Google Reader source type implementation info. */ nodeSourceTypePtr aol_source_get_type (void); extern struct subscriptionType aolSourceFeedSubscriptionType; extern struct subscriptionType aolSourceOpmlSubscriptionType; /** * Find a child node with the given feed source URL. * * @param source AolSource * @param source a feed source URL to search * * @returns a node (or NULL) */ nodePtr aol_source_get_node_from_source (AolSourcePtr source, const gchar* src); /** * 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 aol_source_quick_update_timeout (gpointer source); /** * 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 aol_source_migrate_node (nodePtr node); /** * Perform login for the given Google source. * * @param source a AolSource * @param flags network request flags */ void aol_source_login (AolSourcePtr source, guint32 flags); #endif liferea-1.10.17/src/fl_sources/aol_source_edit.c000066400000000000000000000372301261475620100215400ustar00rootroot00000000000000/** * @file aol_source_edit.c AOL reader feed list source syncing support * * Copyright (C) 2013 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 */ #include #include #include #include "debug.h" #include "update.h" #include "subscription.h" #include "common.h" #include "feedlist.h" #include "aol_source.h" #include "aol_source_edit.h" #include "config.h" #include #include #include #include "xml.h" /** * A structure to indicate an edit to the Google Reader "database". * These edits are put in a queue and processed in sequential order * so that google does not end up processing the requests in an * unintended order. */ typedef struct AolSourceAction { /** * 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; /** * A callback function on completion of the edit. */ void (*callback) (AolSourcePtr source, struct AolSourceAction* edit, gboolean success); /** * The type of this AolSourceAction. */ int actionType ; } *AolSourceActionPtr ; 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 } ; typedef struct AolSourceAction* editPtr ; typedef struct AolSourceActionCtxt { gchar *nodeId ; AolSourceActionPtr action; } *AolSourceActionCtxtPtr; static void aol_source_edit_push (AolSourcePtr source, AolSourceActionPtr action, gboolean head); static AolSourceActionPtr aol_source_action_new (void) { AolSourceActionPtr action = g_slice_new0 (struct AolSourceAction); return action; } static void aol_source_action_free (AolSourceActionPtr action) { g_free (action->guid); g_free (action->feedUrl); g_slice_free (struct AolSourceAction, action); } static AolSourceActionCtxtPtr aol_source_action_context_new(AolSourcePtr source, AolSourceActionPtr action) { AolSourceActionCtxtPtr ctxt = g_slice_new0(struct AolSourceActionCtxt); ctxt->nodeId = g_strdup(source->root->id); ctxt->action = action; return ctxt; } static void aol_source_action_context_free(AolSourceActionCtxtPtr ctxt) { g_free(ctxt->nodeId); g_slice_free(struct AolSourceActionCtxt, ctxt); } static void aol_source_edit_action_complete (const struct updateResult* const result, gpointer userdata, updateFlags flags) { AolSourceActionCtxtPtr editCtxt = (AolSourceActionCtxtPtr) userdata; nodePtr node = node_from_id (editCtxt->nodeId); AolSourcePtr source; AolSourceActionPtr action = editCtxt->action ; aol_source_action_context_free (editCtxt); if (!node) { aol_source_action_free (action); return; /* probably got deleted before this callback */ } source = (AolSourcePtr) node->data; if (result->data == NULL || !g_str_equal (result->data, "OK")) { if (action->callback) (*action->callback) (source, action, FALSE); debug1 (DEBUG_UPDATE, "The edit action failed with result: %s\n", result->data); aol_source_action_free (action); return; /** @todo start a timer for next processing */ } if (action->callback) action->callback (source, action, TRUE); aol_source_action_free (action); /* process anything else waiting on the edit queue */ aol_source_edit_process (source); } /* the following aol_source_api_* functions are simply funtions that convert a AolSourceActionPtr to a updateRequestPtr */ static void aol_source_api_add_subscription (AolSourceActionPtr action, updateRequestPtr request, const gchar* token) { update_request_set_source (request, AOL_READER_ADD_SUBSCRIPTION_URL); gchar* s_escaped = g_uri_escape_string (action->feedUrl, NULL, TRUE) ; gchar* postdata = g_strdup_printf (AOL_READER_ADD_SUBSCRIPTION_POST, s_escaped, token); g_free (s_escaped); debug1 (DEBUG_UPDATE, "aol_source: postdata [%s]", postdata); request->postdata = postdata ; } static void aol_source_api_remove_subscription (AolSourceActionPtr action, updateRequestPtr request, const gchar* token) { update_request_set_source (request, AOL_READER_REMOVE_SUBSCRIPTION_URL); gchar* s_escaped = g_uri_escape_string (action->feedUrl, NULL, TRUE); g_assert (!request->postdata); request->postdata = g_strdup_printf (AOL_READER_REMOVE_SUBSCRIPTION_POST, s_escaped, token); g_free (s_escaped); } static void aol_source_api_edit_tag (AolSourceActionPtr action, updateRequestPtr request, const gchar*token) { update_request_set_source (request, AOL_READER_EDIT_TAG_URL); 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 AolSourceAction 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 (AOL_READER_TAG_KEPT_UNREAD, NULL, TRUE); gchar *r_escaped = g_uri_escape_string (AOL_READER_TAG_READ, NULL, TRUE); postdata = g_strdup_printf (AOL_READER_EDIT_TAG_AR_TAG, 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 (AOL_READER_TAG_READ, NULL, TRUE); postdata = g_strdup_printf (AOL_READER_EDIT_TAG_ADD_TAG, i_escaped, prefix, s_escaped, a_escaped, token); } else if (action->actionType == EDIT_ACTION_TRACKING_MARK_UNREAD) { a_escaped = g_uri_escape_string (AOL_READER_TAG_TRACKING_KEPT_UNREAD, NULL, TRUE); postdata = g_strdup_printf (AOL_READER_EDIT_TAG_ADD_TAG, i_escaped, prefix, s_escaped, a_escaped, token); } else if (action->actionType == EDIT_ACTION_MARK_STARRED) { a_escaped = g_uri_escape_string (AOL_READER_TAG_STARRED, NULL, TRUE) ; postdata = g_strdup_printf ( AOL_READER_EDIT_TAG_ADD_TAG, i_escaped, prefix, s_escaped, a_escaped, token); } else if (action->actionType == EDIT_ACTION_MARK_UNSTARRED) { gchar* r_escaped = g_uri_escape_string(AOL_READER_TAG_STARRED, NULL, TRUE); postdata = g_strdup_printf ( AOL_READER_EDIT_TAG_REMOVE_TAG, i_escaped, prefix, s_escaped, r_escaped, token); } else g_assert (FALSE); g_free (s_escaped); g_free (a_escaped); g_free (i_escaped); debug1 (DEBUG_UPDATE, "aol_source: postdata [%s]", postdata); request->postdata = postdata; } static void aol_source_edit_token_cb (const struct updateResult * const result, gpointer userdata, updateFlags flags) { nodePtr node; AolSourcePtr source; const gchar* token; AolSourceActionPtr 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; } source = (AolSourcePtr) node->data; token = result->data; if (!source || g_queue_is_empty (source->actionQueue)) return; action = g_queue_peek_head (source->actionQueue); 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_auth_value (request, source->authHeaderValue); 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) aol_source_api_edit_tag (action, request, token); else if (action->actionType == EDIT_ACTION_ADD_SUBSCRIPTION ) aol_source_api_add_subscription (action, request, token); else if (action->actionType == EDIT_ACTION_REMOVE_SUBSCRIPTION ) aol_source_api_remove_subscription (action, request, token) ; update_execute_request (source, request, aol_source_edit_action_complete, aol_source_action_context_new(source, action), 0); action = g_queue_pop_head (source->actionQueue); } void aol_source_edit_process (AolSourcePtr 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 * aol_source_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 (AOL_READER_TOKEN_URL); update_request_set_auth_value(request, source->authHeaderValue); update_execute_request (source, request, aol_source_edit_token_cb, g_strdup(source->root->id), 0); } static void aol_source_edit_push_ (AolSourcePtr source, AolSourceActionPtr action, gboolean head) { g_assert (source->actionQueue); if (head) g_queue_push_head (source->actionQueue, action); else g_queue_push_tail (source->actionQueue, action); } static void aol_source_edit_push (AolSourcePtr source, AolSourceActionPtr action, gboolean head) { g_assert (source); nodePtr root = source->root; aol_source_edit_push_ (source, action, head); /** @todo any flags I should specify? */ if (source->loginState == AOL_SOURCE_STATE_NONE) subscription_update(root->subscription, AOL_SOURCE_UPDATE_ONLY_LOGIN); else if ( source->loginState == AOL_SOURCE_STATE_ACTIVE) aol_source_edit_process (source); } static void update_read_state_callback (AolSourcePtr source, AolSourceActionPtr action, gboolean success) { if (success) { // FIXME: call item_read_state_changed (item, newState); } else { debug0 (DEBUG_UPDATE, "Failed to change item state!\n"); } } void aol_source_edit_mark_read (AolSourcePtr source, const gchar *guid, const gchar *feedUrl, gboolean newStatus) { AolSourceActionPtr action = aol_source_action_new (); action->guid = g_strdup (guid); action->feedUrl = g_strdup (feedUrl); action->actionType = newStatus ? EDIT_ACTION_MARK_READ : EDIT_ACTION_MARK_UNREAD; action->callback = update_read_state_callback; aol_source_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 = aol_source_action_new (); action->guid = g_strdup (guid); action->feedUrl = g_strdup (feedUrl); action->actionType = EDIT_ACTION_TRACKING_MARK_UNREAD; aol_source_edit_push (source, action, FALSE); } } static void update_starred_state_callback(AolSourcePtr source, AolSourceActionPtr action, gboolean success) { if (success) { // FIXME: call item_flag_changed (item, newState); } else { debug0 (DEBUG_UPDATE, "Failed to change item state!\n"); } } void aol_source_edit_mark_starred (AolSourcePtr source, const gchar *guid, const gchar *feedUrl, gboolean newStatus) { AolSourceActionPtr action = aol_source_action_new (); action->guid = g_strdup (guid); action->feedUrl = g_strdup (feedUrl); action->actionType = newStatus ? EDIT_ACTION_MARK_STARRED : EDIT_ACTION_MARK_UNSTARRED; action->callback = update_starred_state_callback; aol_source_edit_push (source, action, FALSE); } static void update_subscription_list_callback(AolSourcePtr source, AolSourceActionPtr action, gboolean success) { if (success) { /* * It is possible that Google changed the name of the URL that * was sent to it. In that case, I 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 (g_str_equal (node->subscription->source, action->feedUrl)) { subscription_set_source (node->subscription, ""); feedlist_node_added (node); } } debug0 (DEBUG_UPDATE, "Subscription list was updated successful\n"); subscription_update (source->root->subscription, AOL_SOURCE_UPDATE_ONLY_LIST); } else debug0 (DEBUG_UPDATE, "Failed to update subscriptions\n"); } void aol_source_edit_add_subscription (AolSourcePtr source, const gchar* feedUrl) { AolSourceActionPtr action = aol_source_action_new () ; action->actionType = EDIT_ACTION_ADD_SUBSCRIPTION; action->feedUrl = g_strdup (feedUrl); action->callback = update_subscription_list_callback; aol_source_edit_push (source, action, TRUE); } static void aol_source_edit_remove_callback (AolSourcePtr source, AolSourceActionPtr 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 aol_source_edit_remove_subscription (AolSourcePtr source, const gchar* feedUrl) { AolSourceActionPtr action = aol_source_action_new (); action->actionType = EDIT_ACTION_REMOVE_SUBSCRIPTION; action->feedUrl = g_strdup (feedUrl); action->callback = aol_source_edit_remove_callback; aol_source_edit_push (source, action, TRUE); } gboolean aol_source_edit_is_in_queue (AolSourcePtr 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)) { AolSourceActionPtr action = cur->data; if (action->guid && g_str_equal (action->guid, guid)) return TRUE; } return FALSE; } liferea-1.10.17/src/fl_sources/aol_source_edit.h000066400000000000000000000053361261475620100215470ustar00rootroot00000000000000/** * @file aol_source_edit.c Google reader feed list source syncing support * * Copyright (C) 2013 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 _AOL_SOURCE_EDIT_H #define _AOL_SOURCE_EDIT_H #include "aol_source.h" #include /** * Process the waiting edits on the edit queue. Call this if the state of * the AolSource has changed. * * @param source The AolSource whose editQueue should be processed. */ void aol_source_edit_process (AolSourcePtr source); /** Edit wrappers */ /** * Mark the given item as read. * * @param source The AolSource 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 aol_source_edit_mark_read (AolSourcePtr source, const gchar* guid, const gchar* feedUrl, gboolean newStatus); /** * Mark the given item as starred. * * @param source The AolSource 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 aol_source_edit_mark_starred (AolSourcePtr source, const gchar *guid, const gchar *feedUrl, gboolean newStatus); /** * Add a subscription to the google source. * * @param source The AolSource structure * @param feedUrl the feed to add */ void aol_source_edit_add_subscription (AolSourcePtr source, const gchar* feedUrl); /** * Remove a subscription from the google source. * * @param source The AolSource structure * @param feedUrl the feed to remove */ void aol_source_edit_remove_subscription (AolSourcePtr source, const gchar* feedUrl); /** * See if an item with give guid is being modified * in the queue. * * @param AolSource the AolSource structure * @param guid the guid of the item */ gboolean aol_source_edit_is_in_queue (AolSourcePtr source, const gchar* guid); #endif liferea-1.10.17/src/fl_sources/aol_source_feed.c000066400000000000000000000247761261475620100215310ustar00rootroot00000000000000/** * @file aol_source_feed.c AOL reader feed subscription routines * * Copyright (C) 2013 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 */ #include #include #include #include #include "common.h" #include "debug.h" #include "xml.h" #include "feedlist.h" #include "aol_source.h" #include "subscription.h" #include "node.h" #include "aol_source_edit.h" #include "metadata.h" #include "db.h" #include "item_state.h" /** * This is identical to xpath_foreach_match, except that it takes the context * as parameter. */ static void aol_source_xpath_foreach_match (const gchar* expr, xmlXPathContextPtr xpathCtxt, xpathMatchFunc func, gpointer user_data) { xmlXPathObjectPtr xpathObj = NULL; xpathObj = xmlXPathEval ((xmlChar*)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); xpathObj->nodesetval->nodeTab[i] = NULL ; } } if (xpathObj) xmlXPathFreeObject (xpathObj); } void aol_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 aol_source_xml_unlink_node (xmlNodePtr node, gpointer data) { xmlUnlinkNode (node); xmlFreeNode (node); } static void aol_source_set_orig_source(const xmlNodePtr node, gpointer userdata) { itemPtr item = (itemPtr) userdata ; xmlChar* value = xmlNodeGetContent (node); const gchar* prefix1 = "tag:google.com,2005:reader/feed/"; const gchar* prefix2 = "tag:google.com,2005:reader/user/"; debug1(DEBUG_UPDATE, "AolSource: Got %s as id while updating", value); if (g_str_has_prefix (value, prefix1) || g_str_has_prefix (value, prefix2)) { metadata_list_set (&item->metadata, "GoogleBroadcastOrigFeed", value + strlen (prefix1)); } xmlFree (value); } static void aol_source_set_shared_by (xmlNodePtr node, gpointer userdata) { itemPtr item = (itemPtr) userdata; xmlChar *value = xmlNodeGetContent (node); xmlChar *apos = strrchr (value, '\''); gchar *name; if (!apos) return; name = g_strndup (value, apos-value); metadata_list_set (&item->metadata, "sharedby", name); g_free (name); xmlFree (value); } static void aol_source_fix_broadcast_item (xmlNodePtr entry, itemPtr item) { xmlXPathContextPtr xpathCtxt = xmlXPathNewContext (entry->doc) ; xmlXPathRegisterNs (xpathCtxt, "atom", "http://www.w3.org/2005/Atom"); xpathCtxt->node = entry; aol_source_xpath_foreach_match ("./atom:source/atom:id", xpathCtxt, aol_source_set_orig_source, item); /* who is sharing this? */ aol_source_xpath_foreach_match ("./atom:link[@rel='via']/@title", xpathCtxt, aol_source_set_shared_by, item); db_item_update (item); /* free up xpath related data */ if (xpathCtxt) xmlXPathFreeContext (xpathCtxt); } static itemPtr aol_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 && 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_warning ("Could not find item for %s!", sourceId); itemset_free (itemset); return NULL; } static void aol_source_item_retrieve_status (const xmlNodePtr entry, subscriptionPtr subscription, GHashTable *cache) { AolSourcePtr source = (AolSourcePtr) node_source_root_from_node (subscription->node)->data ; xmlNodePtr xml; nodePtr node = subscription->node; xmlChar *id; gboolean read = FALSE; gboolean starred = FALSE; xml = entry->children; g_assert (xml); g_assert (g_str_equal (xml->name, "id")); id = xmlNodeGetContent (xml); for (xml = entry->children; xml; xml = xml->next) { if (g_str_equal (xml->name, "category")) { xmlChar* label = xmlGetProp (xml, "label"); if (!label) continue; if (g_str_equal (label, "read")) read = TRUE; else if (g_str_equal(label, "starred")) starred = TRUE; xmlFree (label); } } itemPtr item = aol_source_load_item_from_sourceid (node, id, cache); if (item && item->sourceId) { if (g_str_equal (item->sourceId, id) && !aol_source_edit_is_in_queue(source, id)) { if (item->readStatus != read) item_read_state_changed (item, read); if (item->flagStatus != starred) item_flag_state_changed (item, starred); if (g_str_equal (subscription->source, AOL_READER_BROADCAST_FRIENDS_URL)) aol_source_fix_broadcast_item (entry, item); } } if (item) item_unload (item) ; xmlFree (id); } static void aol_feed_subscription_process_update_result (subscriptionPtr subscription, const struct updateResult* const result, updateFlags flags) { debug_start_measurement (DEBUG_UPDATE); if (result->data) { updateResultPtr resultCopy; /* FIXME: The following is a very dirty hack to edit the feed's XML before processing it */ resultCopy = update_result_new () ; resultCopy->source = g_strdup (result->source); resultCopy->httpstatus = result->httpstatus; resultCopy->contentType = g_strdup (result->contentType); g_free (resultCopy->updateState); resultCopy->updateState = update_state_copy (result->updateState); /* update the XML by removing 'read', 'reading-list' etc. as labels. */ xmlDocPtr doc = xml_parse (result->data, result->size, NULL); xmlXPathContextPtr xpathCtxt = xmlXPathNewContext (doc) ; xmlXPathRegisterNs (xpathCtxt, "atom", "http://www.w3.org/2005/Atom"); aol_source_xpath_foreach_match ("/atom:feed/atom:entry/atom:category[@scheme='http://www.google.com/reader/']", xpathCtxt, aol_source_xml_unlink_node, NULL); /* delete the via link for broadcast subscription */ if (g_str_equal (subscription->source, AOL_READER_BROADCAST_FRIENDS_URL)) aol_source_xpath_foreach_match ("/atom:feed/atom:entry/atom:link[@rel='via']/@href", xpathCtxt, aol_source_xml_unlink_node, NULL); xmlXPathFreeContext (xpathCtxt); /* good now we have removed the read and unread labels. */ xmlChar *newXml; int newXmlSize ; xmlDocDumpMemory (doc, &newXml, &newXmlSize); resultCopy->data = g_strndup ((gchar*) newXml, newXmlSize); resultCopy->size = newXmlSize; xmlFree (newXml); xmlFreeDoc (doc); feed_get_subscription_type ()->process_update_result (subscription, resultCopy, flags); update_result_free (resultCopy); } else { feed_get_subscription_type ()->process_update_result (subscription, result, flags); return ; } /* FIXME: The following workaround ensure that the code below, that uses UI callbacks item_*_state_changed(), does not reset the newCount of the feed list (see SF #2666478) by getting the newCount first and setting it again later. */ guint newCount = feedlist_get_new_item_count (); 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 */ } aol_source_item_retrieve_status (entry, subscription, cache); entry = entry->next; } g_hash_table_unref (cache); xmlFreeDoc (doc); } else { debug0 (DEBUG_UPDATE, "aol_feed_subscription_process_update_result(): Couldn't parse XML!"); g_warning ("aol_feed_subscription_process_update_result(): Couldn't parse XML!"); } // FIXME: part 2 of the newCount workaround feedlist_update_new_item_count (newCount); debug_end_measurement (DEBUG_UPDATE, "time taken to update statuses"); } static gboolean aol_feed_subscription_prepare_update_request (subscriptionPtr subscription, struct updateRequest *request) { debug0 (DEBUG_UPDATE, "preparing AOL reader feed subscription for update\n"); AolSourcePtr source = (AolSourcePtr) node_source_root_from_node (subscription->node)->data; g_assert(source); if (source->loginState == AOL_SOURCE_STATE_NONE) { subscription_update (node_source_root_from_node (subscription->node)->subscription, 0) ; return FALSE; } debug0 (DEBUG_UPDATE, "Setting cookies for a AOL Reader subscription"); if (!g_str_equal (request->source, AOL_READER_BROADCAST_FRIENDS_URL)) { gchar* source_escaped = g_uri_escape_string(request->source, NULL, TRUE); gchar* newUrl = g_strdup_printf ("http://reader.aol.com/reader/atom/feed/%s", source_escaped); update_request_set_source (request, newUrl); g_free (newUrl); g_free (source_escaped); } update_request_set_auth_value (request, source->authHeaderValue); return TRUE; } struct subscriptionType aolSourceFeedSubscriptionType = { aol_feed_subscription_prepare_update_request, aol_feed_subscription_process_update_result }; liferea-1.10.17/src/fl_sources/aol_source_opml.c000066400000000000000000000341131261475620100215570ustar00rootroot00000000000000/** * @file aol_source_opml.c Google reader OPML handling routines. * * Copyright (C) 2008 Arnold Noronha * Copyright (C) 2011 Peter Oliver * Copyright (C) 2011 Sergey Snitsaruk * 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 "aol_source_opml.h" #include #include #include #include "common.h" #include "debug.h" #include "feedlist.h" #include "folder.h" #include "metadata.h" #include "node.h" #include "subscription.h" #include "xml.h" #include "fl_sources/opml_source.h" #include "fl_sources/aol_source.h" #include "fl_sources/aol_source_edit.h" /** * Find a node by the source id. */ nodePtr aol_source_opml_get_node_by_source (AolSourcePtr gsource, const gchar *source) { return aol_source_opml_get_subnode_by_node (gsource->root, source); } /** * Recursively find a node by the source id. */ nodePtr aol_source_opml_get_subnode_by_node (nodePtr node, const gchar *source) { nodePtr subnode; nodePtr subsubnode; GSList *iter = node->children; for (; iter; iter = g_slist_next (iter)) { subnode = (nodePtr)iter->data; if (subnode->subscription && g_str_equal (subnode->subscription->source, source)) return subnode; else if (subnode->type->capabilities & NODE_CAPABILITY_SUBFOLDERS) { subsubnode = aol_source_opml_get_subnode_by_node(subnode, source); if (subnode != NULL) return subsubnode; } } return NULL; } /** * Add "broadcast-friends" to the list of subscriptions if required */ static void aol_source_add_broadcast_subscription (AolSourcePtr gsource) { const gchar* title = "Friend's Shared Items"; GSList * iter = NULL; nodePtr node; for (iter = gsource->root->children; iter; iter = g_slist_next (iter)) { node = (nodePtr) iter->data ; if (!node->subscription || !node->subscription->source) continue; if (g_str_equal (node->subscription->source, AOL_READER_BROADCAST_FRIENDS_URL)) { return; } } /* aha! add it! */ node = node_new (feed_get_node_type ()); node_set_title (node, title); node_set_data (node, feed_new ()); node_set_subscription (node, subscription_new (AOL_READER_BROADCAST_FRIENDS_URL, NULL, NULL)); node->subscription->type = &aolSourceFeedSubscriptionType; node_set_parent (node, gsource->root, -1); feedlist_node_imported (node); subscription_update (node->subscription, FEED_REQ_RESET_TITLE | FEED_REQ_PRIORITY_HIGH); subscription_update_favicon (node->subscription); } /* subscription list merging functions */ static void aol_source_check_for_removal (nodePtr node, gpointer user_data) { gchar *expr = NULL; if (node->subscription && g_str_equal (node->subscription->source, AOL_READER_BROADCAST_FRIENDS_URL)) return ; if (IS_FEED (node)) { expr = g_strdup_printf ("/object/list[@name='subscriptions']/object/string[@name='id'][. = 'feed/%s']", node->subscription->source); } else if (IS_FOLDER (node)) { node_foreach_child_data (node, aol_source_check_for_removal, user_data); expr = g_strdup_printf ("/object/list[@name='subscriptions']/object/list[@name='categories']/object[string='%s']", node->title); } else { g_warning ("google_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); } /* * Find a node by the name under root or create it. */ static nodePtr aol_source_find_or_create_folder (const gchar *name, nodePtr root) { nodePtr folder = NULL; GSList *iter_parent; /* find a node by the name under root */ iter_parent = root->children; while (iter_parent) { if (g_str_equal (name, node_get_title (iter_parent->data))) { folder = (nodePtr)iter_parent->data; break; } iter_parent = g_slist_next (iter_parent); } /* if not found, create new folder */ if (!folder) { folder = node_new (folder_get_node_type ()); node_set_title (folder, name); node_set_parent (folder, root, -1); feedlist_node_imported (folder); subscription_update (folder->subscription, FEED_REQ_RESET_TITLE | FEED_REQ_PRIORITY_HIGH); } return folder; } /* * Check if folder of a node changed in Google Reader and move * node to the folder with the same name. */ static void aol_source_update_folder (xmlNodePtr match, AolSourcePtr gsource, nodePtr node) { xmlNodePtr xml; xmlChar *label; const gchar *ptitle; nodePtr parent; /* check if label of a feed changed */ parent = node->parent; ptitle = node_get_title (parent); xml = xpath_find (match, "./list[@name='categories']/object/string[@name='label']"); if (xml) { label = xmlNodeListGetString (xml->doc, xml->xmlChildrenNode, 1); if (parent == gsource->root || ! g_str_equal (label, ptitle)) { debug2 (DEBUG_UPDATE, "GSource feed label changed for %s to '%s'", node->id, label); parent = aol_source_find_or_create_folder ((gchar*)label, gsource->root); node_reparent (node, parent); } xmlFree (label); } else { /* if feed has no label and parent is not gsource root, reparent to gsource root */ if (parent != gsource->root) node_reparent (node, gsource->root); } } static void aol_source_merge_feed (xmlNodePtr match, gpointer user_data) { AolSourcePtr gsource = (AolSourcePtr)user_data; nodePtr node, parent = NULL, subnode = NULL; GSList *iter, *iter_sub; xmlNodePtr xml; xmlChar *title = NULL, *id = NULL, *label = NULL; gchar *url = NULL; xml = xpath_find (match, "./string[@name='title']"); if (xml) title = xmlNodeListGetString (xml->doc, xml->xmlChildrenNode, 1); xml = xpath_find (match, "./string[@name='id']"); if (xml) { id = xmlNodeListGetString (xml->doc, xml->xmlChildrenNode, 1); url = g_strdup (id + strlen ("feed/")); } /* Note: ids look like "feed/http://rss.slashdot.org" */ if (id && title) { /* check if node to be merged already exists */ iter = gsource->root->children; while (iter) { node = (nodePtr)iter->data; if (node->subscription != NULL && g_str_equal (node->subscription->source, url)) { node->subscription->type = &aolSourceFeedSubscriptionType; aol_source_update_folder (match, gsource, node); goto cleanup; } else if (node->type->capabilities & NODE_CAPABILITY_SUBFOLDERS) { iter_sub = node->children; while (iter_sub) { subnode = (nodePtr)iter_sub->data; if (subnode->subscription != NULL && g_str_equal (subnode->subscription->source, url)) { subnode->subscription->type = &aolSourceFeedSubscriptionType; aol_source_update_folder (match, gsource, subnode); goto cleanup; } iter_sub = g_slist_next (iter_sub); } } iter = g_slist_next (iter); } /* if a new feed contains label, put its node under a folder with the same name */ xml = xpath_find (match, "./list[@name='categories']/object/string[@name='label']"); if (xml) { label = xmlNodeListGetString (xml->doc, xml->xmlChildrenNode, 1); parent = aol_source_find_or_create_folder ((gchar*)label, gsource->root); xmlFree (label); } else { parent = gsource->root; } g_assert (NULL != parent); 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 = &aolSourceFeedSubscriptionType; node_set_parent (node, parent, -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 { g_warning("Unable to parse subscription information from Google"); } cleanup: xmlFree (id); xmlFree (title); g_free (url) ; } /* OPML subscription type implementation */ static void google_subscription_opml_cb (subscriptionPtr subscription, const struct updateResult * const result, updateFlags flags) { AolSourcePtr gsource = (AolSourcePtr) subscription->node->data; if (result->data) { xmlDocPtr doc = xml_parse (result->data, result->size, NULL); if(doc) { xmlNodePtr 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 (subscription->node, aol_source_check_for_removal, (gpointer)root); node_foreach_child (subscription->node, aol_source_migrate_node); opml_source_export (subscription->node); /* save new feed list tree to disk to ensure correct document in next step */ xpath_foreach_match (root, "/object/list[@name='subscriptions']/object", aol_source_merge_feed, (gpointer)gsource); aol_source_add_broadcast_subscription (gsource) ; opml_source_export (subscription->node); /* save new feeds to feed list */ subscription->node->available = TRUE; xmlFreeDoc (doc); } else { /** @todo The session seems to have expired */ g_warning ("Unable to parse OPML list from google, the session might have expired.\n"); } } else { subscription->node->available = FALSE; debug0 (DEBUG_UPDATE, "google_subscription_opml_cb(): ERROR: failed to get subscription list!\n"); } if (!(flags & AOL_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 aol_source_opml_quick_update_helper (xmlNodePtr match, gpointer userdata) { AolSourcePtr gsource = (AolSourcePtr) 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 = aol_source_opml_get_node_by_source (gsource, id + strlen ("feed/")); else if (g_str_has_suffix (id, "broadcast-friends")) node = aol_source_opml_get_node_by_source (gsource, id); 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, "AolSource: 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 aol_source_opml_quick_update_cb (const struct updateResult* const result, gpointer userdata, updateFlags flags) { AolSourcePtr gsource = (AolSourcePtr) userdata; xmlDocPtr doc; if (!result->data) { /* what do I do? */ debug0 (DEBUG_UPDATE, "AolSource: Unable to get unread counts, this update is aborted."); return; } doc = xml_parse (result->data, result->size, NULL); if (!doc) { debug0 (DEBUG_UPDATE, "AolSource: The XML failed to parse, maybe the session has expired. (FIXME)"); return; } xpath_foreach_match (xmlDocGetRootElement (doc), "/object/list[@name='unreadcounts']/object", aol_source_opml_quick_update_helper, gsource); xmlFreeDoc (doc); } gboolean aol_source_opml_quick_update(AolSourcePtr gsource) { updateRequestPtr request = update_request_new (); request->updateState = update_state_copy (gsource->root->subscription->updateState); request->options = update_options_copy (gsource->root->subscription->updateOptions); update_request_set_source (request, AOL_READER_UNREAD_COUNTS_URL); update_request_set_auth_value(request, gsource->authHeaderValue); update_execute_request (gsource, request, aol_source_opml_quick_update_cb, gsource, 0); return TRUE; } static void aol_source_opml_subscription_process_update_result (subscriptionPtr subscription, const struct updateResult * const result, updateFlags flags) { google_subscription_opml_cb (subscription, result, flags); } static gboolean aol_source_opml_subscription_prepare_update_request (subscriptionPtr subscription, struct updateRequest *request) { AolSourcePtr gsource = (AolSourcePtr)subscription->node->data; g_assert(gsource); if (gsource->loginState == AOL_SOURCE_STATE_NONE) { debug0(DEBUG_UPDATE, "AolSource: login"); aol_source_login ((AolSourcePtr) subscription->node->data, 0) ; return FALSE; } debug1 (DEBUG_UPDATE, "updating AOL Reader subscription (node id %s)", subscription->node->id); update_request_set_source (request, AOL_READER_SUBSCRIPTION_LIST_URL); update_request_set_auth_value (request, gsource->authHeaderValue); return TRUE; } /* OPML subscription type definition */ struct subscriptionType aolSourceOpmlSubscriptionType = { aol_source_opml_subscription_prepare_update_request, aol_source_opml_subscription_process_update_result }; liferea-1.10.17/src/fl_sources/aol_source_opml.h000066400000000000000000000030001261475620100215530ustar00rootroot00000000000000/** * Copyright (C) 2013 Lars Windolf * 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/aol_source.h" /** * Find a node by the source id. * * @param source the AOL Reader source * @param source the feed id to find * * @returns a node (or NULL) */ nodePtr aol_source_opml_get_node_by_source(AolSourcePtr source, const gchar *src); /** * Recursively find a node by the source id. * * @param source the AOL Reader source * @param source the feed id to find * * @returns a node (or NULL) */ nodePtr aol_source_opml_get_subnode_by_node(nodePtr node, const gchar *source); /** * Perform a quick update of the AOL Reader source. * * @param source the AOL Reader source */ gboolean aol_source_opml_quick_update (AolSourcePtr source); liferea-1.10.17/src/fl_sources/default_source.c000066400000000000000000000145731261475620100214110ustar00rootroot00000000000000/** * @file default_source.c default static feed list source * * 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 #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_update (nodePtr node) { node_foreach_child_data (node, node_update_subscription, GUINT_TO_POINTER (0)); } 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", .description = "The default feed list source. Should never be added manually. If you see this then something went wrong!", .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, .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_update = default_source_update, .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) { return &nst; } liferea-1.10.17/src/fl_sources/default_source.h000066400000000000000000000021531261475620100214050ustar00rootroot00000000000000/** * @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.10.17/src/fl_sources/dummy_source.c000066400000000000000000000034001261475620100211030ustar00rootroot00000000000000/** * @file dummy_source.c dummy feed list source * * 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 */ #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 = { NODE_SOURCE_TYPE_DUMMY_ID, "Dummy Feed List Source", "The dummy feed list source. Should never be added manually. If you see this then something went wrong!", 0, dummy_source_init, dummy_source_deinit, NULL, NULL, dummy_source_import, dummy_source_noop, /* export */ dummy_source_get_feedlist, dummy_source_noop, /* update */ dummy_source_noop, /* auto_update */ NULL, NULL, NULL, NULL, NULL, NULL, NULL }; nodeSourceTypePtr dummy_source_get_type(void) { return &nst; } liferea-1.10.17/src/fl_sources/dummy_source.h000066400000000000000000000020471261475620100211160ustar00rootroot00000000000000/** * @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.10.17/src/fl_sources/google_source.c000066400000000000000000000107011261475620100212260ustar00rootroot00000000000000/** * @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_update (nodePtr node) { } 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_node (nodePtr node) { GSList *iter; for (iter = node->children; iter; iter = g_slist_next(iter)) { nodePtr subnode = iter->data; if (subnode->type->capabilities & NODE_CAPABILITY_SUBFOLDERS) google_source_import_node (subnode); } } static void google_source_import (nodePtr node) { opml_source_import (node); if (!node->data) node->data = (gpointer) google_source_new (node); google_source_import_node (node); } static void google_source_export (nodePtr node) { opml_source_export (node); } static gchar * google_source_get_feedlist (nodePtr node) { return opml_source_get_feedlist (node); } static void google_source_remove (nodePtr node) { opml_source_remove (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"), .description = N_("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."), .capabilities = NODE_SOURCE_CAPABILITY_CONVERT_TO_LOCAL, .source_type_init = google_source_init, .source_type_deinit = google_source_deinit, .source_new = NULL, .source_delete = google_source_remove, .source_import = google_source_import, .source_export = google_source_export, .source_get_feedlist = google_source_get_feedlist, .source_update = google_source_update, .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) { return &nst; } liferea-1.10.17/src/fl_sources/google_source.h000066400000000000000000000023361261475620100212400ustar00rootroot00000000000000/** * @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.10.17/src/fl_sources/inoreader_source.c000066400000000000000000000312761261475620100217340ustar00rootroot00000000000000/** * @file inoreader_source.c InoReader source support * * Copyright (C) 2007-2014 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/inoreader_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/node_source.h" #include "fl_sources/opml_source.h" #include "fl_sources/inoreader_source_edit.h" #include "fl_sources/inoreader_source_feed_list.h" /** default reader subscription list update interval = once a day */ #define INOREADER_SOURCE_UPDATE_INTERVAL 60*60*24 /** create a source with given node as root */ static InoreaderSourcePtr inoreader_source_new (nodePtr node) { InoreaderSourcePtr source = g_new0 (struct InoreaderSource, 1) ; source->root = node; source->actionQueue = g_queue_new (); source->loginState = INOREADER_SOURCE_STATE_NONE; source->lastTimestampMap = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); return source; } static void inoreader_source_free (InoreaderSourcePtr gsource) { if (!gsource) return; update_job_cancel_by_owner (gsource); g_free (gsource->authHeaderValue); g_queue_free (gsource->actionQueue) ; g_hash_table_unref (gsource->lastTimestampMap); g_free (gsource); } static void inoreader_source_login_cb (const struct updateResult * const result, gpointer userdata, updateFlags flags) { InoreaderSourcePtr gsource = (InoreaderSourcePtr) userdata; gchar *tmp = NULL; subscriptionPtr subscription = gsource->root->subscription; debug1 (DEBUG_UPDATE, "InoReader login processing... %s", result->data); g_assert (!gsource->authHeaderValue); if (result->data && result->httpstatus == 200) tmp = strstr (result->data, "Auth="); if (tmp) { gchar *ttmp = tmp; tmp = strchr (tmp, '\n'); if (tmp) *tmp = '\0'; gsource->authHeaderValue = g_strdup_printf ("GoogleLogin auth=%s", ttmp + 5); debug1 (DEBUG_UPDATE, "InoReader Auth token found: %s", gsource->authHeaderValue); gsource->loginState = INOREADER_SOURCE_STATE_ACTIVE; gsource->authFailures = 0; /* now that we are authenticated trigger updating to start data retrieval */ if (!(flags & INOREADER_SOURCE_UPDATE_ONLY_LOGIN)) subscription_update (subscription, flags); /* process any edits waiting in queue */ inoreader_source_edit_process (gsource); } else { debug0 (DEBUG_UPDATE, "InoReader login failed! no Auth token found in result!"); subscription->node->available = FALSE; g_free (subscription->updateError); subscription->updateError = g_strdup (_("InoReader login failed!")); gsource->authFailures++; if (gsource->authFailures < INOREADER_SOURCE_MAX_AUTH_FAILURES) gsource->loginState = INOREADER_SOURCE_STATE_NONE; else gsource->loginState = INOREADER_SOURCE_STATE_NO_AUTH; auth_dialog_new (subscription, flags); } } /** * Perform a login to Google Reader, if the login completes the * InoreaderSource will have a valid Auth token and will have loginStatus to * INOREADER_SOURCE_LOGIN_ACTIVE. */ void inoreader_source_login (InoreaderSourcePtr gsource, guint32 flags) { gchar *username, *password; updateRequestPtr request; subscriptionPtr subscription = gsource->root->subscription; if (gsource->loginState != INOREADER_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", gsource->loginState); } request = update_request_new (); update_request_set_source (request, INOREADER_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 (INOREADER_LOGIN_POST, username, password); request->options = update_options_copy (subscription->updateOptions); g_free (username); g_free (password); gsource->loginState = INOREADER_SOURCE_STATE_IN_PROGRESS ; update_execute_request (gsource, request, inoreader_source_login_cb, gsource, flags); } /* node source type implementation */ static void inoreader_source_update (nodePtr node) { InoreaderSourcePtr gsource = (InoreaderSourcePtr) node->data; /* Reset INOREADER_SOURCE_STATE_NO_AUTH as this is a manual user interaction and no auto-update so we can query for credentials again. */ if (gsource->loginState == INOREADER_SOURCE_STATE_NO_AUTH) gsource->loginState = INOREADER_SOURCE_STATE_NONE; subscription_update (node->subscription, 0); // FIXME: 0 ? } static void inoreader_source_auto_update (nodePtr node) { GTimeVal now; InoreaderSourcePtr gsource = (InoreaderSourcePtr) node->data; if (gsource->loginState == INOREADER_SOURCE_STATE_NONE) { inoreader_source_update (node); return; } if (gsource->loginState == INOREADER_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 + INOREADER_SOURCE_UPDATE_INTERVAL <= now.tv_sec) { subscription_update (node->subscription, 0); g_get_current_time (&gsource->lastQuickUpdate); } else if (gsource->lastQuickUpdate.tv_sec + INOREADER_SOURCE_QUICK_UPDATE_INTERVAL <= now.tv_sec) { inoreader_source_opml_quick_update (gsource); inoreader_source_edit_process (gsource); g_get_current_time (&gsource->lastQuickUpdate); } } static void inoreader_source_init (void) { metadata_type_register ("inoreader-feed-id", METADATA_TYPE_TEXT); } static void inoreader_source_deinit (void) { } static void inoreader_source_import_node (nodePtr node) { GSList *iter; for (iter = node->children; iter; iter = g_slist_next(iter)) { nodePtr subnode = iter->data; if (subnode->subscription) subnode->subscription->type = &inoreaderSourceFeedSubscriptionType; if (subnode->type->capabilities & NODE_CAPABILITY_SUBFOLDERS) inoreader_source_import_node (subnode); } } static void inoreader_source_import (nodePtr node) { opml_source_import (node); node->subscription->updateInterval = -1; node->subscription->type = &inoreaderSourceOpmlSubscriptionType; if (!node->data) node->data = (gpointer) inoreader_source_new (node); inoreader_source_import_node (node); } static void inoreader_source_export (nodePtr node) { opml_source_export (node); } static gchar * inoreader_source_get_feedlist (nodePtr node) { return opml_source_get_feedlist (node); } static void inoreader_source_remove (nodePtr node) { opml_source_remove (node); } static nodePtr inoreader_source_add_subscription (nodePtr node, subscriptionPtr subscription) { debug_enter ("inoreader_source_add_subscription"); nodePtr child = node_new (feed_get_node_type ()); debug0 (DEBUG_UPDATE, "InoreaderSource: Adding a new subscription"); node_set_data (child, feed_new ()); node_set_subscription (child, subscription); child->subscription->type = &inoreaderSourceFeedSubscriptionType; node_set_title (child, _("New Subscription")); inoreader_source_edit_add_subscription (node_source_root_from_node (node)->data, subscription->source); debug_exit ("inoreader_source_add_subscription"); return child; } static void inoreader_source_remove_node (nodePtr node, nodePtr child) { gchar *source; InoreaderSourcePtr gsource = node->data; if (child == node) { feedlist_node_removed (child); return; } source = g_strdup (child->subscription->source); feedlist_node_removed (child); /* propagate the removal only if there aren't other copies */ if (!inoreader_source_opml_get_node_by_source (gsource, source)) inoreader_source_edit_remove_subscription (gsource, source); g_free (source); } /* GUI callbacks */ static void on_inoreader_source_selected (GtkDialog *dialog, gint response_id, gpointer user_data) { nodePtr node; subscriptionPtr subscription; if (response_id == GTK_RESPONSE_OK) { subscription = subscription_new ("http://www.inoreader.com/reader", NULL, NULL); node = node_new (node_source_get_node_type ()); node_set_title (node, "InoReader"); node_source_new (node, inoreader_source_get_type ()); node_set_subscription (node, subscription); subscription_set_auth_info (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")))); subscription->type = &inoreaderSourceOpmlSubscriptionType ; node->data = inoreader_source_new (node); feedlist_node_added (node); inoreader_source_update (node); } gtk_widget_destroy (GTK_WIDGET (dialog)); } static void ui_inoreader_source_get_account_info (void) { GtkWidget *dialog; dialog = liferea_dialog_new ("inoreader_source.ui", "inoreader_source_dialog"); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (on_inoreader_source_selected), NULL); } static void inoreader_source_cleanup (nodePtr node) { InoreaderSourcePtr reader = (InoreaderSourcePtr) node->data; inoreader_source_free(reader); node->data = NULL ; } static void inoreader_source_item_set_flag (nodePtr node, itemPtr item, gboolean newStatus) { nodePtr root = node_source_root_from_node (node); inoreader_source_edit_mark_starred ((InoreaderSourcePtr)root->data, item->sourceId, node->subscription->source, newStatus); item_flag_state_changed (item, newStatus); } static void inoreader_source_item_mark_read (nodePtr node, itemPtr item, gboolean newStatus) { nodePtr root = node_source_root_from_node (node); inoreader_source_edit_mark_read ((InoreaderSourcePtr)root->data, 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 inoreader_source_convert_to_local (nodePtr node) { InoreaderSourcePtr gsource = node->data; gsource->loginState = INOREADER_SOURCE_STATE_MIGRATE; } /* node source type definition */ static struct nodeSourceType nst = { .id = "fl_inoreader", .name = N_("InoReader"), .description = N_("Integrate the feed list of your InoReader account. Liferea will " "present your InoReader subscriptions, and will synchronize your feed list and reading lists."), .capabilities = NODE_SOURCE_CAPABILITY_DYNAMIC_CREATION | NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST | NODE_SOURCE_CAPABILITY_ADD_FEED | NODE_SOURCE_CAPABILITY_ITEM_STATE_SYNC | NODE_SOURCE_CAPABILITY_CONVERT_TO_LOCAL, .source_type_init = inoreader_source_init, .source_type_deinit = inoreader_source_deinit, .source_new = ui_inoreader_source_get_account_info, .source_delete = inoreader_source_remove, .source_import = inoreader_source_import, .source_export = inoreader_source_export, .source_get_feedlist = inoreader_source_get_feedlist, .source_update = inoreader_source_update, .source_auto_update = inoreader_source_auto_update, .free = inoreader_source_cleanup, .item_set_flag = inoreader_source_item_set_flag, .item_mark_read = inoreader_source_item_mark_read, .add_folder = NULL, .add_subscription = inoreader_source_add_subscription, .remove_node = inoreader_source_remove_node, .convert_to_local = inoreader_source_convert_to_local }; nodeSourceTypePtr inoreader_source_get_type (void) { return &nst; } liferea-1.10.17/src/fl_sources/inoreader_source.h000066400000000000000000000213521261475620100217330ustar00rootroot00000000000000/** * @file inoreader_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 _INOREADER_SOURCE_H #define _INOREADER_SOURCE_H #include "fl_sources/node_source.h" /** * A nodeSource specific for Google Reader */ typedef struct InoreaderSource { nodePtr root; /**< the root node in the feed list */ gchar *authHeaderValue; /**< the Google Authorization token */ GQueue *actionQueue; gint loginState; /**< The current login state */ gint authFailures; /**< Number of authentication failures */ /** * 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; } *InoreaderSourcePtr; enum { INOREADER_SOURCE_STATE_NONE = 0, /**< no authentication tried so far */ INOREADER_SOURCE_STATE_IN_PROGRESS, /**< authentication in progress */ INOREADER_SOURCE_STATE_ACTIVE, /**< authentication succeeded */ INOREADER_SOURCE_STATE_NO_AUTH, /**< authentication has failed */ INOREADER_SOURCE_STATE_MIGRATE, /**< source will be migrated, do not do anything anymore! */ }; enum { /** * Update only the subscription list, and not each node underneath it. * Note: Uses higher 16 bits to avoid conflict. */ INOREADER_SOURCE_UPDATE_ONLY_LIST = (1<<16), /** * Only login, do not do any updates. */ INOREADER_SOURCE_UPDATE_ONLY_LOGIN = (1<<17) }; /** * Number of auth failures after which we stop bothering the user while * auto-updating until he manually updates again. */ #define INOREADER_SOURCE_MAX_AUTH_FAILURES 3 /** * Google Source API URL's * In each of the following, the _URL indicates the URL to use, and _POST * indicates the corresponging postdata to send. * @see http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI * However as of now, the GoogleReaderAPI documentation seems outdated, some of * mark read/unread API does not work as mentioned in the documentation. */ /** * Google Reader 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 INOREADER_LOGIN_URL "https://www.inoreader.com/accounts/ClientLogin" #define INOREADER_LOGIN_POST "service=reader&Email=%s&Passwd=%s&source=liferea&continue=http://www.inoreader.com" /** * Acts like a feed, indicating all the posts shared by the Google Reader * friends. Does not take any params, but the Authorization header needs to be set. */ #define INOREADER_BROADCAST_FRIENDS_URL "http://www.inoreader.com/reader/atom/user/-/state/com.google/broadcast-friends" /** * Get a list of subscriptions. */ #define INOREADER_SUBSCRIPTION_LIST_URL "http://www.inoreader.com/reader/api/0/subscription/list" /** * Get a token for an edit operation. (@todo A token can actually be used * for multiple transactions.) */ #define INOREADER_TOKEN_URL "http://www.inoreader.com/reader/api/0/token" /** * Add a subscription * @param URL The feed URL, or the page URL for feed autodiscovery. * @param T a token obtained using INOREADER_TOKEN_URL */ #define INOREADER_ADD_SUBSCRIPTION_URL "http://www.inoreader.com/reader/api/0/subscription/edit?client=liferea" #define INOREADER_ADD_SUBSCRIPTION_POST "s=feed%%2F%s&i=null&ac=subscribe&T=%s" /** * Unsubscribe from a subscription. * @param url The feed URL * @param T a token obtained using INOREADER_TOKEN_URL */ #define INOREADER_REMOVE_SUBSCRIPTION_URL "http://www.inoreader.com/reader/api/0/subscription/edit?client=liferea" #define INOREADER_REMOVE_SUBSCRIPTION_POST "s=feed%%2F%s&i=null&ac=unsubscribe&T=%s" /** * A list of subscriptions with the unread counters, and the last updated * timestamps. */ #define INOREADER_UNREAD_COUNTS_URL "http://www.inoreader.com/reader/api/0/unread-count?all=true&client=liferea" /** * Edit the tags associated with an item. The parameters to this _have_ to be * sent as post data. */ #define INOREADER_EDIT_TAG_URL "http://www.inoreader.com/reader/api/0/edit-tag?client=liferea" /** * Postdata for adding a tag when using INOREADER_EDIT_TAG_URL. * @param i The guid of the item. * @param prefix The prefix to 's'. For normal feeds this will be "feed", for * links etc, this should be "user". * @param s The URL of the subscription containing the item. (Note that the * following string adds the "feed/" prefix to this.) * @param a The tag to add. * @param T a token obtained using INOREADER_TOKEN_URL */ #define INOREADER_EDIT_TAG_ADD_TAG "i=%s&s=%s%%2F%s&a=%s&ac=edit-tags&T=%s&async=true" /** * Postdata for removing a tag, when using INOREADER_EDIT_TAG_URL. Do * not use for removing the "read" tag, see INOREADER_EDIT_TAG_AR_TAG * for that. * * @param i The guid of the item. * @param prefix The prefix to 's'. @see INOREADER_EDIT_TAG_ADD_TAG * @param s The URL of the subscription containing the item. (Note that the * final value of s is feed + "/" + this string) * @param r The tag to remove * @param T a token obtained using INOREADER_TOKEN_URL */ #define INOREADER_EDIT_TAG_REMOVE_TAG "i=%s&s=%s%%2F%s&r=%s&ac=edit-tags&T=%s&async=true" /** * Postdata for adding a tag, and removing another tag at the same time, * when using INOREADER_EDIT_TAG_URL. * @param i The guid of the item. * @param prefix The prefix to 's'. @see INOREADER_EDIT_TAG_ADD_TAG * @param s The URL of the subscription containing the item. (Note that the * final value of s is feed + "/" + this string) * @param a The tag to add. * @param r The tag to remove * @param T a token obtained using INOREADER_TOKEN_URL */ #define INOREADER_EDIT_TAG_AR_TAG "i=%s&s=%s%%2F%s&a=%s&r=%s&ac=edit-tags&T=%s&async=true" /** * Postdata for adding a tag, and removing another tag at the same time, for a * _link_ item, when using INOREADER_EDIT_TAG_URL * @param i The guid of the link (as provided by google) * @param a The tag to add * @param r The tag to remove * @param T a token obtained using INOREADER_TOKEN_URL */ #define INOREADER_EDIT_TAG_ADD_TAG_FOR_LINK "i=%s&s=user%2F-%2Fsource%2Fcom.google%2Flink&a=%s&r=%s&ac=edit-tags&T=%s&async=true" /** A set of tags (states) defined by Google reader */ #define INOREADER_TAG_KEPT_UNREAD "user/-/state/com.google/kept-unread" #define INOREADER_TAG_READ "user/-/state/com.google/read" #define INOREADER_TAG_TRACKING_KEPT_UNREAD "user/-/state/com.google/tracking-kept-unread" #define INOREADER_TAG_STARRED "user/-/state/com.google/starred" /** Interval (in seconds) for doing a Quick Update: 10min */ #define INOREADER_SOURCE_QUICK_UPDATE_INTERVAL 600 /** * @returns Google Reader source type implementation info. */ nodeSourceTypePtr inoreader_source_get_type (void); extern struct subscriptionType inoreaderSourceFeedSubscriptionType; extern struct subscriptionType inoreaderSourceOpmlSubscriptionType; /** * Find a child node with the given feed source URL. * * @param gsource InoreaderSource * @param source a feed source URL to search * * @returns a node (or NULL) */ nodePtr inoreader_source_get_node_from_source (InoreaderSourcePtr 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 inoreader_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 inoreader_source_migrate_node (nodePtr node); /** * Perform login for the given Google source. * * @param gsource a InoreaderSource * @param flags network request flags */ void inoreader_source_login (InoreaderSourcePtr gsource, guint32 flags); #endif liferea-1.10.17/src/fl_sources/inoreader_source_edit.c000066400000000000000000000404551261475620100227400ustar00rootroot00000000000000/** * @file inoreader_source_edit.c Google reader feed list source syncing support * * 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 */ #include #include #include #include "debug.h" #include "update.h" #include "subscription.h" #include "common.h" #include "feedlist.h" #include "inoreader_source.h" #include "inoreader_source_edit.h" #include "config.h" #include #include #include #include "xml.h" /** * A structure to indicate an edit to the Google Reader "database". * These edits are put in a queue and processed in sequential order * so that google does not end up processing the requests in an * unintended order. */ typedef struct InoreaderSourceAction { /** * 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; /** * A callback function on completion of the edit. */ void (*callback) (InoreaderSourcePtr gsource, struct InoreaderSourceAction* edit, gboolean success); /** * The type of this InoreaderSourceAction. */ int actionType ; } *InoreaderSourceActionPtr ; 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 } ; typedef struct InoreaderSourceAction* editPtr ; typedef struct InoreaderSourceActionCtxt { gchar *nodeId ; InoreaderSourceActionPtr action; } *InoreaderSourceActionCtxtPtr; static void inoreader_source_edit_push (InoreaderSourcePtr gsource, InoreaderSourceActionPtr action, gboolean head); static InoreaderSourceActionPtr inoreader_source_action_new (void) { InoreaderSourceActionPtr action = g_slice_new0 (struct InoreaderSourceAction); return action; } static void inoreader_source_action_free (InoreaderSourceActionPtr action) { g_free (action->guid); g_free (action->feedUrl); g_slice_free (struct InoreaderSourceAction, action); } static InoreaderSourceActionCtxtPtr inoreader_source_action_context_new(InoreaderSourcePtr gsource, InoreaderSourceActionPtr action) { InoreaderSourceActionCtxtPtr ctxt = g_slice_new0(struct InoreaderSourceActionCtxt); ctxt->nodeId = g_strdup(gsource->root->id); ctxt->action = action; return ctxt; } static void inoreader_source_action_context_free(InoreaderSourceActionCtxtPtr ctxt) { g_free(ctxt->nodeId); g_slice_free(struct InoreaderSourceActionCtxt, ctxt); } static void inoreader_source_edit_action_complete (const struct updateResult* const result, gpointer userdata, updateFlags flags) { InoreaderSourceActionCtxtPtr editCtxt = (InoreaderSourceActionCtxtPtr) userdata; nodePtr node = node_from_id (editCtxt->nodeId); InoreaderSourcePtr gsource; InoreaderSourceActionPtr action = editCtxt->action ; inoreader_source_action_context_free (editCtxt); if (!node) { inoreader_source_action_free (action); return; /* probably got deleted before this callback */ } gsource = (InoreaderSourcePtr) node->data; if (result->data == NULL || !g_str_equal (result->data, "OK")) { if (action->callback) (*action->callback) (gsource, action, FALSE); debug1 (DEBUG_UPDATE, "The edit action failed with result: %s\n", result->data); inoreader_source_action_free (action); return; /** @todo start a timer for next processing */ } if (action->callback) action->callback (gsource, action, TRUE); inoreader_source_action_free (action); /* process anything else waiting on the edit queue */ inoreader_source_edit_process (gsource); } /* the following inoreader_source_api_* functions are simply funtions that convert a InoreaderSourceActionPtr to a updateRequestPtr */ static void inoreader_source_api_add_subscription (InoreaderSourceActionPtr action, updateRequestPtr request, const gchar* token) { update_request_set_source (request, INOREADER_ADD_SUBSCRIPTION_URL); gchar* s_escaped = g_uri_escape_string (action->feedUrl, NULL, TRUE) ; gchar* postdata = g_strdup_printf (INOREADER_ADD_SUBSCRIPTION_POST, s_escaped, token); g_free (s_escaped); debug1 (DEBUG_UPDATE, "inoreader_source: postdata [%s]", postdata); request->postdata = postdata ; } static void inoreader_source_api_remove_subscription (InoreaderSourceActionPtr action, updateRequestPtr request, const gchar* token) { update_request_set_source (request, INOREADER_REMOVE_SUBSCRIPTION_URL); gchar* s_escaped = g_uri_escape_string (action->feedUrl, NULL, TRUE); g_assert (!request->postdata); request->postdata = g_strdup_printf (INOREADER_REMOVE_SUBSCRIPTION_POST, s_escaped, token); g_free (s_escaped); } static void inoreader_source_api_edit_tag (InoreaderSourceActionPtr action, updateRequestPtr request, const gchar*token) { update_request_set_source (request, INOREADER_EDIT_TAG_URL); 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 InoreaderSourceAction 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 (INOREADER_TAG_KEPT_UNREAD, NULL, TRUE); gchar *r_escaped = g_uri_escape_string (INOREADER_TAG_READ, NULL, TRUE); postdata = g_strdup_printf (INOREADER_EDIT_TAG_AR_TAG, 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 (INOREADER_TAG_READ, NULL, TRUE); postdata = g_strdup_printf (INOREADER_EDIT_TAG_ADD_TAG, i_escaped, prefix, s_escaped, a_escaped, token); } else if (action->actionType == EDIT_ACTION_TRACKING_MARK_UNREAD) { a_escaped = g_uri_escape_string (INOREADER_TAG_TRACKING_KEPT_UNREAD, NULL, TRUE); postdata = g_strdup_printf (INOREADER_EDIT_TAG_ADD_TAG, i_escaped, prefix, s_escaped, a_escaped, token); } else if (action->actionType == EDIT_ACTION_MARK_STARRED) { a_escaped = g_uri_escape_string (INOREADER_TAG_STARRED, NULL, TRUE) ; postdata = g_strdup_printf ( INOREADER_EDIT_TAG_ADD_TAG, i_escaped, prefix, s_escaped, a_escaped, token); } else if (action->actionType == EDIT_ACTION_MARK_UNSTARRED) { gchar* r_escaped = g_uri_escape_string(INOREADER_TAG_STARRED, NULL, TRUE); postdata = g_strdup_printf ( INOREADER_EDIT_TAG_REMOVE_TAG, i_escaped, prefix, s_escaped, r_escaped, token); } else g_assert (FALSE); g_free (s_escaped); g_free (a_escaped); g_free (i_escaped); debug1 (DEBUG_UPDATE, "inoreader_source: postdata [%s]", postdata); request->postdata = postdata; } static void inoreader_source_edit_token_cb (const struct updateResult * const result, gpointer userdata, updateFlags flags) { nodePtr node; InoreaderSourcePtr gsource; const gchar* token; InoreaderSourceActionPtr 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; } gsource = (InoreaderSourcePtr) node->data; token = result->data; if (!gsource || g_queue_is_empty (gsource->actionQueue)) return; action = g_queue_peek_head (gsource->actionQueue); request = update_request_new (); request->updateState = update_state_copy (gsource->root->subscription->updateState); request->options = update_options_copy (gsource->root->subscription->updateOptions) ; update_request_set_auth_value (request, gsource->authHeaderValue); 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) inoreader_source_api_edit_tag (action, request, token); else if (action->actionType == EDIT_ACTION_ADD_SUBSCRIPTION ) inoreader_source_api_add_subscription (action, request, token); else if (action->actionType == EDIT_ACTION_REMOVE_SUBSCRIPTION ) inoreader_source_api_remove_subscription (action, request, token) ; update_execute_request (gsource, request, inoreader_source_edit_action_complete, inoreader_source_action_context_new(gsource, action), 0); action = g_queue_pop_head (gsource->actionQueue); } void inoreader_source_edit_process (InoreaderSourcePtr gsource) { updateRequestPtr request; g_assert (gsource); if (g_queue_is_empty (gsource->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 * inoreader_source_edit_token_cb */ request = update_request_new (); request->updateState = update_state_copy (gsource->root->subscription->updateState); request->options = update_options_copy (gsource->root->subscription->updateOptions); request->source = g_strdup (INOREADER_TOKEN_URL); update_request_set_auth_value(request, gsource->authHeaderValue); update_execute_request (gsource, request, inoreader_source_edit_token_cb, g_strdup(gsource->root->id), 0); } static void inoreader_source_edit_push_ (InoreaderSourcePtr gsource, InoreaderSourceActionPtr action, gboolean head) { g_assert (gsource->actionQueue); if (head) g_queue_push_head (gsource->actionQueue, action); else g_queue_push_tail (gsource->actionQueue, action); } static void inoreader_source_edit_push (InoreaderSourcePtr gsource, InoreaderSourceActionPtr action, gboolean head) { g_assert (gsource); nodePtr root = gsource->root; inoreader_source_edit_push_ (gsource, action, head); /** @todo any flags I should specify? */ if (gsource->loginState == INOREADER_SOURCE_STATE_NONE) subscription_update(root->subscription, INOREADER_SOURCE_UPDATE_ONLY_LOGIN); else if ( gsource->loginState == INOREADER_SOURCE_STATE_ACTIVE) inoreader_source_edit_process (gsource); } static void update_read_state_callback (InoreaderSourcePtr gsource, InoreaderSourceActionPtr action, gboolean success) { if (success) { // FIXME: call item_read_state_changed (item, newState); } else { debug0 (DEBUG_UPDATE, "Failed to change item state!\n"); } } void inoreader_source_edit_mark_read (InoreaderSourcePtr gsource, const gchar *guid, const gchar *feedUrl, gboolean newStatus) { InoreaderSourceActionPtr action = inoreader_source_action_new (); action->guid = g_strdup (guid); action->feedUrl = g_strdup (feedUrl); action->actionType = newStatus ? EDIT_ACTION_MARK_READ : EDIT_ACTION_MARK_UNREAD; action->callback = update_read_state_callback; inoreader_source_edit_push (gsource, 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 = inoreader_source_action_new (); action->guid = g_strdup (guid); action->feedUrl = g_strdup (feedUrl); action->actionType = EDIT_ACTION_TRACKING_MARK_UNREAD; inoreader_source_edit_push (gsource, action, FALSE); } } static void update_starred_state_callback(InoreaderSourcePtr gsource, InoreaderSourceActionPtr action, gboolean success) { if (success) { // FIXME: call item_flag_changed (item, newState); } else { debug0 (DEBUG_UPDATE, "Failed to change item state!\n"); } } void inoreader_source_edit_mark_starred (InoreaderSourcePtr gsource, const gchar *guid, const gchar *feedUrl, gboolean newStatus) { InoreaderSourceActionPtr action = inoreader_source_action_new (); action->guid = g_strdup (guid); action->feedUrl = g_strdup (feedUrl); action->actionType = newStatus ? EDIT_ACTION_MARK_STARRED : EDIT_ACTION_MARK_UNSTARRED; action->callback = update_starred_state_callback; inoreader_source_edit_push (gsource, action, FALSE); } static void update_subscription_list_callback(InoreaderSourcePtr gsource, InoreaderSourceActionPtr action, gboolean success) { if (success) { /* * It is possible that Google changed the name of the URL that * was sent to it. In that case, I 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 = gsource->root->children ; for(; cur; cur = g_slist_next (cur)) { nodePtr node = (nodePtr) cur->data ; if (g_str_equal (node->subscription->source, action->feedUrl)) { subscription_set_source (node->subscription, ""); feedlist_node_added (node); } } debug0 (DEBUG_UPDATE, "Subscription list was updated successful\n"); subscription_update (gsource->root->subscription, INOREADER_SOURCE_UPDATE_ONLY_LIST); } else debug0 (DEBUG_UPDATE, "Failed to update subscriptions\n"); } void inoreader_source_edit_add_subscription (InoreaderSourcePtr gsource, const gchar* feedUrl) { InoreaderSourceActionPtr action = inoreader_source_action_new () ; action->actionType = EDIT_ACTION_ADD_SUBSCRIPTION; action->feedUrl = g_strdup (feedUrl); action->callback = update_subscription_list_callback; inoreader_source_edit_push (gsource, action, TRUE); } static void inoreader_source_edit_remove_callback (InoreaderSourcePtr gsource, InoreaderSourceActionPtr 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 = gsource->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 inoreader_source_edit_remove_subscription (InoreaderSourcePtr gsource, const gchar* feedUrl) { InoreaderSourceActionPtr action = inoreader_source_action_new (); action->actionType = EDIT_ACTION_REMOVE_SUBSCRIPTION; action->feedUrl = g_strdup (feedUrl); action->callback = inoreader_source_edit_remove_callback; inoreader_source_edit_push (gsource, action, TRUE); } gboolean inoreader_source_edit_is_in_queue (InoreaderSourcePtr gsource, const gchar* guid) { /* this is inefficient, but works for the time being */ GList *cur = gsource->actionQueue->head; for(; cur; cur = g_list_next (cur)) { InoreaderSourceActionPtr action = cur->data; if (action->guid && g_str_equal (action->guid, guid)) return TRUE; } return FALSE; } liferea-1.10.17/src/fl_sources/inoreader_source_edit.h000066400000000000000000000054751261475620100227500ustar00rootroot00000000000000/** * @file inoreader_source_edit.c Google reader feed list source syncing support * * 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 _INOREADER_SOURCE_EDIT_H #define _INOREADER_SOURCE_EDIT_H #include "inoreader_source.h" #include /** * Process the waiting edits on the edit queue. Call this if the state of * the InoreaderSource has changed. * * @param gsource The InoreaderSource whose editQueue should be processed. */ void inoreader_source_edit_process (InoreaderSourcePtr gsource); /** Edit wrappers */ /** * Mark the given item as read. * * @param gsource The InoreaderSource 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 inoreader_source_edit_mark_read (InoreaderSourcePtr gsource, const gchar* guid, const gchar* feedUrl, gboolean newStatus); /** * Mark the given item as starred. * * @param gsource The InoreaderSource 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 inoreader_source_edit_mark_starred (InoreaderSourcePtr gsource, const gchar *guid, const gchar *feedUrl, gboolean newStatus); /** * Add a subscription to the google source. * * @param gsource The InoreaderSource structure * @param feedUrl the feed to add */ void inoreader_source_edit_add_subscription (InoreaderSourcePtr gsource, const gchar* feedUrl); /** * Remove a subscription from the google source. * * @param gsource The InoreaderSource structure * @param feedUrl the feed to remove */ void inoreader_source_edit_remove_subscription (InoreaderSourcePtr gsource, const gchar* feedUrl); /** * See if an item with give guid is being modified * in the queue. * * @param InoreaderSource the InoreaderSource structure * @param guid the guid of the item */ gboolean inoreader_source_edit_is_in_queue (InoreaderSourcePtr gsource, const gchar* guid); #endif liferea-1.10.17/src/fl_sources/inoreader_source_feed.c000066400000000000000000000230351261475620100227110ustar00rootroot00000000000000/** * @file inoreader_source_feed.c InoReader feed subscription routines * * Copyright (C) 2008 Arnold Noronha * 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 #include #include #include #include "common.h" #include "debug.h" #include "xml.h" #include "feedlist.h" #include "inoreader_source.h" #include "subscription.h" #include "node.h" #include "inoreader_source_edit.h" #include "metadata.h" #include "db.h" #include "item_state.h" /** * This is identical to xpath_foreach_match, except that it takes the context * as parameter. */ static void inoreader_source_xpath_foreach_match (const gchar* expr, xmlXPathContextPtr xpathCtxt, xpathMatchFunc func, gpointer user_data) { xmlXPathObjectPtr xpathObj = NULL; xpathObj = xmlXPathEval ((xmlChar*)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); xpathObj->nodesetval->nodeTab[i] = NULL ; } } if (xpathObj) xmlXPathFreeObject (xpathObj); } void inoreader_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 inoreader_source_xml_unlink_node (xmlNodePtr node, gpointer data) { xmlUnlinkNode (node); xmlFreeNode (node); } static void inoreader_source_set_shared_by (xmlNodePtr node, gpointer userdata) { itemPtr item = (itemPtr) userdata; xmlChar *value = xmlNodeGetContent (node); xmlChar *apos = strrchr (value, '\''); gchar *name; if (!apos) return; name = g_strndup (value, apos-value); metadata_list_set (&item->metadata, "sharedby", name); g_free (name); xmlFree (value); } static itemPtr inoreader_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_warning ("Could not find item for %s!", sourceId); itemset_free (itemset); return NULL; } static void inoreader_source_item_retrieve_status (const xmlNodePtr entry, subscriptionPtr subscription, GHashTable *cache) { InoreaderSourcePtr gsource = (InoreaderSourcePtr) node_source_root_from_node (subscription->node)->data ; xmlNodePtr xml; nodePtr node = subscription->node; xmlChar *id = NULL; gboolean read = FALSE; gboolean starred = FALSE; xml = entry->children; g_assert (xml); for (xml = entry->children; xml; xml = xml->next) { if (!id && 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; else if (g_str_equal(label, "starred")) starred = TRUE; xmlFree (label); } } if (!id) { g_warning ("Fatal: could not extract item id from InoReader Atom feed!"); return; } itemPtr item = inoreader_source_load_item_from_sourceid (node, id, cache); if (item && item->sourceId) { if (g_str_equal (item->sourceId, id) && !inoreader_source_edit_is_in_queue (gsource, id)) { if (item->readStatus != read) item_read_state_changed (item, read); if (item->flagStatus != starred) item_flag_state_changed (item, starred); } } if (item) item_unload (item) ; xmlFree (id); } static void inoreader_feed_subscription_process_update_result (subscriptionPtr subscription, const struct updateResult* const result, updateFlags flags) { debug_start_measurement (DEBUG_UPDATE); if (result->data) { updateResultPtr resultCopy; /* FIXME: The following is a very dirty hack to edit the feed's XML before processing it */ resultCopy = update_result_new () ; resultCopy->source = g_strdup (result->source); resultCopy->httpstatus = result->httpstatus; resultCopy->contentType = g_strdup (result->contentType); g_free (resultCopy->updateState); resultCopy->updateState = update_state_copy (result->updateState); /* update the XML by removing 'read', 'reading-list' etc. as labels. */ xmlDocPtr doc = xml_parse (result->data, result->size, NULL); xmlXPathContextPtr xpathCtxt = xmlXPathNewContext (doc) ; xmlXPathRegisterNs (xpathCtxt, "atom", "http://www.w3.org/2005/Atom"); inoreader_source_xpath_foreach_match ("/atom:feed/atom:entry/atom:category[@scheme='http://www.inoreader.com/reader/']", xpathCtxt, inoreader_source_xml_unlink_node, NULL); /* delete the via link for broadcast subscription */ if (g_str_equal (subscription->source, INOREADER_BROADCAST_FRIENDS_URL)) inoreader_source_xpath_foreach_match ("/atom:feed/atom:entry/atom:link[@rel='via']/@href", xpathCtxt, inoreader_source_xml_unlink_node, NULL); xmlXPathFreeContext (xpathCtxt); /* good now we have removed the read and unread labels. */ xmlChar *newXml; int newXmlSize ; xmlDocDumpMemory (doc, &newXml, &newXmlSize); resultCopy->data = g_strndup ((gchar*) newXml, newXmlSize); resultCopy->size = newXmlSize; xmlFree (newXml); xmlFreeDoc (doc); feed_get_subscription_type ()->process_update_result (subscription, resultCopy, flags); update_result_free (resultCopy); } else { feed_get_subscription_type ()->process_update_result (subscription, result, flags); return ; } /* FIXME: The following workaround ensure that the code below, that uses UI callbacks item_*_state_changed(), does not reset the newCount of the feed list (see SF #2666478) by getting the newCount first and setting it again later. */ guint newCount = feedlist_get_new_item_count (); 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 */ } inoreader_source_item_retrieve_status (entry, subscription, cache); entry = entry->next; } g_hash_table_unref (cache); xmlFreeDoc (doc); } else { debug0 (DEBUG_UPDATE, "google_feed_subscription_process_update_result(): Couldn't parse XML!"); g_warning ("google_feed_subscription_process_update_result(): Couldn't parse XML!"); } // FIXME: part 2 of the newCount workaround feedlist_update_new_item_count (newCount); debug_end_measurement (DEBUG_UPDATE, "time taken to update statuses"); } static gboolean inoreader_feed_subscription_prepare_update_request (subscriptionPtr subscription, struct updateRequest *request) { debug0 (DEBUG_UPDATE, "preparing InoReader feed subscription for update\n"); InoreaderSourcePtr gsource = (InoreaderSourcePtr) node_source_root_from_node (subscription->node)->data; g_assert(gsource); if (gsource->loginState == INOREADER_SOURCE_STATE_NONE) { subscription_update (node_source_root_from_node (subscription->node)->subscription, 0) ; return FALSE; } debug0 (DEBUG_UPDATE, "Setting cookies for a InoReader subscription"); if (!g_str_equal (request->source, INOREADER_BROADCAST_FRIENDS_URL)) { gchar* source_escaped = g_uri_escape_string(request->source, NULL, TRUE); gchar* newUrl = g_strdup_printf ("http://www.inoreader.com/reader/atom/feed/%s", source_escaped); update_request_set_source (request, newUrl); g_free (newUrl); g_free (source_escaped); } update_request_set_auth_value (request, gsource->authHeaderValue); return TRUE; } struct subscriptionType inoreaderSourceFeedSubscriptionType = { inoreader_feed_subscription_prepare_update_request, inoreader_feed_subscription_process_update_result }; liferea-1.10.17/src/fl_sources/inoreader_source_feed_list.c000066400000000000000000000316231261475620100237460ustar00rootroot00000000000000/** * @file inoreader_source_feed_list.c Inoreader 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 "inoreader_source_feed_list.h" #include #include #include "common.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/inoreader_source.h" #include "fl_sources/inoreader_source_edit.h" /** * Find a node by the source id. */ nodePtr inoreader_source_opml_get_node_by_source (InoreaderSourcePtr gsource, const gchar *source) { return inoreader_source_opml_get_subnode_by_node (gsource->root, source); } /** * Recursively find a node by the source id. */ nodePtr inoreader_source_opml_get_subnode_by_node (nodePtr node, const gchar *source) { nodePtr subnode; nodePtr subsubnode; GSList *iter = node->children; for (; iter; iter = g_slist_next (iter)) { subnode = (nodePtr)iter->data; if (subnode->subscription && g_str_equal (subnode->subscription->source, source)) return subnode; else if (subnode->type->capabilities & NODE_CAPABILITY_SUBFOLDERS) { subsubnode = inoreader_source_opml_get_subnode_by_node(subnode, source); if (subnode != NULL) return subsubnode; } } return NULL; } /* subscription list merging functions */ static void inoreader_source_check_for_removal (nodePtr node, gpointer user_data) { gchar *expr = NULL; if (node->subscription && g_str_equal (node->subscription->source, INOREADER_BROADCAST_FRIENDS_URL)) return ; if (IS_FEED (node)) { expr = g_strdup_printf ("/object/list[@name='subscriptions']/object/string[@name='id'][. = 'feed/%s']", node->subscription->source); } else if (IS_FOLDER (node)) { node_foreach_child_data (node, inoreader_source_check_for_removal, user_data); expr = g_strdup_printf ("/object/list[@name='subscriptions']/object/list[@name='categories']/object[string='%s']", node->title); } else { g_warning ("google_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); } /* * Find a node by the name under root or create it. */ static nodePtr inoreader_source_find_or_create_folder (const gchar *name, nodePtr root) { nodePtr folder = NULL; GSList *iter_parent; /* find a node by the name under root */ iter_parent = root->children; while (iter_parent) { if (g_str_equal (name, node_get_title (iter_parent->data))) { folder = (nodePtr)iter_parent->data; break; } iter_parent = g_slist_next (iter_parent); } /* if not found, create new folder */ if (!folder) { folder = node_new (folder_get_node_type ()); node_set_title (folder, name); node_set_parent (folder, root, -1); feedlist_node_imported (folder); subscription_update (folder->subscription, FEED_REQ_RESET_TITLE | FEED_REQ_PRIORITY_HIGH); } return folder; } /* * Check if folder of a node changed in Google Reader and move * node to the folder with the same name. */ static void inoreader_source_update_folder (xmlNodePtr match, InoreaderSourcePtr gsource, nodePtr node) { xmlNodePtr xml; xmlChar *label; const gchar *ptitle; nodePtr parent; /* check if label of a feed changed */ parent = node->parent; ptitle = node_get_title (parent); xml = xpath_find (match, "./list[@name='categories']/object/string[@name='label']"); if (xml) { label = xmlNodeListGetString (xml->doc, xml->xmlChildrenNode, 1); if (parent == gsource->root || ! g_str_equal (label, ptitle)) { debug2 (DEBUG_UPDATE, "GSource feed label changed for %s to '%s'", node->id, label); parent = inoreader_source_find_or_create_folder ((gchar*)label, gsource->root); node_reparent (node, parent); } xmlFree (label); } else { /* if feed has no label and parent is not gsource root, reparent to gsource root */ if (parent != gsource->root) node_reparent (node, gsource->root); } } static void inoreader_source_merge_feed (InoreaderSourcePtr source, const gchar *url, const gchar *title, const gchar *id) { nodePtr node; GSList *iter; /* check if node to be merged already exists */ iter = source->root->children; while (iter) { node = (nodePtr)iter->data; if (g_str_equal (node->subscription->source, url)) return; iter = g_slist_next (iter); } 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 = &inoreaderSourceFeedSubscriptionType; /* Save Inoreader feed id which we need to fetch items... */ node->subscription->metadata = metadata_list_append (node->subscription->metadata, "inoreader-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); } /* OPML subscription type implementation */ static void google_subscription_opml_cb (subscriptionPtr subscription, const struct updateResult * const result, updateFlags flags) { InoreaderSourcePtr source = (InoreaderSourcePtr) 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; GSList *siter; /* 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 *node = (JsonNode *)iter->data; /* ignore everything without a feed url */ if (json_get_string (node, "id")) { inoreader_source_merge_feed (source, json_get_string (node, "id") + 5, // FIXME: Unescape string! json_get_string (node, "title"), json_get_string (node, "id")); } iter = g_list_next (iter); } g_list_free (elements); /* Remove old nodes we cannot find anymore */ siter = source->root->children; while (siter) { nodePtr node = (nodePtr)siter->data; gboolean found = FALSE; 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); siter = g_slist_next (siter); } opml_source_export (subscription->node); /* save new feeds to feed list */ subscription->node->available = TRUE; //return; } else { g_warning ("Invalid JSON returned on Inoreader feed list request! >>>%s<<<", result->data); } g_object_unref (parser); } else { subscription->node->available = FALSE; debug0 (DEBUG_UPDATE, "inoreader_subscription_cb(): ERROR: failed to get subscription list!"); } if (!(flags & INOREADER_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 inoreader_source_opml_quick_update_helper (xmlNodePtr match, gpointer userdata) { InoreaderSourcePtr gsource = (InoreaderSourcePtr) 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 = inoreader_source_opml_get_node_by_source (gsource, id + strlen ("feed/")); else if (g_str_has_suffix (id, "broadcast-friends")) node = inoreader_source_opml_get_node_by_source (gsource, id); 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, "InoreaderSource: 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 inoreader_source_opml_quick_update_cb (const struct updateResult* const result, gpointer userdata, updateFlags flags) { InoreaderSourcePtr gsource = (InoreaderSourcePtr) userdata; xmlDocPtr doc; if (!result->data) { /* what do I do? */ debug0 (DEBUG_UPDATE, "InoreaderSource: Unable to get unread counts, this update is aborted."); return; } doc = xml_parse (result->data, result->size, NULL); if (!doc) { debug0 (DEBUG_UPDATE, "InoreaderSource: The XML failed to parse, maybe the session has expired. (FIXME)"); return; } xpath_foreach_match (xmlDocGetRootElement (doc), "/object/list[@name='unreadcounts']/object", inoreader_source_opml_quick_update_helper, gsource); xmlFreeDoc (doc); } gboolean inoreader_source_opml_quick_update(InoreaderSourcePtr gsource) { updateRequestPtr request = update_request_new (); request->updateState = update_state_copy (gsource->root->subscription->updateState); request->options = update_options_copy (gsource->root->subscription->updateOptions); update_request_set_source (request, INOREADER_UNREAD_COUNTS_URL); update_request_set_auth_value(request, gsource->authHeaderValue); update_execute_request (gsource, request, inoreader_source_opml_quick_update_cb, gsource, 0); return TRUE; } static void inoreader_source_opml_subscription_process_update_result (subscriptionPtr subscription, const struct updateResult * const result, updateFlags flags) { google_subscription_opml_cb (subscription, result, flags); } static gboolean inoreader_source_opml_subscription_prepare_update_request (subscriptionPtr subscription, struct updateRequest *request) { InoreaderSourcePtr gsource = (InoreaderSourcePtr)subscription->node->data; g_assert(gsource); if (gsource->loginState == INOREADER_SOURCE_STATE_NONE) { debug0(DEBUG_UPDATE, "InoreaderSource: login"); inoreader_source_login ((InoreaderSourcePtr) subscription->node->data, 0) ; return FALSE; } debug1 (DEBUG_UPDATE, "updating Inoreader subscription (node id %s)", subscription->node->id); update_request_set_source (request, INOREADER_SUBSCRIPTION_LIST_URL); update_request_set_auth_value (request, gsource->authHeaderValue); return TRUE; } /* OPML subscription type definition */ struct subscriptionType inoreaderSourceOpmlSubscriptionType = { inoreader_source_opml_subscription_prepare_update_request, inoreader_source_opml_subscription_process_update_result }; liferea-1.10.17/src/fl_sources/inoreader_source_feed_list.h000066400000000000000000000027711261475620100237550ustar00rootroot00000000000000/** * 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 "fl_sources/inoreader_source.h" /** * Find a node by the source id. * * @param gsource the Google Reader source * @param source the feed id to find * * @returns a node (or NULL) */ nodePtr inoreader_source_opml_get_node_by_source(InoreaderSourcePtr gsource, const gchar *source); /** * Recursively find a node by the source id. * * @param gsource the Google Reader source * @param source the feed id to find * * @returns a node (or NULL) */ nodePtr inoreader_source_opml_get_subnode_by_node(nodePtr node, const gchar *source); /** * Perform a quick update of the Google Reader source. * * @param gsource the Google Reader source */ gboolean inoreader_source_opml_quick_update (InoreaderSourcePtr gsource); liferea-1.10.17/src/fl_sources/json_api_mapper.c000066400000000000000000000102221261475620100215360ustar00rootroot00000000000000/** * @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 (!node || !mapping) return NULL; node = json_api_get_node (parent, mapping); 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 (!node || !mapping) return 0; node = json_api_get_node (parent, mapping); 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 (!node || !mapping) return FALSE; node = json_api_get_node (parent, mapping); 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.10.17/src/fl_sources/json_api_mapper.h000066400000000000000000000044171261475620100215540ustar00rootroot00000000000000/** * @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.10.17/src/fl_sources/node_source.c000066400000000000000000000343701261475620100207070ustar00rootroot00000000000000/** * @file node_source.c generic node source provider implementation * * Copyright (C) 2005-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 "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 "ui/icons.h" #include "ui/liferea_dialog.h" #include "ui/ui_common.h" #include "ui/feed_list_node.h" #include "fl_sources/aol_source.h" #include "fl_sources/default_source.h" #include "fl_sources/dummy_source.h" #include "fl_sources/google_source.h" #include "fl_sources/inoreader_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" static GSList *nodeSourceTypes = 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_warning ("Could not find source type \"%s\"\n!", typeStr); return NULL; } static gboolean node_source_type_register (nodeSourceTypePtr type) { /* allow the plugin to initialize */ type->source_type_init (); 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 (aol_source_get_type ()); 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 (inoreader_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 ()); 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_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); node_set_subscription (node, subscription_import (xml, trusted)); type->source_import (node); // FIXME: pass trusted flag? if (!strcmp (typeStr, "fl_bloglines")) { g_warning ("Removing obsolete Bloglines subscription."); feedlist_node_removed (node); } } else { g_warning ("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) { g_assert (NULL == node->source); node->source = g_new0 (struct nodeSource, 1); node->source->root = node; node->source->type = type; } /* 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.ui", "node_source_type_dialog"); 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, // FIXME: this leaks memory! 0, g_strdup_printf("%s\n%s", type->name, _(type->description)), 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) { NODE_SOURCE_TYPE (node)->source_update (node); } void node_source_auto_update (nodePtr node) { NODE_SOURCE_TYPE (node)->source_auto_update (node); } nodePtr node_source_add_subscription (nodePtr node, subscriptionPtr subscription) { if (NODE_SOURCE_TYPE (node)->add_subscription) return NODE_SOURCE_TYPE (node)->add_subscription (node, subscription); else g_warning ("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_TYPE (node)->add_folder) return NODE_SOURCE_TYPE (node)->add_folder (node, title); else g_warning ("node_source_add_folder(): called on node source type that doesn't implement me!"); return NULL; } void node_source_remove_node (nodePtr node, nodePtr child) { 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_warning ("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) { 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); 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.10.17/src/fl_sources/node_source.h000066400000000000000000000241231261475620100207070ustar00rootroot00000000000000/** * @file node_source.h generic node source interface * * Copyright (C) 2005-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 _NODE_SOURCE_H #define _NODE_SOURCE_H #include #include #include "node.h" #include "node_type.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. */ 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 */ }; /** 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) */ const gchar *description; /**< more detailed source type description (up to some sentences) */ gulong capabilities; /**< bitmask of feed list source capabilities */ /* 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 force the source to update * its subscriptions list and the child subscriptions themselves. */ void (*source_update)(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 */ } *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" /** * Get the root node of a feed list source for any given child node. * * @param node any child node * * @returns node source root node */ nodePtr node_source_root_from_node (nodePtr node); /** * 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); /** * 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. * * @param node a newly created node * @param nodeSourceType the node source type */ void node_source_new (nodePtr node, nodeSourceTypePtr nodeSourceType); /** * Force the source to update its subscription list and * the child subscriptions themselves. * * @param node the source node */ void node_source_update (nodePtr node); /** * Request the source to update its subscription list and * the child subscriptions if necessary according to the * update interval of the source. * * @param node the source node */ void node_source_auto_update (nodePtr node); /** * Called when a new subscription has been added to the node source. * * @param node the source node * @param subscription the new subscription * * @returns a new node intialized with the new subscription */ nodePtr node_source_add_subscription (nodePtr node, struct subscription *subscription); /** * Called when an existing subscription is to be removed from a node source. * * @param node the source node * @param child the child node to remove */ void node_source_remove_node (nodePtr node, nodePtr child); /** * Called when a new folder is to be added to a node source feed list. * * @param node the source node * @param title the folder title * * @returns a new node representing the new folder */ nodePtr node_source_add_folder (nodePtr node, const gchar *title); /** * Called when the read state of an item changes. * * @param node the source node * @param item the affected item * @param newState the new item read state */ void node_source_item_mark_read (nodePtr node, itemPtr item, gboolean newState); /** * Called when the flag state of an item changes. * * @param node the source node * @param item the affected item * @param newState the new item flag state */ void node_source_item_set_flag (nodePtr node, itemPtr item, gboolean newState); /** * Converts all subscriptions to default source subscriptions. * * @param node the source node */ void node_source_convert_to_local (nodePtr node); /* implementation of the node type interface */ #define IS_NODE_SOURCE(node) (node->type == node_source_get_node_type ()) /** * Returns the node source node type implementation. */ nodeTypePtr node_source_get_node_type (void); #endif liferea-1.10.17/src/fl_sources/opml_source.c000066400000000000000000000274551261475620100207370ustar00rootroot00000000000000/** * @file opml_source.c OPML Planet/Blogroll feed list source * * 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 */ #include "fl_sources/opml_source.h" #include #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_warning ("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_warning ("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_warning ("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_warning ("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_update (nodePtr node) { subscription_update (node->subscription, 0); // FIXME: 0 ? } 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) opml_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"), .description = N_("Integrate blogrolls or Planets in your feed list. Liferea will " "automatically add and remove feeds according to the changes of " "the source OPML document"), .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_update = opml_source_update, .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) { return &nst; } /* GUI callbacks */ static void on_opml_source_selected (GtkDialog *dialog, gint response_id, gpointer user_data) { nodePtr node; subscriptionPtr subscription; const gchar *source; 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 ()); source = gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (GTK_WIDGET (dialog), "location_entry"))); subscription = subscription_new (source, NULL, NULL); subscription->type = &opmlSubscriptionType; node_set_subscription (node, subscription); feedlist_node_added (node); opml_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"), GTK_STOCK_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.ui", "opml_source_dialog"); 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.10.17/src/fl_sources/opml_source.h000066400000000000000000000033351261475620100207330ustar00rootroot00000000000000/** * @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.10.17/src/fl_sources/reedah_source.c000066400000000000000000000305771261475620100212170ustar00rootroot00000000000000/** * @file reedah_source.c Reedah source support * * Copyright (C) 2007-2014 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/node_source.h" #include "fl_sources/opml_source.h" #include "fl_sources/reedah_source_edit.h" #include "fl_sources/reedah_source_feed_list.h" /** default Google reader subscription list update interval = once a day */ #define REEDAH_SOURCE_UPDATE_INTERVAL 60*60*24 /** create a google source with given node as root */ static ReedahSourcePtr reedah_source_new (nodePtr node) { ReedahSourcePtr source = g_new0 (struct ReedahSource, 1) ; source->root = node; source->actionQueue = g_queue_new (); source->loginState = REEDAH_SOURCE_STATE_NONE; 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 gsource) { if (!gsource) return; update_job_cancel_by_owner (gsource); g_free (gsource->authHeaderValue); g_queue_free (gsource->actionQueue) ; g_hash_table_unref (gsource->lastTimestampMap); g_free (gsource); } static void reedah_source_login_cb (const struct updateResult * const result, gpointer userdata, updateFlags flags) { ReedahSourcePtr gsource = (ReedahSourcePtr) userdata; gchar *tmp = NULL; subscriptionPtr subscription = gsource->root->subscription; debug1 (DEBUG_UPDATE, "Reedah login processing... %s", result->data); g_assert (!gsource->authHeaderValue); if (result->data && result->httpstatus == 200) tmp = strstr (result->data, "Auth="); if (tmp) { gchar *ttmp = tmp; tmp = strchr (tmp, '\n'); if (tmp) *tmp = '\0'; gsource->authHeaderValue = g_strdup_printf ("GoogleLogin auth=%s", ttmp + 5); debug1 (DEBUG_UPDATE, "Reedah Auth token found: %s", gsource->authHeaderValue); gsource->loginState = REEDAH_SOURCE_STATE_ACTIVE; gsource->authFailures = 0; /* now that we are authenticated trigger updating to start data retrieval */ if (!(flags & REEDAH_SOURCE_UPDATE_ONLY_LOGIN)) subscription_update (subscription, flags); /* process any edits waiting in queue */ reedah_source_edit_process (gsource); } else { debug0 (DEBUG_UPDATE, "google reader login failed! no Auth token found in result!"); subscription->node->available = FALSE; g_free (subscription->updateError); subscription->updateError = g_strdup (_("Reedah login failed!")); gsource->authFailures++; if (gsource->authFailures < REEDAH_SOURCE_MAX_AUTH_FAILURES) gsource->loginState = REEDAH_SOURCE_STATE_NONE; else gsource->loginState = REEDAH_SOURCE_STATE_NO_AUTH; auth_dialog_new (subscription, flags); } } /** * Perform a login to Google Reader, if the login completes the * ReedahSource will have a valid Auth token and will have loginStatus to * REEDAH_SOURCE_LOGIN_ACTIVE. */ void reedah_source_login (ReedahSourcePtr gsource, guint32 flags) { gchar *username, *password; updateRequestPtr request; subscriptionPtr subscription = gsource->root->subscription; if (gsource->loginState != REEDAH_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", gsource->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); gsource->loginState = REEDAH_SOURCE_STATE_IN_PROGRESS ; update_execute_request (gsource, request, reedah_source_login_cb, gsource, flags); } /* node source type implementation */ static void reedah_source_update (nodePtr node) { ReedahSourcePtr gsource = (ReedahSourcePtr) node->data; /* Reset REEDAH_SOURCE_STATE_NO_AUTH as this is a manual user interaction and no auto-update so we can query for credentials again. */ if (gsource->loginState == REEDAH_SOURCE_STATE_NO_AUTH) gsource->loginState = REEDAH_SOURCE_STATE_NONE; subscription_update (node->subscription, 0); // FIXME: 0 ? } static void reedah_source_auto_update (nodePtr node) { GTimeVal now; ReedahSourcePtr gsource = (ReedahSourcePtr) node->data; if (gsource->loginState == REEDAH_SOURCE_STATE_NONE) { reedah_source_update (node); return; } if (gsource->loginState == REEDAH_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 + REEDAH_SOURCE_UPDATE_INTERVAL <= now.tv_sec) { subscription_update (node->subscription, 0); g_get_current_time (&gsource->lastQuickUpdate); } else if (gsource->lastQuickUpdate.tv_sec + REEDAH_SOURCE_QUICK_UPDATE_INTERVAL <= now.tv_sec) { reedah_source_opml_quick_update (gsource); reedah_source_edit_process (gsource); g_get_current_time (&gsource->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_node (nodePtr node) { GSList *iter; for (iter = node->children; iter; iter = g_slist_next(iter)) { nodePtr subnode = iter->data; if (subnode->subscription) subnode->subscription->type = &reedahSourceFeedSubscriptionType; if (subnode->type->capabilities & NODE_CAPABILITY_SUBFOLDERS) reedah_source_import_node (subnode); } } static void reedah_source_import (nodePtr node) { opml_source_import (node); node->subscription->updateInterval = -1; node->subscription->type = &reedahSourceOpmlSubscriptionType; if (!node->data) node->data = (gpointer) reedah_source_new (node); reedah_source_import_node (node); } static void reedah_source_export (nodePtr node) { opml_source_export (node); } static gchar * reedah_source_get_feedlist (nodePtr node) { return opml_source_get_feedlist (node); } static void reedah_source_remove (nodePtr node) { opml_source_remove (node); } static nodePtr reedah_source_add_subscription (nodePtr node, subscriptionPtr subscription) { debug_enter ("reedah_source_add_subscription"); nodePtr child = node_new (feed_get_node_type ()); debug0 (DEBUG_UPDATE, "ReedahSource: Adding a new subscription"); node_set_data (child, feed_new ()); node_set_subscription (child, subscription); child->subscription->type = &reedahSourceFeedSubscriptionType; node_set_title (child, _("New Subscription")); reedah_source_edit_add_subscription (node_source_root_from_node (node)->data, subscription->source); debug_exit ("reedah_source_add_subscription"); return child; } static void reedah_source_remove_node (nodePtr node, nodePtr child) { gchar *source; ReedahSourcePtr gsource = node->data; if (child == node) { feedlist_node_removed (child); return; } source = g_strdup (child->subscription->source); feedlist_node_removed (child); /* propagate the removal only if there aren't other copies */ if (!reedah_source_opml_get_node_by_source (gsource, source)) reedah_source_edit_remove_subscription (gsource, source); g_free (source); } /* GUI callbacks */ static void on_reedah_source_selected (GtkDialog *dialog, gint response_id, gpointer user_data) { nodePtr node; subscriptionPtr subscription; if (response_id == GTK_RESPONSE_OK) { subscription = subscription_new ("http://www.reedah.com/reader", NULL, NULL); node = node_new (node_source_get_node_type ()); node_set_title (node, "Reedah"); node_source_new (node, reedah_source_get_type ()); node_set_subscription (node, subscription); subscription_set_auth_info (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")))); subscription->type = &reedahSourceOpmlSubscriptionType ; node->data = reedah_source_new (node); feedlist_node_added (node); reedah_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.ui", "reedah_source_dialog"); 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) { nodePtr root = node_source_root_from_node (node); reedah_source_edit_mark_starred ((ReedahSourcePtr)root->data, 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) { nodePtr root = node_source_root_from_node (node); reedah_source_edit_mark_read ((ReedahSourcePtr)root->data, 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 reedah_source_convert_to_local (nodePtr node) { ReedahSourcePtr gsource = node->data; gsource->loginState = REEDAH_SOURCE_STATE_MIGRATE; } /* node source type definition */ static struct nodeSourceType nst = { .id = "fl_reedah", .name = N_("Reedah"), .description = N_("Integrate the feed list of your Reedah account. Liferea will " "present your Reedah subscriptions, and will synchronize your feed list and reading lists."), .capabilities = NODE_SOURCE_CAPABILITY_DYNAMIC_CREATION | NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST | NODE_SOURCE_CAPABILITY_ADD_FEED | NODE_SOURCE_CAPABILITY_ITEM_STATE_SYNC | NODE_SOURCE_CAPABILITY_CONVERT_TO_LOCAL, .source_type_init = reedah_source_init, .source_type_deinit = reedah_source_deinit, .source_new = ui_reedah_source_get_account_info, .source_delete = reedah_source_remove, .source_import = reedah_source_import, .source_export = reedah_source_export, .source_get_feedlist = reedah_source_get_feedlist, .source_update = reedah_source_update, .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.10.17/src/fl_sources/reedah_source.h000066400000000000000000000214041261475620100212110ustar00rootroot00000000000000/** * @file reedah_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 _REEDAH_SOURCE_H #define _REEDAH_SOURCE_H #include "fl_sources/node_source.h" /** * A nodeSource specific for Google Reader */ typedef struct ReedahSource { nodePtr root; /**< the root node in the feed list */ gchar *authHeaderValue; /**< the Google Authorization token */ GQueue *actionQueue; gint loginState; /**< The current login state */ gint authFailures; /**< Number of authentication failures */ /** * 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; } *ReedahSourcePtr; enum { REEDAH_SOURCE_STATE_NONE = 0, /**< no authentication tried so far */ REEDAH_SOURCE_STATE_IN_PROGRESS, /**< authentication in progress */ REEDAH_SOURCE_STATE_ACTIVE, /**< authentication succeeded */ REEDAH_SOURCE_STATE_NO_AUTH, /**< authentication has failed */ REEDAH_SOURCE_STATE_MIGRATE, /**< source will be migrated, do not do anything anymore! */ }; enum { /** * Update only the subscription list, and not each node underneath it. * Note: Uses higher 16 bits to avoid conflict. */ REEDAH_SOURCE_UPDATE_ONLY_LIST = (1<<16), /** * Only login, do not do any updates. */ REEDAH_SOURCE_UPDATE_ONLY_LOGIN = (1<<17) }; /** * Number of auth failures after which we stop bothering the user while * auto-updating until he manually updates again. */ #define REEDAH_SOURCE_MAX_AUTH_FAILURES 3 /** * Google Source API URL's * In each of the following, the _URL indicates the URL to use, and _POST * indicates the corresponging postdata to send. * @see http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI * However as of now, the GoogleReaderAPI documentation seems outdated, some of * mark read/unread API does not work as mentioned in the documentation. */ /** * Google Reader 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 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" /** * Acts like a feed, indicating all the posts shared by the Google Reader * friends. Does not take any params, but the Authorization header needs to be set. */ #define REEDAH_READER_BROADCAST_FRIENDS_URL "http://www.reedah.com/reader/atom/user/-/state/com.google/broadcast-friends" /** * Get a list of subscriptions. */ #define REEDAH_READER_SUBSCRIPTION_LIST_URL "http://www.reedah.com/reader/api/0/subscription/list" /** * Get a token for an edit operation. (@todo A token can actually be used * for multiple transactions.) */ #define REEDAH_READER_TOKEN_URL "http://www.reedah.com/reader/api/0/token" /** * Add a subscription * @param URL The feed URL, or the page URL for feed autodiscovery. * @param T a token obtained using REEDAH_READER_TOKEN_URL */ #define REEDAH_READER_ADD_SUBSCRIPTION_URL "http://www.reedah.com/reader/api/0/subscription/edit?client=liferea" #define REEDAH_READER_ADD_SUBSCRIPTION_POST "s=feed%%2F%s&i=null&ac=subscribe&T=%s" /** * Unsubscribe from a subscription. * @param url The feed URL * @param T a token obtained using REEDAH_READER_TOKEN_URL */ #define REEDAH_READER_REMOVE_SUBSCRIPTION_URL "http://www.reedah.com/reader/api/0/subscription/edit?client=liferea" #define REEDAH_READER_REMOVE_SUBSCRIPTION_POST "s=feed%%2F%s&i=null&ac=unsubscribe&T=%s" /** * A list of subscriptions with the unread counters, and the last updated * timestamps. */ #define REEDAH_READER_UNREAD_COUNTS_URL "http://www.reedah.com/reader/api/0/unread-count?all=true&client=liferea" /** * Edit the tags associated with an item. The parameters to this _have_ to be * sent as post data. */ #define REEDAH_READER_EDIT_TAG_URL "http://www.reedah.com/reader/api/0/edit-tag?client=liferea" /** * Postdata for adding a tag when using REEDAH_READER_EDIT_TAG_URL. * @param i The guid of the item. * @param prefix The prefix to 's'. For normal feeds this will be "feed", for * links etc, this should be "user". * @param s The URL of the subscription containing the item. (Note that the * following string adds the "feed/" prefix to this.) * @param a The tag to add. * @param T a token obtained using REEDAH_READER_TOKEN_URL */ #define REEDAH_READER_EDIT_TAG_ADD_TAG "i=%s&s=%s%%2F%s&a=%s&ac=edit-tags&T=%s&async=true" /** * Postdata for removing a tag, when using REEDAH_READER_EDIT_TAG_URL. Do * not use for removing the "read" tag, see REEDAH_READER_EDIT_TAG_AR_TAG * for that. * * @param i The guid of the item. * @param prefix The prefix to 's'. @see REEDAH_READER_EDIT_TAG_ADD_TAG * @param s The URL of the subscription containing the item. (Note that the * final value of s is feed + "/" + this string) * @param r The tag to remove * @param T a token obtained using REEDAH_READER_TOKEN_URL */ #define REEDAH_READER_EDIT_TAG_REMOVE_TAG "i=%s&s=%s%%2F%s&r=%s&ac=edit-tags&T=%s&async=true" /** * Postdata for adding a tag, and removing another tag at the same time, * when using REEDAH_READER_EDIT_TAG_URL. * @param i The guid of the item. * @param prefix The prefix to 's'. @see REEDAH_READER_EDIT_TAG_ADD_TAG * @param s The URL of the subscription containing the item. (Note that the * final value of s is feed + "/" + this string) * @param a The tag to add. * @param r The tag to remove * @param T a token obtained using REEDAH_READER_TOKEN_URL */ #define REEDAH_READER_EDIT_TAG_AR_TAG "i=%s&s=%s%%2F%s&a=%s&r=%s&ac=edit-tags&T=%s&async=true" /** * Postdata for adding a tag, and removing another tag at the same time, for a * _link_ item, when using REEDAH_READER_EDIT_TAG_URL * @param i The guid of the link (as provided by google) * @param a The tag to add * @param r The tag to remove * @param T a token obtained using REEDAH_READER_TOKEN_URL */ #define REEDAH_READER_EDIT_TAG_ADD_TAG_FOR_LINK "i=%s&s=user%2F-%2Fsource%2Fcom.google%2Flink&a=%s&r=%s&ac=edit-tags&T=%s&async=true" /** A set of tags (states) defined by Google reader */ #define REEDAH_READER_TAG_KEPT_UNREAD "user/-/state/com.google/kept-unread" #define REEDAH_READER_TAG_READ "user/-/state/com.google/read" #define REEDAH_READER_TAG_TRACKING_KEPT_UNREAD "user/-/state/com.google/tracking-kept-unread" #define REEDAH_READER_TAG_STARRED "user/-/state/com.google/starred" /** Interval (in seconds) for doing a Quick Update: 10min */ #define REEDAH_SOURCE_QUICK_UPDATE_INTERVAL 600 /** * @returns Google Reader source type implementation info. */ nodeSourceTypePtr reedah_source_get_type (void); extern struct subscriptionType reedahSourceFeedSubscriptionType; extern struct subscriptionType reedahSourceOpmlSubscriptionType; /** * 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.10.17/src/fl_sources/reedah_source_edit.c000066400000000000000000000400361261475620100222130ustar00rootroot00000000000000/** * @file reedah_source_edit.c Google reader feed list source syncing support * * 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 */ #include #include #include #include "debug.h" #include "update.h" #include "subscription.h" #include "common.h" #include "feedlist.h" #include "reedah_source.h" #include "reedah_source_edit.h" #include "config.h" #include #include #include #include "xml.h" /** * A structure to indicate an edit to the Google Reader "database". * These edits are put in a queue and processed in sequential order * so that google does not end up processing the requests in an * unintended order. */ typedef struct ReedahSourceAction { /** * 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; /** * A callback function on completion of the edit. */ void (*callback) (ReedahSourcePtr gsource, struct ReedahSourceAction* edit, gboolean success); /** * The type of this ReedahSourceAction. */ int actionType ; } *ReedahSourceActionPtr ; 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 } ; typedef struct ReedahSourceAction* editPtr ; typedef struct ReedahSourceActionCtxt { gchar *nodeId ; ReedahSourceActionPtr action; } *ReedahSourceActionCtxtPtr; static void reedah_source_edit_push (ReedahSourcePtr gsource, ReedahSourceActionPtr action, gboolean head); static ReedahSourceActionPtr reedah_source_action_new (void) { ReedahSourceActionPtr action = g_slice_new0 (struct ReedahSourceAction); return action; } static void reedah_source_action_free (ReedahSourceActionPtr action) { g_free (action->guid); g_free (action->feedUrl); g_slice_free (struct ReedahSourceAction, action); } static ReedahSourceActionCtxtPtr reedah_source_action_context_new(ReedahSourcePtr gsource, ReedahSourceActionPtr action) { ReedahSourceActionCtxtPtr ctxt = g_slice_new0(struct ReedahSourceActionCtxt); ctxt->nodeId = g_strdup(gsource->root->id); ctxt->action = action; return ctxt; } static void reedah_source_action_context_free(ReedahSourceActionCtxtPtr ctxt) { g_free(ctxt->nodeId); g_slice_free(struct ReedahSourceActionCtxt, ctxt); } static void reedah_source_edit_action_complete (const struct updateResult* const result, gpointer userdata, updateFlags flags) { ReedahSourceActionCtxtPtr editCtxt = (ReedahSourceActionCtxtPtr) userdata; nodePtr node = node_from_id (editCtxt->nodeId); ReedahSourcePtr gsource; ReedahSourceActionPtr action = editCtxt->action ; reedah_source_action_context_free (editCtxt); if (!node) { reedah_source_action_free (action); return; /* probably got deleted before this callback */ } gsource = (ReedahSourcePtr) node->data; if (result->data == NULL || !g_str_equal (result->data, "OK")) { if (action->callback) (*action->callback) (gsource, action, FALSE); debug1 (DEBUG_UPDATE, "The edit action failed with result: %s\n", result->data); reedah_source_action_free (action); return; /** @todo start a timer for next processing */ } if (action->callback) action->callback (gsource, action, TRUE); reedah_source_action_free (action); /* process anything else waiting on the edit queue */ reedah_source_edit_process (gsource); } /* the following reedah_source_api_* functions are simply funtions that convert a ReedahSourceActionPtr to a updateRequestPtr */ static void reedah_source_api_add_subscription (ReedahSourceActionPtr action, updateRequestPtr request, const gchar* token) { update_request_set_source (request, REEDAH_READER_ADD_SUBSCRIPTION_URL); gchar* s_escaped = g_uri_escape_string (action->feedUrl, NULL, TRUE) ; gchar* postdata = g_strdup_printf (REEDAH_READER_ADD_SUBSCRIPTION_POST, s_escaped, token); g_free (s_escaped); debug1 (DEBUG_UPDATE, "reedah_source: postdata [%s]", postdata); request->postdata = postdata ; } static void reedah_source_api_remove_subscription (ReedahSourceActionPtr action, updateRequestPtr request, const gchar* token) { update_request_set_source (request, REEDAH_READER_REMOVE_SUBSCRIPTION_URL); gchar* s_escaped = g_uri_escape_string (action->feedUrl, NULL, TRUE); g_assert (!request->postdata); request->postdata = g_strdup_printf (REEDAH_READER_REMOVE_SUBSCRIPTION_POST, s_escaped, token); g_free (s_escaped); } static void reedah_source_api_edit_tag (ReedahSourceActionPtr action, updateRequestPtr request, const gchar*token) { update_request_set_source (request, REEDAH_READER_EDIT_TAG_URL); 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 ReedahSourceAction 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 (REEDAH_READER_TAG_KEPT_UNREAD, NULL, TRUE); gchar *r_escaped = g_uri_escape_string (REEDAH_READER_TAG_READ, NULL, TRUE); postdata = g_strdup_printf (REEDAH_READER_EDIT_TAG_AR_TAG, 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 (REEDAH_READER_TAG_READ, NULL, TRUE); postdata = g_strdup_printf (REEDAH_READER_EDIT_TAG_ADD_TAG, i_escaped, prefix, s_escaped, a_escaped, token); } else if (action->actionType == EDIT_ACTION_TRACKING_MARK_UNREAD) { a_escaped = g_uri_escape_string (REEDAH_READER_TAG_TRACKING_KEPT_UNREAD, NULL, TRUE); postdata = g_strdup_printf (REEDAH_READER_EDIT_TAG_ADD_TAG, i_escaped, prefix, s_escaped, a_escaped, token); } else if (action->actionType == EDIT_ACTION_MARK_STARRED) { a_escaped = g_uri_escape_string (REEDAH_READER_TAG_STARRED, NULL, TRUE) ; postdata = g_strdup_printf ( REEDAH_READER_EDIT_TAG_ADD_TAG, i_escaped, prefix, s_escaped, a_escaped, token); } else if (action->actionType == EDIT_ACTION_MARK_UNSTARRED) { gchar* r_escaped = g_uri_escape_string(REEDAH_READER_TAG_STARRED, NULL, TRUE); postdata = g_strdup_printf ( REEDAH_READER_EDIT_TAG_REMOVE_TAG, i_escaped, prefix, s_escaped, r_escaped, token); } else g_assert (FALSE); g_free (s_escaped); g_free (a_escaped); g_free (i_escaped); debug1 (DEBUG_UPDATE, "reedah_source: postdata [%s]", postdata); request->postdata = postdata; } static void reedah_source_edit_token_cb (const struct updateResult * const result, gpointer userdata, updateFlags flags) { nodePtr node; ReedahSourcePtr gsource; const gchar* token; ReedahSourceActionPtr 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; } gsource = (ReedahSourcePtr) node->data; token = result->data; if (!gsource || g_queue_is_empty (gsource->actionQueue)) return; action = g_queue_peek_head (gsource->actionQueue); request = update_request_new (); request->updateState = update_state_copy (gsource->root->subscription->updateState); request->options = update_options_copy (gsource->root->subscription->updateOptions) ; update_request_set_auth_value (request, gsource->authHeaderValue); 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) reedah_source_api_edit_tag (action, request, token); else if (action->actionType == EDIT_ACTION_ADD_SUBSCRIPTION ) reedah_source_api_add_subscription (action, request, token); else if (action->actionType == EDIT_ACTION_REMOVE_SUBSCRIPTION ) reedah_source_api_remove_subscription (action, request, token) ; update_execute_request (gsource, request, reedah_source_edit_action_complete, reedah_source_action_context_new(gsource, action), 0); action = g_queue_pop_head (gsource->actionQueue); } void reedah_source_edit_process (ReedahSourcePtr gsource) { updateRequestPtr request; g_assert (gsource); if (g_queue_is_empty (gsource->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 * reedah_source_edit_token_cb */ request = update_request_new (); request->updateState = update_state_copy (gsource->root->subscription->updateState); request->options = update_options_copy (gsource->root->subscription->updateOptions); request->source = g_strdup (REEDAH_READER_TOKEN_URL); update_request_set_auth_value(request, gsource->authHeaderValue); update_execute_request (gsource, request, reedah_source_edit_token_cb, g_strdup(gsource->root->id), 0); } static void reedah_source_edit_push_ (ReedahSourcePtr gsource, ReedahSourceActionPtr action, gboolean head) { g_assert (gsource->actionQueue); if (head) g_queue_push_head (gsource->actionQueue, action); else g_queue_push_tail (gsource->actionQueue, action); } static void reedah_source_edit_push (ReedahSourcePtr gsource, ReedahSourceActionPtr action, gboolean head) { g_assert (gsource); nodePtr root = gsource->root; reedah_source_edit_push_ (gsource, action, head); /** @todo any flags I should specify? */ if (gsource->loginState == REEDAH_SOURCE_STATE_NONE) subscription_update(root->subscription, REEDAH_SOURCE_UPDATE_ONLY_LOGIN); else if ( gsource->loginState == REEDAH_SOURCE_STATE_ACTIVE) reedah_source_edit_process (gsource); } static void update_read_state_callback (ReedahSourcePtr gsource, ReedahSourceActionPtr action, gboolean success) { if (success) { // FIXME: call item_read_state_changed (item, newState); } else { debug0 (DEBUG_UPDATE, "Failed to change item state!\n"); } } void reedah_source_edit_mark_read (ReedahSourcePtr gsource, const gchar *guid, const gchar *feedUrl, gboolean newStatus) { ReedahSourceActionPtr action = reedah_source_action_new (); action->guid = g_strdup (guid); action->feedUrl = g_strdup (feedUrl); action->actionType = newStatus ? EDIT_ACTION_MARK_READ : EDIT_ACTION_MARK_UNREAD; action->callback = update_read_state_callback; reedah_source_edit_push (gsource, 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 = reedah_source_action_new (); action->guid = g_strdup (guid); action->feedUrl = g_strdup (feedUrl); action->actionType = EDIT_ACTION_TRACKING_MARK_UNREAD; reedah_source_edit_push (gsource, action, FALSE); } } static void update_starred_state_callback(ReedahSourcePtr gsource, ReedahSourceActionPtr action, gboolean success) { if (success) { // FIXME: call item_flag_changed (item, newState); } else { debug0 (DEBUG_UPDATE, "Failed to change item state!\n"); } } void reedah_source_edit_mark_starred (ReedahSourcePtr gsource, const gchar *guid, const gchar *feedUrl, gboolean newStatus) { ReedahSourceActionPtr action = reedah_source_action_new (); action->guid = g_strdup (guid); action->feedUrl = g_strdup (feedUrl); action->actionType = newStatus ? EDIT_ACTION_MARK_STARRED : EDIT_ACTION_MARK_UNSTARRED; action->callback = update_starred_state_callback; reedah_source_edit_push (gsource, action, FALSE); } static void update_subscription_list_callback(ReedahSourcePtr gsource, ReedahSourceActionPtr action, gboolean success) { if (success) { /* * It is possible that Google changed the name of the URL that * was sent to it. In that case, I 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 = gsource->root->children ; for(; cur; cur = g_slist_next (cur)) { nodePtr node = (nodePtr) cur->data ; if (g_str_equal (node->subscription->source, action->feedUrl)) { subscription_set_source (node->subscription, ""); feedlist_node_added (node); } } debug0 (DEBUG_UPDATE, "Subscription list was updated successful\n"); subscription_update (gsource->root->subscription, REEDAH_SOURCE_UPDATE_ONLY_LIST); } else debug0 (DEBUG_UPDATE, "Failed to update subscriptions\n"); } void reedah_source_edit_add_subscription (ReedahSourcePtr gsource, const gchar* feedUrl) { ReedahSourceActionPtr action = reedah_source_action_new () ; action->actionType = EDIT_ACTION_ADD_SUBSCRIPTION; action->feedUrl = g_strdup (feedUrl); action->callback = update_subscription_list_callback; reedah_source_edit_push (gsource, action, TRUE); } static void reedah_source_edit_remove_callback (ReedahSourcePtr gsource, ReedahSourceActionPtr 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 = gsource->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 reedah_source_edit_remove_subscription (ReedahSourcePtr gsource, const gchar* feedUrl) { ReedahSourceActionPtr action = reedah_source_action_new (); action->actionType = EDIT_ACTION_REMOVE_SUBSCRIPTION; action->feedUrl = g_strdup (feedUrl); action->callback = reedah_source_edit_remove_callback; reedah_source_edit_push (gsource, action, TRUE); } gboolean reedah_source_edit_is_in_queue (ReedahSourcePtr gsource, const gchar* guid) { /* this is inefficient, but works for the time being */ GList *cur = gsource->actionQueue->head; for(; cur; cur = g_list_next (cur)) { ReedahSourceActionPtr action = cur->data; if (action->guid && g_str_equal (action->guid, guid)) return TRUE; } return FALSE; } liferea-1.10.17/src/fl_sources/reedah_source_edit.h000066400000000000000000000053651261475620100222260ustar00rootroot00000000000000/** * @file reedah_source_edit.c Google reader feed list source syncing support * * 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 _REEDAH_SOURCE_EDIT_H #define _REEDAH_SOURCE_EDIT_H #include "reedah_source.h" #include /** * Process the waiting edits on the edit queue. Call this if the state of * the ReedahSource has changed. * * @param gsource The ReedahSource whose editQueue should be processed. */ void reedah_source_edit_process (ReedahSourcePtr gsource); /** Edit wrappers */ /** * Mark the given item as read. * * @param gsource The ReedahSource 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 reedah_source_edit_mark_read (ReedahSourcePtr gsource, const gchar* guid, const gchar* feedUrl, gboolean newStatus); /** * Mark the given item as starred. * * @param gsource The ReedahSource 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 reedah_source_edit_mark_starred (ReedahSourcePtr gsource, const gchar *guid, const gchar *feedUrl, gboolean newStatus); /** * Add a subscription to the google source. * * @param gsource The ReedahSource structure * @param feedUrl the feed to add */ void reedah_source_edit_add_subscription (ReedahSourcePtr gsource, const gchar* feedUrl); /** * Remove a subscription from the google source. * * @param gsource The ReedahSource structure * @param feedUrl the feed to remove */ void reedah_source_edit_remove_subscription (ReedahSourcePtr gsource, const gchar* feedUrl); /** * See if an item with give guid is being modified * in the queue. * * @param ReedahSource the ReedahSource structure * @param guid the guid of the item */ gboolean reedah_source_edit_is_in_queue (ReedahSourcePtr gsource, const gchar* guid); #endif liferea-1.10.17/src/fl_sources/reedah_source_feed.c000066400000000000000000000215231261475620100221710ustar00rootroot00000000000000/** * @file theoldreader_source_feed.c TheOldReader feed subscription routines * * 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 #include #include #include #include "common.h" #include "debug.h" #include "db.h" #include "feedlist.h" #include "item_state.h" #include "json.h" #include "json_api_mapper.h" #include "metadata.h" #include "node.h" #include "reedah_source_edit.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 itemPtr reedah_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 && 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_warning ("Could not find item for %s!", sourceId); itemset_free (itemset); return NULL; } static void reedah_source_item_retrieve_status (const xmlNodePtr entry, subscriptionPtr subscription, GHashTable *cache) { ReedahSourcePtr gsource = (ReedahSourcePtr) node_source_root_from_node (subscription->node)->data ; xmlNodePtr xml; nodePtr node = subscription->node; xmlChar *id; gboolean read = FALSE; gboolean starred = FALSE; xml = entry->children; g_assert (xml); g_assert (g_str_equal (xml->name, "id")); id = xmlNodeGetContent (xml); for (xml = entry->children; xml; xml = xml->next) { if (g_str_equal (xml->name, "category")) { xmlChar* label = xmlGetProp (xml, "label"); if (!label) continue; if (g_str_equal (label, "read")) read = TRUE; else if (g_str_equal(label, "starred")) starred = TRUE; xmlFree (label); } } itemPtr item = reedah_source_load_item_from_sourceid (node, id, cache); if (item && item->sourceId) { if (g_str_equal (item->sourceId, id) && !reedah_source_edit_is_in_queue(gsource, id)) { if (item->readStatus != read) item_read_state_changed (item, read); if (item->flagStatus != starred) item_flag_state_changed (item, starred); } } if (item) item_unload (item); xmlFree (id); } 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); gint newCount = itemset_merge_items (itemSet, items, TRUE /* feed valid */, FALSE /* markAsRead */); itemlist_merge_itemset (itemSet); itemset_free (itemSet); feedlist_node_was_updated (subscription->node, newCount); 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 gsource = (ReedahSourcePtr) node_source_root_from_node (subscription->node)->data; g_assert(gsource); if (gsource->loginState == REEDAH_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_warning ("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, gsource->authHeaderValue); return TRUE; } struct subscriptionType reedahSourceFeedSubscriptionType = { reedah_feed_subscription_prepare_update_request, reedah_feed_subscription_process_update_result }; liferea-1.10.17/src/fl_sources/reedah_source_feed_list.c000066400000000000000000000314361261475620100232300ustar00rootroot00000000000000/** * @file reedah_source_feed_list.c Reedah 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 "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" #include "fl_sources/reedah_source_edit.h" /** * Find a node by the source id. */ nodePtr reedah_source_opml_get_node_by_source (ReedahSourcePtr gsource, const gchar *source) { return reedah_source_opml_get_subnode_by_node (gsource->root, source); } /** * Recursively find a node by the source id. */ nodePtr reedah_source_opml_get_subnode_by_node (nodePtr node, const gchar *source) { nodePtr subnode; nodePtr subsubnode; GSList *iter = node->children; for (; iter; iter = g_slist_next (iter)) { subnode = (nodePtr)iter->data; if (subnode->subscription && g_str_equal (subnode->subscription->source, source)) return subnode; else if (subnode->type->capabilities & NODE_CAPABILITY_SUBFOLDERS) { subsubnode = reedah_source_opml_get_subnode_by_node(subnode, source); if (subnode != NULL) return subsubnode; } } return NULL; } /* subscription list merging functions */ static void reedah_source_check_for_removal (nodePtr node, gpointer user_data) { gchar *expr = NULL; if (node->subscription && g_str_equal (node->subscription->source, REEDAH_READER_BROADCAST_FRIENDS_URL)) return ; if (IS_FEED (node)) { expr = g_strdup_printf ("/object/list[@name='subscriptions']/object/string[@name='id'][. = 'feed/%s']", node->subscription->source); } else if (IS_FOLDER (node)) { node_foreach_child_data (node, reedah_source_check_for_removal, user_data); expr = g_strdup_printf ("/object/list[@name='subscriptions']/object/list[@name='categories']/object[string='%s']", node->title); } else { g_warning ("google_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); } /* * Find a node by the name under root or create it. */ static nodePtr reedah_source_find_or_create_folder (const gchar *name, nodePtr root) { nodePtr folder = NULL; GSList *iter_parent; /* find a node by the name under root */ iter_parent = root->children; while (iter_parent) { if (g_str_equal (name, node_get_title (iter_parent->data))) { folder = (nodePtr)iter_parent->data; break; } iter_parent = g_slist_next (iter_parent); } /* if not found, create new folder */ if (!folder) { folder = node_new (folder_get_node_type ()); node_set_title (folder, name); node_set_parent (folder, root, -1); feedlist_node_imported (folder); subscription_update (folder->subscription, FEED_REQ_RESET_TITLE | FEED_REQ_PRIORITY_HIGH); } return folder; } /* * Check if folder of a node changed in Google Reader and move * node to the folder with the same name. */ static void reedah_source_update_folder (xmlNodePtr match, ReedahSourcePtr gsource, nodePtr node) { xmlNodePtr xml; xmlChar *label; const gchar *ptitle; nodePtr parent; /* check if label of a feed changed */ parent = node->parent; ptitle = node_get_title (parent); xml = xpath_find (match, "./list[@name='categories']/object/string[@name='label']"); if (xml) { label = xmlNodeListGetString (xml->doc, xml->xmlChildrenNode, 1); if (parent == gsource->root || ! g_str_equal (label, ptitle)) { debug2 (DEBUG_UPDATE, "GSource feed label changed for %s to '%s'", node->id, label); parent = reedah_source_find_or_create_folder ((gchar*)label, gsource->root); node_reparent (node, parent); } xmlFree (label); } else { /* if feed has no label and parent is not gsource root, reparent to gsource root */ if (parent != gsource->root) node_reparent (node, gsource->root); } } static void reedah_source_merge_feed (ReedahSourcePtr source, const gchar *url, const gchar *title, const gchar *id) { nodePtr node; GSList *iter; /* check if node to be merged already exists */ iter = source->root->children; while (iter) { node = (nodePtr)iter->data; if (g_str_equal (node->subscription->source, url)) return; iter = g_slist_next (iter); } 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 = &reedahSourceFeedSubscriptionType; /* 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); } /* OPML subscription type implementation */ static void google_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; GSList *siter; g_print(">>> %s\n",result->data); /* 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 *node = (JsonNode *)iter->data; /* 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")); } iter = g_list_next (iter); } g_list_free (elements); /* Remove old nodes we cannot find anymore */ siter = source->root->children; while (siter) { nodePtr node = (nodePtr)siter->data; gboolean found = FALSE; 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); siter = g_slist_next (siter); } opml_source_export (subscription->node); /* save new feeds to feed list */ subscription->node->available = TRUE; //return; } else { g_warning ("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 & REEDAH_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 = reedah_source_opml_get_node_by_source (gsource, id + strlen ("feed/")); else if (g_str_has_suffix (id, "broadcast-friends")) node = reedah_source_opml_get_node_by_source (gsource, id); 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 gsource) { updateRequestPtr request = update_request_new (); request->updateState = update_state_copy (gsource->root->subscription->updateState); request->options = update_options_copy (gsource->root->subscription->updateOptions); update_request_set_source (request, REEDAH_READER_UNREAD_COUNTS_URL); update_request_set_auth_value(request, gsource->authHeaderValue); update_execute_request (gsource, request, reedah_source_opml_quick_update_cb, gsource, 0); return TRUE; } static void reedah_source_opml_subscription_process_update_result (subscriptionPtr subscription, const struct updateResult * const result, updateFlags flags) { google_subscription_opml_cb (subscription, result, flags); } static gboolean reedah_source_opml_subscription_prepare_update_request (subscriptionPtr subscription, struct updateRequest *request) { ReedahSourcePtr gsource = (ReedahSourcePtr)subscription->node->data; g_assert(gsource); if (gsource->loginState == REEDAH_SOURCE_STATE_NONE) { debug0(DEBUG_UPDATE, "ReedahSource: login"); reedah_source_login ((ReedahSourcePtr) subscription->node->data, 0) ; return FALSE; } debug1 (DEBUG_UPDATE, "updating Reedah subscription (node id %s)", subscription->node->id); update_request_set_source (request, REEDAH_READER_SUBSCRIPTION_LIST_URL); update_request_set_auth_value (request, gsource->authHeaderValue); 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.10.17/src/fl_sources/reedah_source_feed_list.h000066400000000000000000000027471261475620100232400ustar00rootroot00000000000000/** * 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 "fl_sources/reedah_source.h" /** * Find a node by the source id. * * @param gsource the Google Reader 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); /** * Recursively find a node by the source id. * * @param gsource the Google Reader source * @param source the feed id to find * * @returns a node (or NULL) */ nodePtr reedah_source_opml_get_subnode_by_node(nodePtr node, const gchar *source); /** * Perform a quick update of the Google Reader source. * * @param gsource the Google Reader source */ gboolean reedah_source_opml_quick_update (ReedahSourcePtr gsource); liferea-1.10.17/src/fl_sources/theoldreader_source.c000066400000000000000000000324601261475620100224220ustar00rootroot00000000000000/** * @file theoldreader_source.c TheOldReader feed list source support * * Copyright (C) 2007-2014 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 #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/node_source.h" #include "fl_sources/opml_source.h" #include "fl_sources/theoldreader_source_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->actionQueue = g_queue_new (); source->loginState = THEOLDREADER_SOURCE_STATE_NONE; source->lastTimestampMap = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); return source; } static void theoldreader_source_free (TheOldReaderSourcePtr gsource) { if (!gsource) return; update_job_cancel_by_owner (gsource); g_free (gsource->authHeaderValue); g_queue_free (gsource->actionQueue) ; g_hash_table_unref (gsource->lastTimestampMap); g_free (gsource); } static void theoldreader_source_login_cb (const struct updateResult * const result, gpointer userdata, updateFlags flags) { TheOldReaderSourcePtr gsource = (TheOldReaderSourcePtr) userdata; gchar *tmp = NULL; subscriptionPtr subscription = gsource->root->subscription; debug1 (DEBUG_UPDATE, "TheOldReader login processing... %s", result->data); g_assert (!gsource->authHeaderValue); if (result->data && result->httpstatus == 200) tmp = strstr (result->data, "Auth="); if (tmp) { gchar *ttmp = tmp; tmp = strchr (tmp, '\n'); if (tmp) *tmp = '\0'; gsource->authHeaderValue = g_strdup_printf ("GoogleLogin auth=%s", ttmp + 5); debug1 (DEBUG_UPDATE, "TheOldReader Auth token found: %s", gsource->authHeaderValue); gsource->loginState = THEOLDREADER_SOURCE_STATE_ACTIVE; gsource->authFailures = 0; /* now that we are authenticated trigger updating to start data retrieval */ if (!(flags & THEOLDREADER_SOURCE_UPDATE_ONLY_LOGIN)) subscription_update (subscription, flags); /* process any edits waiting in queue */ theoldreader_source_edit_process (gsource); } 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 (_("TheOldReader login failed!")); gsource->authFailures++; if (gsource->authFailures < THEOLDREADER_SOURCE_MAX_AUTH_FAILURES) gsource->loginState = THEOLDREADER_SOURCE_STATE_NONE; else gsource->loginState = THEOLDREADER_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 * THEOLDREADER_SOURCE_LOGIN_ACTIVE. */ void theoldreader_source_login (TheOldReaderSourcePtr gsource, guint32 flags) { gchar *username, *password; updateRequestPtr request; subscriptionPtr subscription = gsource->root->subscription; if (gsource->loginState != THEOLDREADER_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", gsource->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); gsource->loginState = THEOLDREADER_SOURCE_STATE_IN_PROGRESS ; update_execute_request (gsource, request, theoldreader_source_login_cb, gsource, flags); } /* node source type implementation */ static void theoldreader_source_update (nodePtr node) { TheOldReaderSourcePtr gsource = (TheOldReaderSourcePtr) node->data; /* Reset THEOLDREADER_SOURCE_STATE_NO_AUTH as this is a manual user interaction and no auto-update so we can query for credentials again. */ if (gsource->loginState == THEOLDREADER_SOURCE_STATE_NO_AUTH) gsource->loginState = THEOLDREADER_SOURCE_STATE_NONE; subscription_update (node->subscription, 0); // FIXME: 0 ? } static void theoldreader_source_auto_update (nodePtr node) { GTimeVal now; TheOldReaderSourcePtr gsource = (TheOldReaderSourcePtr) node->data; if (gsource->loginState == THEOLDREADER_SOURCE_STATE_NONE) { theoldreader_source_update (node); return; } if (gsource->loginState == THEOLDREADER_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 + THEOLDREADER_SOURCE_UPDATE_INTERVAL <= now.tv_sec) { subscription_update (node->subscription, 0); g_get_current_time (&gsource->lastQuickUpdate); } else if (gsource->lastQuickUpdate.tv_sec + THEOLDREADER_SOURCE_QUICK_UPDATE_INTERVAL <= now.tv_sec) { theoldreader_source_opml_quick_update (gsource); theoldreader_source_edit_process (gsource); g_get_current_time (&gsource->lastQuickUpdate); }*/ // FIXME: Don't do below, but about logic! if (gsource->lastQuickUpdate.tv_sec + THEOLDREADER_SOURCE_QUICK_UPDATE_INTERVAL <= now.tv_sec) { subscription_update (node->subscription, 0); g_get_current_time (&gsource->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_node (nodePtr node) { GSList *iter; for (iter = node->children; iter; iter = g_slist_next(iter)) { nodePtr subnode = iter->data; if (subnode->subscription) subnode->subscription->type = &theOldReaderSourceFeedSubscriptionType; if (subnode->type->capabilities & NODE_CAPABILITY_SUBFOLDERS) theoldreader_source_import_node (subnode); } } static void theoldreader_source_import (nodePtr node) { opml_source_import (node); node->subscription->updateInterval = -1; node->subscription->type = &theOldReaderSourceOpmlSubscriptionType; if (!node->data) node->data = (gpointer) theoldreader_source_new (node); theoldreader_source_import_node (node); } static void theoldreader_source_export (nodePtr node) { opml_source_export (node); } static gchar * theoldreader_source_get_feedlist (nodePtr node) { return opml_source_get_feedlist (node); } static void theoldreader_source_remove (nodePtr node) { opml_source_remove (node); } static nodePtr theoldreader_source_add_subscription (nodePtr node, subscriptionPtr subscription) { debug_enter ("theoldreader_source_add_subscription"); nodePtr child = node_new (feed_get_node_type ()); debug0 (DEBUG_UPDATE, "TheOldReaderSource: Adding a new subscription"); node_set_data (child, feed_new ()); node_set_subscription (child, subscription); child->subscription->type = &theOldReaderSourceFeedSubscriptionType; node_set_title (child, _("New Subscription")); theoldreader_source_edit_add_subscription (node_source_root_from_node (node)->data, subscription->source); debug_exit ("theoldreader_source_add_subscription"); return child; } static void theoldreader_source_remove_node (nodePtr node, nodePtr child) { gchar *source; TheOldReaderSourcePtr gsource = node->data; if (child == node) { feedlist_node_removed (child); return; } source = g_strdup (child->subscription->source); feedlist_node_removed (child); /* propagate the removal only if there aren't other copies */ if (!theoldreader_source_opml_get_node_by_source (gsource, source)) theoldreader_source_edit_remove_subscription (gsource, source); g_free (source); } /* GUI callbacks */ static void on_theoldreader_source_selected (GtkDialog *dialog, gint response_id, gpointer user_data) { nodePtr node; subscriptionPtr subscription; if (response_id == GTK_RESPONSE_OK) { subscription = subscription_new ("http://theoldreader.com/reader", NULL, NULL); node = node_new (node_source_get_node_type ()); node_set_title (node, "TheOldReader"); node_source_new (node, theoldreader_source_get_type ()); node_set_subscription (node, subscription); subscription_set_auth_info (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")))); subscription->type = &theOldReaderSourceOpmlSubscriptionType ; node->data = theoldreader_source_new (node); feedlist_node_added (node); theoldreader_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.ui", "theoldreader_source_dialog"); 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) { nodePtr root = node_source_root_from_node (node); theoldreader_source_edit_mark_starred ((TheOldReaderSourcePtr)root->data, 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) { nodePtr root = node_source_root_from_node (node); theoldreader_source_edit_mark_read ((TheOldReaderSourcePtr)root->data, 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) { TheOldReaderSourcePtr gsource = node->data; gsource->loginState = THEOLDREADER_SOURCE_STATE_MIGRATE; } /* node source type definition */ static struct nodeSourceType nst = { .id = "fl_theoldreader", .name = N_("TheOldReader"), .description = N_("Integrate the feed list of your TheOldReader account. Liferea will " "present your TheOldReader subscriptions, and will synchronize your feed list and reading lists."), .capabilities = NODE_SOURCE_CAPABILITY_DYNAMIC_CREATION | NODE_SOURCE_CAPABILITY_WRITABLE_FEEDLIST | NODE_SOURCE_CAPABILITY_ADD_FEED | NODE_SOURCE_CAPABILITY_ITEM_STATE_SYNC | NODE_SOURCE_CAPABILITY_CONVERT_TO_LOCAL, .source_type_init = theoldreader_source_init, .source_type_deinit = theoldreader_source_deinit, .source_new = ui_theoldreader_source_get_account_info, .source_delete = theoldreader_source_remove, .source_import = theoldreader_source_import, .source_export = theoldreader_source_export, .source_get_feedlist = theoldreader_source_get_feedlist, .source_update = theoldreader_source_update, .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.10.17/src/fl_sources/theoldreader_source.h000066400000000000000000000212531261475620100224250ustar00rootroot00000000000000/** * @file theoldreader_source.h TheOldReader 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 _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 */ gchar *authHeaderValue; /**< the Google Authorization token */ GQueue *actionQueue; gint loginState; /**< The current login state */ gint authFailures; /**< Number of authentication failures */ /** * 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; } *TheOldReaderSourcePtr; enum { THEOLDREADER_SOURCE_STATE_NONE = 0, /**< no authentication tried so far */ THEOLDREADER_SOURCE_STATE_IN_PROGRESS, /**< authentication in progress */ THEOLDREADER_SOURCE_STATE_ACTIVE, /**< authentication succeeded */ THEOLDREADER_SOURCE_STATE_NO_AUTH, /**< authentication has failed */ THEOLDREADER_SOURCE_STATE_MIGRATE, /**< source will be migrated, do not do anything anymore! */ }; enum { /** * Update only the subscription list, and not each node underneath it. * Note: Uses higher 16 bits to avoid conflict. */ THEOLDREADER_SOURCE_UPDATE_ONLY_LIST = (1<<16), /** * Only login, do not do any updates. */ THEOLDREADER_SOURCE_UPDATE_ONLY_LOGIN = (1<<17) }; /** * Number of auth failures after which we stop bothering the user while * auto-updating until he manually updates again. */ #define THEOLDREADER_SOURCE_MAX_AUTH_FAILURES 3 /** * 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" /** * Get a list of subscriptions. */ #define THEOLDREADER_READER_SUBSCRIPTION_LIST_URL "http://theoldreader.com/reader/api/0/subscription/list?output=json" /** * Get a token for an edit operation. (@todo A token can actually be used * for multiple transactions.) */ #define THEOLDREADER_READER_TOKEN_URL "http://theoldreader.com/reader/api/0/token" /** * Add a subscription * @param URL The feed URL, or the page URL for feed autodiscovery. * @param T a token obtained using THEOLDREADER_READER_TOKEN_URL */ #define THEOLDREADER_READER_ADD_SUBSCRIPTION_URL "http://theoldreader.com/reader/api/0/subscription/edit?client=liferea" #define THEOLDREADER_READER_ADD_SUBSCRIPTION_POST "s=feed%%2F%s&i=null&ac=subscribe&T=%s" /** * Unsubscribe from a subscription. * @param url The feed URL * @param T a token obtained using THEOLDREADER_READER_TOKEN_URL */ #define THEOLDREADER_READER_REMOVE_SUBSCRIPTION_URL "http://theoldreader.com/reader/api/0/subscription/edit?client=liferea" #define THEOLDREADER_READER_REMOVE_SUBSCRIPTION_POST "s=feed%%2F%s&i=null&ac=unsubscribe&T=%s" /** * A list of subscriptions with the unread counters, and the last updated * timestamps. */ #define THEOLDREADER_READER_UNREAD_COUNTS_URL "http://theoldreader.com/reader/api/0/unread-count?all=true&client=liferea" /** * Edit the tags associated with an item. The parameters to this _have_ to be * sent as post data. */ #define THEOLDREADER_READER_EDIT_TAG_URL "http://theoldreader.com/reader/api/0/edit-tag?client=liferea" /** * Postdata for adding a tag when using THEOLDREADER_READER_EDIT_TAG_URL. * @param i The guid of the item. * @param prefix The prefix to 's'. For normal feeds this will be "feed", for * links etc, this should be "user". * @param s The URL of the subscription containing the item. (Note that the * following string adds the "feed/" prefix to this.) * @param a The tag to add. * @param T a token obtained using THEOLDREADER_READER_TOKEN_URL */ #define THEOLDREADER_READER_EDIT_TAG_ADD_TAG "i=%s&s=%s%%2F%s&a=%s&ac=edit-tags&T=%s&async=true" /** * Postdata for removing a tag, when using THEOLDREADER_READER_EDIT_TAG_URL. Do * not use for removing the "read" tag, see THEOLDREADER_READER_EDIT_TAG_AR_TAG * for that. * * @param i The guid of the item. * @param prefix The prefix to 's'. @see THEOLDREADER_READER_EDIT_TAG_ADD_TAG * @param s The URL of the subscription containing the item. (Note that the * final value of s is feed + "/" + this string) * @param r The tag to remove * @param T a token obtained using THEOLDREADER_READER_TOKEN_URL */ #define THEOLDREADER_READER_EDIT_TAG_REMOVE_TAG "i=%s&s=%s%%2F%s&r=%s&ac=edit-tags&T=%s&async=true" /** * Postdata for adding a tag, and removing another tag at the same time, * when using THEOLDREADER_READER_EDIT_TAG_URL. * @param i The guid of the item. * @param prefix The prefix to 's'. @see THEOLDREADER_READER_EDIT_TAG_ADD_TAG * @param s The URL of the subscription containing the item. (Note that the * final value of s is feed + "/" + this string) * @param a The tag to add. * @param r The tag to remove * @param T a token obtained using THEOLDREADER_READER_TOKEN_URL */ #define THEOLDREADER_READER_EDIT_TAG_AR_TAG "i=%s&s=%s%%2F%s&a=%s&r=%s&ac=edit-tags&T=%s&async=true" /** * Postdata for adding a tag, and removing another tag at the same time, for a * _link_ item, when using THEOLDREADER_READER_EDIT_TAG_URL * @param i The guid of the link (as provided by google) * @param a The tag to add * @param r The tag to remove * @param T a token obtained using THEOLDREADER_READER_TOKEN_URL */ #define THEOLDREADER_READER_EDIT_TAG_ADD_TAG_FOR_LINK "i=%s&s=user%2F-%2Fsource%2Fcom.google%2Flink&a=%s&r=%s&ac=edit-tags&T=%s&async=true" /** A set of tags (states) defined by Google reader */ #define THEOLDREADER_READER_TAG_KEPT_UNREAD "user/-/state/com.google/kept-unread" #define THEOLDREADER_READER_TAG_READ "user/-/state/com.google/read" #define THEOLDREADER_READER_TAG_TRACKING_KEPT_UNREAD "user/-/state/com.google/tracking-kept-unread" #define THEOLDREADER_READER_TAG_STARRED "user/-/state/com.google/starred" /** 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); extern struct subscriptionType theOldReaderSourceFeedSubscriptionType; extern struct subscriptionType theOldReaderSourceOpmlSubscriptionType; /** * 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.10.17/src/fl_sources/theoldreader_source_edit.c000066400000000000000000000414471261475620100234340ustar00rootroot00000000000000/** * @file theoldreader_source_edit.c TheOldReader feed list source syncing support * * 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 */ #include #include #include #include "debug.h" #include "update.h" #include "subscription.h" #include "common.h" #include "feedlist.h" #include "theoldreader_source.h" #include "theoldreader_source_edit.h" #include "config.h" #include #include #include #include "xml.h" /** * A structure to indicate an edit to the TheOldReader "database". * These edits are put in a queue and processed in sequential order * so that google does not end up processing the requests in an * unintended order. */ typedef struct TheOldReaderSourceAction { /** * 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; /** * A callback function on completion of the edit. */ void (*callback) (TheOldReaderSourcePtr gsource, struct TheOldReaderSourceAction* edit, gboolean success); /** * The type of this TheOldReaderSourceAction. */ int actionType ; } *TheOldReaderSourceActionPtr ; 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 } ; typedef struct TheOldReaderSourceAction* editPtr ; typedef struct TheOldReaderSourceActionCtxt { gchar *nodeId ; TheOldReaderSourceActionPtr action; } *TheOldReaderSourceActionCtxtPtr; static void theoldreader_source_edit_push (TheOldReaderSourcePtr gsource, TheOldReaderSourceActionPtr action, gboolean head); static TheOldReaderSourceActionPtr theoldreader_source_action_new (void) { TheOldReaderSourceActionPtr action = g_slice_new0 (struct TheOldReaderSourceAction); return action; } static void theoldreader_source_action_free (TheOldReaderSourceActionPtr action) { g_free (action->guid); g_free (action->feedUrl); g_slice_free (struct TheOldReaderSourceAction, action); } static TheOldReaderSourceActionCtxtPtr theoldreader_source_action_context_new(TheOldReaderSourcePtr gsource, TheOldReaderSourceActionPtr action) { TheOldReaderSourceActionCtxtPtr ctxt = g_slice_new0(struct TheOldReaderSourceActionCtxt); ctxt->nodeId = g_strdup(gsource->root->id); ctxt->action = action; return ctxt; } static void theoldreader_source_action_context_free(TheOldReaderSourceActionCtxtPtr ctxt) { g_free(ctxt->nodeId); g_slice_free(struct TheOldReaderSourceActionCtxt, ctxt); } static void theoldreader_source_edit_action_complete (const struct updateResult* const result, gpointer userdata, updateFlags flags) { TheOldReaderSourceActionCtxtPtr editCtxt = (TheOldReaderSourceActionCtxtPtr) userdata; nodePtr node = node_from_id (editCtxt->nodeId); TheOldReaderSourcePtr gsource; TheOldReaderSourceActionPtr action = editCtxt->action ; theoldreader_source_action_context_free (editCtxt); if (!node) { theoldreader_source_action_free (action); return; /* probably got deleted before this callback */ } gsource = (TheOldReaderSourcePtr) node->data; if (result->data == NULL || !g_str_equal (result->data, "OK")) { if (action->callback) (*action->callback) (gsource, action, FALSE); debug1 (DEBUG_UPDATE, "The edit action failed with result: %s\n", result->data); theoldreader_source_action_free (action); return; /** @todo start a timer for next processing */ } if (action->callback) action->callback (gsource, action, TRUE); theoldreader_source_action_free (action); /* process anything else waiting on the edit queue */ theoldreader_source_edit_process (gsource); } /* the following theoldreader_source_api_* functions are simply funtions that convert a TheOldReaderSourceActionPtr to a updateRequestPtr */ static void theoldreader_source_api_add_subscription (TheOldReaderSourceActionPtr action, updateRequestPtr request, const gchar* token) { update_request_set_source (request, THEOLDREADER_READER_ADD_SUBSCRIPTION_URL); gchar* s_escaped = g_uri_escape_string (action->feedUrl, NULL, TRUE) ; gchar* postdata = g_strdup_printf (THEOLDREADER_READER_ADD_SUBSCRIPTION_POST, s_escaped, token); g_free (s_escaped); debug1 (DEBUG_UPDATE, "theoldreader_source: postdata [%s]", postdata); request->postdata = postdata ; } static void theoldreader_source_api_remove_subscription (TheOldReaderSourceActionPtr action, updateRequestPtr request, const gchar* token) { update_request_set_source (request, THEOLDREADER_READER_REMOVE_SUBSCRIPTION_URL); gchar* s_escaped = g_uri_escape_string (action->feedUrl, NULL, TRUE); g_assert (!request->postdata); request->postdata = g_strdup_printf (THEOLDREADER_READER_REMOVE_SUBSCRIPTION_POST, s_escaped, token); g_free (s_escaped); } static void theoldreader_source_api_edit_tag (TheOldReaderSourceActionPtr action, updateRequestPtr request, const gchar*token) { update_request_set_source (request, THEOLDREADER_READER_EDIT_TAG_URL); 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 TheOldReaderSourceAction 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 (THEOLDREADER_READER_TAG_KEPT_UNREAD, NULL, TRUE); gchar *r_escaped = g_uri_escape_string (THEOLDREADER_READER_TAG_READ, NULL, TRUE); postdata = g_strdup_printf (THEOLDREADER_READER_EDIT_TAG_AR_TAG, 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 (THEOLDREADER_READER_TAG_READ, NULL, TRUE); postdata = g_strdup_printf (THEOLDREADER_READER_EDIT_TAG_ADD_TAG, i_escaped, prefix, s_escaped, a_escaped, token); } else if (action->actionType == EDIT_ACTION_TRACKING_MARK_UNREAD) { a_escaped = g_uri_escape_string (THEOLDREADER_READER_TAG_TRACKING_KEPT_UNREAD, NULL, TRUE); postdata = g_strdup_printf (THEOLDREADER_READER_EDIT_TAG_ADD_TAG, i_escaped, prefix, s_escaped, a_escaped, token); } else if (action->actionType == EDIT_ACTION_MARK_STARRED) { a_escaped = g_uri_escape_string (THEOLDREADER_READER_TAG_STARRED, NULL, TRUE) ; postdata = g_strdup_printf ( THEOLDREADER_READER_EDIT_TAG_ADD_TAG, i_escaped, prefix, s_escaped, a_escaped, token); } else if (action->actionType == EDIT_ACTION_MARK_UNSTARRED) { gchar* r_escaped = g_uri_escape_string(THEOLDREADER_READER_TAG_STARRED, NULL, TRUE); postdata = g_strdup_printf ( THEOLDREADER_READER_EDIT_TAG_REMOVE_TAG, i_escaped, prefix, s_escaped, r_escaped, token); } else g_assert (FALSE); g_free (s_escaped); g_free (a_escaped); g_free (i_escaped); debug1 (DEBUG_UPDATE, "theoldreader_source: postdata [%s]", postdata); request->postdata = postdata; } static void theoldreader_source_edit_token_cb (const struct updateResult * const result, gpointer userdata, updateFlags flags) { nodePtr node; TheOldReaderSourcePtr gsource; const gchar* token; TheOldReaderSourceActionPtr 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; } gsource = (TheOldReaderSourcePtr) node->data; token = result->data; if (!gsource || g_queue_is_empty (gsource->actionQueue)) return; action = g_queue_peek_head (gsource->actionQueue); request = update_request_new (); request->updateState = update_state_copy (gsource->root->subscription->updateState); request->options = update_options_copy (gsource->root->subscription->updateOptions) ; update_request_set_auth_value (request, gsource->authHeaderValue); 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) theoldreader_source_api_edit_tag (action, request, token); else if (action->actionType == EDIT_ACTION_ADD_SUBSCRIPTION ) theoldreader_source_api_add_subscription (action, request, token); else if (action->actionType == EDIT_ACTION_REMOVE_SUBSCRIPTION ) theoldreader_source_api_remove_subscription (action, request, token) ; update_execute_request (gsource, request, theoldreader_source_edit_action_complete, theoldreader_source_action_context_new(gsource, action), 0); action = g_queue_pop_head (gsource->actionQueue); } void theoldreader_source_edit_process (TheOldReaderSourcePtr gsource) { updateRequestPtr request; g_assert (gsource); if (g_queue_is_empty (gsource->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 * theoldreader_source_edit_token_cb */ request = update_request_new (); request->updateState = update_state_copy (gsource->root->subscription->updateState); request->options = update_options_copy (gsource->root->subscription->updateOptions); request->source = g_strdup (THEOLDREADER_READER_TOKEN_URL); update_request_set_auth_value(request, gsource->authHeaderValue); update_execute_request (gsource, request, theoldreader_source_edit_token_cb, g_strdup(gsource->root->id), 0); } static void theoldreader_source_edit_push_ (TheOldReaderSourcePtr gsource, TheOldReaderSourceActionPtr action, gboolean head) { g_assert (gsource->actionQueue); if (head) g_queue_push_head (gsource->actionQueue, action); else g_queue_push_tail (gsource->actionQueue, action); } static void theoldreader_source_edit_push (TheOldReaderSourcePtr gsource, TheOldReaderSourceActionPtr action, gboolean head) { g_assert (gsource); nodePtr root = gsource->root; theoldreader_source_edit_push_ (gsource, action, head); /** @todo any flags I should specify? */ if (gsource->loginState == THEOLDREADER_SOURCE_STATE_NONE) subscription_update(root->subscription, THEOLDREADER_SOURCE_UPDATE_ONLY_LOGIN); else if ( gsource->loginState == THEOLDREADER_SOURCE_STATE_ACTIVE) theoldreader_source_edit_process (gsource); } static void update_read_state_callback (TheOldReaderSourcePtr gsource, TheOldReaderSourceActionPtr action, gboolean success) { if (success) { // FIXME: call item_read_state_changed (item, newState); } else { debug0 (DEBUG_UPDATE, "Failed to change item state!\n"); } } void theoldreader_source_edit_mark_read (TheOldReaderSourcePtr gsource, const gchar *guid, const gchar *feedUrl, gboolean newStatus) { TheOldReaderSourceActionPtr action = theoldreader_source_action_new (); action->guid = g_strdup (guid); action->feedUrl = g_strdup (feedUrl); action->actionType = newStatus ? EDIT_ACTION_MARK_READ : EDIT_ACTION_MARK_UNREAD; action->callback = update_read_state_callback; theoldreader_source_edit_push (gsource, action, FALSE); if (newStatus == FALSE) { /* * According to the TheOldReader API, to mark an item unread, * I also need to mark it as tracking-kept-unread in a separate * network call. */ action = theoldreader_source_action_new (); action->guid = g_strdup (guid); action->feedUrl = g_strdup (feedUrl); action->actionType = EDIT_ACTION_TRACKING_MARK_UNREAD; theoldreader_source_edit_push (gsource, action, FALSE); } } static void update_starred_state_callback(TheOldReaderSourcePtr gsource, TheOldReaderSourceActionPtr action, gboolean success) { if (success) { // FIXME: call item_flag_changed (item, newState); } else { debug0 (DEBUG_UPDATE, "Failed to change item state!\n"); } } void theoldreader_source_edit_mark_starred (TheOldReaderSourcePtr gsource, const gchar *guid, const gchar *feedUrl, gboolean newStatus) { TheOldReaderSourceActionPtr action = theoldreader_source_action_new (); action->guid = g_strdup (guid); action->feedUrl = g_strdup (feedUrl); action->actionType = newStatus ? EDIT_ACTION_MARK_STARRED : EDIT_ACTION_MARK_UNSTARRED; action->callback = update_starred_state_callback; theoldreader_source_edit_push (gsource, action, FALSE); } static void update_subscription_list_callback(TheOldReaderSourcePtr gsource, TheOldReaderSourceActionPtr action, gboolean success) { if (success) { /* * It is possible that Google changed the name of the URL that * was sent to it. In that case, I 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 = gsource->root->children ; for(; cur; cur = g_slist_next (cur)) { nodePtr node = (nodePtr) cur->data ; if (g_str_equal (node->subscription->source, action->feedUrl)) { subscription_set_source (node->subscription, ""); feedlist_node_added (node); } } debug0 (DEBUG_UPDATE, "Subscription list was updated successful\n"); subscription_update (gsource->root->subscription, THEOLDREADER_SOURCE_UPDATE_ONLY_LIST); } else debug0 (DEBUG_UPDATE, "Failed to update subscriptions\n"); } void theoldreader_source_edit_add_subscription (TheOldReaderSourcePtr gsource, const gchar* feedUrl) { TheOldReaderSourceActionPtr action = theoldreader_source_action_new () ; action->actionType = EDIT_ACTION_ADD_SUBSCRIPTION; action->feedUrl = g_strdup (feedUrl); action->callback = update_subscription_list_callback; theoldreader_source_edit_push (gsource, action, TRUE); } static void theoldreader_source_edit_remove_callback (TheOldReaderSourcePtr gsource, TheOldReaderSourceActionPtr 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 = gsource->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 theoldreader_source_edit_remove_subscription (TheOldReaderSourcePtr gsource, const gchar* feedUrl) { TheOldReaderSourceActionPtr action = theoldreader_source_action_new (); action->actionType = EDIT_ACTION_REMOVE_SUBSCRIPTION; action->feedUrl = g_strdup (feedUrl); action->callback = theoldreader_source_edit_remove_callback; theoldreader_source_edit_push (gsource, action, TRUE); } gboolean theoldreader_source_edit_is_in_queue (TheOldReaderSourcePtr gsource, const gchar* guid) { /* this is inefficient, but works for the time being */ GList *cur = gsource->actionQueue->head; for(; cur; cur = g_list_next (cur)) { TheOldReaderSourceActionPtr action = cur->data; if (action->guid && g_str_equal (action->guid, guid)) return TRUE; } return FALSE; } liferea-1.10.17/src/fl_sources/theoldreader_source_edit.h000066400000000000000000000056041261475620100234340ustar00rootroot00000000000000/** * @file theoldreader_source_edit.c TheOldReader feed list source syncing support * * 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 _THEOLDREADER_SOURCE_EDIT_H #define _THEOLDREADER_SOURCE_EDIT_H #include "theoldreader_source.h" #include /** * Process the waiting edits on the edit queue. Call this if the state of * the TheOldReaderSource has changed. * * @param gsource The TheOldReaderSource whose editQueue should be processed. */ void theoldreader_source_edit_process (TheOldReaderSourcePtr gsource); /** Edit wrappers */ /** * Mark the given item as read. * * @param gsource The TheOldReaderSource 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 theoldreader_source_edit_mark_read (TheOldReaderSourcePtr gsource, const gchar* guid, const gchar* feedUrl, gboolean newStatus); /** * Mark the given item as starred. * * @param gsource The TheOldReaderSource 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 theoldreader_source_edit_mark_starred (TheOldReaderSourcePtr gsource, const gchar *guid, const gchar *feedUrl, gboolean newStatus); /** * Add a subscription to the google source. * * @param gsource The TheOldReaderSource structure * @param feedUrl the feed to add */ void theoldreader_source_edit_add_subscription (TheOldReaderSourcePtr gsource, const gchar* feedUrl); /** * Remove a subscription from the google source. * * @param gsource The TheOldReaderSource structure * @param feedUrl the feed to remove */ void theoldreader_source_edit_remove_subscription (TheOldReaderSourcePtr gsource, const gchar* feedUrl); /** * See if an item with give guid is being modified * in the queue. * * @param TheOldReaderSource the TheOldReaderSource structure * @param guid the guid of the item */ gboolean theoldreader_source_edit_is_in_queue (TheOldReaderSourcePtr gsource, const gchar* guid); #endif liferea-1.10.17/src/fl_sources/theoldreader_source_feed.c000066400000000000000000000171421261475620100234050ustar00rootroot00000000000000/** * @file theoldreader_source_feed.c TheOldReader feed subscription routines * * Copyright (C) 2008 Arnold Noronha * 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 #include #include #include #include "common.h" #include "debug.h" #include "xml.h" #include "feedlist.h" #include "theoldreader_source.h" #include "subscription.h" #include "node.h" #include "theoldreader_source_edit.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_warning ("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) { TheOldReaderSourcePtr gsource = (TheOldReaderSourcePtr) node_source_root_from_node (subscription->node)->data ; 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_warning ("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) && !theoldreader_source_edit_is_in_queue(gsource, 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; /* FIXME: The following workaround ensure that the code below, that uses UI callbacks item_*_state_changed(), does not reset the newCount of the feed list (see SF #2666478) by getting the newCount first and setting it again later. */ guint newCount = feedlist_get_new_item_count (); 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_warning ("theoldreader_feed_subscription_process_update_result(): Couldn't parse XML!"); } // FIXME: part 2 of the newCount workaround feedlist_update_new_item_count (newCount); 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->loginState == THEOLDREADER_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_warning ("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, source->authHeaderValue); return TRUE; } struct subscriptionType theOldReaderSourceFeedSubscriptionType = { theoldreader_feed_subscription_prepare_update_request, theoldreader_feed_subscription_process_update_result }; liferea-1.10.17/src/fl_sources/theoldreader_source_feed_list.c000066400000000000000000000277651261475620100244540ustar00rootroot00000000000000/** * @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" #include "fl_sources/theoldreader_source_edit.h" static void theoldreader_source_merge_feed (TheOldReaderSourcePtr source, const gchar *url, const gchar *title, const gchar *id) { nodePtr node; GSList *iter; /* check if node to be merged already exists */ iter = source->root->children; while (iter) { node = (nodePtr)iter->data; if (g_str_equal (node->subscription->source, url)) return; iter = g_slist_next (iter); } 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 = &theOldReaderSourceFeedSubscriptionType; /* 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, 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); } /** * Find a node by the source id. */ nodePtr theoldreader_source_opml_get_node_by_source (TheOldReaderSourcePtr gsource, const gchar *source) { return theoldreader_source_opml_get_subnode_by_node (gsource->root, source); } /** * Recursively find a node by the source id. */ nodePtr theoldreader_source_opml_get_subnode_by_node (nodePtr node, const gchar *source) { nodePtr subnode; nodePtr subsubnode; GSList *iter = node->children; for (; iter; iter = g_slist_next (iter)) { subnode = (nodePtr)iter->data; if (subnode->subscription && g_str_equal (subnode->subscription->source, source)) return subnode; else if (subnode->type->capabilities & NODE_CAPABILITY_SUBFOLDERS) { subsubnode = theoldreader_source_opml_get_subnode_by_node(subnode, source); if (subnode != NULL) return subsubnode; } } return NULL; } /* subscription list merging functions */ static void theoldreader_source_check_for_removal (nodePtr node, gpointer user_data) { gchar *expr = NULL; if (IS_FEED (node)) { expr = g_strdup_printf ("/object/list[@name='subscriptions']/object/string[@name='id'][. = 'feed/%s']", node->subscription->source); } else if (IS_FOLDER (node)) { node_foreach_child_data (node, theoldreader_source_check_for_removal, user_data); expr = g_strdup_printf ("/object/list[@name='subscriptions']/object/list[@name='categories']/object[string='%s']", node->title); } else { g_warning ("theoldreader_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); } /* * Find a node by the name under root or create it. */ static nodePtr theoldreader_source_find_or_create_folder (const gchar *name, nodePtr root) { nodePtr folder = NULL; GSList *iter_parent; /* find a node by the name under root */ iter_parent = root->children; while (iter_parent) { if (g_str_equal (name, node_get_title (iter_parent->data))) { folder = (nodePtr)iter_parent->data; break; } iter_parent = g_slist_next (iter_parent); } /* if not found, create new folder */ if (!folder) { folder = node_new (folder_get_node_type ()); node_set_title (folder, name); node_set_parent (folder, root, -1); feedlist_node_imported (folder); subscription_update (folder->subscription, FEED_REQ_RESET_TITLE | FEED_REQ_PRIORITY_HIGH); } return 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; GSList *siter; /* We expect something like this: [{"id":"feed/51d49b79d1716c7b18000025", "title":"LZone", "categories":[], "sortid":"51d49b79d1716c7b18000025", "firstitemmsec":"1371403150181", "url":"http://lzone.de/rss.xml", "htmlUrl":"http://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 *node = (JsonNode *)iter->data; /* 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")); } iter = g_list_next (iter); } g_list_free (elements); /* Remove old nodes we cannot find anymore */ siter = source->root->children; while (siter) { nodePtr node = (nodePtr)siter->data; gboolean found = FALSE; 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); siter = g_slist_next (siter); } opml_source_export (subscription->node); /* save new feeds to feed list */ subscription->node->available = TRUE; //return; } else { g_warning ("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 & THEOLDREADER_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 theoldreader_source_opml_quick_update_helper (xmlNodePtr match, gpointer userdata) { TheOldReaderSourcePtr gsource = (TheOldReaderSourcePtr) 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 = theoldreader_source_opml_get_node_by_source (gsource, 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, "TheOldReaderSource: 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 theoldreader_source_opml_quick_update_cb (const struct updateResult* const result, gpointer userdata, updateFlags flags) { TheOldReaderSourcePtr gsource = (TheOldReaderSourcePtr) userdata; xmlDocPtr doc; if (!result->data) { debug0 (DEBUG_UPDATE, "TheOldReaderSource: Unable to get unread counts, this update is aborted."); return; } doc = xml_parse (result->data, result->size, NULL); if (!doc) { debug0 (DEBUG_UPDATE, "TheOldReaderSource: The XML failed to parse, maybe the session has expired. (FIXME)"); return; } xpath_foreach_match (xmlDocGetRootElement (doc), "/object/list[@name='unreadcounts']/object", theoldreader_source_opml_quick_update_helper, gsource); xmlFreeDoc (doc); } gboolean theoldreader_source_opml_quick_update (TheOldReaderSourcePtr 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, THEOLDREADER_READER_UNREAD_COUNTS_URL); update_request_set_auth_value (request, source->authHeaderValue); update_execute_request (source, request, theoldreader_source_opml_quick_update_cb, source, 0); return TRUE; } */ 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) { TheOldReaderSourcePtr gsource = (TheOldReaderSourcePtr)subscription->node->data; g_assert(gsource); if (gsource->loginState == THEOLDREADER_SOURCE_STATE_NONE) { debug0(DEBUG_UPDATE, "TheOldReaderSource: login"); theoldreader_source_login ((TheOldReaderSourcePtr) subscription->node->data, 0) ; return FALSE; } debug1 (DEBUG_UPDATE, "updating TheOldReader subscription (node id %s)", subscription->node->id); update_request_set_source (request, THEOLDREADER_READER_SUBSCRIPTION_LIST_URL); update_request_set_auth_value (request, gsource->authHeaderValue); 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.10.17/src/fl_sources/theoldreader_source_feed_list.h000066400000000000000000000030121261475620100244340ustar00rootroot00000000000000/** * 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); /** * Recursively 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_subnode_by_node(nodePtr node, 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.10.17/src/fl_sources/ttrss_source.c000066400000000000000000000301711261475620100211340ustar00rootroot00000000000000/** * @file ttrss_source.c tt-rss feed list source support * * 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 "fl_sources/ttrss_source.h" #include #include #include #include #include "common.h" #include "debug.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/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->actionQueue = g_queue_new (); source->loginState = TTRSS_SOURCE_STATE_NONE; source->categories = g_hash_table_new (g_direct_hash, g_direct_equal); source->categoryNodes = g_hash_table_new (g_direct_hash, g_direct_equal); return source; } static void ttrss_source_free (ttrssSourcePtr source) { if (!source) return; update_job_cancel_by_owner (source); g_free (source->session_id); g_queue_free (source->actionQueue) ; 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_warning ("TinyTinyRSS login failed: error '%s'!\n", msg); if (++source->authFailures < TTRSS_SOURCE_MAX_AUTH_FAILURES) source->loginState = TTRSS_SOURCE_STATE_NONE; else source->loginState = TTRSS_SOURCE_STATE_NO_AUTH; } 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); source->loginState = TTRSS_SOURCE_STATE_ACTIVE; if (!(flags & TTRSS_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 TTRSS_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->loginState != TTRSS_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->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); source->loginState = TTRSS_SOURCE_STATE_IN_PROGRESS ; update_execute_request (source, request, ttrss_source_login_cb, source, flags); } /* node source type implementation */ static void ttrss_source_update (nodePtr node) { debug0 (DEBUG_UPDATE, "ttrss_source_update()"); subscription_update (node->subscription, 0); } static void ttrss_source_auto_update (nodePtr node) { ttrssSourcePtr source = (ttrssSourcePtr) node->data; if (source->loginState == TTRSS_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_set_subscription_type (nodePtr folder) { GSList *iter; for (iter = folder->children; iter; iter = g_slist_next(iter)) { nodePtr node = (nodePtr) iter->data; if (node->subscription) node->subscription->type = &ttrssSourceFeedSubscriptionType; else ttrss_source_set_subscription_type (node); } } static void ttrss_source_import (nodePtr node) { opml_source_import (node); node->subscription->updateInterval = -1; node->subscription->type = &ttrssSourceSubscriptionType; if (!node->data) node->data = (gpointer) ttrss_source_new (node); ttrss_source_set_subscription_type (node); } static void ttrss_source_export (nodePtr node) { opml_source_export (node); } static gchar * ttrss_source_get_feedlist (nodePtr node) { return opml_source_get_feedlist (node); } static void ttrss_source_remove (nodePtr node) { opml_source_remove (node); } /* GUI callbacks */ static void on_ttrss_source_selected (GtkDialog *dialog, gint response_id, gpointer user_data) { if (response_id == GTK_RESPONSE_OK) { nodePtr node; subscriptionPtr subscription = subscription_new ("", NULL, NULL); /* 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 (&subscription->metadata, "ttrss-url", gtk_entry_get_text (GTK_ENTRY (liferea_dialog_lookup (GTK_WIDGET (dialog), "serverUrlEntry")))); node = node_new (node_source_get_node_type ()); node_set_title (node, "Tiny Tiny RSS"); node_source_new (node, ttrss_source_get_type ()); node_set_subscription (node, subscription); subscription_set_auth_info (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")))); subscription->type = &ttrssSourceSubscriptionType; node->data = (gpointer)ttrss_source_new (node); feedlist_node_added (node); ttrss_source_update (node); db_node_update (node); } gtk_widget_destroy (GTK_WIDGET (dialog)); } static void ui_ttrss_source_get_account_info (void) { GtkWidget *dialog; dialog = liferea_dialog_new ("ttrss_source.ui", "ttrss_source_dialog"); 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; g_hash_table_destroy (source->categories); g_hash_table_destroy (source->categoryNodes); 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 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 */ static struct nodeSourceType nst = { .id = "fl_ttrss", .name = N_("Tiny Tiny RSS"), .description = N_("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."), .capabilities = NODE_SOURCE_CAPABILITY_DYNAMIC_CREATION | NODE_SOURCE_CAPABILITY_ITEM_STATE_SYNC, .source_type_init = ttrss_source_init, .source_type_deinit = ttrss_source_deinit, .source_new = ui_ttrss_source_get_account_info, .source_delete = ttrss_source_remove, .source_import = ttrss_source_import, .source_export = ttrss_source_export, .source_get_feedlist = ttrss_source_get_feedlist, .source_update = ttrss_source_update, .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.5) */ .add_subscription = NULL, /* not supported by current tt-rss JSON API (v1.5) */ .remove_node = NULL, /* not supported by current tt-rss JSON API (v1.5) */ .convert_to_local = NULL /* FIXME: implement me to allow data migration from tt-rss! */ }; nodeSourceTypePtr ttrss_source_get_type (void) { return &nst; } liferea-1.10.17/src/fl_sources/ttrss_source.h000066400000000000000000000104001261475620100211320ustar00rootroot00000000000000/** * @file ttrss_source.h tt-rss feed list source support * * 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 _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 */ GQueue *actionQueue; gint apiLevel; /**< The API level reported by the instance (or 0) */ gint loginState; /**< The current login state */ gint authFailures; /**< Number of authentication failures */ GHashTable *categories; /**< Lookup hash for feed id to category id */ GHashTable *categoryNodes; /**< Lookup hash for category id to folder node id */ } *ttrssSourcePtr; enum { TTRSS_SOURCE_STATE_NONE = 0, /**< no authentication tried so far */ TTRSS_SOURCE_STATE_IN_PROGRESS, /**< authentication in progress */ TTRSS_SOURCE_STATE_ACTIVE, /**< authentication succeeded */ TTRSS_SOURCE_STATE_NO_AUTH /**< authentication has failed */ }; enum { /** * Update only the subscription list, and not each node underneath it. * Note: Uses higher 16 bits to avoid conflict. */ TTRSS_SOURCE_UPDATE_ONLY_LIST = (1<<16), /** * Only login, do not do any updates. */ TTRSS_SOURCE_UPDATE_ONLY_LOGIN = (1<<17) }; /** * Number of auth failures after which we stop bothering the user while * auto-updating until he manually updates again. */ #define TTRSS_SOURCE_MAX_AUTH_FAILURES 3 /** * TinyTinyRSS JSON API is documented here: * * http://tt-rss.org/redmine/projects/tt-rss/wiki/JsonApiReference */ #define TTRSS_URL "%s/api/" /** * Tiny Tiny RSS 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 tt-rss 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\"}" /** * 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 tt-rss 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\"}" /** * 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); extern struct subscriptionType ttrssSourceFeedSubscriptionType; extern struct subscriptionType ttrssSourceSubscriptionType; #endif liferea-1.10.17/src/fl_sources/ttrss_source_feed.c000066400000000000000000000123521261475620100221200ustar00rootroot00000000000000/** * @file ttrss_source_feed.c tt-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 "feedlist.h" #include "itemlist.h" #include "itemset.h" #include "json.h" #include "metadata.h" #include "subscription.h" #include "xml.h" #include "notification/notification.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")); 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; 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); gint newCount = itemset_merge_items (itemSet, items, TRUE /* feed valid */, FALSE /* markAsRead */); itemlist_merge_itemset (itemSet); itemset_free (itemSet); feedlist_node_was_updated (subscription->node, newCount); if (newCount) notification_node_has_new_items (subscription->node, FALSE); } 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"); // FIXME: if (!source->selfUpdating) trigger remote update first! g_assert(source); if (source->loginState == TTRSS_SOURCE_STATE_NONE) { subscription_update (root->subscription, 0); return FALSE; } feed_id = metadata_list_get (subscription->metadata, "ttrss-feed-id"); if (!feed_id) { g_warning ("Fatal: TinyTinyRSS feed without id! (%s)", subscription->node->title); 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.10.17/src/fl_sources/ttrss_source_feed_list.c000066400000000000000000000370631261475620100231610ustar00rootroot00000000000000/** * @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)) { // FIXME: check folders too 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); } } /* * Find a node by the name under root or create it. * * @param name Folder display name * @param parent Parent folder or source root node * * @returns a valid nodePtr */ static nodePtr ttrss_source_find_or_create_folder (const gchar *name, nodePtr parent) { nodePtr folder = NULL; GSList *iter_parent; folder = feedlist_find_node (parent, FOLDER_BY_TITLE, name); if (!folder) { folder = node_new (folder_get_node_type ()); 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; } /* * Check if folder of a node changed in TinyTinyRSS and move * node to the correct folder. */ static void ttrss_source_update_folder (ttrssSourcePtr source, nodePtr node) { nodePtr parent; gint category; const gchar *feedId; feedId = (const gchar *)metadata_list_get (node->subscription->metadata, "ttrss-feed-id"); if (!feedId) return; category = GPOINTER_TO_INT (g_hash_table_lookup (source->categories, GINT_TO_POINTER (atoi (feedId)))); parent = g_hash_table_lookup (source->categoryNodes, GINT_TO_POINTER (category)); if (!parent) return; if (parent != node->parent) { debug2 (DEBUG_UPDATE, "TinyTinyRSS Moving node \"%s\" to folder \"%s\"", node->title, parent->title); node_reparent (node, parent); } /* if feed has no category and parent is not source root, reparent to source root */ if (parent == NULL && node->parent != source->root) { debug1 (DEBUG_UPDATE, "TinyTinyRSS Moving node \"%s\" back to root", node->title); node_reparent (node, source->root); } } static void ttrss_source_merge_feed (ttrssSourcePtr source, const gchar *url, const gchar *title, gint64 id) { nodePtr node; GSList *iter; 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 = &ttrssSourceFeedSubscriptionType; /* 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, 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); } debug2 (DEBUG_UPDATE, "updating folder for %s (%s)", title, url); ttrss_source_update_folder (source, node); } /* 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; GSList *siter; /* 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; /* 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")); } 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_warning ("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 & TTRSS_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 */ if (json_get_string (node, "name")) { /* Process child categories */ if (type && g_str_equal (type, "category")) { nodePtr folder; debug2 (DEBUG_UPDATE, "TinyTinyRSS category id=%ld name=%s", id, name); folder = ttrss_source_find_or_create_folder (name, parent); g_hash_table_insert (source->categoryNodes, GINT_TO_POINTER (id), folder); /* Process child categories ... */ if (json_get_node (node, "items")) 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; GSList *siter; /* 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); g_hash_table_insert (source->categoryNodes, GINT_TO_POINTER (0), source->root); ttrss_source_merge_categories (source, source->root, 0, items); /* And trigger the actual feed fetching */ ttrss_source_update_subscription_list (source, subscription); } else { g_warning ("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) { ttrssSourcePtr source = (ttrssSourcePtr) subscription->node->data; gchar *source_uri; debug0 (DEBUG_UPDATE, "ttrss_subscription_prepare_update_request"); g_assert (source); if (source->loginState == TTRSS_SOURCE_STATE_NONE) { debug0 (DEBUG_UPDATE, "TinyTinyRSS login"); ttrss_source_login (source, 0); return FALSE; } debug1 (DEBUG_UPDATE, "TinyTinyRSS updating subscription (node id %s)", subscription->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.10.17/src/fl_sources/ttrss_source_feed_list.h000066400000000000000000000017071261475620100231620ustar00rootroot00000000000000/** * @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.10.17/src/folder.c000066400000000000000000000102511261475620100155010ustar00rootroot00000000000000/** * @file folder.c sub folders for hierarchic node sources * * 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 */ #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.10.17/src/folder.h000066400000000000000000000030701261475620100155070ustar00rootroot00000000000000/** * @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.10.17/src/html.c000066400000000000000000000112311261475620100151710ustar00rootroot00000000000000/** * @file html.c HTML favicon and feed link auto discovery * * Copyright (C) 2004 ahmed el-helw * 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 */ #include #include #include #include "common.h" #include "debug.h" #include "html.h" #include "xml.h" enum { LINK_FAVICON, LINK_RSS_ALTERNATE, }; static gchar * checkLinkRef (const gchar* str, gint linkType) { gchar *res; const gchar *tmp, *tmp2; size_t len = 0; gchar quote; /*debug1(DEBUG_PARSING, "checking link %s", str); */ tmp = common_strcasestr (str, "href="); 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); 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; } g_free (res); return NULL; } 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; 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, baseUri); 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; } liferea-1.10.17/src/html.h000066400000000000000000000030641261475620100152030ustar00rootroot00000000000000/** * @file html.h HTML file handling / feed auto discovery * * Copyright (C) 2004 ahmed el-helw * * 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 feed auto discovery function. Searches the * passed HTML document for feed links and returns * one if at least one link could be found. * * @parm data HTML source * @param 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); /** * Search for favicon links in a HTML file's head section * @param data HTML source * @param 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); #endif liferea-1.10.17/src/htmlview.c000066400000000000000000000261071261475620100160740ustar00rootroot00000000000000/** * @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; } 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 ("1.0"); xmlNode = xmlNewDocNode (doc, NULL, "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, "feed", NULL); feed_to_xml (node, feed); } /* do the XSLT rendering */ params = render_parameter_new (); if (NULL != node_get_base_url (node)) { baseUrl = common_uri_escape (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.10.17/src/htmlview.h000066400000000000000000000064001261475620100160730ustar00rootroot00000000000000/** * @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); /** * 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.10.17/src/item.c000066400000000000000000000156311261475620100151730ustar00rootroot00000000000000/** * @file item.c common item handling * * 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 */ #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; } gchar * item_make_link (itemPtr item) { const gchar *src; gchar *link; src = item_get_source (item); if (!src) return NULL; /* check for relative link */ if (*src == '/') { const gchar * base = item_get_base_url (item); gchar * pos = (gchar *)base; int host_url_size, i; /* Find the third /, start of link on * site. */ for (i = 0; pos && i < 3; i++) { pos = strstr(pos + 1, "/"); } if (!pos) { debug0 (DEBUG_PARSING, "Feed contains relative link and invalid base URL"); return NULL; } host_url_size = pos - base + 1; link = g_malloc (host_url_size + strlen(src)); strncpy (link, base, host_url_size - 1); pos = link + host_url_size - 1; strcpy (pos, src); } else { link = g_strdup (src); } 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, "item", NULL); g_return_if_fail (itemNode); xmlNewTextChild (itemNode, NULL, "title", item_get_title (item)?item_get_title (item):""); if (item_get_description (item)) { tmp = xhtml_strip_dhtml (item_get_description (item)); tmp2 = xhtml_strip_unsupported_tags (tmp); xmlNewTextChild (itemNode, NULL, "description", tmp2); g_free (tmp); g_free (tmp2); } if (item_get_source (item)) xmlNewTextChild (itemNode, NULL, "source", item_get_source (item)); tmp = g_strdup_printf ("%ld", item->id); xmlNewTextChild (itemNode, NULL, "nr", tmp); g_free (tmp); tmp = g_strdup_printf ("%d", item->readStatus?1:0); xmlNewTextChild (itemNode, NULL, "readStatus", tmp); g_free (tmp); tmp = g_strdup_printf ("%d", item->updateStatus?1:0); xmlNewTextChild (itemNode, NULL, "updateStatus", tmp); g_free (tmp); tmp = g_strdup_printf ("%d", item->flagStatus?1:0); xmlNewTextChild (itemNode, NULL, "mark", tmp); g_free (tmp); tmp = g_strdup_printf ("%ld", item->time); xmlNewTextChild (itemNode, NULL, "time", tmp); g_free (tmp); tmp = date_format (item->time, NULL); xmlNewTextChild (itemNode, NULL, "timestr", tmp); g_free (tmp); if (item->validGuid) { GSList *iter, *duplicates; duplicatesNode = xmlNewChild(itemNode, NULL, "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, "duplicateNode", node_get_title (duplicateNode)); item_unload (duplicate); } iter = g_slist_next (iter); } g_slist_free (duplicates); } xmlNewTextChild (itemNode, NULL, "sourceId", item->nodeId); tmp = g_strdup_printf ("%ld", item->id); xmlNewTextChild (itemNode, NULL, "sourceNr", 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, "commentsSuppressed", "true"); } } } } liferea-1.10.17/src/item.h000066400000000000000000000127511261475620100152000ustar00rootroot00000000000000/** * @file item.h common item handling * * 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 _ITEM_H #define _ITEM_H #include #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 */ time_t 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 */ } *itemPtr; /** * Allocates a new item structure. * * @returns the new structure */ itemPtr item_new(void); /** * 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. * * @param id item id to load * * @returns item structure */ itemPtr item_load(gulong id); /** * 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). */ itemPtr item_copy(itemPtr item); /** * Returns the base URL for the given item. * * @param item the item * * @returns base URL */ const gchar * item_get_base_url(itemPtr item); /** * Free the memory used by an itempointer. The item needs to be * removed from the itemlist before calling this function. * * @param item the item to unload */ 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); /** * Returns the resolved link for the item. * * @param item the item * * @returns 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); /** * 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. * * @param item the item * @param description the content */ 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); /** * Adds an XML node to the given feed item list node. * * @param item the item to save to cache * @param parentNode the xmlNodePtr to add to */ void item_to_xml (itemPtr item, gpointer parentNode); #endif liferea-1.10.17/src/item_history.c000066400000000000000000000056411261475620100167540ustar00rootroot00000000000000/** * @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.10.17/src/item_history.h000066400000000000000000000032051261475620100167530ustar00rootroot00000000000000/** * @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.10.17/src/item_loader.c000066400000000000000000000066061261475620100165230ustar00rootroot00000000000000/** * @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); 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 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.10.17/src/item_loader.h000066400000000000000000000061741261475620100165300ustar00rootroot00000000000000/** * @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.10.17/src/item_state.c000066400000000000000000000122231261475620100163650ustar00rootroot00000000000000/** * @file item_state.c item state controller interface * * 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 */ #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); /* 5. update notification statistics */ feedlist_reset_new_item_count (); /* 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. update notification statistics */ feedlist_reset_new_item_count (); /* 7. 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.10.17/src/item_state.h000066400000000000000000000041241261475620100163730ustar00rootroot00000000000000/** * @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.10.17/src/itemlist.c000066400000000000000000000463741261475620100160770ustar00rootroot00000000000000/** * @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) { itemPtr item; if(itemlist->priv->selectedId) { gulong id = itemlist->priv->selectedId; 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; } /** * To be called whenever an itemset was updated. If it is the * displayed itemset it will be merged against the item view. */ 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"); } /** * To be called whenever a node was selected and should * replace the current itemlist. */ 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 (GtkRadioAction *action, GtkRadioAction *current, gpointer user_data) { gint val = gtk_radio_action_get_current_value (current); itemlist_set_view_mode (val); } 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 (GtkMenuItem *menuitem, gpointer user_data) { itemlist_select_from_history (TRUE); } void on_next_read_item_activate (GtkMenuItem *menuitem, 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.10.17/src/itemlist.h000066400000000000000000000127721261475620100160770ustar00rootroot00000000000000/** * @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); /** * Set up the feed list. * * @returns the feed list instance */ ItemList * itemlist_create (void); /** * Returns the currently displayed node. * * @returns displayed node (or NULL) */ struct node * itemlist_get_displayed_node(void); /** * Returns a copy of the currently selected item. * Note: selected = displayed item * * @returns displayed item (or NULL) to be free'd using item_unload() */ itemPtr itemlist_get_selected (void); /** * Returns the id of the currently selected item. * * @returns displayed item id (or 0) */ gulong itemlist_get_selected_id (void); /** * 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. * * @param itemSet the item set to be merged */ void itemlist_merge_itemset(itemSetPtr itemSet); /** * Loads the passed nodes items into the item list. * * @param node the node */ void itemlist_load(struct node *node); /** * Clears the item list. Unsets the currently * displayed item set. Optionally marks every item read. * * @param markRead if TRUE all items are marked as read */ void itemlist_unload(gboolean markRead); /** * Changes the viewing mode property of the item list. * Do not use this method to change the viewing mode * of a displayed node! * * @param newMode (0 = normal, 1 = wide, 2 = combined view) */ void itemlist_set_view_mode(guint newMode); /** * 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); /** * Menu callback that toggles the different viewing modes * * @param action the action that emitted the signal * @param current the member of action which was activated * @param user_data unused */ void on_view_activate(GtkRadioAction *action, GtkRadioAction *current, gpointer user_data); /** * Menu callback to select the previously read item from the item history */ void on_prev_read_item_activate (GtkMenuItem *menuitem, gpointer user_data); /** * Menu callback to select the next read item from the item history */ void on_next_read_item_activate (GtkMenuItem *menuitem, gpointer user_data); /* item handling function */ void itemlist_update_item(itemPtr 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. * * @param item the item */ void itemlist_remove_item(itemPtr item); /** * 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. * * @param itemSet the item set from which items are to be removed * @param items the items to be removed */ void itemlist_remove_items(itemSetPtr itemSet, GList *items); /** * 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. * * @param node the node whose item list is to be removed */ void itemlist_remove_all_items(struct node *node); /** * Called from GUI when item list selection changes. * * @param item new selected item */ void itemlist_selection_changed(itemPtr item); /** * 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); /** * Toggle the flag of the given item. * * @param item the item */ void itemlist_toggle_flag(itemPtr item); /** * Toggle the read status of the given item. * * @param item the item */ void itemlist_toggle_read_status(itemPtr item); /** * Register a search result item loader. * * @param loader the search result item loader */ void itemlist_add_search_result (ItemLoader *loader); G_END_DECLS #endif liferea-1.10.17/src/itemset.c000066400000000000000000000350271261475620100157100ustar00rootroot00000000000000/** * @file itemset.c handling sets of items * * Copyright (C) 2005-2011 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 "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; } /** * Generic merge logic suitable for feeds * * @param items existing items * @param newItem new item to merge * @param maxChecks maximum number of item checks * @param allowUpdates TRUE if item content update is to be * allowed for existing items * @param allowStateChanges TRUE if item state shall be * overwritten by source * * @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; /* 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; if (((item_get_description (oldItem) != NULL) && (item_get_description (newItem) != NULL)) && (0 != strcmp (item_get_description(oldItem), item_get_description (newItem)))) equal = FALSE; /* 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; /* found corresponding item, check if they are REALLY equal (eg, read status may have changed) */ if(oldItem->readStatus != newItem->readStatus) equal = FALSE; if(oldItem->flagStatus != newItem->flagStatus) equal = FALSE; 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; } } if (equal) { found = TRUE; break; } /* if (i++ > maxChecks) { found = FALSE; 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); debug0 (DEBUG_CACHE, "-> item already existing and was updated"); } 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)); debug3 (DEBUG_UPDATE, "-> added \"%s\" (id=%d) to item set %p...", item_get_title (item), item->id, itemSet); /* step 3: 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 4: 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 max, length, toBeDropped, newCount = 0, flagCount = 0; 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); guint i = 0; GList *iter, *copy; iter = copy = g_list_copy (list); while (iter) { i++; if (i > max) { itemPtr item = (itemPtr) iter->data; debug2 (DEBUG_UPDATE, "ignoring item nr %u (%s)...", i, item_get_title(item)); item_unload (item); list = g_list_remove (list, item); } iter = g_list_next (iter); } g_list_free (copy); } /* 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); 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 && result) 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.10.17/src/itemset.h000066400000000000000000000060131261475620100157060ustar00rootroot00000000000000/** * @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); /** * Calls the given callback for each of the items in the item set. * * @param itemSet the item set * @param callback the callback */ void itemset_foreach (itemSetPtr itemSet, itemActionFunc callback); /** * Merges the given item set into the item set of * the given node. Used for node updating. * * @param itemSet the item set to merge into * @param items a list of items to merge * @param allowUpdates TRUE if older items may be replaced * @param markAsRead TRUE if all new items should be marked as read * * @returns the number of new merged items */ guint itemset_merge_items(itemSetPtr itemSet, GList *items, gboolean allowUpdates, gboolean markAsRead); /** * Checks if the given item matches the rules of the given item set. * * @param itemSet the itemSet * @param item the item * * @returns TRUE if the item matches the rules of the item set */ gboolean itemset_check_item (itemSetPtr itemSet, itemPtr item); /** * 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. * * @param itemSet the item set * @param ruleId id string for this rule type * @param value argument string for this rule * @param additive indicates positive or negative logic */ void itemset_add_rule (itemSetPtr itemSet, const gchar *ruleId, const gchar *value, gboolean additive); /** * Frees the given item set and all items it contains. * * @param itemSet the item set to free */ void itemset_free(itemSetPtr itemSet); #endif liferea-1.10.17/src/json.c000066400000000000000000000036441261475620100152070ustar00rootroot00000000000000/** * @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.10.17/src/json.h000066400000000000000000000036531261475620100152140ustar00rootroot00000000000000/** * @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.10.17/src/liferea-add-feed.in000066400000000000000000000007461261475620100174600ustar00rootroot00000000000000#!/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.10.17/src/main.c000066400000000000000000000251161261475620100151600ustar00rootroot00000000000000/** * @file main.c Liferea main program * * Copyright (C) 2003-2012 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 */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #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 "notification/notification.h" static enum { STATE_STARTING, STATE_STARTED, STATE_SHUTDOWN } runState = STATE_STARTING; static const gchar *initialStateOption = NULL; /* GApplication "open" callback for receiving feed-add requests from remote */ static void on_feed_add (GApplication *application, gpointer files, gint n_files, gchar *hint, gpointer user_data) { GFile **uris = (GFile **)files; /* we always expect only one URI */ g_assert(uris); g_assert(n_files == 1); feedlist_add_subscription (g_file_get_uri (uris[0]), NULL, NULL, 0); } /* GApplication "activate" callback for normal startup and also processing local feed-add requests (URI passed in user_data). */ static void on_app_activate (GtkApplication *app, gpointer user_data) { GList *list; gchar *feedUri = (gchar *)user_data; list = gtk_application_get_windows (app); if (list) { gtk_window_present (GTK_WINDOW (list->data)); } else { liferea_shell_create (app, initialStateOption); if (feedUri) feedlist_add_subscription (feedUri, NULL, NULL, 0); } } static void signal_handler (int sig) { liferea_shutdown (); } 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 gboolean G_GNUC_NORETURN show_version (const gchar *option_name, const gchar *value, gpointer data, GError **error) { printf ("Liferea %s\n", VERSION); exit (0); } int main (int argc, char *argv[]) { GtkApplication *app; GError *error = NULL; GOptionContext *context; GOptionGroup *debug; gulong debug_flags = 0; LifereaDBus *dbus = NULL; gchar *feedUri = NULL; gint status; GOptionEntry entries[] = { { "mainwindow-state", 'w', 0, G_OPTION_ARG_STRING, &initialStateOption, N_("Start Liferea with its main window in STATE. STATE may be `shown', `iconified', or `hidden'"), N_("STATE") }, { "version", 'v', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, show_version, N_("Show version information and exit"), NULL }, { "add-feed", 'a', 0, G_OPTION_ARG_STRING, &feedUri, N_("Add a new subscription"), N_("uri") }, { 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 } }; #ifdef ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); #endif debug = g_option_group_new ("debug", _("Print debugging messages for the given topic"), _("Print debugging messages for the given topic"), &debug_flags, NULL); g_option_group_set_translation_domain(debug, GETTEXT_PACKAGE); g_option_group_add_entries (debug, debug_entries); context = g_option_context_new (NULL); g_option_context_set_summary (context, N_("Liferea, the Linux Feed Reader")); g_option_context_set_description (context, N_("For more information, please visit http://lzone.de/liferea/")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); g_option_context_set_translation_domain(context, GETTEXT_PACKAGE); g_option_context_add_group (context, debug); g_option_context_add_group (context, gtk_get_option_group (FALSE)); g_option_context_add_group (context, g_irepository_get_option_group ()); g_option_context_parse (context, &argc, &argv, &error); g_option_context_free (context); if (error) { g_print ("Error parsing options: %s\n", error->message); } set_debug_level (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 (); gtk_init (&argc, &argv); /* Single instance checks, also note that we pass or only RPC (add-feed) as activate signal payload as it is simply an URI string. */ app = gtk_application_new ("net.sourceforge.liferea", G_APPLICATION_HANDLES_OPEN); g_signal_connect (app, "activate", G_CALLBACK (on_app_activate), feedUri); g_signal_connect (app, "open", G_CALLBACK (on_feed_add), NULL); g_set_prgname ("liferea"); g_set_application_name (_("Liferea")); gtk_window_set_default_icon_name ("liferea"); /* GTK theme support */ debug_start_measurement (DEBUG_DB); /* order is important! */ db_init (); /* initialize sqlite */ xml_init (); /* initialize libxml2 */ #ifdef HAVE_LIBNOTIFY notification_plugin_register (&libnotify_plugin); #endif social_init (); /* initialize social bookmarking */ dbus = liferea_dbus_new (); signal (SIGTERM, signal_handler); signal (SIGINT, signal_handler); signal (SIGHUP, signal_handler); /* Note: we explicitely do not use the gdk_thread_* locking in Liferea because it freezes the program when running Flash applets */ runState = STATE_STARTING; debug_end_measurement (DEBUG_DB, "startup"); status = g_application_run (G_APPLICATION (app), 0, NULL); /* Trigger RPCs if we are not primary instance (currently only feed-add) */ if (feedUri && g_application_get_is_remote (G_APPLICATION (app))) { GFile *uris[2]; uris[0] = g_file_new_for_uri (feedUri); uris[1] = NULL; g_application_open (G_APPLICATION (app), uris, 1, "feed-add"); g_object_unref (uris[0]); } g_object_unref (G_OBJECT (dbus)); g_object_unref (app); return status; } static gboolean on_shutdown (gpointer user_data) { debug_enter ("liferea_shutdown"); /* prevents signal handler from calling us a second time */ if (runState == STATE_SHUTDOWN) return FALSE; runState = STATE_SHUTDOWN; /* order is important ! */ update_deinit (); liferea_shell_destroy (); db_deinit (); social_free (); conf_deinit (); debug_exit ("liferea_shutdown"); return FALSE; } void liferea_shutdown (void) { g_idle_add (on_shutdown, NULL); } liferea-1.10.17/src/metadata.c000066400000000000000000000227331261475620100160160ustar00rootroot00000000000000/** * @file metadata.c handling of typed item and feed meta data * * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2004-2010 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); /* 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); /* 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; struct pair *p; while (iter) { 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.10.17/src/metadata.h000066400000000000000000000120471261475620100160200ustar00rootroot00000000000000/** * @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.10.17/src/migrate.c000066400000000000000000000103211261475620100156540ustar00rootroot00000000000000/** * @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.10.17/src/migrate.h000066400000000000000000000023221261475620100156630ustar00rootroot00000000000000/** * @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.10.17/src/net.c000066400000000000000000000306341261475620100150230ustar00rootroot00000000000000/** * @file net.c HTTP network access using libsoup * * Copyright (C) 2007-2014 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 "common.h" #include "debug.h" #define HOMEPAGE "http://liferea.sf.net/" static SoupSession *session = NULL; static gchar *proxyname = NULL; static gchar *proxyusername = NULL; static gchar *proxypassword = NULL; static int proxyport = 0; static void network_process_callback (SoupSession *session, SoupMessage *msg, gpointer user_data) { updateJobPtr job = (updateJobPtr)user_data; SoupDate *last_modified; const gchar *tmp = NULL; 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; job->result->returncode = 0; } 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 */ 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 */ tmp = soup_message_headers_get_one (msg->response_headers, "ETag"); if (tmp) { job->result->updateState->etag = g_strdup(tmp); } 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 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 const job) { SoupMessage *msg; SoupDate *date; 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)); } /* 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 */ /* If the feed has "dont use a proxy" selected, disable the proxy for the msg */ if (job->request->options && job->request->options->dontUseProxy) soup_message_disable_feature (msg, SOUP_TYPE_PROXY_URI_RESOLVER); 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 } void network_init (void) { gchar *useragent; SoupCookieJar *cookies; gchar *filename; SoupLogger *logger; SoupURI *proxy; /* Set an appropriate user agent */ if (g_getenv ("LANG")) { /* e.g. "Liferea/1.10.0 (Linux; de_DE; http://liferea.sf.net/) AppleWebKit (KHTML, like Gecko)" */ useragent = g_strdup_printf ("Liferea/%s (%s; %s; %s) AppleWebKit (KHTML, like Gecko)", VERSION, OSNAME, g_getenv ("LANG"), HOMEPAGE); } else { /* e.g. "Liferea/1.10.0 (Linux; http://liferea.sf.net/) AppleWebKit (KHTML, like Gecko)" */ useragent = g_strdup_printf ("Liferea/%s (%s; %s) AppleWebKit (KHTML, like Gecko)", VERSION, OSNAME, HOMEPAGE); } /* Cookies */ filename = common_create_config_filename ("cookies.txt"); cookies = soup_cookie_jar_text_new (filename, FALSE); g_free (filename); /* Initialize libsoup */ proxy = network_get_proxy_uri (); session = soup_session_async_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); if (proxy) { debug1 (DEBUG_NET, "Initializing libsoup with proxy '%s'", proxy); g_object_set (G_OBJECT (session), SOUP_SESSION_PROXY_URI, proxy, NULL); soup_uri_free (proxy); } else { debug0 (DEBUG_NET, "Initializing libsoup with libproxy defaults"); soup_session_add_feature_by_type (session, SOUP_TYPE_PROXY_RESOLVER_DEFAULT); } 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); } 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 (gchar *host, guint port, gchar *user, gchar *password) { /* FIXME: make arguments const and use the SoupURI in network_get_proxy_* ? */ g_free (proxyname); g_free (proxyusername); g_free (proxypassword); proxyname = host; proxyport = port; proxyusername = user; proxypassword = password; /* The sessions will be NULL if we were called from conf_init() as that's called * before net_init() */ if (session) { SoupURI *newproxy = network_get_proxy_uri (); g_object_set (G_OBJECT (session), SOUP_SESSION_PROXY_URI, newproxy, NULL); if (newproxy) soup_uri_free (newproxy); } 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.10.17/src/net.h000066400000000000000000000047571261475620100150370ustar00rootroot00000000000000/** * @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); /** * Configures the network client to use the given proxy * settings. If the host name is NULL then no proxy will * be used. * * @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 (gchar *host, guint port, gchar *user, gchar *password); /** * 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.10.17/src/net_monitor.c000066400000000000000000000131541261475620100165700ustar00rootroot00000000000000/** * @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 == 3 || /* NM_STATE_CONNECTED */ state == 50 || /* NM_STATE_CONNECTED_LOCAL */ 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.10.17/src/net_monitor.h000066400000000000000000000046611261475620100166000ustar00rootroot00000000000000/** * @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.10.17/src/newsbin.c000066400000000000000000000114051261475620100156750ustar00rootroot00000000000000/** * @file newsbin.c news bin node type implementation * * 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 "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 (NULL, "newnewsbindialog"); 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_popup_copy_to_newsbin (gpointer data) { nodePtr newsbin; itemPtr item, copy; newsbin = g_slist_nth_data(newsbin_list, GPOINTER_TO_INT(data)); item = itemlist_get_selected(); 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 = (nodeTypePtr)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.10.17/src/newsbin.h000066400000000000000000000025451261475620100157070ustar00rootroot00000000000000/** * @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); void on_popup_copy_to_newsbin(gpointer 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.10.17/src/node.c000066400000000000000000000307641261475620100151660ustar00rootroot00000000000000/** * @file node.c hierarchic feed list node handling * * 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 */ #include #include "common.h" #include "conf.h" #include "db.h" #include "debug.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" #include "ui/ui_tray.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 = (nodePtr)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; node_set_icon (node, NULL); /* initialize favicon file name */ 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); ui_tray_update (); liferea_shell_update_unread_stats (); } 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_set_icon (nodePtr node, gpointer icon) { if (node->icon) g_object_unref (node->icon); node->icon = icon; 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); /* 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.10.17/src/node.h000066400000000000000000000261521261475620100151670ustar00rootroot00000000000000/** * @file node.h hierarchic feed list node interface * * Copyright (C) 2003-2010 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; /**< pointer to pixmap, if there is a favicon */ 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; /** * Creates a new node structure. * * @returns the new node */ nodePtr node_new (struct nodeType *type); /** * Can be used to check whether an id is used or not. * * @param id the node id to check * * @returns the node with the given id (or NULL) */ nodePtr node_is_used_id (const gchar *id); /** * Node lookup by node id. Will report an error if the queried * id does not exist. * * @param id the node id to look up * * @returns the node with the given id (or NULL) */ nodePtr node_from_id (const gchar *id); /** * 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() * * @param node the node * @param parent the parent node (optional can be NULL) * @param position insert position (optional can be 0) */ void node_set_parent (nodePtr node, nodePtr parent, gint position); /** * 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. * * @param node the node * @param new_parent nodes new parent */ void node_reparent (nodePtr node, nodePtr new_parent); /** * Removes all data associated with the given node. * * @param node the node */ void node_remove (nodePtr node); /** * Attaches a data structure to the given node. * * @param node the node to attach to * @param data the structure */ void node_set_data(nodePtr node, gpointer data); /** * Attaches the subscription to the given node. * * @param node the node * @param subscription the subscription */ void node_set_subscription (nodePtr node, struct subscription *subscription); /** * Helper function to be used with node_foreach_child() * to mass-update subscriptions. * * @param node the node * @param user_data update flags */ void node_update_subscription (nodePtr node, gpointer user_data); /** * Helper function to be used with node_foreach_child() * to mass-auto-update subscriptions. * * @param node the node */ void node_auto_update_subscription (nodePtr node); /** * Helper function to be used with node_foreach_child() * to mass-auto-update subscriptions. * * @param node the node * @param now the current timestamp */ void node_reset_update_counter (nodePtr node, GTimeVal *now); /** * Determines whether node1 is an ancestor of node2 * * @param node1 the possible ancestor * @param node2 the possible child * @returns TRUE if node1 is ancestor of node2 */ gboolean node_is_ancestor(nodePtr node1, nodePtr node2); /** * Query the node's title for the feed list. * * @param node the node * * @returns the title */ const gchar * node_get_title(nodePtr node); /** * Sets the node's title for the feed list. * * @param node the node * @param title the title */ void node_set_title(nodePtr node, const gchar *title); /** * Update the number of items and unread items of a node from * the DB. This method ensures propagation to parent folders. * * @param node the node */ void node_update_counters(nodePtr node); /** * Recursively marks all items of the given node as read. * * @param node the node to process */ void node_mark_all_read(nodePtr node); /** * Assigns a new pixmaps as the favicon representing this node. * * @param node the node * @param icon a pixmap or NULL */ void node_set_icon(nodePtr node, gpointer icon); /** * 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 a pixmap or NULL */ gpointer node_get_icon(nodePtr 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. * * @param node the node * * @return a file name */ const gchar * node_get_favicon_file(nodePtr node); /** * Returns a new unused unique node id. * * @returns new id (to be free'd using g_free) */ gchar * node_new_id (void); /** * Query the unique id string of the node. * * @param node the node * * @returns id string */ const gchar *node_get_id (nodePtr node); /** * Set the unique id string of the node. * * @param node the node * @param id the id string */ void node_set_id(nodePtr node, const gchar *id); /** * Frees a given node structure. * * @param the node to free */ void node_free(nodePtr node); /** * 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. * * @param node the node to render * * @returns XHTML string */ gchar * node_default_render(nodePtr node); /** * Saves the given node to cache. * * @param node the node */ void node_save(nodePtr node); /** * Loads all items of the given node into memory. * The caller needs to free the item set using itemset_free() * * @param node the node * * @returns the item set */ itemSetPtr node_get_itemset(nodePtr node); /** * Node content rendering * * @param node the node * * @returns string with node rendered in HTML */ gchar * node_render(nodePtr node); /** * Called when updating favicons is requested. * * @param node the node */ void node_update_favicon (nodePtr node); /** * Change/Set the sort column of a given node. * * @param node the node * @param sortColumn sort column id * @param reversed TRUE if order should be reversed * * @returns TRUE if the passed settings were different from the previous ones */ gboolean node_set_sort_column (nodePtr node, nodeViewSortType sortColumn, gboolean reversed); /** * Change/Set the viewing mode of a given node. * * @param node the node * @param newMode viewing mode (NODE_VIEW_MODE_*) */ void node_set_view_mode(nodePtr node, nodeViewType newMode); /** * Query the effective viewing mode setting of a given mode. * When node viewing mode is set to default it will return the * configured default. * * @param node the node * * @returns viewing mode (NODE_VIEW_MODE_*) */ nodeViewType node_get_view_mode(nodePtr node); /** * Returns the base URL for the given node. * If it is a mixed item set NULL will be returned. * * @param node the node * * @returns base URL */ const gchar * node_get_base_url(nodePtr node); /** * Query whether a feed be added to the given node. * * @param node the node * * @returns TRUE if a feed can be added */ gboolean node_can_add_child_feed (nodePtr node); /** * Query whether a folder be added to the given node. * * @param node the 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); /** * Helper function to call node methods for all * children of a given node. The given function may * modify the children list. * * @param node node pointer whose children should be processed * @param func the function to process all found elements */ #define node_foreach_child(node, func) node_foreach_child_full(node,func,0,NULL) /** * Helper function to call node methods for all * children of a given node. The given function may * modify the children list. * * @param node node pointer whose children should be processed * @param func the function to process all found elements * @param user_data specifies the second argument that func should be passed */ #define node_foreach_child_data(node, func, user_data) node_foreach_child_full(node,func,1,user_data) #endif liferea-1.10.17/src/node_type.c000066400000000000000000000056671261475620100162330ustar00rootroot00000000000000/** * @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.10.17/src/node_type.h000066400000000000000000000077541261475620100162370ustar00rootroot00000000000000/** * @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 GdkPixbuf *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.10.17/src/node_view.h000066400000000000000000000022351261475620100162150ustar00rootroot00000000000000/** * @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.10.17/src/notification/000077500000000000000000000000001261475620100165515ustar00rootroot00000000000000liferea-1.10.17/src/notification/Makefile.am000066400000000000000000000006671261475620100206160ustar00rootroot00000000000000## 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) if WITH_LIBNOTIFY libnotify_a_CFLAGS = $(PACKAGE_CFLAGS) $(LIBNOTIFY_CFLAGS) libnotify_a_SOURCES = libnotify.c notification.c notification.h noinst_LIBRARIES = libnotify.a endif liferea-1.10.17/src/notification/libnotify.c000066400000000000000000000171231261475620100207200ustar00rootroot00000000000000/** * @file notif_libnotify.c notifications via libnotify * * Copyright (c) 2006, Norman Jonas * * 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 "conf.h" #include "debug.h" #include "item.h" #include "item_state.h" #include "feedlist.h" #include "node.h" #include "ui/liferea_shell.h" #include "ui/ui_common.h" #include "ui/feed_list_view.h" #include "ui/ui_tray.h" #include "notification/notification.h" static gboolean supports_actions = FALSE; static gboolean supports_append = FALSE; static void notif_libnotify_callback_open (NotifyNotification *n, gchar *action, gpointer user_data) { nodePtr node_p; g_assert(action != NULL); g_assert(strcmp(action, "open") == 0); node_p = node_from_id (user_data); if (node_p) feed_list_view_select (node_p); else ui_show_error_box (_("This feed does not exist anymore!")); notify_notification_close (n, NULL); liferea_shell_present (); } static void notif_libnotify_callback_mark_read (NotifyNotification *n, gchar *action, gpointer user_data) { nodePtr node; g_assert (action != NULL); g_assert (strcmp (action, "mark_read") == 0); node = node_from_id (user_data); if (node) { feedlist_mark_all_read (node); feedlist_reset_new_item_count (); item_state_set_all_popup (node->id); } else { ui_show_error_box (_("This feed does not exist anymore!")); } notify_notification_close (n, NULL); } static void notif_libnotify_callback_show_details (NotifyNotification *n, gchar *action, gpointer user_data) { nodePtr node_p; GList *list_p; itemPtr item_p; gchar *labelText_p; gchar *labelText_now_p = NULL; gchar *labelText_prev_p; gchar *labelHeadline_p; const gchar *labelURL_p; gint item_count = 0; g_assert (action != NULL); g_assert (strcmp(action, "show_details") == 0); node_p = node_from_id (user_data); if (node_p) { itemSetPtr itemSet = node_get_itemset (node_p); labelText_now_p = g_strdup (""); /* Gather the feed's headlines */ list_p = itemSet->ids; while (list_p) { item_p = item_load (GPOINTER_TO_UINT (list_p->data)); if (item_p->popupStatus && !item_p->readStatus) { item_p->popupStatus = FALSE; item_count += 1; labelHeadline_p = g_strdup (item_get_title (item_p)); if (labelHeadline_p == NULL ) { labelHeadline_p = g_strdup_printf (_("This news entry has no headline")); } labelURL_p = item_get_base_url (item_p); if (labelURL_p) { labelText_p = g_strdup_printf ("%s %s\n", labelHeadline_p, labelURL_p, _("Visit")); } else { labelText_p = g_strdup_printf ("%s\n", labelHeadline_p); } labelText_prev_p = labelText_now_p; labelText_now_p = g_strconcat(labelText_now_p, labelText_p, NULL); g_free(labelHeadline_p); g_free(labelText_p); g_free(labelText_prev_p); } item_unload (item_p); list_p = g_list_next (list_p); } itemset_free (itemSet); if (item_count == 0) { g_free (labelText_now_p); return; } } else { ui_show_error_box(_("This feed does not exist anymore!")); } notify_notification_close (n, NULL); if (node_p) { // notify_notification_update ( n, node_get_title(node_p), labelText_now_p, NULL); // notify_notification_clear_actions(n); n = notify_notification_new (node_get_title (node_p), labelText_now_p, NULL); notify_notification_set_icon_from_pixbuf (n, node_get_icon (node_p)); notify_notification_set_category (n, "feed"); notify_notification_set_timeout (n, NOTIFY_EXPIRES_NEVER); if (supports_actions) { notify_notification_add_action (n, "open", _("Open feed"), (NotifyActionCallback)notif_libnotify_callback_open, node_p->id, NULL); notify_notification_add_action (n, "mark_read", _("Mark all as read"), (NotifyActionCallback)notif_libnotify_callback_mark_read, node_p->id, NULL); } if (!notify_notification_show (n, NULL)) { g_warning ("libnotify.c - failed to update notification via libnotify\n"); } g_free (labelText_now_p); } } static gboolean notif_libnotify_init (void) { GList *caps; /* Check whether the notification daemon supports actions, per Actions in http://www.galago-project.org/specs/notification/0.9/x81.html */ if (notify_init ("liferea")) { caps = notify_get_server_caps (); if (g_list_find_custom (caps, "actions", (GCompareFunc) strcmp)) supports_actions = TRUE; if (g_list_find_custom (caps, "append", (GCompareFunc) strcmp)) supports_append = TRUE; g_list_foreach (caps, (GFunc)g_free, NULL); g_list_free (caps); return TRUE; } else { debug0 (DEBUG_GUI, "libnotify.c: notify_init returned FALSE"); return FALSE; } } static void notif_libnotify_deinit (void) { notify_uninit(); } static void notif_libnotify_node_has_new_items (nodePtr node, gboolean enforced) { itemSetPtr itemSet; GList *iter; NotifyNotification *n; gchar *labelSummary_p; gint item_count = 0; gboolean show_popup_windows; conf_get_bool_value(SHOW_POPUP_WINDOWS, &show_popup_windows); if (!show_popup_windows && !enforced) return; /* Count updated feed */ itemSet = node_get_itemset (node); iter = itemSet->ids; while (iter) { itemPtr item = item_load (GPOINTER_TO_UINT (iter->data)); if (item->popupStatus && !item->readStatus) item_count++; item_unload (item); iter = g_list_next (iter); } itemset_free (itemSet); if (item_count == 0) return; labelSummary_p = g_strdup_printf (ngettext ("%s has %d update", "%s has %d updates", item_count), node_get_title (node), item_count); n = notify_notification_new (_("Feed Update"), labelSummary_p, "liferea"); g_free (labelSummary_p); if (supports_append) { notify_notification_set_hint_string(n, "append", "allow"); } else { notify_notification_set_icon_from_pixbuf (n, node_get_icon (node)); } notify_notification_set_timeout (n, NOTIFY_EXPIRES_DEFAULT); if (supports_actions) { notify_notification_add_action (n, "show_details", _("Show details"), (NotifyActionCallback)notif_libnotify_callback_show_details, node->id, NULL); notify_notification_add_action (n, "open", _("Open feed"), (NotifyActionCallback)notif_libnotify_callback_open, node->id, NULL); notify_notification_add_action (n, "mark_read", _("Mark all as read"), (NotifyActionCallback)notif_libnotify_callback_mark_read, node->id, NULL); } notify_notification_set_category (n, "feed"); if (!notify_notification_show (n, NULL)) g_warning ("notif_libnotify.c - failed to send notification via libnotify"); } struct notificationPlugin libnotify_plugin = { "libnotify", notif_libnotify_init, notif_libnotify_deinit, notif_libnotify_node_has_new_items, }; liferea-1.10.17/src/notification/notification.c000066400000000000000000000026321261475620100214060ustar00rootroot00000000000000/** * @file notification.c generic notification handling * * 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 */ #include #include #include #include "common.h" #include "debug.h" #include "node.h" #include "notification/notification.h" notificationPluginPtr notificationPlugin = NULL; void notification_plugin_register (notificationPluginPtr plugin) { g_return_if_fail (!notificationPlugin); /* add plugin to notification plugin */ notificationPlugin = plugin; g_return_if_fail ((notificationPlugin->plugin_init)()); } void notification_node_has_new_items(nodePtr node, gboolean enforced) { (notificationPlugin->node_has_new_items)(node, enforced); } liferea-1.10.17/src/notification/notification.h000066400000000000000000000043011261475620100214060ustar00rootroot00000000000000/** * @file notification.h generic notification interface * * Copyright (C) 2006 Norman Jonas * 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 _NOTIFICATION_H #define _NOTIFICATION_H #include #include #include "node.h" typedef enum { NOTIFICATION_TYPE_POPUP, NOTIFICATION_TYPE_TRAY, } notificationType; typedef struct notificationPlugin { /** * Notification plugin name */ const gchar *name; /** * Called once during plugin initialization. * If the plugin returns FALSE it won't be * added to the list of the available * notification plugins. */ gboolean (*plugin_init)(void); /** * Called upon program shutdown. */ void (*plugin_deinit)(void); /** * This callback notifies the plugin that the given * node was updated and contains new items (items * with newStatus set to TRUE. * * @param node the updated node * @param enforced TRUE if popup is to be enforced * regardless of global preference */ void (*node_has_new_items)(nodePtr node, gboolean enforced); } *notificationPluginPtr; extern struct notificationPlugin libnotify_plugin; /** * "New items" event callback. * * @param node the node that has new items * @param enforced TRUE if notification is to be enforced * regardless of global preference */ void notification_node_has_new_items (nodePtr node, gboolean enforced); void notification_plugin_register (notificationPluginPtr plugin); #endif liferea-1.10.17/src/parsers/000077500000000000000000000000001261475620100155425ustar00rootroot00000000000000liferea-1.10.17/src/parsers/Makefile.am000066400000000000000000000015771261475620100176100ustar00rootroot00000000000000## 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.10.17/src/parsers/atom10.c000066400000000000000000000641341261475620100170170ustar00rootroot00000000000000/** * @file atom10.c Atom 1.0 Parser * * Copyright (C) 2005-2006 Nathan Conrad * 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 "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; name = g_strdup (_("Invalid Atom feed: unknown author")); } 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, "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); 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.10.17/src/parsers/atom10.h000066400000000000000000000017731261475620100170240ustar00rootroot00000000000000/** * @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.10.17/src/parsers/cdf_channel.c000066400000000000000000000130641261475620100201360ustar00rootroot00000000000000/** * @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.10.17/src/parsers/cdf_channel.h000066400000000000000000000021231261475620100201350ustar00rootroot00000000000000/** * @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.10.17/src/parsers/cdf_item.c000066400000000000000000000066041261475620100174660ustar00rootroot00000000000000/** * @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.10.17/src/parsers/cdf_item.h000066400000000000000000000017701261475620100174720ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_admin.c000066400000000000000000000040771261475620100175060ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_admin.h000066400000000000000000000016341261475620100175070ustar00rootroot00000000000000/* 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.10.17/src/parsers/ns_ag.c000066400000000000000000000057611261475620100170060ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_ag.h000066400000000000000000000016231261475620100170040ustar00rootroot00000000000000/* 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.10.17/src/parsers/ns_blogChannel.c000066400000000000000000000147031261475620100206270ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_blogChannel.h000066400000000000000000000017111261475620100206270ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_cC.c000066400000000000000000000060571261475620100167430ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_cC.h000066400000000000000000000016661261475620100167510ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_content.c000066400000000000000000000036411261475620100200640ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_content.h000066400000000000000000000016761261475620100200770ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_dc.c000066400000000000000000000144031261475620100167760ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_dc.h000066400000000000000000000016721261475620100170070ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_georss.c000066400000000000000000000035101261475620100177070ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_georss.h000066400000000000000000000016571261475620100177260ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_itunes.c000066400000000000000000000060561261475620100177240ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_itunes.h000066400000000000000000000016641261475620100177310ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_media.c000066400000000000000000000072771261475620100175020ustar00rootroot00000000000000/** * @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); } // 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.10.17/src/parsers/ns_media.h000066400000000000000000000016651261475620100175020ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_photo.c000066400000000000000000000055031261475620100175420ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_photo.h000066400000000000000000000017331261475620100175500ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_slash.c000066400000000000000000000054201261475620100175210ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_slash.h000066400000000000000000000017551261475620100175350ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_syn.c000066400000000000000000000053301261475620100172200ustar00rootroot00000000000000/** * @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; gint frequency = 1; period = subscription_get_default_update_interval (ctxt->subscription); 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 = 31*7*24*60; else if (!xmlStrcmp (tmp, BAD_CAST"yearly")) period = 365*24*60; xmlFree (tmp); } } else if (!xmlStrcmp (cur->name, BAD_CAST"updateFrequency")) { tmp = xmlNodeListGetString (cur->doc, cur->xmlChildrenNode, 1); if (tmp) { frequency = atoi ((gchar *)tmp); xmlFree (tmp); } } /* postprocessing */ if (0 != frequency) period /= frequency; subscription_set_default_update_interval (ctxt->subscription, period); } 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.10.17/src/parsers/ns_syn.h000066400000000000000000000017541261475620100172330ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_trackback.c000066400000000000000000000037211261475620100203360ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_trackback.h000066400000000000000000000017031261475620100203410ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_wfw.c000066400000000000000000000037051261475620100172160ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ns_wfw.h000066400000000000000000000016661261475620100172270ustar00rootroot00000000000000/** * @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.10.17/src/parsers/ocs_ns.h000066400000000000000000000031361261475620100172020ustar00rootroot00000000000000/* OCS namespace handler interface Copyright (C) 2003 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 _OCS_NS_H #define _OCS_NS_H #include "ocs_dir.h" #include #include /* -------------------------------------------------------- */ /* interface definitions for OCS namespace handler */ /* -------------------------------------------------------- */ /* definition of various namespace tag handlers */ typedef void (*parseOCSTagFunc) (gpointer p, xmlNodePtr cur); /** struct used to register RDF namespace handler */ typedef struct OCSNsHandler { gchar *prefix; /**< namespace prefix */ parseOCSTagFunc parseDirectoryTag; /**< directory tag parsing&output method */ parseOCSTagFunc parseDirEntryTag; /**< directory entry tag parsing&output method */ parseOCSTagFunc parseFormatTag; /**< format tag parsing&output method */ } OCSNsHandler; #endif liferea-1.10.17/src/parsers/pie_entry.c000066400000000000000000000113311261475620100177030ustar00rootroot00000000000000/** * @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.10.17/src/parsers/pie_entry.h000066400000000000000000000017461261475620100177210ustar00rootroot00000000000000/** * @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.10.17/src/parsers/pie_feed.c000066400000000000000000000242361261475620100174550ustar00rootroot00000000000000/** * @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.10.17/src/parsers/pie_feed.h000066400000000000000000000024501261475620100174540ustar00rootroot00000000000000/** * @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.10.17/src/parsers/rss_channel.c000066400000000000000000000300211261475620100202010ustar00rootroot00000000000000/** * @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))) { subscription_set_default_update_interval(ctxt->subscription, 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.10.17/src/parsers/rss_channel.h000066400000000000000000000020501261475620100202070ustar00rootroot00000000000000/** * @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.10.17/src/parsers/rss_item.c000066400000000000000000000133001261475620100175300ustar00rootroot00000000000000/** * @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.10.17/src/parsers/rss_item.h000066400000000000000000000017371261475620100175500ustar00rootroot00000000000000/** * @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.10.17/src/plugins_engine.c000066400000000000000000000103621261475620100172370ustar00rootroot00000000000000/* * 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 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; engine->priv = G_TYPE_INSTANCE_GET_PRIVATE (engine, LIFEREA_TYPE_PLUGINS_ENGINE, LifereaPluginsEnginePrivate); peas_engine_enable_loader (PEAS_ENGINE (engine), "python"); 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); } 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.10.17/src/plugins_engine.h000066400000000000000000000042261261475620100172460ustar00rootroot00000000000000/* * plugins_engine.h: Liferea Plugins using libpeas * * 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 _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); G_END_DECLS #endif liferea-1.10.17/src/render.c000066400000000000000000000351201261475620100155070ustar00rootroot00000000000000/** * @file render.c 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 */ #ifdef HAVE_CONFIG_H # include #endif #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; } void render_init_theme_colors (GtkWidget *widget) { GtkStyle *style; GdkColor *color; gint textAvg, bgAvg; style = gtk_widget_get_style (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])); } color = NULL; gtk_widget_style_get (widget, "link-color", &color, NULL); if (color) { themeColors = g_slist_append (themeColors, render_calculate_theme_color ("GTK-COLOR-NORMAL-LINK", *color)); debug0 (DEBUG_HTML, "successfully set the color for links"); gdk_color_free (color); } color = NULL; gtk_widget_style_get (widget, "visited-link-color", &color, NULL); if (color) { themeColors = g_slist_append (themeColors, render_calculate_theme_color("GTK-COLOR-VISITED-LINK", *color)); debug0 (DEBUG_HTML, "successfully set the color for visited links"); gdk_color_free (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); if (xmlBufferLength (buf->buffer) > 0) output = xmlCharStrdup (xmlBufferContent(buf->buffer)); 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.10.17/src/render.h000066400000000000000000000053151261475620100155170ustar00rootroot00000000000000/** * @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.10.17/src/rule.c000066400000000000000000000123631261475620100152030ustar00rootroot00000000000000/** * @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.10.17/src/rule.h000066400000000000000000000045421261475620100152100ustar00rootroot00000000000000/** * @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.10.17/src/social.c000066400000000000000000000171351261475620100155100ustar00rootroot00000000000000/** * @file social.c social networking integration * * 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 */ #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 ("Blinklist", "http://www.blinklist.com/index.php?Action=Blink/addblink.php&Title=%s&Url=%s", TRUE, TRUE); 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 ("del.icio.us", "http://del.icio.us/post?url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("digg", "http://digg.com/submit?phase=2&url=%s", FALSE, FALSE); social_register_bookmark_site ("diigo", "http://www.diigo.com/post?url=%s&title=%s&desc=", TRUE, FALSE); social_register_bookmark_site ("ekstreme", "http://ekstreme.com/socializer/?url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("Facebook", "http://www.facebook.com/share.php?u=%s", FALSE, FALSE); social_register_bookmark_site ("FeedMarker", "http://www.feedmarker.com/admin.php?do=bookmarklet_mark&url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("Feed Me Links!", "http://feedmelinks.com/categorize?from=toolbar&op=submit&name=%s&url=%s&version=0.7", TRUE, TRUE); social_register_bookmark_site ("Give a Link", "http://www.givealink.org/cgi-pub/bookmarklet/bookmarkletLogin.cgi?&uri=%s&title=%s", TRUE, 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 ("Gravee", "http://www.gravee.com/account/bookmarkpop?u=%s&t=%s", TRUE, FALSE); social_register_bookmark_site ("Hyperlinkomatic","http://www.hyperlinkomatic.com/lm2/add.html?LinkTitle=%s&LinkUrl=%s", TRUE, TRUE); social_register_bookmark_site ("identi.ca" ,"http://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 ("igooi", "http://www.igooi.com/addnewitem.aspx?self=1&noui=yes&jump=close&url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("Instapaper", "https://www.instapaper.com/edit?url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("Lilisto", "http://lister.lilisto.com/?t=%s&l=%s", TRUE, TRUE); social_register_bookmark_site ("Linkagogo", "http://www.linkagogo.com/go/AddNoPopup?title=%s&url=%s", TRUE, TRUE); social_register_bookmark_site ("Linkroll", "http://www.linkroll.com/index.php?action=insertLink&url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("maple", "http://www.maple.nu/bookmarks/bookmarklet?bookmark[url]=%s&bookmark[name]=%s", TRUE, FALSE); social_register_bookmark_site ("Mister Wong", "http://www.mister-wong.de/index.php?action=addurl&bm_url=%s&bm_description=%s", TRUE, FALSE); social_register_bookmark_site ("netvouz", "http://netvouz.com/action/submitBookmark?url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("Newsvine", "http://www.newsvine.com/_wine/save?u=%s&h=%s", TRUE, FALSE); social_register_bookmark_site ("reddit", "http://reddit.com/submit?url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("Segnalo", "http://segnalo.com/post.html.php?url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("Simpy", "http://simpy.com/simpy/LinkAdd.do?title=%s&href=%s&v=6&src=bookmarklet", TRUE, TRUE); social_register_bookmark_site ("Slashdot", "http://slashdot.org/slashdot-it.pl?op=basic&url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("Spurl", "http://www.spurl.net/spurl.php?v=3&title=%s&url=%s", TRUE, TRUE); social_register_bookmark_site ("Squidoo", "http://www.squidoo.com/lensmaster/bookmark?%s", FALSE, FALSE); social_register_bookmark_site ("StumbleUpon", "http://www.stumbleupon.com/submit/?url=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("tagtooga", "http://www.tagtooga.com/tapp/db.exe?c=jsEntryForm&b=fx&title=%s&url=%s", TRUE, TRUE); social_register_bookmark_site ("Technorati", "http://technorati.com/faves/?add=%s", FALSE, FALSE); social_register_bookmark_site ("Twitter", "http://twitter.com/home?status=%s", FALSE, FALSE); social_register_bookmark_site ("wists", "http://www.wists.com/r.php?r=%s&title=%s", TRUE, FALSE); social_register_bookmark_site ("Yahoo My Web", "http://myweb2.search.yahoo.com/myresults/bookmarklet?u=%s&t=%s", TRUE, FALSE); social_register_bookmark_site ("zurpy", "http://tag.zurpy.com/?box=1&url=%s&title=%s", TRUE, FALSE); 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.10.17/src/social.h000066400000000000000000000047151261475620100155150ustar00rootroot00000000000000/** * @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; /** * Initialize social bookmarking support. */ void social_init (void); /** * Frees social bookmarking structures */ void social_free (void); /** * Change the site used for bookmarking. * * @param name name of the site */ void social_set_bookmark_site (const gchar *name); /** * Add a new site to the social bookmarking site list. * * @param name descriptive name * @param url valid HTTP GET URL with one or two %s format codes * @param title TRUE if site accepts titles (URL must have two %s format codes!) * @param titleFirst TRUE if title is first format code (title must be TRUE) */ void social_register_bookmark_site (const gchar *name, const gchar *url, gboolean title, gboolean titleFirst); /** * Returns a social bookmarking link for the configured site * * @param link the link to encode (mandatory) * @param title the title to encode (mandatory) * * @returns new URL string */ gchar * social_get_bookmark_url (const gchar *link, const gchar *title); /** * Add a social bookmark for the link of the given item * * @param item the item */ void social_add_bookmark (const itemPtr item); /** * Returns the name of the currently configured social bookmarking site. */ const gchar * social_get_bookmark_site (void); #endif liferea-1.10.17/src/subscription.c000066400000000000000000000436501261475620100167630ustar00rootroot00000000000000/** * @file subscription.c common subscription handling * * 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 "subscription.h" #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_set_icon (node, favicon_load_from_cache (node->id)); 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; /* 1. preprocessing */ g_assert (subscription->updateJob); /* update the subscription URL on permanent redirects */ if ((301 == result->httpstatus) && result->source && !g_str_equal (result->source, subscription->updateJob->request->source)) { debug2 (DEBUG_UPDATE, "The URL of \"%s\" has changed permanently and was updated with \"%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. 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); /* 4. 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); itemview_update_node_info (subscription->node); itemview_update (); feed_list_node_update (subscription->node->id); db_subscription_update (subscription); db_node_update (subscription->node); feedlist_schedule_save (); } 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.10.17/src/subscription.h000066400000000000000000000175341261475620100167720ustar00rootroot00000000000000/** * @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.10.17/src/subscription_type.h000066400000000000000000000044701261475620100200260ustar00rootroot00000000000000/** * @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.10.17/src/ui/000077500000000000000000000000001261475620100145005ustar00rootroot00000000000000liferea-1.10.17/src/ui/Makefile.am000066400000000000000000000024431261475620100165370ustar00rootroot00000000000000## 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_indicator.c ui_indicator.h \ ui_tray.c ui_tray.h \ ui_update.c ui_update.h liferea-1.10.17/src/ui/auth_dialog.c000066400000000000000000000105111261475620100171220ustar00rootroot00000000000000/** * @file auth_dialog.c authentication dialog * * 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 "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 (BAD_CAST 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 = 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.ui", "authdialog"); 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.10.17/src/ui/auth_dialog.h000066400000000000000000000040501261475620100171300ustar00rootroot00000000000000/** * @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.10.17/src/ui/browser_tabs.c000066400000000000000000000166161261475620100173520ustar00rootroot00000000000000/** * @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" /** All widget elements and state of a tab */ typedef struct tabInfo { GtkWidget *label; /**< the tab label */ GtkWidget *widget; /**< the embedded child widget */ LifereaHtmlView *htmlview; /**< the tabs HTML view widget */ } tabInfo; /* 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)) 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_class_init (BrowserTabsClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = browser_tabs_finalize; 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.10.17/src/ui/browser_tabs.h000066400000000000000000000055061261475620100173530ustar00rootroot00000000000000/** * @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); /** * Returns the singleton browser tabs instance. * * @param notebook GtkNotebook widget to use */ BrowserTabs * browser_tabs_create (GtkNotebook *notebook); /** * Adds a new tab with the specified URL and title. * * @param url URL to be loaded in new tab (can be NULL to do nothing) * @param title title of the tab to be created * @param activate Should the new tab be put in the foreground? * * @returns the newly created HTML view */ LifereaHtmlView * browser_tabs_add_new (const gchar *url, const gchar *title, gboolean activate); /** * makes the headline tab visible */ void browser_tabs_show_headlines (void); /** * 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 HTML view widget */ LifereaHtmlView * browser_tabs_get_active_htmlview (void); /** * Requests the tab to change zoom level. * * @param in TRUE if zooming in, FALSE for zooming out */ void browser_tabs_do_zoom (gboolean in); G_END_DECLS #endif liferea-1.10.17/src/ui/enclosure_list_view.c000066400000000000000000000412471261475620100207400ustar00rootroot00000000000000/** * @file enclosure-list-view.c enclosures/podcast handling GUI * * Copyright (C) 2005-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 "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); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (elv->priv->treeview), TRUE); 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; /* FIXME: this is ugly, needed due to race between EnclosureListView setup by LifereaShell and last item selection */ 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) { // 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/")))) { 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); 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 */ 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_STOCK_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 (NULL, "enchandlerdialog"); 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; gboolean found = FALSE; encTypePtr etp = 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); /* FIXME: improve following check to first try to match MIME types and if no match was found to check for file extensions afterwards... */ /* 2.) Search for type configuration based on MIME or file extension... */ iter = (GSList *)enclosure_mime_types_get (); while (iter) { etp = (encTypePtr)(iter->data); if (enclosure->mime && etp->mime) { /* match know MIME types */ if (!strcmp(enclosure->mime, etp->mime)) { found = TRUE; break; } } else { /* match known file extensions */ if (!strcmp(typestr, etp->extension)) { found = TRUE; break; } } iter = g_slist_next (iter); } if (found) { enclosure_download (etp, 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.10.17/src/ui/enclosure_list_view.h000066400000000000000000000063321261475620100207410ustar00rootroot00000000000000/** * @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.10.17/src/ui/feed_list_node.c000066400000000000000000000244241261475620100176150ustar00rootroot00000000000000/** * @file feed_list_node.c 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 */ #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 = (GtkTreeIter *)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; switch (labeltype) { case NODE_CAPABILITY_SHOW_UNREAD_COUNT | NODE_CAPABILITY_SHOW_ITEM_COUNT: /* treat like show unread count */ case NODE_CAPABILITY_SHOW_UNREAD_COUNT: label = g_markup_printf_escaped ("%s", node_get_title (node)); count = g_strdup_printf (" %u ", countColor?countColor:"", node->unreadCount); break; case NODE_CAPABILITY_SHOW_ITEM_COUNT: label = g_markup_printf_escaped ("%s", node_get_title (node)); count = g_strdup_printf (" %u ", countColor?countColor:"", node->itemCount); break; default: label = g_markup_printf_escaped ("%s", node_get_title (node)); 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 (NULL, "nodenamedialog"); 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); } liferea-1.10.17/src/ui/feed_list_node.h000066400000000000000000000052441261475620100176210ustar00rootroot00000000000000/** * @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 "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); #endif liferea-1.10.17/src/ui/feed_list_view.c000066400000000000000000000335041261475620100176410ustar00rootroot00000000000000/** * @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_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_get_title(node)); 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)); if (node) { 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); } else { liferea_shell_update_feed_menu (TRUE, FALSE, FALSE); } } 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_view_delete_prompt (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; return strcmp (n1->title, n2->title); } void feed_list_view_sort_folder (nodePtr folder) { folder->children = g_slist_sort (folder->children, feed_list_view_sort_folder_compare); feed_list_node_reload_feedlist (); 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, GDK_TYPE_PIXBUF, 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, "pixbuf", 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_AUTOSIZE); gtk_tree_view_column_set_sizing (column2, GTK_TREE_VIEW_COLUMN_AUTOSIZE); 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); } } /* delete feed callbacks */ static void feed_list_view_delete_response_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_view_delete_prompt (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), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_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_view_delete_response_cb), node); } void on_menu_properties (GtkMenuItem *menuitem, gpointer user_data) { nodePtr node = feedlist_get_selected (); NODE_TYPE (node)->request_properties (node); } void on_menu_delete(GtkWidget *widget, gpointer user_data) { feed_list_view_delete_prompt (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 (void) { nodePtr node = feedlist_get_selected (); if (node) do_menu_update (node); else g_warning ("on_menu_update: no feedlist selected"); } void on_menu_update_all(void) { do_menu_update (feedlist_get_root ()); } void on_menu_allread (GtkWidget *widget, gpointer user_data) { feedlist_mark_all_read (feedlist_get_selected ()); } void on_menu_allfeedsread (GtkWidget *widget, gpointer user_data) { feedlist_mark_all_read (feedlist_get_root ()); } void on_menu_feed_new (GtkMenuItem *menuitem, gpointer user_data) { node_type_request_interactive_add (feed_get_node_type ()); } void on_new_plugin_activate (GtkMenuItem *menuitem, gpointer user_data) { node_type_request_interactive_add (node_source_get_node_type ()); } void on_new_newsbin_activate (GtkMenuItem *menuitem, gpointer user_data) { node_type_request_interactive_add (newsbin_get_node_type ()); } void on_menu_folder_new (GtkMenuItem *menuitem, gpointer user_data) { node_type_request_interactive_add (folder_get_node_type ()); } void on_new_vfolder_activate (GtkMenuItem *menuitem, gpointer user_data) { node_type_request_interactive_add (vfolder_get_node_type ()); } void on_feedlist_reduced_activate (GtkToggleAction *menuitem, gpointer user_data) { feed_list_view_set_reduce_mode (gtk_toggle_action_get_active (menuitem)); } liferea-1.10.17/src/ui/feed_list_view.h000066400000000000000000000056271261475620100176530ustar00rootroot00000000000000/** * @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); /** * 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 ptr the node to delete */ void feed_list_view_delete_prompt (nodePtr ptr); /** * Sort the feeds of the given folder node. * * @param folder the folder */ void feed_list_view_sort_folder (nodePtr folder); void on_menu_delete (GtkWidget *widget, gpointer user_data); void on_menu_update (void); void on_menu_update_all (void); void on_menu_allread (GtkWidget *widget, gpointer user_data); void on_menu_allfeedsread (GtkWidget *widget, gpointer user_data); void on_menu_properties (GtkMenuItem *menuitem, gpointer user_data); void on_menu_feed_new (GtkMenuItem *menuitem, gpointer user_data); void on_menu_folder_new (GtkMenuItem *menuitem, gpointer user_data); void on_new_plugin_activate (GtkMenuItem *menuitem, gpointer user_data); void on_new_newsbin_activate (GtkMenuItem *menuitem, gpointer user_data); void on_new_vfolder_activate (GtkMenuItem *menuitem, gpointer user_data); void on_feedlist_reduced_activate (GtkToggleAction *menuitem, gpointer user_data); #endif liferea-1.10.17/src/ui/gedit-close-button.c000066400000000000000000000052261261475620100203610ustar00rootroot00000000000000/* * 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.10.17/src/ui/gedit-close-button.h000066400000000000000000000042541261475620100203660ustar00rootroot00000000000000/* * 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.10.17/src/ui/icons.c000066400000000000000000000102031261475620100157530ustar00rootroot00000000000000/** * @file icons.c Using icons from theme and package pixmaps * * 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 "icons.h" #ifdef HAVE_CONFIG_H # include #endif #include "common.h" static GdkPixbuf *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; } static GdkPixbuf * icon_get_from_theme (GtkIconTheme *icon_theme, const gchar *name, gint size) { GError *error = NULL; GdkPixbuf *pixbuf; pixbuf = gtk_icon_theme_load_icon (icon_theme, name, /* icon name */ size, /* size */ 0, /* flags */ &error); if (!pixbuf) { g_warning ("Couldn't load icon: %s", error->message); g_error_free (error); } return pixbuf; } void icons_load (void) { GtkIconTheme *icon_theme; GtkWidget *widget; gint i; /* first try to load icons from theme */ static const gchar *iconThemeNames[] = { NULL, /* ICON_UNREAD */ "emblem-important", /* ICON_FLAG */ NULL, /* ICON_AVAILABLE */ NULL, /* ICON_AVAILABLE_OFFLINE */ NULL, /* ICON_UNAVAILABLE */ NULL, /* ICON_DEFAULT */ "folder", /* ICON_FOLDER */ "folder-saved-search", /* ICON_VFOLDER */ NULL, /* ICON_NEWSBIN */ NULL, /* ICON_EMPTY */ NULL, /* ICON_EMPTY_OFFLINE */ "gtk-connect", /* ICON_ONLINE */ "gtk-disconnect", /* ICON_OFFLINE */ "mail-attachment", /* ICON_ENCLOSURE */ NULL }; icon_theme = gtk_icon_theme_get_default (); for (i = 0; i < MAX_ICONS; i++) if (iconThemeNames[i]) icons[i] = icon_get_from_theme (icon_theme, iconThemeNames[i], 16); /* and then load own default icons */ static const gchar *iconNames[] = { "unread.png", /* ICON_UNREAD */ "flag.png", /* ICON_FLAG */ "available.png", /* ICON_AVAILABLE */ "available_offline.png", /* ICON_AVAILABLE_OFFLINE */ NULL, /* ICON_UNAVAILABLE */ "default.png", /* ICON_DEFAULT */ "directory.png", /* ICON_FOLDER */ "vfolder.png", /* ICON_VFOLDER */ "newsbin.png", /* ICON_NEWSBIN */ "empty.png", /* ICON_EMPTY */ "empty_offline.png", /* ICON_EMPTY_OFFLINE */ "online.png", /* ICON_ONLINE */ "offline.png", /* ICON_OFFLINE */ "attachment.png", /* ICON_ENCLOSURE */ NULL }; for (i = 0; i < MAX_ICONS; i++) if (!icons[i]) icons[i] = icon_create_from_file (iconNames[i]); /* set up icons that are build from stock */ widget = gtk_button_new (); icons[ICON_UNAVAILABLE] = gtk_widget_render_icon (widget, GTK_STOCK_DIALOG_ERROR, GTK_ICON_SIZE_MENU, ""); gtk_widget_destroy (widget); } const GdkPixbuf * icon_get (lifereaIcon icon) { return icons[icon]; } liferea-1.10.17/src/ui/icons.h000066400000000000000000000033061261475620100157660ustar00rootroot00000000000000/** * @file icons.c Using icons from theme and package pixmaps * * 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 _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; /** * Load all icons from theme and Liferea pixmaps. * * Must be called once before ui_common_get_icon() may be used! */ void icons_load (void); /** * Returns a GdkPixbuf for the requested item. * * @param icon the icon * * @returns GdkPixbuf */ const GdkPixbuf * icon_get (lifereaIcon icon); /** * Takes a filename and tries to load the image into a GdkPixbuf. * * @param filename the filename * * @returns a new pixbuf or NULL */ GdkPixbuf * icon_create_from_file (const gchar *filename); #endif liferea-1.10.17/src/ui/item_list_view.c000066400000000000000000000707401261475620100176770ustar00rootroot00000000000000/** * @file item_list_view.c presenting items in a GtkTreeView * * Copyright (C) 2004-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 */ #include "ui/item_list_view.h" #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "browser.h" #include "common.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 "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_UNREAD, /**< Flag whether "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_selected (open_link_target_type open_link_target) { itemPtr item; item = itemlist_get_selected (); 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!")); item_unload (item); } else { liferea_shell_set_important_status_bar (_("No item has been selected")); } } #define ITEM_LIST_VIEW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), ITEM_LIST_VIEW_TYPE, ItemListViewPrivate)) struct ItemListViewPrivate { GtkTreeView *treeview; GHashTable *item_id_to_iter; /**< hash table used for fast item id->tree iter lookup */ gboolean batch_mode; /**< TRUE if we are in batch adding mode */ GtkTreeStore *batch_itemstore; /**< GtkTreeStore prepared unattached and to be set on update() */ }; 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); if (priv->item_id_to_iter) g_hash_table_destroy (priv->item_id_to_iter); if (priv->batch_itemstore) g_object_unref (priv->batch_itemstore); 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 */ gboolean item_list_view_contains_id (ItemListView *ilv, gulong id) { return (NULL != g_hash_table_lookup (ilv->priv->item_id_to_iter, GUINT_TO_POINTER (id))); } 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; } static gboolean item_list_view_id_to_iter (ItemListView *ilv, gulong id, GtkTreeIter *iter) { GtkTreeIter *old_iter; old_iter = g_hash_table_lookup (ilv->priv->item_id_to_iter, GUINT_TO_POINTER (id)); if (!old_iter) return FALSE; *iter = *old_iter; return TRUE; } 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: sortColumn = IS_LABEL; break; case NODE_VIEW_SORT_BY_PARENT: sortColumn = IS_PARENT; 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_UINT64, /* IS_TIME */ G_TYPE_STRING, /* IS_TIME_STR */ G_TYPE_STRING, /* IS_LABEL */ GDK_TYPE_PIXBUF, /* IS_STATEICON */ G_TYPE_ULONG, /* IS_NR */ G_TYPE_POINTER, /* IS_PARENT */ GDK_TYPE_PIXBUF, /* IS_FAVICON */ GDK_TYPE_PIXBUF, /* IS_ENCICON */ G_TYPE_BOOLEAN, /* IS_ENCLOSURE */ G_TYPE_POINTER, /* IS_SOURCE */ G_TYPE_UINT, /* IS_STATE */ G_TYPE_INT, /* ITEMSTORE_UNREAD */ 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)) item = item_load (item_list_view_iter_to_id (ITEM_LIST_VIEW (user_data), &iter)); liferea_shell_update_item_menu (NULL != item); if (item) itemlist_selection_changed (item); } 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); iter = g_hash_table_lookup (ilv->priv->item_id_to_iter, GUINT_TO_POINTER (item->id)); if (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); g_hash_table_remove (ilv->priv->item_id_to_iter, GUINT_TO_POINTER (item->id)); } else { g_warning ("Fatal: item to be removed not found in iter lookup hash!"); } } /* 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_id_to_iter) g_hash_table_destroy (ilv->priv->item_id_to_iter); ilv->priv->item_id_to_iter = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free); /* 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 GdkPixbuf *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_strdup (title)); 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_STR, time_str, IS_STATEICON, state_icon, ITEMSTORE_UNREAD, item->readStatus ? PANGO_WEIGHT_NORMAL : PANGO_WEIGHT_BOLD, ITEMSTORE_ALIGN, item_list_title_alignment (title), -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) { g_hash_table_foreach (ilv->priv->item_id_to_iter, item_list_view_update_item_foreach, (gpointer)ilv); } 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 (gtk_tree_view_get_column (ilv->priv->treeview, 1), 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_remove_item_activate(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_UNREAD, &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, NULL, 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: column = gtk_tree_view_get_column (ilv->priv->treeview, 0); if (column) { /* Allow flag toggling when left clicking in the flagging column. We depend on the fact that the state column is the first!!! */ if (event->x <= gtk_tree_view_column_get_width (column)) { 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: item_list_view_select (ilv, item); 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_Itemlist_row_activated (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) { launch_item_selected (DEFAULT); } GtkTreeView * item_list_view_get_widget (ItemListView *ilv) { return ITEM_LIST_VIEW_GET_PRIVATE (ilv)->treeview; } static void item_list_view_init (ItemListView *ilv) { ilv->priv = ITEM_LIST_VIEW_GET_PRIVATE (ilv); ilv->priv->item_id_to_iter = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free); } ItemListView * item_list_view_create (GtkWidget *window) { ItemListView *ilv; GtkCellRenderer *renderer; GtkTreeViewColumn *column, *headline_column; GtkWidget *ilscrolledwindow; ilv = g_object_new (ITEM_LIST_VIEW_TYPE, NULL); ilscrolledwindow = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (ilscrolledwindow); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (ilscrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (ilscrolledwindow), GTK_SHADOW_IN); ilv->priv->treeview = GTK_TREE_VIEW (gtk_tree_view_new ()); gtk_container_add (GTK_CONTAINER (ilscrolledwindow), GTK_WIDGET (ilv->priv->treeview)); gtk_widget_show (GTK_WIDGET (ilv->priv->treeview)); gtk_widget_set_name (GTK_WIDGET (ilv->priv->treeview), "itemlist"); gtk_tree_view_set_rules_hint (ilv->priv->treeview, TRUE); g_object_set_data (G_OBJECT (window), "itemlist", ilv->priv->treeview); 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, "pixbuf", IS_STATEICON, NULL); gtk_tree_view_append_column (ilv->priv->treeview, column); gtk_tree_view_column_set_sort_column_id (column, IS_STATE); renderer = gtk_cell_renderer_pixbuf_new (); column = gtk_tree_view_column_new_with_attributes ("", renderer, "pixbuf", IS_ENCICON, NULL); gtk_tree_view_append_column (ilv->priv->treeview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (_("Date"), renderer, "text", IS_TIME_STR, "weight", ITEMSTORE_UNREAD, NULL); gtk_tree_view_append_column (ilv->priv->treeview, column); gtk_tree_view_column_set_sort_column_id(column, IS_TIME); g_object_set (column, "resizable", TRUE, NULL); renderer = gtk_cell_renderer_pixbuf_new (); column = gtk_tree_view_column_new_with_attributes ("", renderer, "pixbuf", IS_FAVICON, NULL); gtk_tree_view_column_set_sort_column_id (column, IS_SOURCE); gtk_tree_view_append_column (ilv->priv->treeview, column); renderer = gtk_cell_renderer_text_new (); headline_column = gtk_tree_view_column_new_with_attributes (_("Headline"), renderer, "text", IS_LABEL, "weight", ITEMSTORE_UNREAD, "xalign", ITEMSTORE_ALIGN, NULL); gtk_tree_view_append_column (ilv->priv->treeview, headline_column); gtk_tree_view_column_set_sort_column_id (headline_column, IS_LABEL); g_object_set (headline_column, "resizable", TRUE, NULL); g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); /* 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), "row_activated", G_CALLBACK (on_Itemlist_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); 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; GtkTreeIter old_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, &old_iter); iter = &old_iter; if (!exists) { iter = g_new0 (GtkTreeIter, 1); gtk_tree_store_prepend (itemstore, iter, NULL); g_hash_table_insert (ilv->priv->item_id_to_iter, GUINT_TO_POINTER (item->id), (gpointer)iter); } gtk_tree_store_set (itemstore, iter, IS_TIME, (guint64)item->time, IS_NR, item->id, IS_PARENT, node, IS_FAVICON, node->icon, 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) { /* we depend on the fact that the second column is the favicon column!!! if we are in search mode or have a folder or vfolder we show the favicon column to give a hint where the item comes from ... */ gtk_tree_view_column_set_visible (gtk_tree_view_get_column (ilv->priv->treeview, 3), enabled); } void on_popup_launch_item_selected (void) { launch_item_selected (INTERNAL); } void on_popup_launch_item_in_tab_selected (void) { launch_item_selected (TAB); } void on_popup_launch_item_external_selected (void) { launch_item_selected (EXTERNAL); } /* menu callbacks */ void on_toggle_item_flag (GtkMenuItem *menuitem, gpointer user_data) { itemPtr item; item = itemlist_get_selected (); if (item) { itemlist_toggle_flag (item); item_unload (item); } } void on_popup_toggle_flag (void) { on_toggle_item_flag (NULL, NULL); } void on_toggle_unread_status (GtkMenuItem *menuitem, gpointer user_data) { itemPtr item; item = itemlist_get_selected (); if (item) { itemlist_toggle_read_status (item); item_unload (item); } } void on_popup_toggle_read (void) { on_toggle_unread_status (NULL, NULL); } void on_remove_items_activate (GtkMenuItem *menuitem, 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_remove_item_activate (GtkMenuItem *menuitem, gpointer user_data) { itemPtr item; 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 on_popup_remove_selected (void) { on_remove_item_activate (NULL, NULL); } void item_list_view_select (ItemListView *ilv, itemPtr item) { GtkTreeView *treeview = ilv->priv->treeview; GtkTreeSelection *selection; selection = gtk_tree_view_get_selection (treeview); if (item) { GtkTreeIter iter; GtkTreePath *path; if (!item_list_view_id_to_iter(ilv, item->id, &iter)) /* This is an evil hack to fix SF #1870052: crash upon hitting when no headline selected. FIXME: This code is rotten! Rewrite it! Now! */ itemlist_selection_changed (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 { 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 (GtkMenuItem *menuitem, gpointer user_data) { itemlist_select_next_unread (); } void on_popup_copy_URL_clipboard (void) { 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 (void) { 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.10.17/src/ui/item_list_view.h000066400000000000000000000153601261475620100177010ustar00rootroot00000000000000/** * @file item_list_view.h presenting items in a GtkTreeView * * Copyright (C) 2004-2012 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); /** * Create a new ItemListView instance. * * @param window parent window widget */ ItemListView * item_list_view_create (GtkWidget *window); /** * Returns the GtkTreeView used by the ItemListView instance. * * @returns a GtkTreeView */ GtkTreeView * item_list_view_get_widget (ItemListView *ilv); /** * Checks whether the given id is in the ItemListView. * * @param ilv the ItemListView * @param id the item id * * @returns TRUE if the item is in the ItemListView */ gboolean item_list_view_contains_id (ItemListView *ilv, gulong id); /** * Changes the sorting type (and direction). * * @param ilv the ItemListView * @param sortType new sort type * @param sortReversed TRUE for ascending order */ void item_list_view_set_sort_column (ItemListView *ilv, nodeViewSortType sortType, gboolean sortReversed); /** * Selects the given item (if it is in the ItemListView). * * @param ilv the ItemListView * @param item the item to select */ void item_list_view_select (ItemListView *ilv, itemPtr item); /** * 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. * * @param ilv the ItemListView * @param item the item to add */ void item_list_view_add_item (ItemListView *ilv, itemPtr item); /** * 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). * * @param ilv the ItemListView * @param item the item to remove */ void item_list_view_remove_item (ItemListView *ilv, itemPtr item); /** * Enable the favicon column of the currently displayed itemlist. * * @param ilv the ItemListView * @param enabled TRUE if column is to be visible */ void item_list_view_enable_favicon_column (ItemListView *ilv, gboolean enabled); /** * Remove all items and resets a ItemListView. * * @param ilv the ItemListView */ void item_list_view_clear (ItemListView *ilv); /** * Update the ItemListView with the newly added items. To be called * after doing a batch of item_list_view_add_item() calls. * * @param ilv the ItemListView * @param hasEnclosures TRUE if at least one item has an enclosure */ void item_list_view_update (ItemListView *ilv, gboolean hasEnclosures); /* menu callbacks */ /** * Toggles the unread status of the selected item. This is called from * a menu. */ void on_toggle_unread_status (GtkMenuItem *menuitem, gpointer user_data); /** * Toggles the flag of the selected item. This is called from a menu. */ void on_toggle_item_flag (GtkMenuItem *menuitem, gpointer user_data); /** * Opens the selected item in a browser. */ void on_popup_launch_item_selected (void); /** * Opens the selected item in a browser. */ void on_popup_launch_item_in_tab_selected (void); /** * Opens the selected item in a browser. */ void on_popup_launch_item_external_selected (void); /** * Toggles the read status of right-clicked item. */ void on_popup_toggle_read (void); /** * Toggles the flag of right-clicked item. */ void on_popup_toggle_flag (void); /** * Removes all items from the selected feed. * * @param menuitem The menuitem that was selected. * @param user_data Unused. */ void on_remove_items_activate (GtkMenuItem *menuitem, gpointer user_data); /** * Removes the selected item from the selected feed. * * @param menuitem The menuitem that was selected. * @param user_data Unused. */ void on_remove_item_activate (GtkMenuItem *menuitem, gpointer user_data); void on_popup_remove_selected (void); /** * Finds and selects the next unread item starting at the given * item in a ItemListView according to the current GtkTreeView sorting order. * * @param ilv the ItemListView * @param startId 0 or the item id to start from * * @returns unread item (or NULL) */ itemPtr item_list_view_find_unread_item (ItemListView *ilv, gulong startId); /** * Searches the displayed feed and then all feeds for an unread * item. If one it found, it is displayed. * * @param menuitem The menuitem that was selected. * @param user_data Unused. */ void on_next_unread_item_activate (GtkMenuItem *menuitem, gpointer user_data); /** * Update a single item of a ItemListView * * @param ilv the ItemListView * @param item the item */ void item_list_view_update_item (ItemListView *ilv, itemPtr item); /** * Update all items of the ItemListView. To be used after * initial batch loading. * * @param ilv the ItemListView */ void item_list_view_update_all_items (ItemListView *ilv); /** * Copies the selected items URL to the clipboard. */ void on_popup_copy_URL_clipboard (void); void on_popup_social_bm_item_selected (void); #endif liferea-1.10.17/src/ui/itemview.c000066400000000000000000000334011261475620100164760ustar00rootroot00000000000000/* * @file itemview.c 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 */ #include #include "common.h" #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 "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) */ GtkWidget *itemListViewContainer; /**< scrolled window holding item list tree 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 */ }; 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_class_init (ItemViewClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = itemview_finalize; g_type_class_add_private (object_class, sizeof(ItemViewPrivate)); } void itemview_clear (void) { 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_ALL_ITEMS != itemview->priv->mode) /* 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 (!item_list_view_contains_id (itemview->priv->itemListView, item->id)) return; if (ITEMVIEW_ALL_ITEMS != itemview->priv->mode) /* remove item in 3 pane mode */ item_list_view_remove_item (itemview->priv->itemListView, item); else /* force HTML update in 2 pane mode */ 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; 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_ALL_ITEMS != itemview->priv->mode) 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 (!item_list_view_contains_id (itemview->priv->itemListView, 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_ALL_ITEMS != itemview->priv->mode) 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) { item_list_view_update (itemview->priv->itemListView, itemview->priv->hasEnclosures); if (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); } 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... */ /* 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) { /* We try to scroll the HTML view, but if we are already at the bottom of the item view the scrolling will return FALSE and we trigger Next-Unread to realize easy headline skimming. */ if (liferea_htmlview_scroll (itemview->priv->htmlview) == FALSE) on_next_unread_item_activate (NULL, NULL); /* Note the above condition is duplicated in mozilla/mozsupport.cpp! */ } void itemview_move_cursor (int step) { ui_common_treeview_move_cursor (item_list_view_get_widget (itemview->priv->itemListView), step); } void itemview_move_cursor_to_first (void) { ui_common_treeview_move_cursor_to_first (item_list_view_get_widget (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; const gchar *htmlWidgetName, *ilWidgetName, *encViewVBoxName; if (newMode == ivp->currentLayoutMode) return; ivp->currentLayoutMode = newMode; liferea_shell_set_view_mode (newMode); if (!ivp->htmlview) { GtkWidget *renderWidget; debug0 (DEBUG_GUI, "Creating HTML widget"); ivp->htmlview = liferea_htmlview_new (FALSE); g_signal_connect (ivp->htmlview, "statusbar-changed", G_CALLBACK (on_important_status_message), NULL); renderWidget = liferea_htmlview_get_widget (ivp->htmlview); gtk_container_add (GTK_CONTAINER (liferea_shell_lookup ("normalViewHtml")), renderWidget); gtk_widget_show (renderWidget); /* 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. */ gtk_notebook_set_current_page (GTK_NOTEBOOK (liferea_shell_lookup ("itemtabs")), newMode); gtk_widget_reparent (liferea_htmlview_get_widget (ivp->htmlview), liferea_shell_lookup (htmlWidgetName)); if (ilWidgetName) gtk_widget_reparent (GTK_WIDGET (ivp->itemListViewContainer), liferea_shell_lookup (ilWidgetName)); /* 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_box_pack_end (GTK_BOX (liferea_shell_lookup (encViewVBoxName)), enclosure_list_view_get_widget (ivp->enclosureView), FALSE, FALSE, 0); gtk_widget_show_all (liferea_shell_lookup (encViewVBoxName)); } } ItemView * itemview_create (GtkWidget *window) { gint zoom; /* 1. Create widgets, load preferences */ g_object_new (ITEMVIEW_TYPE, NULL); itemview->priv->currentLayoutMode = NODE_VIEW_MODE_DEFAULT; itemview->priv->itemListView = item_list_view_create (window); itemview->priv->itemListViewContainer = gtk_widget_get_parent (GTK_WIDGET (item_list_view_get_widget (itemview->priv->itemListView))); conf_get_int_value (LAST_ZOOMLEVEL, &zoom); if (zoom == 0) { zoom = 100; conf_set_int_value (LAST_ZOOMLEVEL, zoom); } itemview->priv->zoom = zoom; /* initially we pack the item list in the normal view pane, which is later changed in itemview_set_layout() */ gtk_container_add (GTK_CONTAINER (liferea_shell_lookup ("normalViewItems")), itemview->priv->itemListViewContainer); /* 2. Prepare HTML rendering */ htmlview_init (); 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.10.17/src/ui/itemview.h000066400000000000000000000146531261475620100165130ustar00rootroot00000000000000/* * @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: * * Removes all currently loaded items from the item view. */ void itemview_clear (void); /** * itemview_set_displayed_node: * * Prepares the view for displaying items of the given node. * * @param node the node whose items are to be presented */ 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: * * Set/unset the display mode of the item view. * * @param mode item view mode constant */ void itemview_set_mode (itemViewMode mode); /** * itemview_add_item: * * Adds an item to the view for rendering. The item must belong * to the item set that was announced with itemview_set_displayed_node(). * * @param item the item to add * * TODO: use item merger signal instead */ void itemview_add_item (itemPtr item); /** * itemview_remove_item: * * Removes a given item from the view. * * @param item the item to remove * * TODO: use item merger signal instead */ void itemview_remove_item (itemPtr item); /** * itemview_select_item: * * Selects a given item in the view. The item must be * added using itemview_add_item before selecting. * * @param item the item to select */ 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: * * Requests updating the rendering of a given item. * * @param item the item to update */ 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: * * Requests updating the rendering of the node info view. * * @node node the node whose info view is to be updated * * TODO: register for signal at feed merger instead */ void itemview_update_node_info (struct node *node); /** * itemview_update: * * 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: * * Sets an info display in the item view HTML widget. * Used for special functionality like search result info. * * @param html HTML to present */ void itemview_display_info (const gchar *html); /** * itemview_find_unread_item: * * Finds the next unread item. * * @param startId the item id to start at (or NULL for starting at the top) * * @results 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: * * Moves the cursor in the item list step times. * Negative value means moving backwards. * * @param step moving steps */ 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: * * Switches the layout for the given viewing mode. * * @param newMode new view mode (NODE_VIEW_MODE_*) */ void itemview_set_layout (nodeViewType newMode); /** * itemview_create: * @window: parent window widget * * Creates the item view singleton instance. * * Return value: (transfer none): the item view instance */ ItemView * itemview_create (GtkWidget *window); /** * itemview_launch_URL: * * Launch the given URL in the currently active HTML view. * * @param url the link to load * @param forceInternal TRUE if internal browsing is to be enforced */ void itemview_launch_URL (const gchar *url, gboolean internal); /** * itemview_do_zoom: * * Requests the item view to change zoom level. * * @param in TRUE if zooming in, FALSE for zooming out */ void itemview_do_zoom (gboolean in); G_END_DECLS #endif liferea-1.10.17/src/ui/liferea_dialog.c000066400000000000000000000102151261475620100175710ustar00rootroot00000000000000/** * @file ui_dialog.c UI dialog handling * * 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 */ #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 *filename, gchar *name) { LifereaDialog *ld; gchar *path; GError *error = NULL; /* FIXME: this is so hacky... We should just load the whole file as we * did with glade, then pick the widget we're told. However GtkBuilder * doesn't cope with multiple top-level widgets in the same .ui file * yet (it will load all the widgets, which are a lot in liferea.ui, so * you end with a lot of new dialogs when you open e.g. preferences), * so we need to do this for now... * http://bugzilla.gnome.org/show_bug.cgi?id=575714 */ gchar *objs[] = { "adjustment1", "adjustment2", "adjustment3", "adjustment4", "adjustment5", "adjustment6", "liststore1", "liststore2", "liststore3", "liststore4", "liststore5", "liststore6", "refreshIntervalSpinButton", name, NULL }; ld = LIFEREA_DIALOG (g_object_new (LIFEREA_DIALOG_TYPE, NULL)); path = g_build_filename (PACKAGE_DATA_DIR, PACKAGE, filename?filename:"liferea.ui", NULL); ld->priv->xml = gtk_builder_new (); if (!gtk_builder_add_objects_from_file (ld->priv->xml, path, objs, &error)) { g_error ("Loading %s failed: %s", path, error->message); g_error_free (error); } 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_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); gtk_window_set_transient_for (GTK_WINDOW (ld->priv->dialog), GTK_WINDOW (liferea_shell_lookup ("mainwindow"))); g_signal_connect_object (ld->priv->dialog, "destroy", G_CALLBACK (liferea_dialog_destroy_cb), ld, 0); return ld->priv->dialog; } liferea-1.10.17/src/ui/liferea_dialog.h000066400000000000000000000044751261475620100176110ustar00rootroot00000000000000/** * @file ui_dialog.h UI dialog handling * * Copyright (C) 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 _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 filename name of widget file (or NULL for default) * @param name the dialog name * * @returns the dialog widget */ GtkWidget * liferea_dialog_new (const gchar *filename, 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.10.17/src/ui/liferea_htmlview.c000066400000000000000000000510101261475620100201670ustar00rootroot00000000000000/** * @file liferea_htmlview.c Liferea embedded HTML rendering * * Copyright (C) 2003-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 */ #include "ui/liferea_htmlview.h" #include #include #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.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 }; /* 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; url = browser_history_back (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); } 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_signal_handlers_disconnect_by_data (network_monitor_get (), object); G_OBJECT_CLASS (parent_class)->finalize (object); } 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->finalize = liferea_htmlview_finalize; 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); 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_stock ("gtk-go-back", 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_stock ("gtk-go-forward", 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); (RENDERER (htmlview)->setProxy) (network_get_proxy_host (), network_get_proxy_port (), network_get_proxy_username (), network_get_proxy_password ()); } 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); if (NULL != network_get_proxy_host ()) { 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 (!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) { /* before loading external content suppress internal link schema again */ htmlview->priv->internal = FALSE; return FALSE; } else { (void)browser_launch_URL_external (url); } return TRUE; } void liferea_htmlview_launch_URL_internal (LifereaHtmlView *htmlview, const gchar *url) { /* before loading untrusted URLs suppress internal link schema */ htmlview->priv->internal = FALSE; browser_history_add_location (htmlview->priv->history, (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); } gboolean liferea_htmlview_scroll (LifereaHtmlView *htmlview) { return (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)); } /* popup callbacks and popup handling */ static void on_popup_launch_link_activate (GtkWidget *widget, gpointer user_data) { itemview_launch_URL ((gchar *)user_data, TRUE /* use internal browser */); } static void on_popup_launch_link_external_activate (GtkWidget *widget, gpointer user_data) { browser_launch_URL_external ((gchar *)user_data); } static void on_popup_copy_activate (GtkWidget *widget, LifereaHtmlView *htmlview) { (RENDERER (htmlview)->copySelection) (htmlview->priv->renderWidget); } static void on_popup_copy_url_activate (GtkWidget *widget, gpointer user_data) { GtkClipboard *clipboard; gchar *link = common_uri_sanitize ((gchar *)user_data); 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 void on_popup_save_url_activate (GtkWidget *widget, gpointer user_data) { enclosure_download (NULL, (const gchar *)user_data, TRUE); } static void on_popup_subscribe_url_activate (GtkWidget *widget, gpointer user_data) { feedlist_add_subscription ((gchar *)user_data, NULL, NULL, 0); } static void on_popup_zoomin_activate (GtkWidget *widget, gpointer user_data) { liferea_htmlview_do_zoom (LIFEREA_HTMLVIEW (user_data), TRUE); } static void on_popup_zoomout_activate (GtkWidget *widget, gpointer user_data) { liferea_htmlview_do_zoom (LIFEREA_HTMLVIEW (user_data), FALSE); } static void on_popup_open_link_in_tab_activate (GtkWidget *widget, gpointer user_data) { browser_tabs_add_new ((gchar *)user_data, (gchar *)user_data, FALSE); } static void on_popup_social_bm_link_activate (GtkWidget *widget, gpointer user_data) { gchar *url = social_get_bookmark_url ((gchar *)user_data, ""); (void)browser_tabs_add_new (url, url, TRUE); g_free (url); } static GtkWidget * menu_add_option (GtkMenu *menu, const gchar *label, const gchar *stock, gpointer cb, gpointer user_data) { GtkWidget *item, *image; if (label) { image = gtk_image_new_from_stock (stock, GTK_ICON_SIZE_MENU); item = gtk_image_menu_item_new_with_mnemonic (label); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image); } else item = gtk_image_menu_item_new_from_stock (stock, NULL); g_signal_connect (item, "activate", G_CALLBACK (cb), user_data); gtk_widget_show (item); gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); return item; } static void menu_add_separator (GtkMenu *menu) { GtkWidget *widget; widget = gtk_separator_menu_item_new (); gtk_widget_show (widget); gtk_menu_shell_append (GTK_MENU_SHELL (menu), widget); } void liferea_htmlview_prepare_context_menu (LifereaHtmlView *htmlview, GtkMenu *menu, const gchar *linkUri, const gchar *imageUri) { GList *item, *items; gboolean link = (linkUri != NULL); gboolean image = (imageUri != NULL); /* first drop all menu items that are provided by the browser widget (necessary for WebKit) */ item = items = gtk_container_get_children (GTK_CONTAINER (menu)); while (item) { gtk_widget_destroy (GTK_WIDGET (item->data)); item = g_list_next (item); } g_list_free (items); /* do not expose internal links */ if (linkUri && liferea_htmlview_is_special_url (linkUri) && !g_str_has_prefix (linkUri, "javascript:") && !g_str_has_prefix (linkUri, "data:")) link = FALSE; /* and now add all we want to see */ if (link) { gchar *path; menu_add_option (menu, _("Open Link In _Tab"), NULL, G_CALLBACK (on_popup_open_link_in_tab_activate), (gpointer)linkUri); menu_add_option (menu, _("_Open Link In Browser"), NULL, G_CALLBACK (on_popup_launch_link_activate), (gpointer)linkUri); menu_add_option (menu, _("_Open Link In External Browser"), NULL, G_CALLBACK (on_popup_launch_link_external_activate), (gpointer)linkUri); menu_add_separator (menu); path = g_strdup_printf (_("_Bookmark Link at %s"), social_get_bookmark_site ()); menu_add_option (menu, path, NULL, on_popup_social_bm_link_activate, (gpointer)linkUri); g_free (path); menu_add_option (menu, _("_Copy Link Location"), "gtk-copy", G_CALLBACK (on_popup_copy_url_activate), (gpointer)linkUri); } if (image) menu_add_option (menu, _("_Copy Image Location"), "gtk-copy", G_CALLBACK (on_popup_copy_url_activate), (gpointer)imageUri); if (link) menu_add_option (menu, _("S_ave Link As"), "gtk-save", G_CALLBACK (on_popup_save_url_activate), (gpointer)linkUri); if (image) menu_add_option (menu, _("S_ave Image As"), "gtk-save", G_CALLBACK (on_popup_save_url_activate), (gpointer)imageUri); if (link) { menu_add_separator (menu); menu_add_option (menu, _("_Subscribe..."), "gtk-add", G_CALLBACK (on_popup_subscribe_url_activate), (gpointer)linkUri); } if(!link && !image) { GtkWidget *item; item = menu_add_option (menu, NULL, GTK_STOCK_COPY, G_CALLBACK (on_popup_copy_activate), htmlview); if (!(RENDERER (htmlview)->hasSelection) (htmlview->priv->renderWidget)) gtk_widget_set_sensitive (item, FALSE); menu_add_separator (menu); menu_add_option (menu, _("_Increase Text Size"), "gtk-zoom-in", G_CALLBACK (on_popup_zoomin_activate), htmlview); menu_add_option (menu, _("_Decrease Text Size"), "gtk-zoom-out", G_CALLBACK (on_popup_zoomout_activate), htmlview); } } liferea-1.10.17/src/ui/liferea_htmlview.h000066400000000000000000000147011261475620100202020ustar00rootroot00000000000000/** * @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 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); /** * Function to set up a new html view widget for any purpose. * * @param forceInternalBrowsing TRUE to act as fully fledged browser * * @returns a new Liferea HTML widget */ LifereaHtmlView * liferea_htmlview_new (gboolean forceInternalBrowsing); /** * Returns the rendering widget for a HTML view. Only * to be used by liferea_shell.c for widget reparenting. * * @param htmlview the HTML view * * @returns the rendering widget */ GtkWidget *liferea_htmlview_get_widget (LifereaHtmlView *htmlview); /** * Loads a emtpy HTML page. Resets any item view state. * * @param htmlview the HTML view widget to clear */ void liferea_htmlview_clear (LifereaHtmlView *htmlview); /** * Method to display the passed HTML source to the HTML widget. * * @param htmlview The htmlview widget to be set * @param string HTML source * @param base base url for resolving relative links */ void liferea_htmlview_write (LifereaHtmlView *htmlview, const gchar *string, const gchar *base); /** * Callback for plugins to process on-url events. Depending on * the link type the link will be copied to the status bar. * * @param htmlview the htmlview causing the event * @param url new URL (or empty string) */ 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); /** * 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. * * @param htmlview the HTML view to use * @param url URL to launch * * @returns FALSE if link is to be launched by browser widget */ gboolean liferea_htmlview_handle_URL (LifereaHtmlView *htmlview, const gchar *url); /** * Enforces loading of the given URL in the given browser widget. * * @param htmlview the HTML view to use * @param url the URL to load */ void liferea_htmlview_launch_URL_internal (LifereaHtmlView *htmlview, const gchar *url); /** * Function to change the zoom level of the HTML widget. * 1.0 is a 1:1 zoom. * * @param diff New zoom */ void liferea_htmlview_set_zoom (LifereaHtmlView *htmlview, gfloat zoom); /** * Function to determine the current zoom level. * * @param htmlview htmlview to examine * * @return the currently set zoom level */ gfloat liferea_htmlview_get_zoom (LifereaHtmlView *htmlview); /** * Function scrolls down the given HTML view if possible. * * @param htmlview htmlview to scroll * * @return FALSE if the scrolled window vertical scroll position is at * the maximum and TRUE if the vertical adjustment was increased. */ gboolean liferea_htmlview_scroll (LifereaHtmlView *htmlview); /** * Prepares a GtkMenu to be used as a context menu for the HTML view. * * @param htmlview the html view * @param menu the menu to fill * @param linkUri NULL or a valid URL string if this is * to be a link context menu * @param imageUri NULL or a valid image URL if this is * to be an image context menu */ void liferea_htmlview_prepare_context_menu (LifereaHtmlView *htmlview, GtkMenu *menu, const gchar *linkUri, const gchar *imageUri); /** * To be called when HTML view needs to change the text size * of the rendering widget implementation. * * @param htmlview the html view * @param in TRUE if zoom is to be increased */ 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); gboolean (*scrollPagedown) (GtkWidget *widget); void (*setProxy) (const gchar *hostname, guint port, const gchar *username, const gchar *password); void (*setOffLine) (gboolean offline); } *htmlviewImplPtr; 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.10.17/src/ui/liferea_shell.c000066400000000000000000001434271261475620100174550ustar00rootroot00000000000000/* * @file liferea_shell.c UI layout handling * * Copyright (C) 2004-2006 Nathan J. Conrad * 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 */ #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 "plugins_engine.h" #include "render.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_tray.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 *menubar; 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; GtkActionGroup *generalActions; GtkActionGroup *addActions; /**< all types of "New" options */ GtkActionGroup *feedActions; /**< update and mark read */ GtkActionGroup *readWriteActions; /**< node remove and properties, node itemset items remove */ GtkActionGroup *itemActions; /**< item state toggline, single item remove */ ItemList *itemlist; FeedList *feedlist; ItemView *itemview; BrowserTabs *tabs; PeasExtensionSet *extensions; /**< Plugin management */ gboolean fullscreen; /**< track fullscreen */ }; 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_class_init (LifereaShellClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = liferea_shell_finalize; 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) { /* FIXME: we should only need to load mainwindow, but GtkBuilder won't * load the other required objects, so we need to do it manually... * See fixme in liferea_dialog_new() * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=508585 */ gchar *objs[] = { "adjustment6", "mainwindow", NULL }; /* globally accessible singleton */ g_assert (NULL == shell); shell = ls; shell->priv = LIFEREA_SHELL_GET_PRIVATE (ls); shell->priv->xml = gtk_builder_new (); if (!gtk_builder_add_objects_from_file (shell->priv->xml, PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "liferea.ui", objs, NULL)) g_error ("Loading " PACKAGE_DATA_DIR G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "liferea.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) { gtk_action_set_sensitive (gtk_action_group_get_action (shell->priv->feedActions, "UpdateSelected"), enabled); } void liferea_shell_update_feed_menu (gboolean add, gboolean enabled, gboolean readWrite) { gtk_action_group_set_sensitive (shell->priv->addActions, add); gtk_action_group_set_sensitive (shell->priv->feedActions, enabled); gtk_action_group_set_sensitive (shell->priv->readWriteActions, readWrite); } void liferea_shell_update_item_menu (gboolean enabled) { gtk_action_group_set_sensitive (shell->priv->itemActions, enabled); } void liferea_shell_update_allitems_actions (gboolean isNotEmpty, gboolean isRead) { gtk_action_set_sensitive (gtk_action_group_get_action (shell->priv->generalActions, "RemoveAllItems"), isNotEmpty); gtk_action_set_sensitive (gtk_action_group_get_action (shell->priv->feedActions, "MarkFeedAsRead"), isRead); } void liferea_shell_update_history_actions (void) { gtk_action_set_sensitive (gtk_action_group_get_action (shell->priv->generalActions, "PrevReadItem"), item_history_has_previous ()); gtk_action_set_sensitive (gtk_action_group_get_action (shell->priv->generalActions, "NextReadItem"), item_history_has_next ()); } void liferea_shell_update_unread_stats (void) { 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; 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) { gboolean dont_maximize_to_tray; conf_get_bool_value (DONT_MINIMIZE_TO_TRAY, &dont_maximize_to_tray); if ((ui_tray_get_count() == 0) || dont_maximize_to_tray) { liferea_shutdown (); return TRUE; } liferea_shell_save_position (); gtk_widget_hide (GTK_WIDGET (shell->priv->window)); 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); } 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; GtkWidget *focusw; 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. */ return FALSE; 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, "WebKitWebView"))) 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_remove_item_activate (NULL, NULL); return TRUE; break; case GDK_KEY_n: on_next_unread_item_activate (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 gboolean liferea_shell_save_accels (gpointer data) { gchar *accels_file = NULL; accels_file = common_create_config_filename ("accels"); gtk_accel_map_save (accels_file); g_free (accels_file); return FALSE; } static void on_accel_change (GtkAccelMap *object, gchar *accel_path, guint accel_key, GdkModifierType accel_mode, gpointer user_data) { g_idle_add (liferea_shell_save_accels, NULL); } static void on_prefbtn_clicked (GtkButton *button, gpointer user_data) { preferences_dialog_open (); } static void on_searchbtn_clicked (GtkButton *button, gpointer user_data) { simple_search_dialog_open (); } static void on_onlinebtn_clicked (GtkButton *button, gpointer user_data) { network_monitor_set_online (!network_monitor_is_online ()); } static void on_work_offline_activate (GtkToggleAction *menuitem, gpointer user_data) { network_monitor_set_online (!gtk_toggle_action_get_active (menuitem)); } static void on_about_activate (GtkMenuItem *menuitem, gpointer user_data) { GtkWidget *dialog; dialog = liferea_dialog_new (NULL, "aboutdialog"); 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 (GtkMenuItem *menuitem, gpointer user_data) { liferea_shell_add_html_tab ("topics_%s.html", _("Help Topics")); } static void on_quick_reference_activate (GtkMenuItem *menuitem, gpointer user_data) { liferea_shell_add_html_tab ("reference_%s.html", _("Quick Reference")); } static void on_faq_activate (GtkMenuItem *menuitem, gpointer user_data) { liferea_shell_add_html_tab ("faq_%s.html", _("FAQ")); } static void on_menu_quit (GtkMenuItem *menuitem, gpointer user_data) { liferea_shutdown (); } static void on_menu_fullscreen_activate (GtkMenuItem *menuitem, gpointer user_data) { shell->priv->fullscreen == TRUE ? gtk_window_fullscreen(shell->priv->window) : gtk_window_unfullscreen (shell->priv->window); } static void on_menu_zoomin_selected (gpointer callback_data, guint callback_action, GtkWidget *widget) { liferea_shell_do_zoom (TRUE); } static void on_menu_zoomout_selected (gpointer callback_data, guint callback_action, GtkWidget *widget) { liferea_shell_do_zoom (FALSE); } static void on_menu_import (gpointer callback_data, guint callback_action, GtkWidget *widget) { import_OPML_file (); } static void on_menu_export (gpointer callback_data, guint callback_action, GtkWidget *widget) { export_OPML_file (); } static void on_extension_added (PeasExtensionSet *extensions, PeasPluginInfo *info, PeasExtension *exten, LifereaShell *shell) { peas_extension_call (exten, "activate"); } static void on_extension_removed (PeasExtensionSet *extensions, PeasPluginInfo *info, PeasExtension *exten, LifereaShell *shell) { peas_extension_call (exten, "deactivate"); } static void liferea_shell_set_online_icon (gboolean online) { GtkWidget *widget; widget = liferea_shell_lookup ("onlineimage"); if (online) { liferea_shell_set_status_bar (_("Liferea is now online")); gtk_image_set_from_pixbuf (GTK_IMAGE (widget), (GdkPixbuf *)icon_get (ICON_ONLINE)); atk_object_set_name (gtk_widget_get_accessible (widget), _("Work Offline")); } else { liferea_shell_set_status_bar (_("Liferea is now offline")); gtk_image_set_from_pixbuf (GTK_IMAGE (widget), (GdkPixbuf *)icon_get (ICON_OFFLINE)); atk_object_set_name (gtk_widget_get_accessible (widget), _("Work Online")); } gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (gtk_action_group_get_action (shell->priv->generalActions, "ToggleOfflineMode")), !online); } static void liferea_shell_online_status_changed (NetworkMonitor *nm, gboolean online, gpointer userdata) { liferea_shell_set_online_icon (online); ui_tray_update (); } /* 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 GtkActionEntry liferea_shell_action_entries[] = { {"SubscriptionsMenu", NULL, N_("_Subscriptions")}, {"UpdateAll", "gtk-refresh", N_("Update _All"), "U", N_("Updates all subscriptions."), G_CALLBACK(on_menu_update_all)}, {"MarkAllFeedsAsRead", "gtk-apply", N_("Mark All As _Read"), NULL, N_("Marks read every item of every subscription."), G_CALLBACK(on_menu_allfeedsread)}, {"ImportFeedList", "gtk-open", N_("_Import Feed List..."), NULL, N_("Imports an OPML feed list."), G_CALLBACK(on_menu_import)}, {"ExportFeedList", "gtk-save-as", N_("_Export Feed List..."), NULL, N_("Exports the feed list as OPML."), G_CALLBACK(on_menu_export)}, {"Quit",GTK_STOCK_QUIT, N_("_Quit"), "Q", NULL, G_CALLBACK(on_menu_quit)}, {"FeedMenu", NULL, N_("_Feed")}, {"RemoveAllItems", "gtk-delete", N_("Remove _All Items"), NULL, N_("Removes all items of the currently selected feed."), G_CALLBACK(on_remove_items_activate)}, {"ItemMenu", NULL, N_("_Item")}, {"PrevReadItem", GTK_STOCK_GO_BACK, N_("Previous Item"), "N", NULL, G_CALLBACK(on_prev_read_item_activate)}, {"NextReadItem", GTK_STOCK_GO_FORWARD, N_("Next Item"), NULL, NULL, G_CALLBACK(on_next_read_item_activate)}, /* No tooltip here as it really hinders usability to have it flashing when skimming through items using "Next Unread"! */ {"NextUnreadItem", GTK_STOCK_JUMP_TO, N_("_Next Unread Item"), "N", NULL, G_CALLBACK(on_next_unread_item_activate)}, {"ViewMenu", NULL, N_("_View")}, {"ZoomIn", "gtk-zoom-in", N_("_Increase Text Size"), "plus", N_("Increases the text size of the item view."), G_CALLBACK(on_menu_zoomin_selected)}, {"ZoomOut", "gtk-zoom-out", N_("_Decrease Text Size"), "minus", N_("Decreases the text size of the item view."), G_CALLBACK(on_menu_zoomout_selected)}, {"ToolsMenu", NULL, N_("_Tools")}, {"ShowUpdateMonitor", NULL, N_("_Update Monitor"), NULL, N_("Show a list of all feeds currently in the update queue"), G_CALLBACK(on_menu_show_update_monitor)}, {"ShowPreferences", GTK_STOCK_PREFERENCES, N_("_Preferences"), NULL, N_("Edit Preferences."), G_CALLBACK(on_prefbtn_clicked)}, {"SearchMenu", NULL, N_("S_earch")}, {"SearchFeeds", "gtk-find", N_("Search All Feeds..."), "F", N_("Show the search dialog."), G_CALLBACK(on_searchbtn_clicked)}, {"HelpMenu", NULL, N_("_Help")}, {"ShowHelpContents", "gtk-help", N_("_Contents"), "F1", N_("View help for this application."), G_CALLBACK(on_topics_activate)}, {"ShowHelpQuickReference", NULL, N_("_Quick Reference"), NULL, N_("View a list of all Liferea shortcuts."), G_CALLBACK(on_quick_reference_activate)}, {"ShowHelpFAQ", NULL, N_("_FAQ"), NULL, N_("View the FAQ for this application."), G_CALLBACK(on_faq_activate)}, {"ShowAbout", "gtk-about", N_("_About"), NULL, N_("Shows an about dialog."), G_CALLBACK(on_about_activate)} }; static const GtkRadioActionEntry liferea_shell_view_radio_entries[] = { {"NormalView", NULL, N_("_Normal View"), NULL, N_("Set view mode to mail client mode."), 0}, {"WideView", NULL, N_("_Wide View"), NULL, N_("Set view mode to use three vertical panes."), 1}, {"CombinedView", NULL, N_("_Combined View"), NULL, N_("Set view mode to two pane mode."), 2} }; static GtkToggleActionEntry liferea_shell_feedlist_toggle_entries[] = { {"ReducedFeedList", NULL, N_("_Reduced Feed List"), NULL, N_("Hide feeds with no unread items."), G_CALLBACK(on_feedlist_reduced_activate)} }; static const GtkActionEntry liferea_shell_add_action_entries[] = { {"NewSubscription", "gtk-add", N_("_New Subscription..."), NULL, N_("Adds a subscription to the feed list."), G_CALLBACK(on_menu_feed_new)}, {"NewFolder", NULL, N_("New _Folder..."), NULL, N_("Adds a folder to the feed list."), G_CALLBACK(on_menu_folder_new)}, {"NewVFolder", NULL, N_("New S_earch Folder..."), NULL, N_("Adds a new search folder to the feed list."), G_CALLBACK(on_new_vfolder_activate)}, {"NewSource", NULL, N_("New _Source..."), NULL, N_("Adds a new feed list source."), G_CALLBACK(on_new_plugin_activate)}, {"NewNewsBin", NULL, N_("New _News Bin..."), NULL, N_("Adds a new news bin."), G_CALLBACK(on_new_newsbin_activate)} }; static const GtkActionEntry liferea_shell_feed_action_entries[] = { {"MarkFeedAsRead", "gtk-apply", N_("_Mark Items Read"), "R", N_("Marks all items of the selected feed list node / in the item list as read."), G_CALLBACK(on_menu_allread)}, {"UpdateSelected", "gtk-refresh", N_("_Update"), NULL, N_("Updates the selected subscription or all subscriptions of the selected folder."), G_CALLBACK(on_menu_update)} }; static const GtkActionEntry liferea_shell_read_write_action_entries[] = { {"Properties", "gtk-properties", N_("_Properties"), NULL, N_("Opens the property dialog for the selected subscription."), G_CALLBACK(on_menu_properties)}, {"DeleteSelected", "gtk-delete", N_("_Remove"), NULL, N_("Removes the selected subscription."), G_CALLBACK(on_menu_delete)} }; static const GtkActionEntry liferea_shell_item_action_entries[] = { {"ToggleItemReadStatus", "gtk-apply", N_("Toggle _Read Status"), "M", N_("Toggles the read status of the selected item."), G_CALLBACK(on_toggle_unread_status)}, {"ToggleItemFlag", NULL, N_("Toggle Item _Flag"), "T", N_("Toggles the flag status of the selected item."), G_CALLBACK(on_toggle_item_flag)}, {"RemoveSelectedItem", "gtk-delete", N_("R_emove"), NULL, N_("Removes the selected item."), G_CALLBACK(on_remove_item_activate)}, {"LaunchItemInTab", NULL, N_("Open In _Tab"), NULL, N_("Launches the item's link in a new Liferea browser tab."), G_CALLBACK(on_popup_launch_item_in_tab_selected)}, {"LaunchItemInBrowser", NULL, N_("_Open In Browser"), NULL, N_("Launches the item's link in the Liferea item pane."), G_CALLBACK(on_popup_launch_item_selected)}, {"LaunchItemInExternalBrowser", NULL, N_("Open In _External Browser"), NULL, N_("Launches the item's link in the configured external browser."), G_CALLBACK(on_popup_launch_item_external_selected)} }; static const GtkToggleActionEntry liferea_shell_action_toggle_entries[] = { {"ToggleOfflineMode", NULL, N_("_Work Offline"), NULL, N_("This option allows you to disable subscription updating."), G_CALLBACK(on_work_offline_activate)}, {"FullScreen", NULL, N_("_Fullscreen"), "F11", N_("Browse at full screen"), G_CALLBACK(on_menu_fullscreen_activate)}, }; static const char *liferea_shell_ui_desc = "" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ""; static void liferea_shell_restore_state (const gchar *overrideWindowState) { gchar *toolbar_style, *accels_file; gint last_vpane_pos, last_hpane_pos, last_wpane_pos; gint resultState; gboolean show_tray_icon, start_in_tray; 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, "Loading accelerators"); accels_file = common_create_config_filename ("accels"); gtk_accel_map_load (accels_file); g_free (accels_file); debug0 (DEBUG_GUI, "Restoring window position"); liferea_shell_restore_position (); conf_get_bool_value (SHOW_TRAY_ICON, &show_tray_icon); conf_get_bool_value (START_IN_TRAY, &start_in_tray); /* 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) -> show_tray_icon and start_in_tray are overriding preferences (prio 1 only overridden by 'shown' from command line) */ /* Initialize with last saved state */ conf_get_int_value (LAST_WINDOW_STATE, &resultState); /* Override with command line options */ if (!g_strcmp0 (overrideWindowState, "iconfied")) resultState = MAINWINDOW_ICONIFIED; if (!g_strcmp0 (overrideWindowState, "hidden")) resultState = MAINWINDOW_HIDDEN; if (!g_strcmp0 (overrideWindowState, "shown")) resultState = MAINWINDOW_SHOWN; /* Change hidden to iconify if we have no tray to avoid loosing the window */ if (!show_tray_icon && resultState == MAINWINDOW_HIDDEN) resultState = MAINWINDOW_ICONIFIED; /* Apply tray hiding preference */ if (show_tray_icon && start_in_tray && g_strcmp0 (overrideWindowState, "shown")) { debug0 (DEBUG_GUI, "Ignoring last window state due to hide-in-tray preference"); resultState = MAINWINDOW_HIDDEN; } /* And set the window to the resulting state */ switch (resultState) { case MAINWINDOW_ICONIFIED: debug0 (DEBUG_GUI, "Restoring window state 'hidden (no tray)' / 'iconified'"); gtk_window_iconify (shell->priv->window); gtk_widget_show (GTK_WIDGET (shell->priv->window)); break; 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)); } debug0 (DEBUG_GUI, "Loading pane proportions"); /* This only works after the window has been restored, so we do it last. */ 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); } void liferea_shell_create (GtkApplication *app, const gchar *overrideWindowState) { GtkUIManager *ui_manager; GtkAccelGroup *accel_group; GError *error = NULL; gboolean show_tray_icon, 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); /* 1.) menu creation */ debug0 (DEBUG_GUI, "Setting up menues"); shell->priv->itemlist = itemlist_create (); /* Prepare some toggle button states */ conf_get_bool_value (REDUCED_FEEDLIST, &toggle); liferea_shell_feedlist_toggle_entries[0].is_active = toggle; ui_manager = gtk_ui_manager_new (); shell->priv->generalActions = gtk_action_group_new ("GeneralActions"); gtk_action_group_set_translation_domain (shell->priv->generalActions, PACKAGE); gtk_action_group_add_actions (shell->priv->generalActions, liferea_shell_action_entries, G_N_ELEMENTS (liferea_shell_action_entries), shell->priv); gtk_action_group_add_toggle_actions (shell->priv->generalActions, liferea_shell_action_toggle_entries, G_N_ELEMENTS (liferea_shell_action_toggle_entries), shell->priv); gtk_action_group_add_radio_actions (shell->priv->generalActions, liferea_shell_view_radio_entries, G_N_ELEMENTS (liferea_shell_view_radio_entries), itemlist_get_view_mode (), (GCallback)on_view_activate, (gpointer)TRUE); gtk_action_group_add_toggle_actions (shell->priv->generalActions, liferea_shell_feedlist_toggle_entries, G_N_ELEMENTS (liferea_shell_feedlist_toggle_entries), shell->priv); gtk_ui_manager_insert_action_group (ui_manager, shell->priv->generalActions, 0); shell->priv->addActions = gtk_action_group_new ("AddActions"); gtk_action_group_set_translation_domain (shell->priv->addActions, PACKAGE); gtk_action_group_add_actions (shell->priv->addActions, liferea_shell_add_action_entries, G_N_ELEMENTS (liferea_shell_add_action_entries), shell->priv); gtk_ui_manager_insert_action_group (ui_manager, shell->priv->addActions, 0); shell->priv->feedActions = gtk_action_group_new ("FeedActions"); gtk_action_group_set_translation_domain (shell->priv->feedActions, PACKAGE); gtk_action_group_add_actions (shell->priv->feedActions, liferea_shell_feed_action_entries, G_N_ELEMENTS (liferea_shell_feed_action_entries), shell->priv); gtk_ui_manager_insert_action_group (ui_manager, shell->priv->feedActions, 0); shell->priv->readWriteActions = gtk_action_group_new("ReadWriteActions"); gtk_action_group_set_translation_domain (shell->priv->readWriteActions, PACKAGE); gtk_action_group_add_actions (shell->priv->readWriteActions, liferea_shell_read_write_action_entries, G_N_ELEMENTS (liferea_shell_read_write_action_entries), shell->priv); gtk_ui_manager_insert_action_group (ui_manager, shell->priv->readWriteActions, 0); shell->priv->itemActions = gtk_action_group_new ("ItemActions"); gtk_action_group_set_translation_domain (shell->priv->itemActions, PACKAGE); gtk_action_group_add_actions (shell->priv->itemActions, liferea_shell_item_action_entries, G_N_ELEMENTS (liferea_shell_item_action_entries), shell->priv); gtk_ui_manager_insert_action_group (ui_manager, shell->priv->itemActions, 0); accel_group = gtk_ui_manager_get_accel_group (ui_manager); gtk_window_add_accel_group (GTK_WINDOW (shell->priv->window), accel_group); g_object_unref (accel_group); g_signal_connect (gtk_accel_map_get (), "changed", G_CALLBACK (on_accel_change), NULL); if (!gtk_ui_manager_add_ui_from_string (ui_manager, liferea_shell_ui_desc, -1, &error)) g_error ("building menus failed: %s", error->message); shell->priv->menubar = gtk_ui_manager_get_widget (ui_manager, "/MainwindowMenubar"); shell->priv->toolbar = gtk_ui_manager_get_widget (ui_manager, "/maintoolbar"); /* Ensure GTK3 toolbar shadows... */ gtk_style_context_add_class (gtk_widget_get_style_context (shell->priv->toolbar), "primary-toolbar"); /* what a pain, why is there no markup for this option? */ g_object_set (G_OBJECT (gtk_ui_manager_get_widget (ui_manager, "/maintoolbar/newFeedButton")), "is_important", TRUE, NULL); g_object_set (G_OBJECT (gtk_ui_manager_get_widget (ui_manager, "/maintoolbar/nextUnreadButton")), "is_important", TRUE, NULL); g_object_set (G_OBJECT (gtk_ui_manager_get_widget (ui_manager, "/maintoolbar/MarkAsReadButton")), "is_important", TRUE, NULL); g_object_set (G_OBJECT (gtk_ui_manager_get_widget (ui_manager, "/maintoolbar/UpdateAllButton")), "is_important", TRUE, NULL); g_object_set (G_OBJECT (gtk_ui_manager_get_widget (ui_manager, "/maintoolbar/SearchButton")), "is_important", TRUE, NULL); /* 2.) setup containers */ debug0 (DEBUG_GUI, "Setting up widget containers"); gtk_box_pack_start (GTK_BOX (liferea_shell_lookup ("vbox1")), shell->priv->toolbar, FALSE, FALSE, 0); gtk_box_reorder_child (GTK_BOX (liferea_shell_lookup ("vbox1")), shell->priv->toolbar, 0); gtk_box_pack_start (GTK_BOX (liferea_shell_lookup ("vbox1")), shell->priv->menubar, FALSE, FALSE, 0); gtk_box_reorder_child (GTK_BOX (liferea_shell_lookup ("vbox1")), shell->priv->menubar, 0); 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), shell->priv); 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 = gtk_label_new(""); gtk_widget_show(shell->priv->statusbar_feedsinfo); gtk_box_pack_start (GTK_BOX (shell->priv->statusbar), shell->priv->statusbar_feedsinfo, FALSE, FALSE, 5); g_signal_connect ((gpointer) liferea_shell_lookup ("onlinebtn"), "clicked", G_CALLBACK (on_onlinebtn_clicked), 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 menues"); /* 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 (); conf_get_bool_value (SHOW_TRAY_ICON, &show_tray_icon); ui_tray_enable (show_tray_icon); /* 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); // FIXME: Move to item list view code // FIXME: Deactivated due to races causing crashes (see SF #1142, #1137) /*gint item_id; if (conf_get_int_value (LAST_ITEM_SELECTED, &item_id)) { itemPtr item = db_item_load ((gulong)item_id); if (item) { itemview_select_item (item); item_unload (item); } }*/ } /* 12. Connect network monitoring and set icon*/ g_signal_connect (network_monitor_get (), "online-status-changed", G_CALLBACK (liferea_shell_online_status_changed), shell); liferea_shell_set_online_icon (network_monitor_is_online ()); /* 13. Setup shell plugins */ shell->priv->extensions = peas_extension_set_new (PEAS_ENGINE (liferea_plugins_engine_get_default ()), LIFEREA_TYPE_SHELL_ACTIVATABLE, "shell", shell, NULL); g_signal_connect (shell->priv->extensions, "extension-added", G_CALLBACK (on_extension_added), shell); g_signal_connect (shell->priv->extensions, "extension-removed", G_CALLBACK (on_extension_removed), shell); peas_extension_set_call (shell->priv->extensions, "activate"); /* 14. Rebuild search folders if needed */ if (searchFolderRebuild) vfolder_foreach (vfolder_rebuild); debug_exit ("liferea_shell_create"); } void liferea_shell_destroy (void) { nodePtr node; itemPtr item; /* Save last selection for next start */ // FIXME: Move to feed list handling node = feedlist_get_selected (); if (node) conf_set_str_value (LAST_NODE_SELECTED, node->id); // FIXME: Move to item list handling item = itemlist_get_selected (); if (item) conf_set_int_value (LAST_ITEM_SELECTED, item->id); feed_list_view_select (NULL); // FIXME: Move to feed list handling liferea_shell_save_position (); ui_tray_enable (FALSE); g_object_unref (shell->priv->tabs); g_object_unref (shell->priv->feedlist); g_object_unref (shell->priv->itemview); g_object_unref (shell->priv->extensions); 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_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); } void liferea_shell_set_view_mode (nodeViewType newMode) { GtkRadioAction *action; action = GTK_RADIO_ACTION (gtk_action_group_get_action (shell->priv->generalActions, "NormalView")); gtk_radio_action_set_current_value (action, newMode); } liferea-1.10.17/src/ui/liferea_shell.h000066400000000000000000000137701261475620100174570ustar00rootroot00000000000000/* * @file liferea_shell.h UI layout handling * * Copyright (C) 2004-2005 Nathan J. Conrad * Copyright (C) 2007-2013 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): the widget found or NULL */ GtkWidget * liferea_shell_lookup (const gchar *name); /** * liferea_shell_create: * * Set up the Liferea main window. * * @param app the GtkApplication to attach the main window to * @param overrideWindowState optional parameter for window state (or NULL) */ void liferea_shell_create (GtkApplication *app, const gchar *overrideWindowState); /** * liferea_shell_destroy: * * 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: * * Sets the toolbar to a particular style * * @param toolbar_style text string containing the type of style to use */ void liferea_shell_set_toolbar_style (const gchar *toolbar_style); /** * liferea_shell_update_toolbar: * * 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: * * Update item history menu actions and toolbar buttons. * * TODO: use signal instead */ void liferea_shell_update_history_actions (void); /** * liferea_shell_update_feed_menu: * * Update the sensitivity of options affecting single feeds. * * @param add TRUE if subscribing is to be enabled * @param enabled TRUE if feed actions are to be enabled * @param readWrite TRUE if feed list modifying actions are enabled * * TODO: use signal instead */ void liferea_shell_update_feed_menu (gboolean add, gboolean enabled, gboolean readWrite); /** * liferea_shell_update_item_menu: * * Update the sensitivity of options affecting single items. * * @param enabled TRUE if item actions are to be enabled * * TODO: use signal instead */ void liferea_shell_update_item_menu (gboolean enabled); /** * liferea_shell_update_allitems_actions: * * Update the sensitivity of options affecting item sets. * * @param isNotEmpty TRUE if there is a non-empty item set active * @param isRead TRUE if there are no unread items in the item set * * TODO: use signal instead */ void liferea_shell_update_allitems_actions (gboolean isNotEmpty, gboolean isRead); /** * liferea_shell_update_update_menu: * * Set the sensitivity of items in the update menu. * * @param enabled TRUE if menu options are to be enabled * * TODO: use signal instead */ void liferea_shell_update_update_menu (gboolean enabled); /** * liferea_shell_update_unread_stats: * * Updates the unread/new item count right beneath the status bar. * * TODO: use signal instead */ void liferea_shell_update_unread_stats (void); /** * 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); /** * liferea_shell_set_view_mode: * @newMode: the new mode * * Update the mode selection in the menu */ void liferea_shell_set_view_mode (nodeViewType newMode); void liferea_shutdown (void); G_END_DECLS #endif liferea-1.10.17/src/ui/liferea_shell_activatable.c000066400000000000000000000070431261475620100220050ustar00rootroot00000000000000/* * @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.10.17/src/ui/liferea_shell_activatable.h000066400000000000000000000044751261475620100220200ustar00rootroot00000000000000/* * @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.10.17/src/ui/media_player.c000066400000000000000000000062341261475620100173040ustar00rootroot00000000000000/* * @file liferea_media_player.c 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 */ #include "media_player.h" #include "media_player_activatable.h" #include "plugins_engine.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_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); 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; } 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.10.17/src/ui/media_player.h000066400000000000000000000024131261475620100173040ustar00rootroot00000000000000/* * @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.10.17/src/ui/media_player_activatable.c000066400000000000000000000047621261475620100216470ustar00rootroot00000000000000/* * @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.10.17/src/ui/media_player_activatable.h000066400000000000000000000056001261475620100216440ustar00rootroot00000000000000/* * @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.10.17/src/ui/popup_menu.c000066400000000000000000000316341261475620100170420ustar00rootroot00000000000000/** * @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_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 on_popup_quit (void) { liferea_shutdown (); } static void on_toggle_visibility (void) { liferea_shell_toggle_visibility (); } static void on_popup_toggle_online (void) { network_monitor_set_online (!network_monitor_is_online ()); } static void on_popup_preferences (void) { preferences_dialog_open (); } 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, const gchar *icon, gint toggle) { GtkWidget *item; GtkWidget *image; if (toggle) { item = gtk_check_menu_item_new_with_label (label); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(item), toggle - UI_POPUP_ITEM_IS_TOGGLE); } else { if (icon) { if (label) { item = gtk_image_menu_item_new_with_label (label); image = gtk_image_new_from_stock (icon, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image); } else { item = gtk_image_menu_item_new_from_stock (icon, NULL); } } else { item = gtk_menu_item_new_with_label (label); } } if (callback) g_signal_connect_swapped (G_OBJECT(item), "activate", G_CALLBACK(callback), data); gtk_menu_item_set_use_underline (GTK_MENU_ITEM(item), TRUE); gtk_menu_shell_append (GTK_MENU_SHELL(menu), item); return item; } void ui_popup_item_menu (itemPtr item, guint button, guint32 activate_time) { GtkWidget *menu; GSList *iter; gchar *text; menu = gtk_menu_new (); ui_popup_add_menuitem (menu, _("Open In _Tab"), on_popup_launch_item_in_tab_selected, NULL, NULL, 0); ui_popup_add_menuitem (menu, _("_Open In Browser"), on_popup_launch_item_selected, NULL, NULL, 0); ui_popup_add_menuitem (menu, _("Open In _External Browser"), on_popup_launch_item_external_selected, NULL, NULL, 0); gtk_menu_shell_append (GTK_MENU_SHELL (menu), gtk_separator_menu_item_new ()); iter = newsbin_get_list (); if (iter) { GtkWidget *item; GtkWidget *submenu; int i = 0; submenu = gtk_menu_new (); item = ui_popup_add_menuitem (menu, _("Copy to News Bin"), NULL, NULL, NULL, 0); while (iter) { nodePtr node = (nodePtr)iter->data; ui_popup_add_menuitem (submenu, node_get_title (node), on_popup_copy_to_newsbin, GINT_TO_POINTER(i), NULL, 0); iter = g_slist_next (iter); i++; } gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), submenu); gtk_menu_shell_append (GTK_MENU_SHELL (menu), gtk_separator_menu_item_new ()); } text = g_strdup_printf (_("_Bookmark at %s"), social_get_bookmark_site ()); ui_popup_add_menuitem (menu, text, on_popup_social_bm_item_selected, NULL, NULL, 0); g_free (text); ui_popup_add_menuitem (menu, _("Copy Item _Location"), on_popup_copy_URL_clipboard, NULL, NULL, 0); gtk_menu_shell_append (GTK_MENU_SHELL (menu), gtk_separator_menu_item_new ()); ui_popup_add_menuitem (menu, _("Toggle _Read Status"), on_popup_toggle_read, NULL, GTK_STOCK_APPLY, 0); ui_popup_add_menuitem (menu, _("Toggle Item _Flag"), on_popup_toggle_flag, NULL, NULL, 0); ui_popup_add_menuitem (menu, _("R_emove Item"), on_popup_remove_selected, NULL, GTK_STOCK_DELETE, 0); 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, NULL, 0); ui_popup_add_menuitem (menu, _("Save As..."), on_popup_save_enclosure, enclosure, NULL, 0); ui_popup_add_menuitem (menu, _("Copy Link Location"), on_popup_copy_enclosure, enclosure, NULL, 0); ui_popup_menu (menu, button, activate_time); } void ui_popup_systray_menu (GtkMenuPositionFunc func, guint button, guint32 activate_time, gpointer user_data) { GtkWidget *menu; GtkWidget *mainwindow = liferea_shell_get_window (); menu = gtk_menu_new (); ui_popup_add_menuitem (menu, _("_Work Offline"), on_popup_toggle_online, NULL, NULL, (!network_monitor_is_online ()) + UI_POPUP_ITEM_IS_TOGGLE); ui_popup_add_menuitem (menu, _("_Update All"), on_menu_update_all, NULL, GTK_STOCK_REFRESH, 0); ui_popup_add_menuitem (menu, NULL, on_popup_preferences, NULL, GTK_STOCK_PREFERENCES, 0); gtk_menu_shell_append (GTK_MENU_SHELL (menu), gtk_separator_menu_item_new ()); ui_popup_add_menuitem (menu, _("_Show Liferea"), on_toggle_visibility, NULL, NULL, (!(gdk_window_get_state (gtk_widget_get_window (mainwindow)) & GDK_WINDOW_STATE_ICONIFIED) && gtk_widget_get_visible (mainwindow)) + UI_POPUP_ITEM_IS_TOGGLE); ui_popup_add_menuitem (menu, NULL, on_popup_quit, NULL, GTK_STOCK_QUIT, 0); ui_popup_menu_at_pos (menu, func, button, activate_time, user_data); } /* popup callback wrappers */ static void ui_popup_mark_as_read (gpointer callback_data) { feedlist_mark_all_read ((nodePtr)callback_data); } static void ui_popup_add_feed (void) { node_type_request_interactive_add (feed_get_node_type ()); } static void ui_popup_add_folder (void) { node_type_request_interactive_add (folder_get_node_type ()); } static void ui_popup_add_vfolder (void) { node_type_request_interactive_add (vfolder_get_node_type ()); } static void ui_popup_rebuild_vfolder (gpointer callback_data) { vfolder_rebuild ((nodePtr)callback_data); } static void ui_popup_add_source (void) { node_type_request_interactive_add (node_source_get_node_type ()); } static void ui_popup_add_newsbin (void) { node_type_request_interactive_add (newsbin_get_node_type ()); } static void ui_popup_properties (gpointer callback_data) { nodePtr node = (nodePtr) callback_data; NODE_TYPE (node)->request_properties (node); } static void ui_popup_delete (gpointer callback_data) { feed_list_view_delete_prompt ((nodePtr)callback_data); } static void ui_popup_sort_feeds (gpointer callback_data) { feed_list_view_sort_folder ((nodePtr)callback_data); } static void ui_popup_add_convert_to_local (gpointer callback_data) { node_source_convert_to_local ((nodePtr)callback_data); } /** * 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; gboolean writeableFeedlist, isRoot, addChildren; menu = gtk_menu_new (); 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; } if (validSelection) { if (NODE_TYPE (node)->capabilities & NODE_CAPABILITY_UPDATE) ui_popup_add_menuitem (menu, _("_Update"), on_menu_update, node, GTK_STOCK_REFRESH, 0); else if (NODE_TYPE (node)->capabilities & NODE_CAPABILITY_UPDATE_CHILDS) ui_popup_add_menuitem (menu, _("_Update Folder"), on_menu_update, node, GTK_STOCK_REFRESH, 0); ui_popup_add_menuitem (menu, _("_Mark All As Read"), ui_popup_mark_as_read, node, GTK_STOCK_APPLY, 0); } if (writeableFeedlist) { if (addChildren) { GtkWidget *item; GtkWidget *submenu; submenu = gtk_menu_new (); item = ui_popup_add_menuitem (menu, _("_New"), NULL, NULL, NULL, 0); if (node_can_add_child_feed (node)) ui_popup_add_menuitem (submenu, _("New _Subscription..."), ui_popup_add_feed, NULL, NULL, 0); if (node_can_add_child_folder (node)) ui_popup_add_menuitem (submenu, _("New _Folder..."), ui_popup_add_folder, NULL, NULL, 0); if (isRoot) { ui_popup_add_menuitem (submenu, _("New S_earch Folder..."), ui_popup_add_vfolder, NULL, NULL, 0); ui_popup_add_menuitem (submenu, _("New S_ource..."), ui_popup_add_source, NULL, NULL, 0); ui_popup_add_menuitem (submenu, _("New _News Bin..."), ui_popup_add_newsbin, NULL, NULL, 0); } gtk_menu_item_set_submenu (GTK_MENU_ITEM(item), submenu); } if (isRoot && node->children) { gtk_menu_shell_append (GTK_MENU_SHELL (menu), gtk_separator_menu_item_new ()); ui_popup_add_menuitem (menu, _("Sort Feeds"), ui_popup_sort_feeds, node, GTK_STOCK_SORT_ASCENDING, 0); } } if (IS_VFOLDER (node)) { gtk_menu_shell_append (GTK_MENU_SHELL (menu), gtk_separator_menu_item_new ()); ui_popup_add_menuitem (menu, _("_Rebuild"), ui_popup_rebuild_vfolder, node, NULL, 0); } if (validSelection) { if (writeableFeedlist) { gtk_menu_shell_append (GTK_MENU_SHELL (menu), gtk_separator_menu_item_new ()); ui_popup_add_menuitem (menu, NULL, ui_popup_delete, node, GTK_STOCK_DELETE, 0); ui_popup_add_menuitem (menu, NULL, ui_popup_properties, node, GTK_STOCK_PROPERTIES, 0); } if (IS_NODE_SOURCE (node) && NODE_SOURCE_TYPE (node)->capabilities & NODE_SOURCE_CAPABILITY_CONVERT_TO_LOCAL) { gtk_menu_shell_append (GTK_MENU_SHELL (menu), gtk_separator_menu_item_new ()); ui_popup_add_menuitem (menu, _("Convert To Local Subscriptions..."), ui_popup_add_convert_to_local, node, NULL, 0); } } 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.10.17/src/ui/popup_menu.h000066400000000000000000000051331261475620100170420ustar00rootroot00000000000000/** * @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 systray icon. * (Offline mode, Close, Minimize...) * * @param func the function to calculate the position to popup * @param button the mouse button which was pressed to initiate the event * @param activate_time the time at which the activation event occurred * @param user_data the user data to pass to func. */ void ui_popup_systray_menu (GtkMenuPositionFunc func, guint button, guint32 activate_time, gpointer user_data); /** * 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.10.17/src/ui/preferences_dialog.c000066400000000000000000000731551261475620100204770ustar00rootroot00000000000000/** * @file preferences_dialog.c Liferea preferences * * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2004-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/preferences_dialog.h" #ifdef HAVE_CONFIG_H # include #endif #include #include "browser.h" #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/ui_indicator.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 */ GtkWidget *plugins_box; /**< libpeas plugins configuration 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 *htmlviewPlugins; 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" }; /** order must match enclosure_download_commands[] */ static const gchar *enclosure_download_tool_options[] = { "steadyflow", "gwget", "kget", 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") }; const gchar * prefs_get_download_command (void) { gint enclosure_download_tool; conf_get_int_value (DOWNLOAD_TOOL, &enclosure_download_tool); /* FIXME: array boundary check */ return enclosure_download_commands[enclosure_download_tool]; } /* 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_trayiconoptionbtn_clicked (GtkButton *button, gpointer user_data) { gboolean enabled; enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button)); conf_set_bool_value (SHOW_TRAY_ICON, enabled); gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog->priv->dialog, "newcountintraybtn"), enabled); gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog->priv->dialog, "minimizetotraybtn"), enabled); gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog->priv->dialog, "startintraybtn"), enabled); } void on_popupwindowsoptionbtn_clicked (GtkButton *button, gpointer user_data) { gboolean enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); conf_set_bool_value (SHOW_POPUP_WINDOWS, enabled); } 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; struct browser *browsers = browser_get_all(); 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"), browsers[num].id == NULL); gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog->priv->dialog, "manuallabel"), browsers[num].id == NULL); gtk_widget_set_sensitive (liferea_dialog_lookup (prefdialog->priv->dialog, "urlhintlabel"), browsers[num].id == NULL); if (browsers[num].id == NULL) conf_set_str_value (BROWSER_ID, "manual"); else conf_set_str_value (BROWSER_ID, browsers[num].id); } } static void on_browser_place_changed (GtkComboBox *optionmenu, gpointer user_data) { int num = gtk_combo_box_get_active (optionmenu); conf_set_int_value (BROWSER_PLACE, num); } 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))); } 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_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_newcountintraybtn_clicked (GtkButton *button, gpointer user_data) { conf_set_bool_value (SHOW_NEW_COUNT_IN_TRAY, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))); } void on_minimizetotraybtn_clicked (GtkButton *button, gpointer user_data) { conf_set_bool_value (DONT_MINIMIZE_TO_TRAY, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))); } void on_startintraybtn_clicked (GtkButton *button, gpointer user_data) { conf_set_bool_value (START_IN_TRAY, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))); } 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 (); } 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; static int manual; struct browser *iter; gint tmp, i, iSetting, proxy_port; gboolean bSetting, show_tray_icon; gchar *proxy_host, *proxy_user, *proxy_passwd; gchar *browser_command; prefdialog = pd; pd->priv = PREFERENCES_DIALOG_GET_PRIVATE (pd); pd->priv->dialog = liferea_dialog_new ("prefs.ui", "prefdialog"); /* Set up browser selection popup */ store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT); for(i = 0, iter = browser_get_all (); iter->id != NULL; iter++, i++) { gtk_list_store_append (store, &treeiter); gtk_list_store_set (store, &treeiter, 0, _(iter->display), 1, i, -1); } manual = i; /* This allows the user to choose their own browser by typing in the command. */ gtk_list_store_append (store, &treeiter); gtk_list_store_set (store, &treeiter, 0, _("Manual"), 1, i, -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); /* Create location menu */ store = gtk_list_store_new (1, G_TYPE_STRING); combo = GTK_COMBO_BOX (liferea_dialog_lookup (pd->priv->dialog, "browserlocpopup")); 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_place_changed), pd); gtk_list_store_append (store, &treeiter); gtk_list_store_set (store, &treeiter, 0, _("Browser default"), -1); gtk_list_store_append (store, &treeiter); gtk_list_store_set (store, &treeiter, 0, _("Existing window"), -1); gtk_list_store_append (store, &treeiter); gtk_list_store_set (store, &treeiter, 0, _("New window"), -1); gtk_list_store_append (store, &treeiter); gtk_list_store_set (store, &treeiter, 0, _("New tab"), -1); /* ================== 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); tmp = 0; conf_get_str_value(BROWSER_ID, &configuredBrowser); if(!strcmp(configuredBrowser, "manual")) tmp = manual; else for(i=0, iter = browser_get_all (); iter->id != NULL; iter++, i++) if(!strcmp(configuredBrowser, iter->id)) tmp = i; gtk_combo_box_set_active(GTK_COMBO_BOX(liferea_dialog_lookup(pd->priv->dialog, "browserpopup")), tmp); g_free(configuredBrowser); conf_get_int_value (BROWSER_PLACE, &iSetting); gtk_combo_box_set_active(GTK_COMBO_BOX(liferea_dialog_lookup(pd->priv->dialog, "browserlocpopup")), iSetting); 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), tmp == manual); gtk_widget_set_sensitive (liferea_dialog_lookup (pd->priv->dialog, "manuallabel"), tmp == manual); gtk_widget_set_sensitive (liferea_dialog_lookup (pd->priv->dialog, "urlhintlabel"), tmp == manual); /* ================== panel 4 "GUI" ================ */ widget = liferea_dialog_lookup (pd->priv->dialog, "popupwindowsoptionbtn"); conf_get_bool_value (SHOW_POPUP_WINDOWS, &bSetting); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), bSetting); widget = liferea_dialog_lookup (pd->priv->dialog, "trayiconoptionbtn"); conf_get_bool_value (SHOW_TRAY_ICON, &show_tray_icon); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), show_tray_icon); widget = liferea_dialog_lookup (pd->priv->dialog, "newcountintraybtn"); conf_get_bool_value (SHOW_NEW_COUNT_IN_TRAY, &bSetting); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), bSetting); gtk_widget_set_sensitive (liferea_dialog_lookup (pd->priv->dialog, "newcountintraybtn"), show_tray_icon); widget = liferea_dialog_lookup (pd->priv->dialog, "minimizetotraybtn"); conf_get_bool_value (DONT_MINIMIZE_TO_TRAY, &bSetting); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), bSetting); gtk_widget_set_sensitive (liferea_dialog_lookup (pd->priv->dialog, "minimizetotraybtn"), show_tray_icon); widget = liferea_dialog_lookup (pd->priv->dialog, "startintraybtn"); conf_get_bool_value (START_IN_TRAY, &bSetting); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), bSetting); gtk_widget_set_sensitive (liferea_dialog_lookup (pd->priv->dialog, "startintraybtn"), show_tray_icon); if (ui_indicator_is_visible ()) { /* If we use the indicator applet: - The "show tray icon" and "minimize to tray icon" settings are interpreted as "show indicator" and "minimize to indicator" - The "new count in tray icon" setting doesn't make sense and is ignored by indicator handling code */ gtk_widget_hide (liferea_dialog_lookup (pd->priv->dialog, "newcountintraybtn")); gtk_button_set_label (GTK_BUTTON (liferea_dialog_lookup (pd->priv->dialog, "trayiconoptionbtn")), _("Integrate with the messaging menu (indicator)")); gtk_button_set_label (GTK_BUTTON (liferea_dialog_lookup (pd->priv->dialog, "minimizetotraybtn")), _("Terminate instead of minimizing to the messaging menu")); gtk_button_set_label (GTK_BUTTON (liferea_dialog_lookup (pd->priv->dialog, "startintraybtn")), _("Start minimized to the messaging menu")); } /* 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); /* ================= panel 5 "proxy" ======================== */ 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); /* ================= panel 6 "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); /* 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); /* ================= panel 7 "Plugins" ======================== */ pd->priv->plugins_box = liferea_dialog_lookup (pd->priv->dialog, "plugins_box"); g_assert (pd->priv->plugins_box != NULL); GtkWidget *alignment; alignment = gtk_alignment_new (0., 0., 1., 1.); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 12, 12, 12, 12); widget = peas_gtk_plugin_manager_new (NULL); g_assert (widget != NULL); gtk_container_add (GTK_CONTAINER (alignment), widget); gtk_box_pack_start (GTK_BOX (pd->priv->plugins_box), alignment, TRUE, TRUE, 0); 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.10.17/src/ui/preferences_dialog.h000066400000000000000000000071351261475620100204770ustar00rootroot00000000000000/** * @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); /** * Returns a download tool definition. * * @return the download command definition */ const 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_trayiconoptionbtn_clicked (GtkButton *button, 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_enc_action_change_btn_clicked (GtkButton *button, gpointer user_data); void on_enc_action_remove_btn_clicked (GtkButton *button, gpointer user_data); void on_newcountintraybtn_clicked (GtkButton *button, gpointer user_data); void on_minimizetotraybtn_clicked (GtkButton *button, gpointer user_data); void on_startintraybtn_clicked (GtkButton *button, gpointer user_data); void on_hidetoolbar_toggled (GtkToggleButton *button, gpointer user_data); G_END_DECLS #endif liferea-1.10.17/src/ui/rule_editor.c000066400000000000000000000232701261475620100171650ustar00rootroot00000000000000/** * @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_from_stock ("gtk-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.10.17/src/ui/rule_editor.h000066400000000000000000000053531261475620100171740ustar00rootroot00000000000000/** * @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.10.17/src/ui/search_dialog.c000066400000000000000000000221611261475620100174320ustar00rootroot00000000000000/** * @file search_dialog.c Search engine subscription dialog * * 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 */ #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 (NULL, "searchdialog"); 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 (NULL, "simplesearchdialog"); 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.10.17/src/ui/search_dialog.h000066400000000000000000000061131261475620100174360ustar00rootroot00000000000000/** * @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.10.17/src/ui/search_folder_dialog.c000066400000000000000000000110711261475620100207630ustar00rootroot00000000000000/** * @file search-folder-dialog.c Search folder properties dialog * * 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 */ #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.ui", "vfolderdialog"); /* 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.10.17/src/ui/search_folder_dialog.h000066400000000000000000000043171261475620100207750ustar00rootroot00000000000000/** * @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.10.17/src/ui/subscription_dialog.c000066400000000000000000000731651261475620100207230ustar00rootroot00000000000000/** * @file subscription_dialog.c property dialog for feed subscriptions * * Copyright (C) 2004-2011 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(BAD_CAST str); if (uri != NULL) { xmlChar *sourceUrl; xmlFree(uri->user); uri->user = g_strdup_printf("%s:%s", username, password); sourceUrl = xmlSaveUri(uri); source = g_strdup(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->enforcePopup = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (GTK_WIDGET (dialog), "enforcePopupCheck"))); feed->preventPopup = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (GTK_WIDGET (dialog), "preventPopupCheck"))); feed->markAsRead = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (GTK_WIDGET (dialog), "markAsReadCheck"))); if (feed->enforcePopup && feed->preventPopup) feed->enforcePopup = FALSE; 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"), GTK_STOCK_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(BAD_CAST 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), 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, "enforcePopupCheck")), feed->enforcePopup); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (spd->priv->dialog, "preventPopupCheck")), feed->preventPopup); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (liferea_dialog_lookup (spd->priv->dialog, "markAsReadCheck")), feed->markAsRead); /* Remove tabs we do not need... */ if (SUBSCRIPTION_TYPE(subscription) != feed_get_subscription_type ()) { /* Remove "Allgemein", "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 (NULL, "propdialog"); /* 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, "table4"); 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; /* 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"))); feedlist_add_subscription (source, filter, options, FEED_REQ_PRIORITY_HIGH); g_free (source); } 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.ui", "newdialog"); /* 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; 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 */); feedlist_add_subscription (source, NULL, NULL, FEED_REQ_PRIORITY_HIGH); g_free (source); } 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.ui", "simplenewdialog"); /* 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.10.17/src/ui/subscription_dialog.h000066400000000000000000000104221261475620100207130ustar00rootroot00000000000000/** * @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.10.17/src/ui/ui_common.c000066400000000000000000000156261261475620100166430ustar00rootroot00000000000000/** * @file ui_common.c UI helper functions * * 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/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)), GTK_STOCK_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); } liferea-1.10.17/src/ui/ui_common.h000066400000000000000000000063551261475620100166470ustar00rootroot00000000000000/** * @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); #endif liferea-1.10.17/src/ui/ui_dnd.c000066400000000000000000000217041261475620100161120ustar00rootroot00000000000000/** * @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/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); /* 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.10.17/src/ui/ui_dnd.h000066400000000000000000000020411261475620100161100ustar00rootroot00000000000000/** * @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.10.17/src/ui/ui_folder.c000066400000000000000000000031101261475620100166070ustar00rootroot00000000000000/** * @file ui_folder.c GUI folder handling * * Copyright (C) 2004-2006 Nathan J. Conrad * Copyright (C) 2004-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 "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 (NULL, "newfolderdialog"); 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.10.17/src/ui/ui_folder.h000066400000000000000000000023431261475620100166230ustar00rootroot00000000000000/** * @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.10.17/src/ui/ui_indicator.c000066400000000000000000000146071261475620100173250ustar00rootroot00000000000000/* * @file ui_indicator.c libindicate support * * Copyright (C) 2010-2011 Maia Kozheva * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA */ #ifdef HAVE_CONFIG_H # include #endif #include "ui_indicator.h" #ifdef HAVE_LIBINDICATE #include #include #include #include #include #include "feedlist.h" #include "ui/feed_list_view.h" #include "ui/liferea_shell.h" #include "ui/ui_tray.h" #include "vfolder.h" /* The maximum number of feeds to display in the indicator menu. */ #define MAX_INDICATORS 6 /* Whether Liferea should set the indicator menu to attention status whenever new feed items are downloaded. Since news feeds do not typically require the user's urgent attention, unlike mail and IM messages, this is set to false by default. */ #define SET_DRAW_ATTENTION FALSE static struct indicator_priv { IndicateServer *server; gboolean visible; GPtrArray *indicators; } *indicator_priv = NULL; /* The desktop file to initialize the indicator menu with. Resolves to a string like "/usr/share/applications/liferea.desktop". */ static const char *DESKTOP_FILE = PACKAGE_DATA_DIR G_DIR_SEPARATOR_S "applications" G_DIR_SEPARATOR_S "liferea.desktop"; static void remove_all_indicators () { g_ptr_array_set_size (indicator_priv->indicators, 0); } /* Called when the main "Liferea" entry in the indicator menu is clicked. */ static void on_indicator_server_clicked (IndicateServer *server, gchar *type, gpointer user_data) { liferea_shell_present (); remove_all_indicators (); } /* Called when the indicator container applet is shown. */ static void on_indicator_interest_added (IndicateServer *server, guint interest, gpointer user_data) { if (interest != INDICATE_INTEREST_SERVER_SIGNAL) return; indicator_priv->visible = TRUE; ui_tray_update (); } /* Called when the indicator container applet is hidden. */ static void on_indicator_interest_removed (IndicateServer *server, guint interest, gpointer user_data) { if (interest != INDICATE_INTEREST_SERVER_SIGNAL) return; indicator_priv->visible = FALSE; ui_tray_update (); } /* Called when the indicator menu entry for a specific feed is clicked, meaning Liferea should switch to that feed. */ static void on_indicator_clicked (IndicateIndicator *indicator, guint timestamp, gpointer user_data) { feed_list_view_select ((nodePtr) user_data); liferea_shell_present (); remove_all_indicators (); } static void destroy_indicator (gpointer indicator) { if (indicator_priv->server == NULL || indicator == NULL) return; indicate_server_remove_indicator (indicator_priv->server, INDICATE_INDICATOR(indicator)); g_object_unref (G_OBJECT (indicator)); } void ui_indicator_init () { if (indicator_priv != NULL) return; indicator_priv = g_new0 (struct indicator_priv, 1); indicator_priv->visible = FALSE; indicator_priv->indicators = g_ptr_array_new_with_free_func (destroy_indicator); indicator_priv->server = indicate_server_ref_default(); indicate_server_set_type (indicator_priv->server, "message.im"); indicate_server_set_desktop_file (indicator_priv->server, DESKTOP_FILE); g_signal_connect (G_OBJECT (indicator_priv->server), "server-display", G_CALLBACK (on_indicator_server_clicked), NULL); g_signal_connect (G_OBJECT (indicator_priv->server), "interest-added", G_CALLBACK (on_indicator_interest_added), NULL); g_signal_connect (G_OBJECT (indicator_priv->server), "interest-removed", G_CALLBACK (on_indicator_interest_removed), NULL); indicate_server_show (indicator_priv->server); ui_indicator_update (); } void ui_indicator_destroy () { if (indicator_priv == NULL) return; remove_all_indicators (); g_object_unref (indicator_priv->server); indicator_priv->server = NULL; g_ptr_array_free (indicator_priv->indicators, TRUE); g_free (indicator_priv); indicator_priv = NULL; } static void add_node_indicator (nodePtr node) { IndicateIndicator *indicator; GdkPixbuf *pixbuf; gchar count[10]; if (indicator_priv->indicators->len >= MAX_INDICATORS) return; if (IS_VFOLDER(node) || g_slist_length (node->children) > 0) { /* Not a feed - walk children and do nothing more */ node_foreach_child (node, add_node_indicator); return; } /* Skip feeds with no unread items */ if (node->unreadCount == 0) return; indicator = indicate_indicator_new_with_server (indicator_priv->server); g_signal_connect (indicator, "user-display", G_CALLBACK (on_indicator_clicked), node); /* load favicon */ pixbuf = gdk_pixbuf_new_from_file (node->iconFile, NULL); /* display favicon */ indicate_gtk_indicator_set_property_icon (indicator, "icon", pixbuf); g_object_unref (pixbuf); sprintf (count, "%u", node->unreadCount); indicate_indicator_set_property (indicator, "name", node->title); indicate_indicator_set_property (indicator, "count", count); #if SET_DRAW_ATTENTION indicate_indicator_set_property_bool (indicator, "draw-attention", TRUE); #endif g_ptr_array_add (indicator_priv->indicators, indicator); } void ui_indicator_update () { guint index; /* Do not update indicators if the user is interacting with the main window */ if (!indicator_priv || gtk_window_is_active (GTK_WINDOW (liferea_shell_get_window ()))) return; /* Remove all previous indicators from the menu */ remove_all_indicators (); /* ...then walk the tree and add an indicator for each unread feed */ feedlist_foreach (add_node_indicator); /* revert order of items */ for (index = indicator_priv->indicators->len; index > 0; index--) indicate_indicator_show (g_ptr_array_index (indicator_priv->indicators, index - 1)); } gboolean ui_indicator_is_visible () { return indicator_priv && indicator_priv->visible; } #endif /* HAVE_LIBINDICATE */ liferea-1.10.17/src/ui/ui_indicator.h000066400000000000000000000034031261475620100173220ustar00rootroot00000000000000/* * @file ui_indicator.h libindicate support * * Copyright (C) 2010-2011 Maia Kozheva * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA */ #ifndef _UI_INDICATOR_H #define _UI_INDICATOR_H #include #ifdef HAVE_LIBINDICATE /** * Setup indicator widget. */ void ui_indicator_init (void); /** * Destroy indicator widget. */ void ui_indicator_destroy (void); /** * To be called whenever indicator widget should be updated. */ void ui_indicator_update (void); /** * Query whether indicator widget is active. * * @returns TRUE if indicator widget is active */ gboolean ui_indicator_is_visible (void); #else /* HAVE_LIBINDICATE */ /* If Liferea is compiled without libindicate support, all indicator support functions do nothing. The application behaves as if there is no indicator applet present. */ static inline void ui_indicator_init () {} static inline void ui_indicator_destroy () {} static inline void ui_indicator_update () {} static inline gboolean ui_indicator_is_visible () { return FALSE; } #endif /* HAVE_LIBINDICATE */ #endif /* _UI_INDICATOR_H */ liferea-1.10.17/src/ui/ui_tray.c000066400000000000000000000202601261475620100163200ustar00rootroot00000000000000/** * @file ui_tray.c tray icon handling * * Copyright (C) 2003-2011 Lars Windolf * Copyright (C) 2004 Christophe Barbe * 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 #include #include #include #include "common.h" #include "conf.h" #include "feedlist.h" #include "net_monitor.h" #include "ui/liferea_shell.h" #include "ui/icons.h" #include "ui/popup_menu.h" #include "ui/ui_indicator.h" #include "ui/ui_tray.h" // FIXME: determine this from Pango or Cairo somehow... #define FONT_CHAR_WIDTH 6 #define FONT_CHAR_HEIGHT 8 static struct trayIcon_priv { int trayCount; /**< reference counter */ GdkPixbuf *currentIcon; /**< currently displayed icon */ GtkStatusIcon *status_icon; /**< the tray icon widget */ } *trayIcon_priv = NULL; static void ui_tray_install(void); GtkStatusIcon* ui_tray_get_status_icon (void) { if (!trayIcon_priv) return NULL; return trayIcon_priv->status_icon; } static void ui_tray_tooltip_set (const gchar *message) { gtk_status_icon_set_tooltip_text(trayIcon_priv->status_icon, message); } static GdkPixbuf* ui_tray_make_icon (void) { cairo_t *c; cairo_surface_t *cs; gchar *str; guint newItems; gboolean show_new_count_in_tray; gint size, i, j; gint w, h; int stride, pstride; unsigned char *data, *row; guchar *pixels, *p; GdkPixbuf *out; /* We expect currentIcon to be a 16x16 image and we will render a colored area with height 10 in the middle of the image with 8pt text inside */ h = gdk_pixbuf_get_height(trayIcon_priv->currentIcon); w = gdk_pixbuf_get_width(trayIcon_priv->currentIcon); /* this is a hack as we don't know the size of status icon * if it is not embedded. */ if(gtk_status_icon_is_embedded (trayIcon_priv->status_icon)) { size = gtk_status_icon_get_size (trayIcon_priv->status_icon); } else { size = MAX(h,w); } conf_get_bool_value (SHOW_NEW_COUNT_IN_TRAY, &show_new_count_in_tray); if (!show_new_count_in_tray) return trayIcon_priv->currentIcon; newItems = feedlist_get_new_item_count(); cs = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, size, size); c = cairo_create (cs); cairo_set_antialias (c, CAIRO_ANTIALIAS_NONE); gdk_cairo_set_source_pixbuf (c, trayIcon_priv->currentIcon, (size - w) / 2, (size - h) / 2); cairo_paint (c); if(newItems > 0) { gint textWidth, textStart; /* GtkStatusIcon doesn't allow non-square icons yet, so the * part that doesn't fit is just cropped. Don't put a large * text there then, otherwise it won't appear entirely. */ if (newItems > 99) str = g_strdup_printf ("99+"); else str = g_strdup_printf ("%d", newItems); textWidth = strlen(str) * FONT_CHAR_WIDTH; if(textWidth + 2 > size) textStart = 1; else textStart = size/2 - textWidth/2; cairo_rectangle(c, textStart - 1, size/2 - (FONT_CHAR_HEIGHT + 2)/2, textWidth + 1, FONT_CHAR_HEIGHT + 2); cairo_set_source_rgba(c, 1, 0.50, 0.10, 1.0); // orange cairo_fill(c); cairo_set_source_rgba(c, 1, 1, 1, 1.0); cairo_move_to(c, textStart - 1, size/2 - (FONT_CHAR_HEIGHT + 2)/2 + FONT_CHAR_HEIGHT); cairo_select_font_face(c, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_set_font_size(c, FONT_CHAR_HEIGHT + 2); cairo_show_text(c, str); g_free(str); } stride = cairo_image_surface_get_stride (cs); data = cairo_image_surface_get_data (cs); out = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, size, size); pstride = gdk_pixbuf_get_rowstride (out); pixels = gdk_pixbuf_get_pixels (out); for (i = 0; i < size; i++) { row = data + (i * stride); p = pixels + (i * pstride); for (j = 0; j < size; j++) { guint32 px = *(guint32*)row; p[0] = (px & 0xff0000) >> 16; p[1] = (px & 0xff00) >> 8; p[2] = (px & 0xff); p[3] = (px & 0xff000000) >> 24; p += 4; row += 4; } } cairo_destroy(c); cairo_surface_destroy (cs); return out; } static void ui_tray_icon_set (gint newItems, const GdkPixbuf *icon) { gboolean show_new_count_in_tray; g_assert (trayIcon_priv->status_icon); /* Having two code branches here to have real transparency at least with new count disabled... */ conf_get_bool_value (SHOW_NEW_COUNT_IN_TRAY, &show_new_count_in_tray); if (show_new_count_in_tray) { trayIcon_priv->currentIcon = (GdkPixbuf *)icon; gtk_status_icon_set_from_pixbuf (trayIcon_priv->status_icon, ui_tray_make_icon ()); } else { /* Skip loading icon if already displayed. */ if (icon == trayIcon_priv->currentIcon) return; trayIcon_priv->currentIcon = (GdkPixbuf *)icon; gtk_status_icon_set_from_pixbuf(trayIcon_priv->status_icon, trayIcon_priv->currentIcon); } } void ui_tray_update (void) { gint newItems, unreadItems; gchar *msg, *tmp; ui_indicator_update (); if (!trayIcon_priv) return; /* The indicator overrides the tray icon. If the indicator applet is present, we hide the tray icon and use the indicator instead. Application logic in that case, however, stays as if the tray icon was shown, so the application can be, e.g., minimized to the indicator. */ if (ui_indicator_is_visible ()) { gtk_status_icon_set_visible (trayIcon_priv->status_icon, FALSE); return; } else { gtk_status_icon_set_visible (trayIcon_priv->status_icon, TRUE); } newItems = feedlist_get_new_item_count (); unreadItems = feedlist_get_unread_item_count (); if (newItems != 0) { ui_tray_icon_set (newItems, icon_get (network_monitor_is_online ()?ICON_AVAILABLE:ICON_AVAILABLE_OFFLINE)); msg = g_strdup_printf (ngettext ("%d new item", "%d new items", newItems), newItems); } else { ui_tray_icon_set (newItems, icon_get (network_monitor_is_online ()?ICON_EMPTY:ICON_EMPTY_OFFLINE)); msg = g_strdup (_("No new items")); } if (unreadItems != 0) tmp = g_strdup_printf (ngettext("%s\n%d unread item", "%s\n%d unread items", unreadItems), msg, unreadItems); else tmp = g_strdup_printf (_("%s\nNo unread items"), msg); ui_tray_tooltip_set (tmp); g_free (tmp); g_free (msg); } static void tray_icon_popup (GtkStatusIcon *status_icon, guint button, guint activate_time, gpointer user_data) { ui_popup_systray_menu (>k_status_icon_position_menu, button, activate_time, status_icon); } /* a click on the systray icon should show the program window if invisible or hide it if visible */ static void tray_icon_activate (GtkStatusIcon * status_icon, gpointer user_data) { liferea_shell_toggle_visibility (); } static void ui_tray_install(void) { g_assert(!trayIcon_priv); trayIcon_priv = g_new0(struct trayIcon_priv, 1); trayIcon_priv->status_icon = gtk_status_icon_new(); g_signal_connect(trayIcon_priv->status_icon, "activate", G_CALLBACK(tray_icon_activate), NULL); g_signal_connect(trayIcon_priv->status_icon, "popup-menu", G_CALLBACK(tray_icon_popup), NULL); ui_tray_update(); trayIcon_priv->trayCount++; } static void ui_tray_remove(void) { g_assert(trayIcon_priv->status_icon); g_object_unref(G_OBJECT(trayIcon_priv->status_icon)); g_free(trayIcon_priv); trayIcon_priv = NULL; if (0 == ui_tray_get_count ()) liferea_shell_present (); } void ui_tray_enable(gboolean enabled) { if(enabled) { if(!trayIcon_priv) ui_tray_install(); ui_indicator_init (); } else { if(trayIcon_priv) ui_tray_remove(); ui_indicator_destroy (); } } guint ui_tray_get_count(void) { return trayIcon_priv?trayIcon_priv->trayCount:0; } liferea-1.10.17/src/ui/ui_tray.h000066400000000000000000000025431261475620100163310ustar00rootroot00000000000000/** * @file ui_tray.h tray icon handling * * Copyright (C) 2004-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 _UI_TRAY_H #define _UI_TRAY_H #include /** * Enforce tray icon state update. */ void ui_tray_update (void); /** * Enable or disable the systray icon * * @param enabled TRUE to show icon, or FALSE to hide it */ void ui_tray_enable (gboolean enabled); /** * Get the status icon * * @returns the status icon, or NULL */ GtkStatusIcon* ui_tray_get_status_icon (void); /** * Determine number of active tray icons. * * @returns the current number of enabled systray icons */ guint ui_tray_get_count (void); #endif liferea-1.10.17/src/ui/ui_update.c000066400000000000000000000127171261475620100166330ustar00rootroot00000000000000/** * @file ui_update.c GUI update monitor * * 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 */ #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; 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); gtk_tree_store_set(store, iter, UM_REQUEST_TITLE, node_get_title(node), UM_FAVICON, node_get_icon(node), -1); g_hash_table_insert(hash, (gpointer)node->id, (gpointer)iter); } 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(GtkWidget *widget, gpointer user_data) { GtkCellRenderer *textRenderer, *iconRenderer; GtkTreeViewColumn *column; GtkTreeView *view; if(!umdialog) { umdialog = liferea_dialog_new (NULL, "updatedialog"); 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, GDK_TYPE_PIXBUF, 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, "pixbuf", 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, GDK_TYPE_PIXBUF, 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, "pixbuf", 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.10.17/src/ui/ui_update.h000066400000000000000000000021561261475620100166340ustar00rootroot00000000000000/** * @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(GtkWidget *widget, gpointer user_data); void on_cancel_all_requests_clicked(GtkButton *button, gpointer user_data); #endif liferea-1.10.17/src/update.c000066400000000000000000000347621261475620100155250ustar00rootroot00000000000000/** * @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 #include #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" /** 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); } 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; } if (xmlBufferLength (buf->buffer) > 0) output = xmlCharStrdup (xmlBufferContent (buf->buffer)); 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); 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; } 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) update_apply_filter (job); 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.10.17/src/update.h000066400000000000000000000222511261475620100155200ustar00rootroot00000000000000/** * @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 */ } *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); 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.10.17/src/vfolder.c000066400000000000000000000165071261475620100157010ustar00rootroot00000000000000/** * @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->itemset = g_new0 (struct itemSet, 1); 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.10.17/src/vfolder.h000066400000000000000000000061301261475620100156750ustar00rootroot00000000000000/** * @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.10.17/src/vfolder_loader.c000066400000000000000000000051631261475620100172230ustar00rootroot00000000000000/** * @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.10.17/src/vfolder_loader.h000066400000000000000000000022151261475620100172230ustar00rootroot00000000000000/** * @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.10.17/src/webkit/000077500000000000000000000000001261475620100153505ustar00rootroot00000000000000liferea-1.10.17/src/webkit/Makefile.am000066400000000000000000000004731261475620100174100ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in AM_CPPFLAGS = -I$(top_srcdir)/src $(PACKAGE_CFLAGS) $(WEBKIT_CFLAGS) noinst_LIBRARIES = libwebkit.a libwebkit_a_SOURCES = webkit.c #libwebkit_a_LIBADD = $(PACKAGE_LIBS) $(WEBKIT_LIBS) $(INTLLIBS) libwebkit_a_CFLAGS = $(PACKAGE_CFLAGS) $(WEBKIT_CFLAGS) liferea-1.10.17/src/webkit/webkit.c000066400000000000000000000374211261475620100170100ustar00rootroot00000000000000/** * @file webkit.c WebKit browser module for Liferea * * 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 "ui/browser_tabs.h" #include "ui/liferea_htmlview.h" static WebKitWebSettings *settings = 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 user_data) { g_return_if_fail (key != NULL); g_object_set ( settings, "enable-scripts", !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 user_data) { g_return_if_fail (key != NULL); g_object_set ( settings, "enable-plugins", g_settings_get_boolean (gsettings, key), NULL ); } 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 (0 == strlen (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; } /** * HTML renderer init method */ static void liferea_webkit_init (void) { gboolean disable_javascript, enable_plugins; gchar *font; guint fontSize; g_assert (!settings); settings = webkit_web_settings_new (); font = webkit_get_font (&fontSize); if (font) { g_object_set ( settings, "default-font-family", font, NULL ); g_object_set ( settings, "default-font-size", fontSize, NULL ); g_free (font); } g_object_set ( settings, "minimum-font-size", 7, NULL ); conf_get_bool_value (DISABLE_JAVASCRIPT, &disable_javascript); g_object_set ( settings, "enable-scripts", !disable_javascript, NULL ); conf_get_bool_value (ENABLE_PLUGINS, &enable_plugins); g_object_set ( settings, "enable-plugins", enable_plugins, NULL ); conf_signal_connect ( "changed::" DISABLE_JAVASCRIPT, G_CALLBACK (liferea_webkit_disable_javascript_cb), NULL ); conf_signal_connect ( "changed::" ENABLE_PLUGINS, G_CALLBACK (liferea_webkit_enable_plugins_cb), NULL ); } /** * 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 *scrollpane, const gchar *string, const guint length, const gchar *base, const gchar *content_type ) { GtkWidget *htmlwidget; htmlwidget = gtk_bin_get_child (GTK_BIN (scrollpane)); /* 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_string (WEBKIT_WEB_VIEW (htmlwidget), string, content_type, "UTF-8", "file://"); } static void liferea_webkit_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); } static void liferea_webkit_progress_changed (WebKitWebView *view, gint progress, gpointer user_data) { } static void liferea_webkit_location_changed (WebKitWebView *view, GParamSpec *pspec, gpointer user_data) { LifereaHtmlView *htmlview; gchar *location; htmlview = g_object_get_data (G_OBJECT (view), "htmlview"); g_object_get (view, "uri", &location, NULL); liferea_htmlview_location_changed (htmlview, location); g_free (location); } /** * Action executed when user hovers over a link */ static void liferea_webkit_on_url (WebKitWebView *view, const gchar *title, const gchar *url, 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); selected_url = url ? g_strdup (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); } /** * 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_webkit_link_clicked (WebKitWebView *view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision) { const gchar *uri; WebKitWebNavigationReason reason; gboolean url_handled; g_return_val_if_fail (WEBKIT_IS_WEB_VIEW (view), FALSE); g_return_val_if_fail (WEBKIT_IS_NETWORK_REQUEST (request), FALSE); reason = webkit_web_navigation_action_get_reason (navigation_action); /* iframes in items return WEBKIT_WEB_NAVIGATION_REASON_OTHER and shouldn't be handled as clicks */ if (reason != WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED) return FALSE; uri = webkit_network_request_get_uri (request); if (webkit_web_navigation_action_get_button (navigation_action) == 2) { /* middle click */ browser_tabs_add_new (uri, uri, FALSE); webkit_web_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_web_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_webkit_new_window_requested (WebKitWebView *view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision) { const gchar *uri = webkit_network_request_get_uri (request); if (webkit_web_navigation_action_get_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_web_policy_decision_ignore (policy_decision); return TRUE; } /** * e.g. after a click on javascript:openZoom() */ static WebKitWebView* webkit_create_web_view (WebKitWebView *view, WebKitWebFrame *frame) { 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 = gtk_bin_get_child (GTK_BIN (children->next->data)); return WEBKIT_WEB_VIEW (htmlwidget); } /** * WebKitWebView::populate-popup: * @web_view: the object on which the signal is emitted * @menu: the context menu * * When a context menu is about to be displayed this signal is emitted. * * Add menu items to #menu to extend the context menu. */ static void liferea_webkit_on_menu (WebKitWebView *view, GtkMenu *menu) { LifereaHtmlView *htmlview; gchar *imageUri = NULL; gchar *linkUri = NULL; WebKitHitTestResult* hitResult; WebKitHitTestResultContext context; GdkEvent *event; event = gtk_get_current_event (); hitResult = webkit_web_view_get_hit_test_result (view, (GdkEventButton *)event); g_object_get (hitResult, "context", &context, NULL); if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) g_object_get (hitResult, "link-uri", &linkUri, NULL); if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE) g_object_get (hitResult, "image-uri", &imageUri, NULL); if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_MEDIA) g_object_get (hitResult, "media-uri", &linkUri, NULL); /* treat media as normal link */ htmlview = g_object_get_data (G_OBJECT (view), "htmlview"); liferea_htmlview_prepare_context_menu (htmlview, menu, linkUri, imageUri); } /** * WebKitWebView::console-message: * A JavaScript console message was created. * * And we ignore them. */ static gboolean liferea_webkit_javascript_message (WebKitWebView *view, const char *message, int line, const char *source_id) { return TRUE; } /** * Initializes WebKit * * Initializes the WebKit HTML rendering engine. Creates a GTK scrollpane widget * and embeds WebKitWebView into it. */ static GtkWidget * liferea_webkit_new (LifereaHtmlView *htmlview) { WebKitWebView *view; GtkWidget *scrollpane; scrollpane = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW (scrollpane), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_scrolled_window_set_shadow_type ( GTK_SCROLLED_WINDOW (scrollpane), GTK_SHADOW_IN ); /** Create HTML widget and pack it into the scrolled window */ view = WEBKIT_WEB_VIEW (webkit_web_view_new ()); webkit_web_view_set_settings (view, settings); gtk_container_add (GTK_CONTAINER (scrollpane), GTK_WIDGET (view)); /** Pass LifereaHtmlView into the WebKitWebView object */ g_object_set_data ( G_OBJECT (view), "htmlview", htmlview ); /** Connect signal callbacks */ g_signal_connect ( view, "notify::title", G_CALLBACK (liferea_webkit_title_changed), view ); g_signal_connect ( view, "load-progress-changed", G_CALLBACK (liferea_webkit_progress_changed), view ); g_signal_connect ( view, "hovering-over-link", G_CALLBACK (liferea_webkit_on_url), view ); g_signal_connect ( view, "navigation-policy-decision-requested", G_CALLBACK (liferea_webkit_link_clicked), view ); g_signal_connect ( view, "new-window-policy-decision-requested", G_CALLBACK (liferea_webkit_new_window_requested), view ); g_signal_connect ( view, "populate-popup", G_CALLBACK (liferea_webkit_on_menu), view ); g_signal_connect ( view, "notify::uri", G_CALLBACK (liferea_webkit_location_changed), view ); g_signal_connect ( view, "console-message", G_CALLBACK (liferea_webkit_javascript_message), view ); g_signal_connect ( view, "create-web-view", G_CALLBACK (webkit_create_web_view), view ); gtk_widget_show (GTK_WIDGET (view)); return scrollpane; } /** * Launch URL */ static void liferea_webkit_launch_url (GtkWidget *scrollpane, 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 (gtk_bin_get_child (GTK_BIN (scrollpane))), http_url ); g_free (http_url); } /** * Change zoom level of the HTML scrollpane */ static void liferea_webkit_change_zoom_level (GtkWidget *scrollpane, gfloat zoom_level) { WebKitWebView *view; view = WEBKIT_WEB_VIEW (gtk_bin_get_child (GTK_BIN (scrollpane))); webkit_web_view_set_zoom_level (view, zoom_level); } /** * Return whether text is selected */ static gboolean liferea_webkit_has_selection (GtkWidget *scrollpane) { WebKitWebView *view; view = WEBKIT_WEB_VIEW (gtk_bin_get_child (GTK_BIN (scrollpane))); /* Currently (libwebkit-1.0 1.2.0) this doesn't work: return webkit_web_view_has_selection (view); So we use *_can_copy_clipboard() as a workaround. */ return webkit_web_view_can_copy_clipboard (view); } /** * Copy selected text to the clipboard */ static void liferea_webkit_copy_selection (GtkWidget *scrollpane) { WebKitWebView *view; view = WEBKIT_WEB_VIEW (gtk_bin_get_child (GTK_BIN (scrollpane))); webkit_web_view_copy_clipboard (view); } /** * Return current zoom level as a float */ static gfloat liferea_webkit_get_zoom_level (GtkWidget *scrollpane) { WebKitWebView *view; view = WEBKIT_WEB_VIEW (gtk_bin_get_child (GTK_BIN (scrollpane))); return webkit_web_view_get_zoom_level (view); } /** * Scroll page down (via shortcut key) * * Copied from gtkhtml/gtkhtml.c */ static gboolean liferea_webkit_scroll_pagedown (GtkWidget *scrollpane) { GtkScrolledWindow *itemview; GtkAdjustment *vertical_adjustment; gdouble old_value; gdouble new_value; gdouble limit; itemview = GTK_SCROLLED_WINDOW (scrollpane); g_assert (NULL != itemview); vertical_adjustment = gtk_scrolled_window_get_vadjustment (itemview); old_value = gtk_adjustment_get_value (vertical_adjustment); new_value = old_value + gtk_adjustment_get_page_increment (vertical_adjustment); limit = gtk_adjustment_get_upper (vertical_adjustment) - gtk_adjustment_get_page_size (vertical_adjustment); if (new_value > limit) { new_value = limit; } gtk_adjustment_set_value (vertical_adjustment, new_value); gtk_scrolled_window_set_vadjustment ( GTK_SCROLLED_WINDOW (itemview), vertical_adjustment ); return (new_value > old_value); } static void liferea_webkit_set_proxy (const gchar *host, guint port, const gchar *user, const gchar *pwd) { SoupURI *proxy = NULL; if (host) { proxy = soup_uri_new (NULL); soup_uri_set_scheme (proxy, SOUP_URI_SCHEME_HTTP); soup_uri_set_host (proxy, host); soup_uri_set_port (proxy, port); soup_uri_set_user (proxy, user); soup_uri_set_password (proxy, pwd); } g_object_set (webkit_get_default_session (), SOUP_SESSION_PROXY_URI, proxy, NULL); } 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 = liferea_webkit_has_selection, .copySelection = liferea_webkit_copy_selection, .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.10.17/src/xml.c000066400000000000000000000376701261475620100150440ustar00rootroot00000000000000/** * @file xml.c XML helper methods for Liferea * * Copyright (C) 2003-2013 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, ...); static 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 = (xmlEntityPtr)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.10.17/src/xml.h000066400000000000000000000126111261475620100150350ustar00rootroot00000000000000/** * @file xml.h XML helper methods for Liferea * * Copyright (C) 2003-2010 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); /** * 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.10.17/xslt/000077500000000000000000000000001261475620100142665ustar00rootroot00000000000000liferea-1.10.17/xslt/Makefile.am000066400000000000000000000006111261475620100163200ustar00rootroot00000000000000 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.10.17/xslt/feed.xml.in000066400000000000000000000145571261475620100163340ustar00rootroot00000000000000
<_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.10.17/xslt/folder.xml.in000066400000000000000000000036551261475620100167010ustar00rootroot00000000000000
<_span>Folder:

<_span>children with <_span>unread headlines

liferea-1.10.17/xslt/i18n-filter.xslt000066400000000000000000000037301261475620100172470ustar00rootroot00000000000000 liferea-1.10.17/xslt/item.xml.in000066400000000000000000000345161261475620100163640ustar00rootroot00000000000000 load()
doShow(' - ');
<_span>Source
<_span>Feed
<_span>Filed under ,
<_span>Author
<_span>Shared by
<_span>Via
<_span>Related
<_span>Also posted in
<_span>Creator
itemshaded itemunshaded

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

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

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

liferea-1.10.17/xslt/source.xml.in000066400000000000000000000036621261475620100167240ustar00rootroot00000000000000
<_span>Source:

<_span>children with <_span>unread headlines

liferea-1.10.17/xslt/vfolder.xml.in000066400000000000000000000035561261475620100170670ustar00rootroot00000000000000
<_span>Search Folder:

<_span>unread headlines